hudebnik: (Default)
Some time yesterday I was trying to respond to something on Dreamwidth or Quora or something, writing my reply in one of these text-block fields of a Web form, and Chrome suddenly reloaded the window, losing what I had already typed. I was only a sentence or two in, so I typed it again, being very careful not to hit any weird keychords (pretzel-shift-option-caps-lock-escape-left-square-bracket), and it reloaded the window again, losing what I had already typed. I started typing again, and only got through a few words before it reloaded. The fourth time I didn't manage to type anything before it closed the window entirely.

I thought the problem might be an interaction with a video game in another window, so I closed the video game and re-started Chrome. It asked whether to restore the same windows, and I decided to try "yes", in case shutting down the game was enough to solve the problem, but it wasn't: same symptoms. So I re-started Chrome and answered "no", then typed a URL, and it loaded, but after a few seconds the window closed spontaneously.

OK, I know this drill. Next step is to save everything in open document windows, shut down all apps, and restart the computer. So I did that, re-started Chrome, answering "no" to restoring windows, and got the same symptom.

Admittedly, this is an old version of Chrome, but we've been using it without difficulty for a year, and we haven't recently installed or upgraded any other software. It's the latest Chrome version that runs on Catalina 10.15, which is the latest OS version that runs on this hardware. Other than that, the computer has been serving us well for many years, and I'd sorta rather not upgrade to a newer OS because this one still runs Finale, which has been deprecated and no longer runs at all on the latest MacOS. (The Finale people recommend that their users migrate to Dorico, an even-more-powerful music-notation package, but it has a lot of different metaphors to learn, and many of the things my fingers knew how to do in Finale without conscious thought seem remarkably complicated in Dorico. And we still have hundreds of data files in Finale format. But that's a different rant.)

Opened Safari to see whether it had the same problem, and it seemed to be working fine. In particular, I did a Google search on "Chrome browser crashing after a few seconds", and got the advice I had already followed -- shut down other tabs, restart Chrome, don't restore windows, restart the computer -- followed by the next logical step: uninstall and reinstall Chrome. So I did that, restarted the browser, and got the same symptom: it couldn't keep one window open for more than a few seconds, even an empty window pointing at no URL at all. The advice also recommended deleting everything in "~/Library/Application Support/Google/Chrome", so I did that, restarted (the newly installed) Chrome, it asked me some unfamiliar questions because it no longer had any saved state, I opened a URL or two, and the windows kept closing of their own accord.

So I went back to Safari, had a chat with a Google support chatbot which told me to do all the things I had just done, and tried to post my question on the tech-support bulletin board. This required logging in, without the benefit of Chrome's user-and-password autofill, so I had to look up which username and password I had used on the Google support site before, but I managed that. In describing the question, there was some detail of symptoms that I wanted to check, so I opened Chrome again to see when and how it went wrong... and it didn't. It worked fine, for minutes on end. I went to bed, woke up this morning, and am typing this in a Chrome window without difficulty. Go figure.
hudebnik: (Default)
Perhaps it has to do with Mail using 115% of the CPU?



BTW, that's not a one-off fluke: I've seen similar numbers several times in the past week or two.

So I quit the Mail app:

hudebnik: (Default)
Last night's multi-tracking attempt, "Stella celi extirpavit"
hudebnik: (Default)
I've been working from home for almost two weeks now. The house hasn't magically become clean, and although I've done a bit more weight-lifting than usual, I am not suddenly buff and the usual stream of mail-order packages coming in the front door has increased only slightly. I did bake a good-sized loaf of sourdough bread last Saturday, and since we're both at home, we're going through bread faster than usual so I baked bread again yesterday: mixed flour and water at dinner-time Wednesday, added starter before bed, added eggs, salt, and more flour Thursday morning, formed a loaf Thursday afternoon, soaked the Romertopf, moved the loaf into the Romertopf and put it into a cold oven, and turned the oven to 475F while preparing dinner, setting the timer for 50 minutes.

And then the thing that we haven't been preparing for in the current epidemic happened: the power went out. More precisely, the power went out to some of the outlets in the house and not others. Still more precisely, the refrigerator was still on (yay!) but the oven and microwave weren't, nor the Wi-Fi router, nor the desktop computer, nor the bedroom overhead light. I checked the circuit-breaker box, and everything was still in the "on" position; I flipped the breaker for the oven-and-range circuit off and on just to make sure, but no dice. Called Con Ed and talked to a robo-phone-tree for a minute or two. Fortunately, the oven had already come up to its desired 475F before losing power, so I figured "I've baked bread with retained heat in a brick oven before: I just won't open the door for a while." Of course, my kitchen oven is NOT a brick oven, and is NOT designed to retain heat, so I gave it more time than I had planned, while making the rest of dinner on the stovetop (it's a gas stove, and we have matches).

After an hour and a half, I opened the oven and took the lid off the Romertopf. The bread looked kinda done, but not quite. So with no real alternative, I quickly put it back in the oven and prepared psychologically for the possibility of throwing away a loaf of half-baked dough.

And then Con Ed showed up. The workman asked whether anybody in the house was sick before crossing the threshold, and I assured him we had only the same sniffles we'd had since December. With some misgivings, he went to the circuit breaker box and started detaching things. There was some confusion when detaching the meter didn't cause the remaining lights to go out: apparently when the solar panels were installed years ago, the installers installed a new meter outside but left the old one inside, disconnected from anything. But after a minute or two the Con Ed guy found that a different circuit-breaker was flipped, just not visibly so; he flipped it off and on, and things came back to life. I asked how I could have diagnosed this myself and saved him the trip.

"Yeah, you could try flipping each switch off and slamming it back to on. Other than that, without this meter..." indicating his impressive, rugged, professional-looking voltmeter.

"You know, I have a VOM, but I don't know if it could handle household current." So I found my much-less-impressive, much-less-rugged, Radio Shack VOM in a hardware drawer, he tried it and confirmed that in the AC 500V setting, it gave a correct reading of 120V between ground and the hot side of each circuit breaker.

"That works fine. If you see anything below about 111V, something's wrong."

I thanked him for the help and wished him a "stay healthy" on his way out the door.

Then turned the oven back on, to 350F for another 20 minutes or so, before taking the now-browner bread out of the oven and setting it to cool. We had some ice cream and brownies, walked the dogs, and sliced into the bread just before bedtime. It looks and tastes fine, not undercooked. And they all lived happily ever after.
hudebnik: (Default)
Yesterday I had an interesting medical test: a "capsule endoscopy". You fast for a day (like for a colonoscopy, but not quite as stringent -- you don't have to drink a gallon of laxative), then swallow what looks like a vitamin capsule, but actually contains a battery, an LED, and a Bluetooth-enabled 360-degree camera. It takes two photos per second as it goes through your stomach, small intestine, and large intestine, until either (a) it comes out the other end, or (b) the hospital staff decide it's gathered as much useful information as it's going to, and take off the Bluetooth receiver and monitor you've been wearing all day. It was pretty cool watching nearly-real-time video of my intestinal tract, particularly since all of this would have been the stuff of science fiction a few decades ago.

Of course, I spent most of the day sitting in a hospital waiting room, with the capsule making its way through my gut. I had my laptop, so I could write programs to run over terabytes of data on a thousand computers in Iowa, and I could live-text-chat with a colleague in Tokyo -- the usual stuff. But some things never change: the A/C in the waiting room was set to about 60F, and I was wearing a short-sleeved T-shirt because it's August, and the hospital staff (all cleverly wearing sweaters themselves) didn't have a blanket to lend me, so I also spent most of the day shivering.
hudebnik: (Default)
After a routine OS update yesterday, our desktop Mac came up with some different options set (like hiding the dock until you mouse-over it, and none of the several dozens of icons that had been on the desktop). And when I opened Chrome to do something else, I got the Google-looking-but-not-actually-Google "search" window from weknow. Safari, ditto. Damn, I thought I had cleaned up that weknow infection months ago; how did we get a new one? We haven't installed anything new recently that could have come with a viral payload... except the automatic upgrade to 10.14.4.

Anyway, I looked up "how to remove weknow" in a Google search window and found the same several articles as last time, followed the directions (you have to look in the Applications folder, and /Library/LaunchDaemons, and /Library/LaunchAgents, and ~/Library/LaunchAgents, and the extensions preferences for any and all infected browsers, and you have to clobber a user profile named AdminPrefs), rebooted the machine... and Chrome is still coming up with new tabs pointing at weknow.
I looked in all the same places again, and it hasn't visibly come back to any of them. (In the process, I also found and removed some bits of Mac Auto Fixer and MyCouponSmart, which I gather have a mutual-support pact).
Rebooted again... and Chrome is still coming up with new tabs pointing at weknow. Safari seems to be fixed, though. The "On startup" preference is set to "new tab page", but I don't see where "new tab page" is defined.
Let's try "reset settings to original defaults"... which takes a remarkably long time... and the "new tab" window is still pointing to weknow! (*@#&^)(#%&
Blew away ~/Library/Saved Application State/com.google.Chrome.savedState/windows.plist, reopened Chrome, and it's still pointing to weknow.
Blew away ~/Library/Saved Application State/com.google.Chrome.savedState, rebooted, reopened Chrome, and it's still pointing to weknow.
hudebnik: (Default)
The last time I got a new cell phone, I immediately started looking for a case that would fit it and cover the screen. I found one after four days. Unfortunately, I cracked the screen after three days :-(

This time, I've had the new phone for a week and a half, during which time I've been intermittently looking for a case that would fit it and cover the screen (and leaving the plastic-wrap that came with the phone, for some semblance of protection). The Apple store doesn't sell cases that cover the screen. Target doesn't sell cases that cover the screen. Indeed, they seem baffled that anybody would want a case that protects against the most common failure mode of cell phones. Anyway, I seem to have cracked the screen yesterday. Ordered a case today; it should show up tomorrow.

Next phone: buy the case before buying the phone. If nobody makes a case that covers the screen, don't buy the phone.

I'm really puzzled: why do people buy phone cases if not to protect the phone's most fragile part? Not all of them even have pink sparkles, so that can't be it....
hudebnik: (devil duck)
A week or two ago, my employer hosted one of the stops on Marie Kondo's book tour promoting her book the life-changing magic of tidying up. Ms. Kondo was apparently the sort of girl who cleaned not only her own room but her siblings' and the rest of the house, much to the annoyance of the rest of her family, but she's turned it into a profession: she's a home-tidying-and-organization consultant in her native Japan.

Naturally, the difficulty of tidying and organizing your home is a supralinear function of how much stuff you have, so the majority of the book is a collection of psychological tricks to enable yourself to get rid of stuff. I haven't tried much of this yet, but they look very sensible and practical (even the sorta mystical ones like "thanking an object for its good service before sending it on its way"). Some of the more prominent ones:

Major decluttering is a special event, not an everyday habit

Yes, you need to keep things tidy day by day. But getting rid of large amounts of stuff needs to be done in a concentrated block of time; don't try to get rid of a thing per day.

Work by categories, not locations

Don't say "I'm going to declutter Room X," but rather "I'm going to collect all the objects of Category X in the whole house, put them in one place, and decide which ones to keep." This way if you turn out to have essentially the same object stored in several different places, you'll find out about it and can eliminate duplicates. Of course, if "all the books" or "all the clothes" is a dauntingly huge category, you can pick small enough subcategories to fit the block of time you have.

Take everything of the chosen category out of wherever it is, put it on the floor in a big pile, pick up each individual item, touch it, and look for a visceral response: "does it spark joy?"

Putting everything on the floor serves two purposes: it shows you graphically how much stuff you have in this category, and it forces you to actively choose to keep each individual object, rather than passively leaving them where they were. The question "does it spark joy?" aims towards the goal of a home in which everything around you makes you happy. If it doesn't make you happy, and isn't necessary to life, it's not pulling its weight and doesn't need a place in your home.

Start with emotionally-easy categories, to develop discriminatory skill, and work up to the harder categories.

She recommends the order "clothes, books, documents, miscellaneous items, mementoes," although I'm sure different people have different degrees of attachment to these categories. The point is to get practice making the "does it spark joy?" decision on the easy cases, and have an experience of success getting rid of things that don't, before moving on to the emotionally wrenching ones.

Talk to your things

Your things don't enjoy sitting on the shelf (or in the bottom of a box) unused. When a book has taught you all it's going to teach you (including, possibly, the fact that you don't like the subject or the author), thank it for its good service and send it off to teach someone else. When an article of clothing has become, at long last, unwearable, thank it for its years of service and send it into a well-deserved retirement. And so on.



I had a Sunday with few commitments, so I decided to dip a toe in the water today. I picked two small categories -- computer accessories and old electrical appliances -- and threw three keyboards, two mice, about twenty cables of various descriptions (generally keeping one representative of each equivalence class, e.g. USB-A-to-USB-mini-b, VGA-to-DVI), a toaster, a food processor, a DSL modem, and a wireless router into the recycling bin. There are still a lot of computer CDs that I'll realistically never use, but I haven't looked at them yet. There are at least two computers in the basement, but I think I can wait to take them somewhere that actually recycles computers. It's a tiny step, but I have a feeling of accomplishment.
hudebnik: (teacher-mode)
Joe Schmoe does a Google search on his own name and finds something embarrassing that he did, said, or posted ninety-leven years ago. He requests that Google (insert your favorite search engine here; the case applies to all of them) remove that document from its search results on the basis of his "right to be forgotten". Google is initially reluctant, on grounds that the document is authentic history, and Google doesn't want to rewrite or censor history. Joe Schmoe takes it to court, and in an environment of strongly anti-Google public opinion, wins. The EU court recognizes a "right to be forgotten" (sort of -- see the report for the nuances), but also recognizes the public's legitimate interest in uncensored history, particularly if Joe Schmoe happens to be a public figure, and the publisher's right to free expression. Google is given a few months to develop procedures (administrative, legal, and technical) to respond to such requests, which have since numbered in the tens or hundreds of thousands.

Anyway, Google convened a panel of outside experts to advise it on how to handle the "right to be forgotten". Its public report has just been released. I've just started reading it, but it should be a good read for anybody interested in online privacy and censorship issues.

tech woes

Jan. 10th, 2015 08:17 am
hudebnik: (devil duck)
For a number of years, our stereo has had a flaky left channel (or maybe it's the right -- anyway, one channel comes in and out at random). I've swapped speakers and connections and confirmed that the problem is inside the receiver box, and applies to both front and back on that side. So we finally bit the bullet and bought a new $xxx stereo receiver. High-end: a Marantz, with wi-fi and lots of bells and whistles. Indeed, so many bells and whistles that it comes with a "Setup Assistant" program to help you customize it to its new environment. The "Setup Assistant" displays on your TV, through the HDMI connection. Unfortunately, our TV is sufficiently old that it doesn't have an HDMI connection, and although the owner's manual shows you how to connect a non-HDMI TV for ordinary viewing, the non-HDMI connection apparently doesn't work for the "Setup Assistant". Marantz tech support confirms this: "you can use the receiver with a non-HDMI TV, but you can't set it up without an HDMI TV." Why would they go to the trouble of building in non-HDMI connections, but make an essential part of the functionality unable to use them?

So we're now facing a choice:
(a) we could return the receiver because our TV is too old to use the receiver even for radio listening, and go on with the flaky left channel;
(b) we could return the receiver and try to find another one that's easier to set up (although this Marantz was one of very few models we saw that would fit in the 5"-high shelf of the entertainment armoire);
(c) we could try to borrow an HDMI monitor for long enough to set up the receiver (and again any time we need to make a non-trivial change to the setup, e.g. when we change the password on the home wi-fi network);
(d) we could spend another $yyy on a new TV so we can listen to the radio. (We'd also presumably get a better TV picture, but we don't spend that much time watching the TV.)

First-world problems, I know. We could be starving refugees from a war-torn or disease-ridden nation, we could have just lost a friend or relative to murderous religious terrorists, etc. etc.

Heartbleed

Apr. 14th, 2014 08:48 am
hudebnik: (teacher-mode)
Thanks to [livejournal.com profile] jducoeur, this link to XKCD's explanation of the Heartbleed bug.

OMG: I didn't realize it was this simple and stupid. Reason #738 why no production code should be written in C or C++.
hudebnik: (Default)
Java's constructors have annoyed me for years. They're called and defined with a different syntax from any other method, and they can't be inherited. If objects of a bunch of classes are each supposed to be able to create duplicates or near-duplicates of themselves, each such method has to be written separately, no matter how similar they are, because they all call different constructors. And Java constructors always produce a new instance of the specified class -- they can't return an existing instance, they can't return an instance of a subclass of this one, and they certainly can't return an instance of another class that implements the same interface. All of which means they're heavily tied to implementation, and should not be exposed in an API.

One can get around some of this by using pseudo-constructors, aka factory methods. If the whole purpose of a factory method is to return a (possibly) new object, one must be able to call the method without already having an object of the class, so it has to be static. Unfortunately, static methods can't be abstract, so they can't be specified in an interface; if a dozen classes all have static methods with the exact same signature, you still have to specify them all separately.
hudebnik: (rant)
Thanks to [livejournal.com profile] osewalrus, Eben Moglen's keynote address at Freedom To Connect 2012:



The whole video is about an hour and a half -- an hour of prepared talk and half an hour of Q&A -- but to whet your appetite, here are some excerpts:

excerpts )
hudebnik: (teacher-mode)
The students in my Principles of Programming Languages course have been kvetching because I asked them to do their interpreter project in Scheme. They only learned Scheme last semester, and they already know it's not a "real" language, so it's outrageous and arbitrary of me to ask them to write something substantial in it. I had pointed out that it makes parts of the assignment easier, and they replied (reasonably enough) "but if it takes more work to learn the language, we haven't really saved anything."

So yesterday in class I said "OK, I give in. This course isn't about Scheme, it's about interpreters and language features, so you're welcome to do this assignment in whatever language you like. Would you like to do it in Java?" Massive acclaim. "Let's work through Version 1 of the assignment [which they had all already done in Scheme] together in Java; once we've got that working, you can do all the subsequent versions on your own." I opened Version 1 in Scheme for reference, and started translating at the board.

The first datatype definition wasn't too hard. The 6 lines of Scheme code became 70 lines of Java, not counting blank lines and comments, but the Java code was mostly very familiar boilerplate, so that's not too bad. (Had to write constructors, getters, toString() methods, and equals() methods. Technically, should have overridden hashCode() too, but these students have never heard of hashCode().)

Then we got to a part of the Scheme code that relied on Scheme's built-in lists, which can contain anything, including other lists. Java has ArrayLists, but it's sort of a pain to work with heterogeneous and nested ArrayLists, so we started building a Java datatype to correspond to Scheme lists. That took about 90 lines of Java code, not counting comments, blank lines, and test cases. Except that the constructor wasn't very convenient to use: the students all agreed it really should take in a string of the form "(3 + (4 / 5))" or something like that. At which point the class ended.

These students haven't taken compiler construction. They've never written a lexical scanner, much less a hierarchical parser, so it didn't occur to them that this constructor, which approximates the functionality of Scheme's built-in "read" function, might be non-trivial. I just wrote it myself outside class, trying to keep things short, simple and clean: it took 88 lines for the reader itself, plus 87 for supporting data structures and 171 for test cases. (The reader is complicated enough that I really needed all those test cases, and many of them failed at least once.)

Anyway, we've just added 265 lines to the Java program to duplicate functionality that came for free in Scheme. Now we can get back to the original problem....

This will probably delay the course by a couple of days (especially if I don't give them my reader code), but if it conveys the lesson that sometimes it IS worth learning a new language in order to make the program easier, it'll be worth it.

[Followup Feb. 10:] At the beginning of class today, at least one student was already saying "let's go back to the Scheme version." I didn't; I wanted to use this program to motivate and illustrate a couple of Java programming patterns. So we got this minimal interpreter working (using the reader I had written), but we'll be back to Scheme on Monday.
hudebnik: (Default)
So I follow a link in somebody's LJ post to a Washington Post blog entry. And over on the right side of the page is a panel labeled "Your Friends' Activity", listing Washington Post pages that have been liked, linked to, etc. by a bunch of people I know. How does the Washington Post know this? And which of my various social-network identities is it using to figure out whom I "know"? I mouse-over some of the entries, and they show Facebook URL's. Wait: I don't even have a Facebook account (that I know of)! Oh, I bet [livejournal.com profile] shalmestere didn't log out of her Facebook account the last time she used this computer. Still, a bit scary. I guess this is the "frictionless sharing" thing they were talking about.
hudebnik: (teacher-mode)
I had brutally trimmed my slide presentation down to 76 slides, which I figured I might actually be able to get through in an hour and a half. My talk was scheduled to start at 2:15. The keynote address, however, didn't end until 2:12, and it was in a different building, so we didn't get started until 2:30. Fortunately, there was nobody in the room immediately after me, so I was able to run over a bit. Still didn't get through all the slides, as some things took longer than I expected, but I think we decently covered at least fifty of them.

I had eight participants -- not great, not bad (I once did a similar talk for three, which was demoralizing), and they all seemed to be paying attention and "getting" the important points. And several of them, I think, are seriously considering using this approach in their own classrooms -- or at least taking a longer workshop on it.
hudebnik: (teacher-mode)

I walked into my 9:25 class prepared to talk about various Prolog topics: arithmetic (and the difference between "=" and "is"), modifying the rulebase to remember state information, and recursion. But before I could get started on that, a student needed some help with the Ruby assignment I gave him two weeks ago.

In the 10:50 class, I planned to contrast Java classes and C++ classes, pointing out both the syntactic gotchas and the real semantic differences. Got sidetracked into explaining some Java issues that the students hadn't learned last year (the subtleties of writing a correct "equals()" method, and the difference between overriding and overloading).

The 12:15 class is in Scheme: I was planning to introduce conditionals today, but as usual, nobody had read the assigned reading so we spent the period writing Boolean-valued functions. Some students basically got it, while others are still doing the deer-in-the-headlights, no-idea-where-to-start thing, no matter how many times I have them work through the exact same step-by-step recipe. I've been teaching this course for ten years, and have never had a class this weak: I've already lopped ten chapters off the thirty I was hoping to cover in a semester, and they're not keeping up with even that reduced pace.

The 1:40 class is the two-student tutorial. Nominally about computer graphics, which we're doing in OpenGL and C++, but the two students are working on final projects, one of which is a compiler from Hammer to OpenGL. I had pointed out to the student that if he's parsing configuration files, he should consider using lex and/or yacc, so I was helping him with those languages. He's considering doing the project not in C++/lex/yacc but rather in Java/JavaCC, so he showed me some JavaCC. Meanwhile, the other student took time out from his graphics homework to tell me about the Factor language, a sort of Forth-made-practical that he's researching for a class presentation.

Anyway, I'm outa here, catching a plane tonight to a conference. Which will be mostly in English :-)

Posted via LiveJournal app for iPhone.

hudebnik: (teacher-mode)
First Steve Jobs, co-founder of Apple.
[links omitted; you've all seen them]

A week later, Dennis Ritchie, co-inventor of C and Unix (and therefore, indirectly, C++, Java, C#, MSDOS, Windows, Linux, MacOS, etc.)

And yesterday, John McCarthy, inventor of Lisp, automatic garbage collection, and the term "artificial intelligence" (and therefore, indirectly, Scheme, Java, Javascript, C#, Python, Ruby, Google, etc.) See
Wired, CNet, the Register, Quarter to Three.
hudebnik: (teacher-mode)
So according to this article, Google+ really is intended to collect information from EVERYTHING Google-related that you do (which may include a lot of things that aren't _obviously_ Google-related, like YouTube), aggregate it under your single identity, and sell it to advertisers. More or less like Facebook's new "frictionless sharing", in which every Web page you visit, every song you download, every article you read on-line, even in places that have nothing to do with Facebook, can appear in your Timeline for the world (or at least your friends) to read.

The idea of getting people to pay for something they want, not with money but with their attention or personal information, is not new: that's how the radio and TV industries have been funded in the U.S. for decades. But in radio and TV there's an alternative: PUBLIC radio and TV, which are funded in part by government and wealthy philanthropists, but mostly by listeners and viewers themselves, who "cut out the middleman" by paying for their entertainment directly with dollars.

The equivalent in social networking is called a "paid account". I pay the company an annual fee, and in exchange they let me name myself whatever I wish (subject to uniqueness and offensiveness rules), they don't blitz me with advertising, they don't sell my personal data to third parties, etc. LiveJournal has paid accounts; as far as I know Facebook, Google, and LinkedIn don't. And they might be able to rescue a good deal of public goodwill by offering that as an alternative.

The downside, of course, is that it creates another digital divide: privacy for those who can afford it. This didn't happen with public broadcasting because receiving radio and TV signals is a "public good", available to everybody whether they've paid or not. The problem with public goods, as always, is the incentive to "cheat": if you're going to get it whether you pay for it or not, why would any sensible person pay for it? Public broadcasting usually muddles along because there are enough philanthropists and enough people who believe as a moral position that they SHOULD pay their share of something they find valuable... but it seldom thrives.

Discuss.
hudebnik: (teacher-mode)
I'm teaching a Survey of Programming Languages course in the fall. The goals of the course are to teach students how to learn a language, and to introduce students to ideas and techniques they didn't see in their first-year Java courses; if they happen to learn a language that gets them a job, that's a bonus. They're familiar with (if not necessarily good at) class-based OOP and imperative programming; they haven't seen higher-order functions, closures, continuations, comprehensions, macros, or declarative programming in general. Most of them haven't seen any kind of parallel or multithreaded programming, nor network programming.

Traditionally, this course has been about 50% C++, 25% Scheme, and 25% Prolog, but the C++ content has been moved to another course. After polling the preregistered students by e-mail, I've decided to fill the gap with some reasonably-modern scripting language. Leading candidates so far are PHP, Python, Ruby, Lua, Erlang, and Scala.

I can make an unbiased choice among these because I don't really know any of them (although I've written some PHP-based server-side web scripts). So I'll be learning them just ahead of the students :-)

Any advice?

Profile

hudebnik: (Default)
hudebnik

July 2025

S M T W T F S
   12345
6789101112
13141516171819
20212223242526
2728293031  

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 6th, 2025 12:35 pm
Powered by Dreamwidth Studios