Reply 13460 of 30404, by piatd
- Rank
- Newbie
I'm researching the history of the "tower" heatsink/fan in consumer desktops. Cooling fads have come and gone, but air tower coolers have stuck with us for about two decades. 😎
I'm researching the history of the "tower" heatsink/fan in consumer desktops. Cooling fads have come and gone, but air tower coolers have stuck with us for about two decades. 😎
Created a Win98SE and a Win 2k VM (with all the updates and blackwingcat's kernel extension). Tried numerous browsers. Eventually gave up on Win98. Focused on Win 2k, finally got the KEx to work and installed Firefox 52.x ESR, Pale Moon 28.x, then changed desktop color and icons to look like Win 98. Youtube works now. I feel at home now. I wasted a whole weekend for that... the only thing that annoys me is the font quality in my browsers, they are not smooth.
But I feel at home. Dunno why.
"Design isn't just what it looks like and feels like. Design is how it works."
JOBS, Steve.
READ: Right to Repair sucks and is illegal!
Went back to the year 2000...
To do a set of comparisons between my Pismo G4 Powerbook and my Thinkpad T21...
Details to come, but they are fairly evenly matched.
wrote:Went back to the year 2000... […]
Went back to the year 2000...
To do a set of comparisons between my Pismo G4 Powerbook and my Thinkpad T21...
Details to come, but they are fairly evenly matched.
Happy New Year 2000!!!
"Design isn't just what it looks like and feels like. Design is how it works."
JOBS, Steve.
READ: Right to Repair sucks and is illegal!
wrote:Went back to the year 2000... […]
Went back to the year 2000...
To do a set of comparisons between my Pismo G4 Powerbook and my Thinkpad T21...
Details to come, but they are fairly evenly matched.
Isnt the Pismo a G3 PowerBook not a G4?
On my own activities, I diassembled (and ultimatily reduced to parts) BOTH of my 2nd gen I3 powered Toshiba Laptops. One had an unobtainium keyoard that was totally fucked and a non-functional trackpad and numerous other chassis issues, and the other just didn't boot. I pulled the CPUs (both i3 2330's), RAM (all 2GB modules, 4 total 2 per laptop), Optical Drives, Hard Drives, Mounting Hardware, and the keyboard that was good and burned the chassis parts and screens (both of which had scratches). I also kept the batteries one of which is an extended 8800MaH battery. I plan to order a Toshiba of similar age since I have 2 extra batteries, and the experience with the one that worked showed it to perform half-way decently aside from the user interface devices all being FUBAR'd.
Right now I'm using the X200 Tablet as my main laptop and I LOVE this thing. It is everything a laptop should be and more. I think I might also need to pickup a Thinkpad X220 (i3 version of the X200). I love this full size 12.1 laptop/Tablet form factor. Why did this laptop form factor disappear for the stupid ultrabook 2-in-1 form factor anyways?
RetroEra: Retro Gaming Podcast and Community: https://discord.gg/kezaTvzH3Q
Cyb3rst0rm's Retro Hardware Warzone: https://discord.gg/naTwhZVMay
I used to own over 160 graphics card, I've since recovered from graphics card addiction
---
wrote:Was playing around with my 286 today. Not having touched QuickBasic for close to 30 years, I wondered how long it would take me […]
Was playing around with my 286 today. Not having touched QuickBasic for close to 30 years, I wondered how long it would take me to make analogue clock. Turns out, about an hour or so, had to look up a bunch of stuff I'd forgotten about. Still heaps of room for improvement. 😀
DECLARE SUB drawClock ()DECLARE SUB drawHour (t$, c%)DECLARE SUB drawSecond (t$, c%)CONST PI = 3.141592654#CONST ORG.X = 640 / 2CONST ORG.Y = 480 / 2LET prevTime$ = TIME$SCREEN 12CLSdrawClockON TIMER(1) GOSUB displayTimeTIMER ONDOLOOP UNTIL INKEY$ = CHR$(27)TIMER OFFENDdisplayTime:LET currTime$ = TIME$drawHour prevTime$, 0drawSecond prevTime$, 0drawHour currTime$, 7drawSecond currTime$, 15prevTime$ = currTime$RETURNSUB drawClockLET a = 200' Draw seconds dotsFOR i = 0 TO PI * 2 - (PI * 2 / 60) STEP (PI * 2 / 60)LET s = SIN(i)LET c = COS(i)LET x = ORG.X + (s * a)LET y = ORG.Y + (c * a)LET sd% = s * (180 / PI)LET cd% = c * (180 / PI)IF sd% <> 0 AND cd% <> 0 THENPSET (x, y), 15END IFNEXT i' Draw hourly dotsFOR i = 0 TO PI * 2 - (PI * 2 / 12) STEP (PI * 2 / 12)LET s = SIN(i)LET c = COS(i)LET x = ORG.X + (s * a)LET y = ORG.Y + (c * a)LET r = 1.5LET k = 7LET sd% = s * (180 / PI)LET cd% = c * (180 / PI)IF sd% = 0 OR cd% = 0 THENr = 3k = 15END IFCIRCLE (x, y), r, kPAINT (x, y), kNEXT iEND SUBSUB drawHour (t$, c%)LET hh% = VAL(MID$(t$, 1, 2))LET mm% = VAL(MID$(t$, 4, 2))LET a = 120LET f = PI * 2LET x = ORG.X + SIN(-(f / (12 * 60)) * (hh% * 60 + mm%) + PI) * aLET y = ORG.Y + COS(-(f / (12 * 60)) * (hh% * 60 + mm%) + PI) * aLINE (ORG.X, ORG.Y)-(x, y), c%END SUBSUB drawSecond (t$, c%)LET ss% = VAL(MID$(t$, 7, 2))LET a = 190LET f = PI * 2LET x = ORG.X + SIN(-(f / 60) * ss% + PI) * aLET y = ORG.Y + COS(-(f / 60) * ss% + PI) * aLINE (ORG.X, ORG.Y)-(x, y), c%END SUB
Impressive, however you forgot the minute hand! 🤣 Add this to your drawHour procedure:
LET a = 180LET x = ORG.X + SIN(-(f / 60) * mm% + PI) * aLET y = ORG.Y + COS(-(f / 60) * mm% + PI) * aLINE (ORG.X, ORG.Y)-(x, y), c%
Here's a digital clock I wrote:
DEFINT A-ZDECLARE FUNCTION GetHours (Seconds#)DECLARE FUNCTION GetMinutes (Seconds#)DECLARE FUNCTION GetTime$ ()DECLARE FUNCTION IIF (Condition, Result1, Result2)DECLARE FUNCTION TranslateDigit (Digit$)DECLARE FUNCTION Trim$ (Text$)DECLARE SUB DisplayTime (x, y, Size, ColorV, Angled)DECLARE SUB DrawColon (x, y, Size, ColorV, Angled)DECLARE SUB DrawSegment (x, y, Size, Angle, ColorV)DECLARE SUB DrawSegments (x, y, Segments, Size, ColorV, Angled)CONST FALSE = 0CONST NONE = 0CONST TRUE = -1CONST H1 = &H1CONST H2 = &H2CONST H3 = &H4CONST L1 = &H8CONST L2 = &H10CONST R1 = &H20CONST R2 = &H40CONST C0 = H1 OR H3 OR L1 OR L2 OR R1 OR R2CONST C1 = R1 OR R2CONST C2 = H1 OR H2 OR H3 OR L2 OR R1CONST C3 = H1 OR H2 OR H3 OR R1 OR R2CONST C4 = H2 OR L1 OR R1 OR R2CONST C5 = H1 OR H2 OR H3 OR L1 OR R2CONST C6 = H1 OR H2 OR H3 OR L1 OR L2 OR R2CONST C7 = H1 OR R1 OR R2CONST C8 = H1 OR H2 OR H3 OR L1 OR L2 OR R1 OR R2CONST C9 = H1 OR H2 OR H3 OR L1 OR R1 OR R2CONST SECONDSPERHOUR = 3600CONST SECONDSPERMINUTE = 60SCREEN 7: CLSON TIMER(1) GOSUB TickTIMER ONDO UNTIL INKEY$ = CHR$(27)LOOPTIMER OFFENDTick:CLSSCREEN , , 1, 0DisplayTime 50, 50, 15, 11, TRUEPCOPY 1, 0RETURNSUB DisplayTime (x, y, Size, ColorV, Angled)STATIC BlinkDisplayedTime$ = GetTime$CurrentX = xFOR Index = 1 TO LEN(DisplayedTime$)
Digit$ = MID$(DisplayedTime$, Index, 1)IF Digit$ = ":" THENIF Blink THEN DrawColon CurrentX, y, Size, ColorV, AngledCurrentX = CurrentX + (Size * 2)ELSEDrawSegments CurrentX, y, TranslateDigit(Digit$), Size, ColorV, AngledCurrentX = CurrentX + (Size * 3)END IFNEXT IndexBlink = NOT BlinkEND SUBSUB DrawColon (x, y, Size, ColorV, Angled)Angle = IIF(Angled, -5, 0)DRAW "C" + STR$(ColorV)DRAW "BM" + STR$(x) + "," + STR$(y + Size)DRAW "S" + STR$(Size) + "TA" + STR$(Angle)DRAW "BU1 F1 G1 H1 E1 BD1 P" + STR$(ColorV) + "," + STR$(ColorV)DRAW "BD" + STR$(CINT(Size / 2))DRAW "BU1 F1 G1 H1 E1 BD1 P" + STR$(ColorV) + "," + STR$(ColorV)END SUBSUB DrawSegment (x, y, Size, Angle, ColorV)DRAW "C" + STR$(ColorV)DRAW "BM" + STR$(x) + "," + STR$(y)DRAW "S" + STR$(Size) + "TA" + STR$(Angle)DRAW "BL1 BM-1,-1 R4 F1 G1 L4 H1 E1"PAINT (x, y), ColorVEND SUBSUB DrawSegments (x, y, Segments, Size, ColorV, Angled)Angle = IIF(Angled, -5, 0)DrawSegment x, y, Size, 0, IIF((Segments AND H1) = H1, ColorV, 0)DrawSegment x, y + (Size * 2), Size, 0, IIF((Segments AND H2) = H2, ColorV, 0)DrawSegment x, y + (Size * 4), Size, 0, IIF((Segments AND H3) = H3, ColorV, 0)DrawSegment x - Size, y + Size, Size, Angle + 90, IIF((Segments AND L1) = L1, ColorV, 0)DrawSegment x - Size, y + (Size * 3), Size, Angle + 90, IIF((Segments AND L2) = L2, ColorV, 0)DrawSegment x + Size, y + Size, Size, Angle + 90, IIF((Segments AND R1) = R1, ColorV, 0)DrawSegment x + Size, y + (Size * 3), Size, Angle + 90, IIF((Segments AND R2) = R2, ColorV, 0)END SUBFUNCTION GetHours (Seconds#)GetHours = INT(Seconds# / SECONDSPERHOUR)END FUNCTIONFUNCTION GetMinutes (Seconds#)GetMinutes = INT((Seconds# - (GetHours(Seconds#) * CDBL(SECONDSPERHOUR))) / SECONDSPERMINUTE)END FUNCTIONFUNCTION GetTime$Hours$ = Trim$(STR$(GetHours(TIMER)))Minutes$ = Trim$(STR$(GetMinutes(TIMER)))IF LEN(Hours$) = 1 THEN Hours$ = " " + Hours$IF LEN(Minutes$) = 1 THEN Minutes$ = "0" + Minutes$GetTime$ = Hours$ + ":" + Minutes$END FUNCTIONFUNCTION IIF (Condition, Result1, Result2)IIF = Result2IF Condition THEN IIF = Result1END FUNCTIONFUNCTION TranslateDigit (Digit$)Translation = NONESELECT CASE Digit$CASE "0": Translation = C0CASE "1": Translation = C1CASE "2": Translation = C2CASE "3": Translation = C3CASE "4": Translation = C4CASE "5": Translation = C5CASE "6": Translation = C6CASE "7": Translation = C7CASE "8": Translation = C8CASE "9": Translation = C9END SELECTTranslateDigit = TranslationEND FUNCTIONFUNCTION Trim$ (Text$)Trim$ = LTRIM$(RTRIM$(Text$))END FUNCTION
And an analog clock:
DEFINT A-ZDECLARE FUNCTION CurrentTime# (Advance, NewHour, NewMinute, NewSecond)DECLARE FUNCTION GetHours (Seconds#)DECLARE FUNCTION GetMinutes (Seconds#)DECLARE FUNCTION GetSeconds (Seconds#)DECLARE SUB DrawClock (DisplayedTime#)DECLARE SUB Main ()CONST FALSE = 0CONST NONE = -1CONST TRUE = -1CONST BACKGROUND = 0CONST CLOCKSIZE = 190CONST HANDNUTSIZE = 3CONST HOURSTODEGREES = 30CONST LARGEMARKINTERVAL = 3CONST MINUTESTODEGREES = 6CONST MINUTESTOFRACTION# = 1 / 60CONST PI# = 3.14159265358979#CONST SECONDSPERHOUR = 3600CONST SECONDSPERMINUTE = 60CONST SECONDSTODEGREES = 6CONST TWELVEHOURANGLE = -90CONST CLOCKX = CLOCKSIZE * 1.5CONST CLOCKY = CLOCKSIZE * 1.1CONST HOURHANDLENGTH = CLOCKSIZE / 1.6CONST LARGEMARKLENGTH = HOURHANDLENGTH / 2.5CONST MINUTEHANDLENGTH = HOURHANDLENGTH * 1.5CONST SECONDHANDLENGTH = HOURHANDLENGTH * 1.5CONST SMALLMARKLENGTH = LARGEMARKLENGTH / 2CONST TORADIANS# = 180 / PI#ON TIMER(1) GOSUB ClockTickCALL MainENDClockTick:DrawClock CurrentTime(TRUE, NONE, NONE, NONE)RETURNFUNCTION CurrentTime# (Advance, NewHour, NewMinute, NewSecond)STATIC Seconds#IF Advance THENIF GetSeconds(Seconds#) = 59 THENSeconds# = (GetHours(Seconds#) * CLNG(SECONDSPERHOUR)) + (GetMinutes(Seconds#) * SECONDSPERMINUTE)IF GetMinutes(Seconds#) = 59 THENSeconds# = GetHours(Seconds#) * SECONDSPERHOURIF GetHours(Seconds#) = 11 THENSeconds# = 0ELSESeconds# = Seconds# + SECONDSPERHOUREND IFELSESeconds# = Seconds# + SECONDSPERMINUTEEND IFELSE
Seconds# = Seconds# + 1END IFELSEIF NOT NewHour = NONE THEN Seconds# = GetSeconds(Seconds#) + (GetMinutes(Seconds#) * SECONDSPERMINUTE) + (NewHour * CLNG(SECONDSPERHOUR))IF NOT NewMinute = NONE THEN Seconds# = GetSeconds(Seconds#) + (NewMinute * SECONDSPERMINUTE) + (GetHours(Seconds#) * CLNG(SECONDSPERHOUR))IF NOT NewSecond = NONE THEN Seconds# = NewSecond + (GetMinutes(Seconds#) * SECONDSPERMINUTE) + (GetHours(Seconds#) * CLNG(SECONDSPERHOUR))END IFCurrentTime = Seconds#END FUNCTIONSUB DrawClock (DisplayedTime#)DIM HourAsRadians#DIM HourOnFaceDIM MarkLengthDIM MinuteAsRadians#DIM SecondAsRadians#STATIC HourHandXSTATIC HourHandYSTATIC MinuteHandXSTATIC MinuteHandYSTATIC SecondHandXSTATIC SecondHandYLINE (CLOCKX, CLOCKY)-(HourHandX, HourHandY), BACKGROUNDLINE (CLOCKX, CLOCKY)-(MinuteHandX, MinuteHandY), BACKGROUNDLINE (CLOCKX, CLOCKY)-(SecondHandX, SecondHandY), BACKGROUNDFOR HourOnFace = 0 TO 11HourAsRadians# = ((HourOnFace * HOURSTODEGREES) + TWELVEHOURANGLE) / TORADIANS#IF HourOnFace MOD LARGEMARKINTERVAL = 0 THEN MarkLength = LARGEMARKLENGTH ELSE MarkLength = SMALLMARKLENGTHLINE ((COS(HourAsRadians#) * CLOCKSIZE) + CLOCKX, (SIN(HourAsRadians#) * CLOCKSIZE) + CLOCKY)-((COS(HourAsRadians#) * (CLOCKSIZE - MarkLength)) + CLOCKX, (SIN(HourAsRadians#) * (CLOCKSIZE - MarkLength)) + CLOCKY), 14NEXT HourOnFaceCIRCLE (CLOCKX, CLOCKY), CLOCKSIZE, 1HourAsRadians# = (((GetHours(DisplayedTime#) + GetMinutes(DisplayedTime#) * MINUTESTOFRACTION#) * HOURSTODEGREES) + TWELVEHOURANGLE) / TORADIANS#SecondAsRadians# = ((GetSeconds(DisplayedTime#) * SECONDSTODEGREES) + TWELVEHOURANGLE) / TORADIANS#MinuteAsRadians# = ((GetMinutes(DisplayedTime#) * MINUTESTODEGREES) + TWELVEHOURANGLE) / TORADIANS#HourHandX = (COS(HourAsRadians#) * HOURHANDLENGTH) + CLOCKXHourHandY = (SIN(HourAsRadians#) * HOURHANDLENGTH) + CLOCKYMinuteHandX = (COS(MinuteAsRadians#) * MINUTEHANDLENGTH) + CLOCKXMinuteHandY = (SIN(MinuteAsRadians#) * MINUTEHANDLENGTH) + CLOCKYSecondHandX = (COS(SecondAsRadians#) * SECONDHANDLENGTH) + CLOCKXSecondHandY = (SIN(SecondAsRadians#) * SECONDHANDLENGTH) + CLOCKYLINE (CLOCKX, CLOCKY)-(HourHandX, HourHandY), 2LINE (CLOCKX, CLOCKY)-(MinuteHandX, MinuteHandY), 2LINE (CLOCKX, CLOCKY)-(SecondHandX, SecondHandY), 4CIRCLE (CLOCKX, CLOCKY), HANDNUTSIZE, 15END SUBFUNCTION GetHours (Seconds#)GetHours = INT(Seconds# / SECONDSPERHOUR)END FUNCTIONFUNCTION GetMinutes (Seconds#)GetMinutes = INT((Seconds# - (GetHours(Seconds#) * CDBL(SECONDSPERHOUR))) / SECONDSPERMINUTE)END FUNCTIONFUNCTION GetSeconds (Seconds#)GetSeconds = INT(Seconds# - (GetHours(Seconds#) * CDBL(SECONDSPERHOUR)) - (GetMinutes(Seconds#) * CDBL(SECONDSPERMINUTE)))END FUNCTIONSUB MainDIM KeyCode$DIM Seconds#SCREEN 12: CLS : COLOR 3Seconds# = CurrentTime(FALSE, GetHours(TIMER), GetMinutes(TIMER), GetSeconds(TIMER))DrawClock CurrentTime(FALSE, NONE, NONE, NONE)LOCATE (CLOCKSIZE / 8) + 3, 1PRINT " QBClock v1.00 - by: Peter Swinkels, ***2019***"PRINT " Press the a or A keys to quickly advance the time. Escape = quit"TIMER ONDODOKeyCode$ = INKEY$LOOP WHILE KeyCode$ = ""IF KeyCode$ = "a" OR KeyCode$ = "A" THENSeconds# = CurrentTime(FALSE, NONE, NONE, NONE)IF KeyCode$ = "A" THENIF GetHours(Seconds#) = 11 THEN Seconds# = 0 ELSE Seconds# = Seconds# + SECONDSPERHOURELSEIF GetMinutes(Seconds#) = 59 THENSeconds# = GetHours(Seconds#) * CLNG(SECONDSPERHOUR)IF GetHours(Seconds#) = 11 THEN Seconds# = 0 ELSE Seconds# = Seconds# + SECONDSPERHOURELSESeconds# = Seconds# + SECONDSPERMINUTEEND IFEND IFDrawClock CurrentTime#(FALSE, GetHours(Seconds#), GetMinutes(Seconds#), NONE)ELSEIF KeyCode$ = CHR$(27) THENEXIT DOEND IFLOOPTIMER OFFEND SUB
My GitHub:
https://github.com/peterswinkels
Started backing up the hard disks of my Apple Powerbooks in case they fail or get damaged by a software crash. Did the 190cs yesterday, now the 540c is running its backup.
wrote:Isnt the Pismo a G3 PowerBook not a G4?
Right now I'm using the X200 Tablet as my main laptop and I LOVE this thing. It is everything a laptop should be and more. I think I might also need to pickup a Thinkpad X220 (i3 version of the X200). I love this full size 12.1 laptop/Tablet form factor. Why did this laptop form factor disappear for the stupid ultrabook 2-in-1 form factor anyways?
It's usually a G3, but I got the Wegener G4 upgrade card, so the machine ran like a Mercury (Titanium PowerBook Rev. A) but minus that liability-of-a-chassis (the TiBooks are notorious for being fragile as they age). I kinda wished that I kept the PowerPC 750e/400MHz Processor card so I can do a comparison between the G3 and the G4, and an out-of-box, as-is comparison between the Pismo and the ThinkPad.
Oh yeah, I had an X41 Tablet - I hear ya. The twist-and-flop form factor is more comfortable to work with. That being said, that hinge is expensive to manufacture and the machine doesn't fold as thinly as the 2-in-one.
wrote:Started backing up the hard disks of my Apple Powerbooks in case they fail or get damaged by a software crash. Did the 190cs yesterday, now the 540c is running its backup.
I'd love to get these wallpapers. I have been using some retro mac wallpapers with my macbooks recently.
"Design isn't just what it looks like and feels like. Design is how it works."
JOBS, Steve.
READ: Right to Repair sucks and is illegal!
I ran Zandronum (Doom mod) on P233MMX, W98 with Yamaha pcc10xg (PCMCIA) as MIDI device. The card sounds awesome. It also makes a huge difference in terms of performance. If I switch to software Roland MIDI synth the game runs signufucantly slower, becomes unplayable. And with the Yamaha it runs smoothly, yet only in 320x200 mode.
So, delivery driver offloaded a whole pallet at my house today, the box was big enough to fit me... and inside of it were even more boxes, and inside the larger boxes were even more smaller boxes 🤣
anyways, started to get my stuff a bit organized before I drown in random hardware ^^
wrote:Impressive, however you forgot the minute hand! 🤣 Add this to your drawHour procedure:
Yeah, I caught that after posting the code here. But cool that someone actually took the time to run the code. 😊
I was going to have stab at adding a digital clock this weekend (if I could find the time), switching between analogue and digital with F1 or something. Your clock looks great! I wasn't yet sure on how I was going to formulate the digital number segments. Maybe your code might give me an idea or two... 😀
wrote:Yeah, I caught that after posting the code here. But cool that someone actually took the time to run the code. 😊
I was going to have stab at adding a digital clock this weekend (if I could find the time), switching between analogue and digital with F1 or something. Your clock looks great! I wasn't yet sure on how I was going to formulate the digital number segments. Maybe your code might give me an idea or two... 😀
Glad you like my work. Love to see your digital clock.
My GitHub:
https://github.com/peterswinkels
Last night I had a go at getting GP4 to run on Windows 2000 SP4. No luck... black screen with music. Got a headache from that so I am resting for some time now.
"Design isn't just what it looks like and feels like. Design is how it works."
JOBS, Steve.
READ: Right to Repair sucks and is illegal!
wrote:(the TiBooks are notorious for being fragile as they age)
The Pismo is even worse. I've got three and gave up trying to fix them. They have flimsy parts everywhere. The "thickness" of the plastic holding the hinges must be a bad joke by whoever designed that thing... Also what breaks easily is the part below the mouse button - and actually that whole case part, the bezel of the display, and so on.
During resurrecting a k6II-450 I suspected immediately that the PSU has not to be trusted. The voltage was ok @ empty or in mild loads, there was indeed a fault lurking. Used my "Chinezium" electronic load to test the 5V rail, and for my amusement @10A I was getting a severe undervoltage.
The psu was supposed to supply at least 20A. The undervoltage may not be a cause of catastrophic failure but in time it will degrade the dc-dc converters. So, as precaution we should always suspect this generic Chinese psu bricks, that is if we value the parts that they supply.
wrote:The psu was supposed to supply at least 20A.
Yes, combined on all 5V rails. You are not supposed to draw 10A from a single 5V rail.
This psu only has 1 rail of 5V, as its common on all Chinese AT style PSU. Usually they tend to use a pair of fast recovery diodes to form a rail. The concept of multi-rail per voltage is a tad new in cheap PSU's.
At 5A I could see a 0.5v drop, from the nominal 5V, and I suspect that the ripple would be high though I haven't tested it.
wrote:wrote:(the TiBooks are notorious for being fragile as they age)
The Pismo is even worse. I've got three and gave up trying to fix them. They have flimsy parts everywhere. The "thickness" of the plastic holding the hinges must be a bad joke by whoever designed that thing... Also what breaks easily is the part below the mouse button - and actually that whole case part, the bezel of the display, and so on.
Well, it's at least plastic, so the old superglue-and-baking soda trick still works reinforcing them. What I tend to see is the screw capstans fracturing, but it's fairly rare to have to strip the Pismo down that much (short of swapping out the logic board, since almost all of the field replaceable components are easily accessible once you take the keyboard out). The TiBooks on the other hand? The titanium frame distorts until it fractures, and whatever Apple used to coat them flakes off and they look rather terrible afterwards.
Of course when it came to durability, nothing beats a clamshell/Toilet cover iBook. Those things are made with PVC...