Category Archives: computers

Comfortable Reading With Aozora Bunko

I’ve started a guide to reading software (and browser recommendations) for reading texts from the volunteer-led collection of Japanese e-texts, Aozora Bunko 青空文庫.

Aozora is a wonderful resource, but the problem for anyone who’s read much Japanese fiction is that the reading orientation – and correct display of furigana (ruby) – leaves a lot to be desired. Reading in the browser limits the reader to long-lined left-to-right orientation, when in paperback we’d all be reading vertical, short-line, right-to-left (and probably in bunkobon 文庫本 format!). While getting furigana to show up properly in the browser helps a lot, we still need software to reorient and resize the text – not to mention allow us to read texts on devices other than our computers.

My guide will always be a work in process, so please do offer links to other software or tools that you know about.

Please check out my guide to browsers, ruby, PC/Mac and mobile software:

A Reader’s Guide to Aozora Bunko / 青空文庫読者へのガイド

software installs that make me smile

Here’s two today that cheered me up. I’m installing a lot of software for workshops that I’m going to in the next couple of weeks (causing a minor panic attack over my laptop possibly not running any of it – turns out to be false attack). I also installed a great little application to help me clean out my hard drive. Face it, 40 GB seemed like a generous amount in 2005 but somehow it ran out fast.

The first is from a visualization package that I’m using this weekend. I love it because – well, you can’t go wrong no matter what system you have! They accommodate just about everyone.

Screenshot of an installation menu.

Second, there is the truly awesome license agreement for OmniDiskSweeper, which I also really recommend. It discovered that in my Volumes directory there were 3GB of total nonsense left behind by one of my external hard drives. I haven’t used that one in a year – so that’s how long this has been clogging up my computer! That explains a lot. I know 40GB isn’t much space, but given that I don’t store much of anything on this laptop except for text documents and applications (my music and photos are all on other drives), it was a little suspicious that I couldn’t delete enough things to get even more than 2GB free. Now I have 8GB, thanks to Omni. Now check out their call for feedback on the license agreement:

OmniDiskSweeper License Agreement

my poor laptop, cont’d.

I’m being dragged kicking and screaming into obsolescence, despite having perfectly good hardware and a brand new battery.

This time, it’s not being able to upgrade to Java 1.6 without installing Yellow Dog Linux, following instructions for putting IBM’s PowerPC release of 1.6 on it, and hoping for the best. Ordinarily, I would do just that, but I didn’t know I needed Java 6 for anything until, well, yesterday.

It’s downright embarrassing. I have to borrow a laptop from a kind workshop organizer on Saturday at DH2011 because one of the visualization tools we’re running is a Java app that needs, yes, 1.6.

I’m being pressured toward a newer laptop more and more, apropos of my recent two posts which were more my complaining about something that wouldn’t necessarily force me to upgrade to something less than 5 years old. How frustrating!

(And I never thought I’d regret not having brought my Linux netbook along with me this summer, thinking there’s no way I could need a desktop and two laptops, which is ridiculous – but there is probably a JDK 1.6 sitting on that Ubuntu install. But there are 12 hours between me and the netbook until August. Too bad!)

A random positive note to end this series of posts about my ridiculous computing situation. When I was doing research to find Java 6 for PowerPC, I came across a cottage industry of people helping others install it (and Linux) on their – get this – 64-bit PPC Playstation3! It warms the heart to know that there’s still a phenomenal console out there (and really, it is the best of the three) that uses PPC architecture. Hooray for Sony (and for IBM, which is using 64-bit PPC architecture in their workstations and releasing the JDK for the rest of us).

mac woe update: adobe drops flash for PPC

Sigh.

This article talks about much of my last post, with the focus not on Google Apps but on Adobe Flash: “Adobe Flash Has Left PowerPC Macs Behind

The reason I’m linking to this piece is that it makes an excellent point about “obsolete” PowerPC Macs (and even Intel Macs) not being so obsolete relative to their PC counterparts, but made so by Apple’s hardware decisions. Given that I haven’t owned a PC for at least 9 years, I had nothing to compare to, but this author points out that Apple dropping support for its older hardware sends perfectly good Macs to an early grave despite having the same or even better performance for still-supported older PCs.

