Back in 1993, I was taking a number theory class
twitter.com
twitter.com
Also, once the number theory professor learned of what I had implemented, he worked out an agreement with the lab manager to give me legitimate access to the machines. :)
The simple way: in that mini debugger, the ‘G’ command (for ‘Go’) takes an optional address and jumps to it. “G 40F6D8”, for example, continued execution at address 40F6D8.
I guess the proper way would have been to JMP to wherever a bare ‘G’ would have returned, not an RTS (if there is a proper way to do this kind of thing. I’m not sure the system guaranteed what you could do at that time. You might be in a memory manager call, which meant any drawing calls were off limits)
Fun memories.
Good times.
There seems to be a lot of interesting history surrounding it: https://sattlers.org/mickey/CU-SeeMe/internetTVwithCUSeeMe/c...
People weren’t that much different na back then then they are today.
This provides a per good impression of what it was like. This was 30 years ago.
Suppose you could get the same type of "fun" today by playing with breadboards but you'd have to seek it out on purpose. Sitting in front of a modern machine is just so much more abstraction that gets in the way.
Yes, things have moved up the stack. And so have they done in the 30 years before the 90s, too.
Wrong. My program ran out of memory, systems started thrashing, desktops froze up. Confused students, panicking about unsaved changes, swearing, rebooting. Meanwhile I was frantically trying to kill my processes, but even sshd became unresponsive so I couldn't stop the madness. They never found out it was me :)
We had to fill out lots of forms that documented what we called "analysis," and we'd often have to change them based on some factor changing. One change could cascade through the whole form.
Paper forms. Green see-through plastic letter guides. Whiteout. Lots of whiteout.
We had access to a department mini computer, don't remember what it was. The language might have been Basic-like, but I didn't know enough to recognize it as such.
I figured out how to write and run programs, someone showed me how to print, and I wrote a program that would accept values for all a form's fundamental values, and cascade those through calculations for the dependent values, and print out the filled in form. You could save it, update a new value, re-cascade, and print it out again. No more whiteout.
Part of the calculation involved sorting. I didn't know anything about sorting, so I implemented what I later learned was bubble sort. Because that's obviously how you'd do that.
The system administer noticed more load when people ran my program. He found me, and told me not to do that again.
I learned that there was a thing called a system administrator. He might have given me a better canned sort, don't remember.
I eventually thought it would be a good idea to quit and go to school, so I did.
(I took a number theory class, but had to drop it. I don't have the math nature.)
Anyhow, I befriended the sysadmin and he on the sly gave me an account and the code for the door. I wrote a bunch of numerical integration matrix programs, and showed the results to my lead, who told me computer results were all bullshit (he'd gotten bad numbers from them before) and called over his best draftsman, and told him to show me up (all in a friendly way, he was a great fellow).
The draftsman worked for two days, and came up with a sheet full of numbers to 3 significant digits. Mine were to 6. We compared, and one was wrong. He said my number was wrong. I knew it wasn't, because continuous functions don't have anomalous behavior. He good naturedly agreed to redo that one, and in a while came back and said my numbers were right. After that, my lead trusted my work, and I got all the math work in his group.
Eventually, some manager in BCS discovered I was making unauthorized use of the '11, and went several management levels over my head to demand I be censured. My lead (one of the engineering treasures at Boeing) went to bat for me. That went many levels up, and the BCS manager got a smackdown and was ordered to legitimize my usage.
In another incident, I got the job of writing some test plan specifications. The usual technique was to hand write them and hand them off to the secretary pool to type up. I get writer's cramps after handwriting 5 or 6 words. The secretary pool was in a special doored room full of Wang word processors. All women, and the supervisor was a woman. I asked for access to a Wang, as it was faster for me to type than hand write. She said ok, but I'd have to take the 2 week Wang course first. I asked if I could just have a look at the manual. She laughed and said sure. She was sure I'd fail.
I looked through it for a few moments, fired up the Wang and started editing. It was, after all, just a text editor. The supervisor was annoyed, but she kept her word.
If I'd stayed at Boeing I'd have likely been the first engineer to bring in my own PC for my desk, at my own expense.
After I graduated I worked at Boeing in a test group, and wrote control software for test rigs, mainly to test Fuel Quantity Indicating Systems on the 57 and 67, 47-400, and 77.
That was in Les Carpenter's group, and they still had some test rigs lying around built with relays mounted on wooden boards.
Ploughed through weeks of works in days (he is really fast at typing too).
When he came back with his work the manager of course wouldn't belive him, set two men to verify it for weeks and they concluded it wasn't only correct but even had less errors.
After that he was "promoted" to a customer facing job (since he was "unqualified" to program).
My dad told me this story when I was a kid. It's how I ended up as a developer and why I still am.
Delighting customer by making weeks of boring work vanish into empty air is still fantastic.
Edit: I've been luckier than him. It is not always that people can be helped but I was never punished.
This brought back a memory. In the late 80s I got a job at a very high-tech science and engineering firm. A colleague told me to be careful about writing code. His supervisor had walked by his office one day and saw him writing code on a terminal. He chewed him out for "typing" because "typing is for secretaries." Apparently the correct procedure was to hand-write your code onto a paper form and hand it to a secretary for entry into the computer. I assumed my colleague was joking but checked out the official procedure and it was true.
After that, I shut my door when I wrote code.
Heck, I'd been using a computer to write my papers in college (using DECUS' runoff program, similar to Unix's man formatting program).
I can't remember the last time I hand wrote more than a few words.
The level of structural sexism back then was off the charts, at least it was overt. Now we just tell people there is no glass ceiling and it must be their problem.
I am wondering about error rates, human -> paper, paper -> file, file -> execution.
Those feedback loops are enormous. It would be interesting to interview woman from the computer code typing pool.
They all either ignored me or were nice to me.
The interesting thing is the supervisor, who sat facing the workers like a teacher in a classroom. When she found I could use the Wang as well as anyone by just looking at the manual for a few minutes, she realized that her fiefdom was doomed. Her moat had been the 2 week training course.
I kind of felt sorry for her.
> Part of the calculation involved sorting. I didn't know anything about sorting, so I implemented what I later learned was bubble sort. Because that's obviously how you'd do that.
I would like to politely contest the authenticity of this specific detail. In my fairly strong collection of evidence, people just do not bubble sort without being told how to do that.
People's natural mental sorting algorithm is most often insertion sort. That's what you use when you hold a hand of playing cards, for example. Sometimes something else (radix sort with monopoly money, for example), but I've never seen anyone invent bubble sort without first being told about it one way or another.
(Which is a good thing because bubble sort is just such a stupid idea I don't know why we teach it. In my life, I've only ever been notified of one single good use case for it: you need to slowly converge on an order but the minimum amount of computation is necessary for each step of the convergence.)
I taught a C programming class for first-year students for a few years at the end of the 90s, where one of the tasks was to sort an array of words, with no hints given as to what kind of algorithm they should implement. Most students came up with bubble sort. Insertion sort was much less prevalent, and the few students who did typically did a kind of out-of-place insertion sort. (I also saw a O(N^4) algorithm once.)
I agree about the playing cards. But bubble sort was the natural sorting algorithm for me to come up with, too, when I was dealing with qbasic back in the 1990s.
> People's natural mental sorting algorithm is most often insertion sort.
[embarrassed panic]
[trip down wikipedia lane]
No, it was bubble sort. Data and loop management for insertion sort wouldn't have been something I would have thought of back then.
Insertion sort is literally just "keep track of the index beyond the last sorted element, then scan for the next smallest element and swap it in, repeat until you have gone through the entire array." This is about as simple as a comparison sort gets. (And it's what literally everyone I've watched does when they get dealt a few playing cards.)
Bubble sort, on the other hand, requires you to reason about consecutive adjacent swaps, keep track of whether the current iteration dirtied the array, and so on. (Just the idea of bubble sorting playing cards gets me sweaty. It would take long, be cumbersome, and hard to keep track of.)
Edit: who is embarrassed now? What I'm describing is apparently not insertion sort but selection sort.
You only need to keep track of whether or not the current iteration dirtied the array if you want to stop as soon as a pass leaves the array sorted. If you don't want to do that (or don't think of it) then it is just something like:
for pass = 1 to n
for index = 1 to n-1
if array[index-1] > array[index]
tmp = array[index]
array[index-1] = array[index]
array[index] = tmp
There is less extra to keep track of then in insertion or selection sort.FWIW, my first sort was selection sort. "Find the smallest element, place it at the start, repeat" seems like the obvious way to do it, without the fussing about with shuffling already sorted elements out of the way that insertion sort requires.
Perhaps it's a thinking top-down vs bottom-up kind of thing? People who think bottom-up stumble on bubble sort, people who think top-down stumble on selection or insertion.
https://en.wikipedia.org/wiki/Bubble_sort#Performance
>The only significant advantage that bubble sort has over most other algorithms, even quicksort, but not insertion sort, is that the ability to detect that the list is sorted efficiently is built into the algorithm. When the list is already sorted (best-case), the complexity of bubble sort is only O(n). By contrast, most other algorithms, even those with better average-case complexity, perform their entire sorting process on the set and thus are more complex. However, not only does insertion sort share this advantage, but it also performs better on a list that is substantially sorted (having a small number of inversions). Additionally, if this behavior is desired, it can be trivially added to any other algorithm by checking the list before the algorithm runs.
>In popular culture: In 2007, former Google CEO Eric Schmidt asked then-presidential candidate Barack Obama during an interview about the best way to sort one million integers; Obama paused for a moment and replied "I think the bubble sort would be the wrong way to go."
Here's an implementation of bubble sort written in PostScript by Sam Leffler, renowned BSD/Lucasfilm/Pixar/SGI/Alias/Softimage/VMWare hacker, which he sent me and gave me permission to distribute in 1988, but which he was too embarrassed to sign his own name to, so he used the pseudonym "Bobo Leffler".
https://donhopkins.com/home/archive/psiber/cyber/bubblesort....
https://en.wikipedia.org/wiki/Samuel_J._Leffler
Also here's a PostScript heap sort by Owen Densmore of Sun, and a PostScript insertion sort by John Warnock of Adobe, both of whom used their real names:
https://donhopkins.com/home/archive/psiber/cyber/heapsort.ps
https://donhopkins.com/home/archive/psiber/cyber/insertion-s...
Do NOT click on the red button.
Some school labs had left access to Hypercard available through that program, so you could just pull up Hypercard and make a new stack that would tell the program to quit.
The other way to get around it -- or around many other misbehaving programs in the cooperative multitasking system -- was to bring up the programmer's interrupt like the author describes, and enter "SM 0 A9F4", followed by "G 0". This would set memory location 0 to the _exitToShell function in the OS ROM and then resume execution from there, which immediately terminated whatever was in the foreground.
The rest of the system would often be a little unstable after that though, so you only had a few moves left before a restart would be needed.
To youths with curious mindsets, an anti-authoritarian streak, and seemingly limitless amounts of free time, little restrictions like these only improved our skills. Systems with challenging but imperfect security are a great way to foster new young talent.
I remember AtEase, and remember hating it.
I know it worked on System 7, and I think there was a variation that worked in System 8 as well.
https://apple.fandom.com/wiki/MiniFinder
https://winworldpc.com/screenshot/c29050e2-809c-c2a3-24e2-80...
But that was a bit earlier.
From what i remember, MiniFinder was written for MFS, and did not support hierarchical directories. You couldn't use applications unless they were at a filesystem root.
Compare AtEase to your iOS home screen. We have come full circle?
I miss the days when the stakes for testing boundaries and experimenting were lower.
FoolProof? The bane of my elementary school existence. Just let me play SimCity 2000.
Breaking things with ResEdit was pretty much my jr. high school hobby. It took a bit before I figured out how to restore things when I was done.
Head "tech" guy in the building eventually figured out it was me, showed me a few things and ended up just giving me an un-limited login and a few rules. Also taught me how to intelligently use ResEdit instead of the brute-force method(s) I was used to.
The lab manager found out about our Ctrl+Break hack and put in an event listener/handler for that keycode in the DOS login program. So I spent several hours trying other key combinations and eventually figured out that Alt+3 sent an ASCII character that had an effect that was equivalent to Ctrl+Break in DOS -- and we were back in business.
The two folders were labeled "Applications" and "Documents": https://en.wikipedia.org/wiki/At_Ease
You could also trigger the NMI via Apple key + power button and I remember the magic code to set the memory to zero and crash finder being: SM<space>0<space>A964<return>G<space>O<return>
> At the ">" ROM debugger prompt, type the following lines, pressing Return after each:
> SM 0 A9F4
> G 0
> In the first line, the "SM" stands for "Set Memory", the "0" signifies memory location "0", and the "A9F4" is the trap number for the "ExitToShell" trap. This line puts "A9F4" at memory location "0". In the second line, the "G" stands for "Go" and the "0" stands for memory location "0". This line tells the computer to execute the instructions starting at memory location "0". Since "A9F4" is at memory location "0", the "ExitToShell" trap is executed.
https://groups.google.com/g/comp.sys.mac.system/c/lM8yT3I3P0...
Suspecting that this would not end well, I installed a very light weight solution; he promptly forgot his password within a week, called me in again, and I bypassed the password prompt with the above NMI+ExitToShell() method. He was suitably impressed and asked me to write down the magic incantation on a post-it note that he attached somewhere to his desk...
What can I say? They always promptly paid their bills!
Leading to Control Panël or the entire disk of utilities called Word.
I was very... surprised when I managed to productively use "javascript:(some code)" in the URL bar of the browser of my phone once when I was stuck in the airport probably like 10 years ago and needed to do something that just wasn't working normally. Now that we're used to smart phones it probably sounds quite basic but it was absolutely weird back then.
When an app on your computer or phone doesn't work well do you say Windows or iOS is broken, or do you say the app is broken?
A broken website doesn't mean the web is broken.
That's true of all development, granted, but doubly so the web, so yep... the web is broken.
Yes. All the time. A good platform supports that which builds upon it.
As a C++ programmer who has absolutely no idea how to even open the dev console in browser - I just close the website. If I can't scroll it, if it has stupid popups that I can't dismiss, if it lets me get halfway through checkout and then misteriously empties my basket? I'll maybe give it one more try and then just close the website.
I ocassionally use it to debug faulty script submission or stuck websites or some paywall banner (as a consumer), but one great way to manage without it, is to avoid those websites in the first place.
If I see an incompetent business website, I take my business elsewhere...
Opening up the web inspector revealed that the JS was stripping any leading 0's for the CVV. I ended up manually crafting a curl request to hit the GraphQL endpoint and was able to successfully book the room.
I did reach out to a Platform Architect on LinkedIn describing the bug, but never heard back about it. Was a total shot in the dark, though, so no surprise there.
The lab machines I was using were physically accessble to students, who could reboot them, shut then down, whatever. So I wrote a script that would iterate through the hostnames until it found one that it could SSH tunnel through. Mostly it used lg12l0, the first host. One day I got an email from the cs dept sysadmin telling me that lg12l0 was a test host in his office, not a real lab machine, could I please use another one? And no complaints over what I was actually doing with it. I still wonder if he noticed. This setup was running for at least a year, maybe two. Sorry about that mate :D
I wonder if there's a place for "fast Usenet", where you can write a message of arbitrary length with some markdownish syntax, let it be flooded to anybody subscribed to that group, and automatically drop into a searchable no-new-comments archive after, say, a week.
Genuine question: why archive?
While I don't really have a substantive list, I very often come across archived threads on here and elsewhere that I'd like to respond to. "Wow this is awes--" "oh it's from 2016".
I guess I just don't understand the hate against necroposting. If there's a thread out there that has exactly the context and disposition I was looking for, _let me respond to it_. In a lot of cases I don't actually care if any reply(s) take 4 years to come through!
Why the anti-necroposting provision? Because if it's really relevant, having you jump through the additional hoop of quoting the good bit and copy-pasting into a new thread not only forces you to put a little bit of thought into it, but also prevents threads from being months or years (or decades) long and thus only being accessible to people who have read the whole darn thing.
In my experience in Usenet, conversations go off topic remarkably quickly.
Edit - http://www.csm.ornl.gov/pvm/
When I was in school (circa 2000), the IT offices were starting to crack down on students (with some threats of expulsion) for activities like this, though it wasn't yet typical or uniform. I know at GT there were a few computer labs that, if you paid a bit of attention, you could easily get ssh access to every computer in the cluster, and then using nohup or screen (this was pre-tmux) you could have your program run as long as the system was up. I had to ssh in a couple times because I'd forgotten to logout and didn't want to get "baggy pantsed".
And if you can get SSH, chances are sooner or later you can exploit some misconfiguration or something else to escalate to root.
Years ago having send mail installed basically meant having a security hole... And sendmail was very common.
It definitely would not go well.
That being said, I did know people who clogged the cs department's machines with batch jobs to train really expensive ML models that did God knows what. Its not the same as bypassing a security system, but it is an instance of people having the ability to run whatever code they'd like in certain circles.
Students aren't allowed to have a printer? O_o
In 1993 I was one of about 3 people on a dorm floor of ultraturbonerds who had a printer in my room; it was a Canon BJ130, I think, which had the distinction of being a tractor-fed 300dpi black-and-white inkjet, and thus much much quieter than my friend's IBM ProPrinter 24XL. How much quieter? It wouldn't wake up people in the next room.
Buying a combination computer/printer was a terrible idea for longevity, but it helped me out a lot that year.
(Edit: stupid typo getting old)
What's wrong with having a printer?
How many students are just rolling over and saying sorry? I would imagine most would give you a very hard time.
Probably most/all. IT infrastructure is critical and there's a very good chance that the IT staff have a process in place for dealing with kids who won't let them do their jobs. And it's probably a pretty effective process that has been refined over the past decades.
They would wonder why the student went through all that trouble instead of getting time on our HPC cluster.
Though... with the whole GPU shortage going on right now, maybe it'd be easier to steal computer time from someone else's lab right now!!
Example: https://www.psc.edu/resources/allocations/
A primary mission of the Pittsburgh Supercomputing Center is to train students, including undergraduates, in high performance computing. To this end, PSC offers Coursework allocations which are grants of free supercomputing time to supplement other teaching tools.
Typically, Coursework allocations have been used in heavily quantitative subjects, such as numerical methods, computational fluid dynamics, and computational chemistry. But we encourage all fields, including the social sciences and humanities, to take advantage of Coursework allocations.
Building on that, many universities have computational resources for any level of needs as long as they are justified. Free network storage to last a lifetime and access to computer clusters that comes with your university email. Upgraded computer clusters for class projects, personal research (like this), or really any legitimate need (as long as you don't say something like "I want to mine bitcoin") is an email away from the university IT. The next level would be the university's super computer that generally needs a short proposal to justify the academic purpose. When these systems are in place now, it is kind of hard to justify these type of things.
Edit: The author of the post put a comment basically confirming that things haven't really changed. He was being respectful (low usage lab, allowed people to stop his programs if they needed a computer, low impact to others, etc.). He was given access to more legitimate resources afterwards at the request of the professor. Not as easy as it is now, but that's Moore's law.
If 'behavior like this' is creatively toying with lab equipment that you have been given physical access to, bending the rules a little bit in the process, to participate in an academic challenge? If it would be up to me then a slap on the wrist would suffice, now just as well as presumably in 1993.
But if 'behavior like this' means breaking into computers, which nowadays are essential parts of a university's infrastructure, in straight violation of rules and conventions on hacking that have been in place since before you were born (say 2000), just to get some computer time to, say, mine whatevercoins? Then a little more than a slap on the wrist would be completely fine by me.
There were apparently scripts set up that would reset everything every Sunday.
People that are smart as hell using a tool built around what feels like mental whiplash to tell a relatively complex story.
I actually think there is value with Twitter applying pressure and economy of words (I would fall into the category of over-explainer) helping folks like myself be more concise, but can't the story just go here?
Thinking out loud I'm sure there is an approach towards multiple networks being hit simultaneously but it'd really be nice if linking to a Twitter thread roll-up just automatically dumped the whole text here without needing to click into and pull in ${threadReaderTooling}
In[*]:= Timing@FactorInteger[RandomInteger[{10^70,10^71}]]
Out[*]= {15.2956,{{2,1},{7,1},{37515320305457999,1},{326028473853489650357,1},{311862636985416087931035845158981,1}}}FWIW, I'm from 1990 as well and I prefer to read plain websites with no JS/CSS. But the HN comment threading interface could use some love.
Some people would just bring their own mouse in to get past the defences.
They also used a surveillance system called LanSchool, which sent out all of its commands entirely unencrypted and unauthenticated, so people would spoof the remote takeover command and steal exams from teachers' accounts. It ended up being a whole thing my senior year.
The name of the class? "Digital literacy".
You overestimate "professional best practices" in many places...
One example was that my school refused to give out the Wi-Fi password as a form of security, so they'd demand to manually type it in themselves on your machine. A simple keylogger and now the whole school just ignored that rule for a few months.
Another is that while they tried to block things like SSH, VPNs, etc... to get around the school's internet filtering, turns out you could just run SSH over port 80 and have a tunnel out :)
In 1983 I reverse-engineered the Xerox 9700 laser printer font format. Xerox were real SOBs and refused to share technical info with their customers, who were paying $12K/mo rent on the huge printers (120 impressions/min., two-sided). I altered random bits in the font files, and displayed the distorted results. My apotheosis was selling new fonts to the local Xerox branch.
Not nearly as interesting as OP's hack here, but there was plenty that you could do if you just knew what to use Powershell for. When the machines got upgraded to Windows 10 from 8, every computer you logged into would use the Win10 default background instead of the blank blue one they used previously, and when in my CS class I found it rather distracting. Of course I went over the top, and since you were disallowed from changing the background picture in settings, or with the right click menu, I created a little tool my freshman year to change the value of the my user account's registry key for the background, to whatever else I wanted.
I understand IT's reasoning against giving highschoolers that access (preventing sexually explicit backgrounds), but I just wanted a nice winter landscape, and so when they eventually caught wind they didn't really mind, though they did give me the 'with great power comes great responsibility' speech.
Through my next three years the tool grew to give me command line access, bypass certain parts of the filter, be able to play a bit of music over a pair of headphones, the works, and I was always the cool guy with the one non-standard background in class. It probably looked much more like I was "Hacking the mainframe" than what I was doing in reality, playing MUDs during boring presentations via telnet.
That software would be AtEase. And I used to run circles around it trying to break out into Finder and gain access to the nascent, to me, Internet. One of the first things I installed was NCSA Mosaic. Good Times!
Four Yorkshiremen sketch
Monty PythonI took care of one critical bug this way:
#define private public #include <foo.h>
Now all the innards of the foo class were available to be fixed!
I wonder what the alternatives are. I think systems that provide fully-enabled sandboxes are they way to go. Also, self-service instead of tickets (are the humans approving your tickets and better in detecting unauthorized requests?). I think that's why containerization is so popular.
Nothing quite so fancy, but in the same spirit.
What’s the comparable figure you could get on typical hardware in today’s university computing clusters or computer labs?
The purpose of the FaaS (Factoring as a Service) project is to demonstrate that 512-bit integers can be factored in only a few hours, for less than $100 of compute time in a public cloud environment.
512b = 155 decimal digits.
If you could parallelize this program to use all 2.6 TFLOPS in a Macbook Air M1's 8-core GPU, you're seeing about 75,000x speed improvement. So a 12 hour "overnight" job may take just over half a second.
1731 322587 637083 705865 442033 654804 904216 446486 784497 444181 466938 498269 (70 digits) = 25317 847509 490819 861309 522806 413689 (35 digits) × 68383 482718 586893 688113 139227 257221 (35 digits) Time elapsed: 0d 0h 0m 23.8s
This is in JavaScript on a single core on my laptop.
Time elapsed: 0d 0h 5m 38.2s
Ironically, now the results of number theory are an important foundation for essential computer science.
Not sure if this was some graduate class or if there are really undergraduates with enough CS + number theory knowledge that could be expected to pull off something like that.
sm fa700 a9f4 pc fa700 g
SM 0 a9f4 writes a9 f4 into memory at address 0
G 0 starts executing at address 0
A9F4 is the ExitToShell A-trap, which terminates the
current process.
With those commands you could terminate the foreground task on System 7 and were (usually) given a chance to save or recover something before rebooting.It could also be used to kill At Ease on most school setups.