Jump to content

wierd_w

Members
  • Posts

    2,186
  • Joined

  • Last visited

Posts posted by wierd_w

  1. ...

     

    (Wonders discretely about the prospects of 3D printed nylon keycaps, treated liberally with vinyl dye.... Will google.)

     

    Google suggest Rit Dye-More dyes.

     

    Should be possible to paint a resist layer on top of the keycaps to prevent the text from getting colored (assumes textured text), then just soak them in a bag with marbles to weigh them down, an appropriate amount of time. Neat.

     

    If you can't get shiny new reproduction keytops, it's worth exploring.

  2. Again, since the actual value written there might be something other than the programmer anticipates (EG, program written for say, IBM Basic-- ported (more or less) to TI Basic), it is just better practice to use the internal constant, rather than pretend to know what that constant's actual value *IS*.

     

    That way it is less bother to somebody who wants to run the program on another machine, with a different interpreter, that does things differently.  The constant can always be relied upon. The actual value that constant represents not so much. (For all you know, the basic interpreter down the line is super economical, and uses a single bit out of a bitfield it reserves for booleans, and not the whole byte!) Better to just evaluate against whatever "TRUE" constant the interpreter provides, and let it figure it out.

    • Like 1
  3. 1 minute ago, RXB said:

    So it is stupid because you say so?

    Hmm really we have been using the TI for 30 years and we are all stupid because you say so....

     

    Here is a Clue for you: BASIC or XB is not Assembly Pascal or C or Quick Basic or MS Basic.

    It has been around for over 30 years, so your view of this is pretty much useless in respect to history and number of programs written using it.

     

    This is similar to a Word NAZI on people using Slang. Does not matter how you feel it is being used like or not, and will continue to be used.

    Both work the same way, your opinion is not going to change anything. FACT!

    It is stupid, because it was done for aesthetic reasons, and removes potential value to do it.

     

    The argument is not "Was it done" and "Does the system do it this way." 

     

    NO.

     

    It is "IT should NOT have done it that way, and this is why."

     

    to which your response has been a robotic "It does it that way."

     

    We are arguing past each other it seems.  This is why I asked you (rather pointedly), that if I had WANTED to do that kind of check, how could I do it?  (knowing full well you cannot easily do it, because the obvious syntax for it has been subsumed as an alias)

  4. I would not pretend that I know what the actual number value written for a TRUE statement is.  Basic programs are meant to be portable. That is how you break that portability.

     

    Instead, I would use

     

    100 IF EOF(1)=TRUE THEN CLOSE #1

     

    That puts the decision on what should be actually encoded there squarely in the hands of the native interpeter, and not the supposition of the programmer.

  5. RXB:

     

    There are 2 ways to evaluate that with BASIC. One is by using an explicit operator, and one is by doing it the wrong and stupid way, which you keep defending.

     

    If you permit the wrong and stupid way, you remove the POTENTIAL to do the kind of check I stated.  FOR PURELY AESTHETIC REASONS.

     

     

    To wit-

     

    If I *WANTED* do do that kind of check, how could I do it? (Since you removed the obvious syntax, for purely aesthetic reasons, as an alias for the more proper syntax of a completely unrelated query.)

  6. I understand that it is used that way, yes.

     

    My statement is that this is LOGICALLY IMPROPER, and SHOULD NOT BE DONE

    As for why you would want to check if a variable has been declared or not?

     

    Suppose you have a subroutine, that declares a variable used to mark a process tree in some way. Perhaps we are marking that it executed abnormally or something.  We are not going to evaluate its content. EVER. We only want to know if it got declared.  We do not care where in the recusion/subroutine call chain it got defined, only that it did. There can be reasons to do it this way (such as changing how memory is laid out, by the addition of the designator) vs overtly using a boolean, and then checking its value.

     

    At the end of the processing, we check to see if the variable was ever defined. If it was, we know that the subprocess encountered an unusual condition, but was able to continue. 

     

    Alternatively, we have a block of code that wants to know if a variable exists or not. (we will assume we cant use arrays.) It is intended to be called recursively, but to NOT smash its owns values.  To that effect, it has some degree of tolerance to check if a value has been set previously or not, and based on that, know how many levels deep its recursion is.

     

    A third case exists for more modern basics, like VB that does object oriented structuring.  It is possible to have an object child with no value, but an object child index, that will throw off all your subsequent operations if you do not check for the existence of the child object first, and then account for it.  You do not want to create this child object upon check; Only check to see if it exists or not, so that your child index numbers will always be right.

     

     

    LOGICALLY--  When you ask a question like "IF X", it is in a context like this:

     

    I have a box.  It has length, and width.  It does not have any conception of depth.

    If you ask me "If its depth is...", it is an absurd condition. No value for depth exists, nor can it. The answer is "no."  because "There is no depth." This answer is completely unrelated to any value Depth might have, should it exist.

  7. I answered.  I would likely use a while loop for that, not an unescapable IF statement, and gave an example.

     

    Using TRUE in the manner you suggest, (An immutable constant TRUE being evaluated at all is tautologically silly), is something I would not even consider doing, despite it being obviously a true condition. 

     

    It's about as absurd as using

     

    IF 1=1 then

    {dostuff}

    ENDIF

     

    If I saw it in a program, I would think the programmer was a pretentious douche who thinks his code can never encounter an unexpected condition, and feels his code should always, unequivocally, and without question, should always be run.

     

     

    NOW--  Why you SHOULD NOT treat the "IF X THEN" statement as an evaluation on the CONTENT of the variable--

     

    It can exist a condition where a variable exists, but has a null value, even in basic.  You can totally define X="". 

    There is no clean case to ask the computer "Has X been declared before?", *OTHER* than asking it, literally "X?", such as in "IF X". 

     

    It is not a question of "which do I find more aesthetically pleasing."  It is a question of "Doing it that way makes it impossible to ask a different, perfectly useful question."

     

  8. I question how this could become a standard behavior.

     

    It's in the same category of "nope" as assuming a null value variable's contents is equal to 0.  You are not actually asking if the value is true or false. You are literally asking if X exists, according to formal logic.

     

    "The computer lets me do it" is not sufficient grounds for me. I will personally never use this kind of convention.

  9. That is nonstandard behavior--  None of the basics I have used prior would have allowed that.

     

     

    (Consider in a vacuum--  You ask the computer "X?"  The logical "no" condition is "No X". Not "X=false". Defining this behavior in this manner is not consistent with proper logic. Most people defining a programming language are sticklers about formal logic and its paradigms. Clearly not TI. (and apparently MS at the time, since we have paperwork now.) )

  10. I do actually, I think you just did not catch the condition I was trying to present.

     

    The dumb renumberer would look at the preceeding listed line number to set the LOWBOUND, and then skip forward to find the next listed line number to get the UPPERBOUND.

     

    Since 500 is much larger than 20, the lowbound would be higher than the upperbound, which would break the simple renumberer.

     

     

    The statement I made about malformed line 20, is that you need an operator.

     

    IF X [some operator] THEN 40

     

    EG, if you intend for it to be a boolean, you need

     

    IF X=TRUE THEN 40

     

    = is the operator specifying what kind of evaluation you are checking for. Without such an operator, the only conceivable check to do is if the variable exists or not.

     

    Since your sample code is basically just checking for the existence of X as a variable, and it was explicitly defined in line 10, It should exist at this point in execution, the IF statement should return true, and code should jump to line 40.  Code between 20 and 40 will be skipped by program flow (including explicitly labeled line 30). Adding line numbers to the undefined line(s) between, (eg, giving it line number 21), will not impact program execution.  The only time this would not be true, is if you GOTO line 20 after line 40, and somehow delete the variable. Then it will return false, and the next line will (attempt) to execute. No variable named X will exist, and the interpreter should error accordingly.

     

     

  11. Hmm... Firstly, your line 20 is kinda malformed? "If X" without an operator logically means "if a variable named X exists"...  But that aside--

     

     

    The idea I would implement is pretty dumb, and would introduce problems. I will be forthright about that, and it was not my suggestion anyway. :P

     

    I would count the number of un-numbered lines between the properly ID'd lines, and check to see if they can logically exist there.

     

    EG

     

    10 PRINT "This is the first indexed line"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    PRINT "Oh noez! 11 lines between!"

    20 PRINT "This is the second indexed line"

     

    would get flagged, because 11 lines are needed, but only room for 10.

     

    Otherwise, sequentially number the un-numbered lines with appropriate numbers between the indexes.

     

     

    This would introduce problems.  I am well aware of this. Notably, this would be a serious problem for the renumberer.

     

     

    10 PRINT "This is some line with a low index!"

    500 PRINT "This is a perfectly valid line number, it is just WAAAAAAAY out of sequence."

    PRINT "THIS LINE WILL BORK SIMPLISTIC RENUMBERING BAD!"

    20 PRINT "We now return to our regularly written program..."

     

     

    When you have to deal with "Spaghetti code" syntax, with gotos all over the place, line numbers not in numerical order (but still valid, because not with overlapping IDs.), etc I totally get your point.  Nobody should really be programming like that anyway. Nobody sane that is.

  12. He means, that if you have a situation like this

     

    10 PRINT "This is a line. Yay."
    PRINT "This line intentionally has no line ID!"

    20 PRINT "This is the next actually numbered line!"

     

     

    The interpreter should do this:

     

    10 PRINT "This is a line. Yay."
    11 PRINT "This line intentionally has no line ID!"

    20 PRINT "This is the next actually numbered line!"

     

    and not this

     

    10 PRINT "This is a line. Yay."
    32767 PRINT "This line intentionally has no line ID!"

    20 PRINT "This is the next actually numbered line!"

  13. You need the quality polished surface for a build plate to function well. (Otherwise parts will either not stick properly, or.. worse... stick TOO well.)

     

    That's why I intend to purchase the sheets, rather than try to DIY any further than what I can accomplish with sharpie, a drill gun, and a dremel too.

     

    I would need 2 of them.  One for the linear bearings and the belt cable carriage, and one to use as the build plate. (that would get the silicone heaters glued to the bottom.)

     

     

     

    • Like 1
  14. 27 minutes ago, Mehridian Sanders said:

    @wierd_w My wife recently got a job working for the US postal service. She's been working her ass off she's doing about 28,000 steps a day and she's lost about 15 lbs. in 3 weeks. With the added income we've been looking at getting a 3d printer. I'm really proud of her. I married way outside my league.

    I've played with one and printed the FG99 cart enclosure for the FG99 that I built. I was wondering because I know very little about 3D printing whether or not Teflon would work better as a base. From the few that I have seen, there seems to be that damnable problem of the base. Either the base gets split or cut or wrecked or overheated. This turned my thoughts to building my own, and I have a whole bunch of Dot Matrix printers and motors, heat sinks too for that matter.

    There's a large community of 3D printers that like to find better ways to upgrade their machine. I want to say it's the Comgrow, or the riprap, something like that. I'll see if I can find that community again, Post it here.



    Sent from my Pixel 4 XL using Tapatalk
     

    If you have the surplus dough, I would suggest that you get a proper name-brand one, with good warranty and support.  Markforged is pricey, but their printers are robust. They even make some that print metal.

    If you want to do plastic, consider getting one that does laser sintering rather than extruded filament. Materials are more expensive, but the build quality is much better in finished products.  If you do go for one that does fused filament, get one with a 100% metal hot-end.  This is especially true if you want to print basically ANYTHING other than PLA, since the PTFE used in the cheaper hot-ends thermally decomposes at around 250C, which is the print temperature of ABS, Nylon, and pals. (I got lucky, since mine came with a 100% metal hot-end from the factory. Most prusia i3 clones are not so fortunate.) Self-leveling bed will save you a TON of fiddling. (Mine is manually leveled, and it is a royal pain to get it just right.)

     

    I would not know about issues surrounding the base like that-- My printer is a metal-frame construction design. The biggest source of woe has been with the build-plate, and its power/thermistor connector.  While the soldering pads are good and long (about 3mm?), they are not up to the task of mechanically stabilizing the connector against hard bumps. I ruined a bed by hitting the connector while monkeying with my printer one day.  On the replacement, I put down a thick slab of "green stuff" epoxy putty over the soldering pads, and directly up against the back of the connector's plastic, to provide mechanical support for the port. Have not had problems with the new bed.

     

    The big issue I have seen with mine, in terms of regular use issue, is that while it is all metal construction in the chasis, there is still unacceptable levels of wobble. This means high-speed travel jerking will rock the unit slightly, which impacts print quality. Like any CNC machine, the machine itself needs to be as "Rigid" as possible, and that means heavy.  Sadly, this philosophy does not seem to translate into the consumer 3D printer market.  More than once, I have considered literally BOLTING my printer to the table, and adding support stabilizers to it.  Currently, I run it about 1/3 speed if the print is going to be tall.  If you intend to design your own printer, keep this in mind, and make the printer resist vibration, rocking, and flexing wherever and however possible. If that means filling cavities with sand, then do it. 

     

    Other tips and tricks:

     

    Printing Nylon-- (Since you can get this stuff in bulk, and I mean BULK!), Keep the stuff in a drybox when not in use, as it is strongly hygroscopic. (or, set your printer up in an uncomfortably hot and dry room, so it basically bakes while it prints. Talking 90F or hotter, uncomfortably hot dry room. My upstairs gets like this in the summer so it works for me. ;)) Prints between 230C and 250C, and outgasses when it has not been properly dried. Use with good ventilation; you never know what they mixed into it.  Bed first-layer temp 90C, remainder 35C. Use a liberal coating of clear PVA school glue on the aluminum bed, and allow to dry completely before starting a print. (I pour then smooth with a spatula, then preheat the bed to to 40C, and allow to dry. Don't worry, it does not form a terribly strong bond with aluminum build plates. Peels off like tape. Provides a good hydrogen-bond rich surface for nylon to adhere to, and sticks acceptably well to the build plate. Good interface material. Reusable! Just add the peeled off film to water and re-use!)  Print with a 1cm wide brim. Use aggressive retraction! 9mm retract distance, 90mm/sec retract speed! If your slicer supports it, use combing aggressively to avoid leaving strings on your part though avoiding open-air traveling. *TURN OFF THE COOLING FAN!*  Printed parts are not terribly rigid-- they are flexible, and tough.  (If using a commercial filament rather than inexpensive bulk trimmer line, follow the manufacturer recommendations for the filament temperatures.) Suitable for printing replacement gears and such.

     

    Printing ABS-- I have never had good luck with this stuff. Either it wont stay stuck, or it delaminates after printing, or it warps for no discernable reason, etc.  I try to avoid. Your mileage may vary.

     

    PETG-- Very nice stuff, but likes to warp. A good compromise between the qualities of nylon and PLA.

     

    PLA-- Everyone knows how to print PLA. It's basically impossible to screw up. It's what basically all extrusion based 3D printers are designed for.

    • Like 1
  15. hmmm...

     

    I have in my possession, a somewhat antique athlon64 based systemboard and CPU.  It has a floppy diskette controller.  It also needs RAM (which I dont have any of on hand.)

    I also obtained (via an ebay listing) a TI 99/4A PEB, with diskette drives.  HOWEVER-- these are schuggart configured, not IBM configured.  I would have to check to see if they can be reconfigured for IBM systems.

     

    If nobody else picks up the request, I could set about getting this paperweight transformed into a floppy creating workstation.

    • Like 1
  16. I have been having my thoughts return to printing PEB parts, and I find myself considering an attempt to upgrade my 3D printer with a vastly elongated Y axis.

     

    While I can't find pretty single-unit beds in the size I intend to install (8x24 inches!), I CAN get silicone heating mats with integrated thermistors in a size that I can double up(just only connect one thermistor, and wire the pads in parallel), Ebay has naked aluminum sheets in this size, and at least one amazon seller sells custom length linear rods. I should be able to cook something up that way I think.

    Another sells the needed long threaded rods.

     

    The metal-frame construction of my printer should let me get away with this modification,  and the table it is installed on has plenty of room for the extra travel area. 

    (not my printer, but I have the same model)

    31759ecbcf49690e8ca5a2f4a25dbc84_preview

    I should be able to retain the end-plate and idler bearing, and all that stuff.

     

     

    It's just a thought that is tickling the back of my head.  If I did this, I would be able to print monolithic replacement front PEB bezels.

     

    Sadly, making X axis wider is not really doable (there *IS* some clearance gap on either side of the bed, as shown in the above image-- but not enough to get get a full PEB to sit in the cavity, at least I don't think so)... but Y should be extendable out to infinity, at least in theory. (Gravity sag would be a thing, even with high precision linear rods, given this form of construction.)

     

    Any thoughts?

    • Like 2
  17. The issue you will have though, is that the "system options not set" literally means that the hard disk type and other such things are NOT set in the CMOS RAM.  As such, the system is not able to see the hard disk.

     

    You will need a bootable floppy diskette, and the setup diskette.  Once you run the setup program, it will set the system date and time, set the hard disk type, and all that other needful, and THEN it will be able to boot from the HDD/CF card.

     

    You can possibly use something like this thing--- to hook a legit floppy drive to a USB port.  I dont know if it supports other densities besides 1.44. You would need an adapter to convert the IDC34 connector to the appropriate female card-edge connector for a 5.25" diskette drive.

    https://www.aliexpress.com/item/32868879944.html

     

     

    As concerns disk image creation:  You could always use win-dd instead.  Still would be a flat image.

    http://www.chrysocome.net/dd

     

     

     

  18. Show me  a picture of the "Need setup disk" error.

    I looked it up on Google.

     

    Is this an EISA message or something?

    Nope, it's just the "system options not set" situation, where the rom does not contain the cmos setup utility.

     

    You will need a way to produce a real 360k diskette, and will need said setup diskette.

    SP0308.zip contains the 720k version disk images for this program.
    SP0316.zip contains the 360k version disk images for this program.

     

    If you have an older PC that has a floppy disk controller, I would hook the 360k drive from the portable II to it temporarily so that I could generate the diskette. 

     

    Looking inside the 720k version's image file, I see that it is NOT bootable.  This means you would have to boot on a dos diskette, then swap out the diskette.

     

    Suitable Compaq branded MSDos 3.1 diskette images can be found here:

    https://winworldpc.com/download/6e627cca-b789-11e7-b8e6-fa163e9022f0

     

×
×
  • Create New...