On the Power Mac G5 and PowerBook G4:

While these highly capable PowerPC machines meet or exceed the Windows-based minimum hardware specifications required for the latest release of Flash Player, it matters not. Progress in the world of Mac OS X tends to make Apple hardware obsolete much faster than comparable Windows computers released in the same time frame.”

“I’m simply dumbfounded that fully capable PowerPC Macs continue to lose support and functionality with so many things that similarly aged (and often far older) Intel machines still receive” – as am I! Because I did not know that older Intel machines were supported for so long. Then again, this author makes the excellent point that support is being dropped for OS 10.4 but still retained for Windows XP.

It also makes me remember my general policy of “if it’s old and getting too slow, put Linux on it” because a Linux install will usually make most of the problems of an older Windows box magically go away. Indeed, Linux on older hardware is a good thing: but where is the support for older PowerPC platforms? In comparison, it isn’t really there.

It’s really too bad to see the end of this era. First the Dreamcast (an excellent RISC console that also runs Linux), now the Mac PPC line. It’s not that Intel/AMD architecture is superior: it’s just so common that it’s simpler to drop support for anything else. Unless there is another explanation?

google dropping app support; molly has PPC angst

A decision I made over five years ago has ended up making me quite unlucky these days.

iBook G4 photo

I intentionally bought a PowerPC Mac, the iBook G4, when my iBook G3 succumbed to the infamous logic board defect a year or so after Apple stopped fixing it for free. My first winter semester at Michigan had just started, so I was stuck: I needed the data from my G3’s hard drive even more than I needed a computer, and I knew that Apple would soon drop PowerPC in favor of Intel. Like the idealist I can be, I went for the PowerPC instead of waiting a while for the new hardware, because after taking some computer architecture courses and having done a little assembly programming, I had come to the conclusion that RISC architecture is superior to CISC – meaning that I favored PowerPC over Intel.

Little did I know how ghettoized the PowerPC is out there in the real world. Naive, I had no idea that most operating systems and software are not ported to PowerPC – not even Linux.** In the first few years this wasn’t a problem and wasn’t anything I noticed beyond having a matte screen instead of a shiny one. I still love my G4, with its plucky reliability and long battery life.

Starting about last year, however, more and more software makers dropped PowerPC completely, as OS X only went up to version 10.4.x on PowerPC and many required 10.5, which is Intel-only. Even the software that is still released for 10.4 stopped supporting my laptop, including OpenOffice.***

I resigned myself to having a laptop that is circa 2009 in terms of what it runs. I am okay with running a Japanese version of OpenOffice 3 that will open .docx files for me, and running Adobe CS3 and Word 2004. Honestly, I don’t need the newer versions of these programs for a base model iBook that only has 40GB of hard drive space. What I need is the reliability, toughness, and 5 hour battery life (with the ability to buy new batteries) that my 5 year old friend provides. I have a desktop for everything else!

I have a sinking feeling about it now, though. We have a problem. Google is going to gradually drop support for older browsers, which includes pretty much every browser that I can download for my PPC Mac. While I applaud their strict use of HTML5 (I use it too!) and refusal to cater to legacy browsers that don’t understand it, I realize that I am basically screwed. And how much I rely on Google, frankly.

Here are things I would like to use a laptop for: Web browsing, Gmail, Google Docs, a little word processing, PDF reading and editing, writing, and possibly a little Photoshop. And some Twitter. If I suddenly can’t access or use Gmail or Google Docs, that is a huge blow to using my laptop to be productive – it’s the point of carrying something around that will let me access my files remotely to begin with!

“Get a MacBook,” a voice pleads in my head. They are so shiny, fast, small, and nice. They’re still only 13″ but have a wide screen that makes it seem so much bigger than the 12″ iBook. They have long battery life. I’m kind of in love with them despite myself. Admittedly, I resent the non-removable battery that will allegedly last for the average life of a laptop. But if I wasn’t suddenly losing all software support for my peculiar architecture, I wouldn’t even consider a new laptop.

I just bought the laptop a new battery. It has 5 hours of battery life, does everything I need it to, and is very hardy. It’s relatively small, light, and convenient. It has some very expensive software on it. Most importantly, it simply still works fine and has nothing wrong with it. I abhor wasting things. I am fond of this laptop. If it weren’t for the uncertain nature of old hard drives and impossibility of replacing that without breaking the case, I’d argue that it probably has many years of good life left in it. It’s the Volvo of laptops.

So even if I bought a new laptop (which I can’t exactly afford now), I’d want to keep using the iBook for as long as I can. Why waste it? But why have two laptops, one running Linux?^ (Seriously, I already have a netbook running Linux.) They’re the same size. It makes no sense to keep the iBook around for anything other than preserving my installation of many pieces of CS3. And because I heart the damn thing.

I’m at a crossroads: my PPC laptop is soon not going to just be dated, but unsupported. I don’t want to waste a perfectly wonderful laptop that has seen me through an entire PhD program. I have good software on it. Why buy a laptop the exact same size and type? Because it will save me from Google no longer supporting my laptop, and Web browsers that are actually implementing new W3C standards from not running on it.

Lesson learned: Even though I want superior architecture and don’t jump at trends (like oh, x86?) that I think are not worth it, I have to just go with the crowd, because sooner or later it will leave me behind. I am still not getting an iPad though. How long do you think I can scorn touch screens before I become officially old?

* (Yes, that is how old the G3 was. About three and a half years. Not bad for a laptop with a manufacturing defect that I was very hard on.)
** There are a number of PPC Linux distributions, but specific software may or may not be ported. Usually not.
*** Weirdly, there are a few local language versions of OpenOffice that do still support PowerPC architecture. Since one of those is the Japanese-language version, I now happily use a Japanese word processor and try to keep my language skills current, at least in terms of menu choices.
^ If I could get it to run for the newest AmigaOS I would run to it without hesitation, but I have only gotten reports of it running on a Mac Mini. Don’t think I haven’t considered getting a Mac Mini solely for this purpose. The lack of a monitor is mostly what’s stopping me.

and thinking about object-oriented programming

I may be enamored with functional programming right now, but I do remember that the first languages I really learned were C and C++. That ++ is one big difference. I was fortunate enough to be learning them at exactly the same time, and so “object oriented programming” meant a lot more to me than a buzzword.

I’ll share another link tonight, and this one is more of a read, but it’s an opportunity to ask something you don’t every day: how does object oriented programming work, and how is it implemented? For example, in ANSI-C?

Object-Oriented Programming with ANSI-C (Axel-Tobias Schreiner, English translation, PDF)

thinking in functional programming

My internship this summer gives me the opportunity to get acquainted with and even use some XSLT – misleadingly the “stylesheets” of XML.

XSLT has been hard to wrap my head around, not least because “stylesheets” and “used to format XML” make me think of CSS, not – well, functional programming. It’s been a good many years since I got to play around in Lisp, let alone make something with it, and this has brought me back to those two great semesters of AI electives that introduced me to this way of thinking. It took a few weeks to get into it, but once I “got” how Lisp worked at a more intuitive level, I remember my impression: I am thinking in a different way. It wasn’t just about programming, it was about problem solving, and about a way of looking at the world.

Diving into a functional programming language again has got me thinking about that experience. Learning how XSLT works has of course made me remember a time when Lisp made sense, because XSLT is functional programming. If I had been introduced to it in that way at the outset, it would have clicked much sooner. Now it makes me yearn a little for the time when I didn’t just know that I was working in a different way, but when that way came to make sense and I was able to start going somewhere with it.

But when I learned Lisp in the context of an AI (artificial intelligence) class, I didn’t learn it as “functional programming” then either. I wasn’t introduced to it in the context of lambda calculus, which I came to find much later – last semester – in a natural language processing course. I knew it was different, but I didn’t know how on a bigger picture level.

Now that I have that bigger picture, I am appreciating this way of thinking more and more.

Why is functional programming “hard”? Why is it something that I had to get used to for a time before it clicked? I have an answer this time – because I have been doing imperative programming for so long, because that’s how I was introduced to programming (I didn’t attend MIT after all), and because that has become the natural and intuitive way for me to solve a problem. But imperative programming isn’t a more natural way of thinking about things. It’s a different way. Obviously, these two ways of approaching problems have different applications, but the elegant and concise ways of approaching problems that functional programming offers are perhaps even more appealing to me now.

Because I am not an expert, I write this not to make a profound statement about how to approach problem solving, but to share a great article about where functional programming came from, why it’s so appealing, and the things it makes possible. I give you,

“Functional Programming For the Rest of Us.”

Take the 10 minutes to read this and enjoy!

on coding

I can’t count the number of times I’ve heard these in the past year:

“I want help learning how to code.”
“Will I have to learn to code?”
“Do digital humanities scholars need to know how to code?”
“How much do I need to know about coding?”

In every case, I’m left scratching my head: how can I begin to answer this question? What is “coding”?

The Problem

What I want to ask in these cases is simpler than you might think. I want to ask what the problem is. What is the solution that you need? Do you need to display data, to run numbers through formulas, to create a nice desktop software application with a GUI? What is the purpose? We can’t begin to answer these questions without the goal concretely in mind.

Coding

And here is the one word that has come to drive me up the wall. Coding. It’s everything and nothing. I’ve heard it used to refer to everything from HTML markup to large and complex software development projects. Coding is agnostic. It doesn’t specify what’s going on. “Learning to code” could be anywhere from “I want to learn the software development process” to learning the basics of a particular language (enough to get “Hello world?”), learning a language in depth, learning scripting languages for using databases on your Web site, or marking up text using HTML and creating CSS stylesheets to go along with them. But without saying any of these, “learning to code” has absolutely no meaning. There really is no such thing. Learning the fundamentals of good programming, possibly, but a tutorial of how to make a for loop Python is no such thing (and when I dissect the coding question, this is oddly what it ends up being much of the time).

A Little Rephrasing

Having discussed the problem with “coding,” let’s move foward and try to produce a real answer to those questions at the top.

Instead of thinking of this as a kind of mysterious and wide-ranging skill to pick up, that applies to creating things with the computer no matter what kind, I will rephrase it as this: creation. Problem solving through creating something to help you arrive at the solution. We build and create all kinds of things without a computer, without giving it any instructions. We make tools and write and draw. We give instructions to our subordinates.

Putting the two big pieces together: What is your problem, what is the goal, and what do you need to learn in order to create something that will solve the problem? Leave programming language and hardware requirements out of it. What do you need to get done?

Now this is the tough part, in my experience. You have a problem and a goal. (For example, “I have all this data, and I want to discover patterns in it. I want that to be displayed as a map.”) But you need the concrete steps in it. What exactly are we working with? What do we want to do with it? How on earth are we going to make that happen? Lay it out: step 1, step 2, and so on. How are they connected to each other? Annoyed as I was at having to diagram program flow charts when I was in college, I have really appreciated their value later on. Make a map of where you have to go in your solution, including all of the stops, in order to reach your goal.

Going Forward

From there, I don’t want to say that the “coding” that I think people are referring to is trivial per se, but the really difficult part has already been done once the problem is thought out and possible solutions mapped. Learning to implement the solution is orders of magnitude easier, in so many cases, than coming up with robust, quality solutions and the concrete steps needed to carry them out.

My advice to all of those with “coding” questions is this: to follow the above steps, and then go out and get a human or a book that is specialized in what you’d use to solve the problem. Google is your friend, if you don’t have an all-knowing expert at your disposal (and who does?). You are probably not the first person who has had to implement your solution concretely, using a specific technology. They may not have done it in your field, but think of the problem itself and not whether it’s processing data sets from history or from biology. Get a sense of how people approached it: visualization software? A specific programming language? None of the above?

Then go get the book or that human, and put in the time. Programming – not to mention Web design in these days of CSS (yes, I started in 1996, and never quite internalized anything after table-based layout) – has a learning curve. You are not the first one to encounter it, but you can overcome it too. Go through the examples and type them in and run them. Play around with them and modify them, then try to get why you broke it and how to fix it. Even better are books or very thorough tutorials on the Web (so few and far between) that take you through a project just like the one you’re working on.

How Much?

So, do you need to know how to code? Who knows. You need to be able to do – or hire someone to do – whatever the solution to your problem requires. Unless you are looking at a career in software development, no one is expecting you to become a programmer. Do you need help “learning how to code?” I hereby order you to never use that phrase again. You need help in figuring out which technology works for your problem and some advice about where to go to learn it. Now go, and enjoy this excuse for getting to learn something new and making something exciting!

Coda

Obviously, I have some personal bias here. I have a programming background, have done quite a bit of Web design and implementation (including sites that get their information from databases), and have used about 10 programming languages over the years. I’m not an expert in any of them. And I don’t always know what technology is going to help me solve my problem. What I learned, really, is that I’m going to have more or less of a learning curve, I’m going to do a lot of research figuring out what might help me the most, and that I might end up on a forum or emailing or calling someone with what I think is an embarrassingly dumb question. It happens. In fact, I just called up my brother and asked a really stupid question 2 weeks ago, but if I didn’t, it would have taken me weeks to figure out my small mistake that was killing everything. If it’s of any comfort, the first learning curve is going to be immensely harder than any of the ones that come after. Once you first “get it” from making a project work, you are going to have problem-solving and logic skills that will vastly improve your life.

So go forth and learn some new technologies! And never use the word “coding” again.

A Creative Endeavor

… or How I Will Drive Myself Slowly Over the Edge

So people talk about there being some kind of nuanced difference between nerd, geek, and dork. I’ve been sucked into it myself, sadly, and as a result I get a little defensive when I am called anything other than a nerd. By any criteria, I really am, and was way before it became ironic-cool to wear thick plastic glasses. (Just check out my fourth grade yearbook.)

I think my own personal nuance is the difference between dork (no social skills), geek (geeking out over things, becoming obsessed with things), and nerd (likes learning for its own sake and often enjoys academics as a hobby, leading to social ostracism and a joy of doing homework). Well, of course all of these things overlap in any person, but the traits of the last manifest quite clearly in me, for better or worse.

Case in point?

This summer I’m working at an internship in Lincoln, Nebraska, and had to pack one car and go (with all of my cat’s things too, so I lost some space). No bringing my ever-expanding book collection with me. I got a Kindle to read Gutenberg.org books on, but still, it would be nice to have some kind of summer project that isn’t a work assignment. A dual degree will do that to you: any kind of scheduled free time becomes exciting and a chance to either take on something with a limited deadline and feel satisfied, or lay around and do a lot of nothing. I try to do both.

So here is my project. I picked up a copy of Seven Languages in Seven Weeks and decided to work through it in the evenings after work. Yes. I am giving myself seven weeks of programming assignments. I’m going to be learning entirely new languages, some I have heard of and some I haven’t. I get a little cheating on one because I am semi-comfortable in Lisp. Still. I will learn a little of each: Ruby, Io, Prolog, Scala, Erlang, Haskell, and Clojure. I am excited about the prospect and not only do I want to learn because it’s fun and programming is fun for the brain (when it’s not hurting your brain, and when you’re not banging your head on the desk) – but also because I think it will be good for my creativity.

After all, creativity is not limited to one domain. Practicing writing helps me think more freely about photography, keeping a journal helps every aspect of my life, keeping daily notes about my dissertation inspires me to reexamine my artistic life (it helps that I write about authors and practices of writing). And there is something about exercising the brain with logic and problem-solving that is refreshing and at least interesting, and often rewarding, after you (I) spend almost all of my work life reading, and writing about stuff I read. Making art is one kind of problem-solving; programming is another.

Both are all about creativity and stretching the brain a little bit further.

But yes, it is seven weeks of daily programming in a set of languages I haven’t used before. I just taught myself Java in three days and then wrote a non-trivial application in it for a class project, and I’m somewhat exhausted. For my internship, my life is going to be all about getting better with XML and TEI, and then learning how to fit XSLT and XPath into the picture, while working with a servlet, which I have never even had to consider before. Good god, I am all about the computer this summer. It’s great.

I’ll have to stop the extracurricular programming if I feel a nervous breakdown coming on. Until then, onward to Prolog!