Press "Enter" to skip to content

Posts tagged as “Development”

Cool Technical Talks

centaur 1
With the explosion of online video we now have a fountain of new information: free technical talk vidoes. I've found a few of these so far and had others recommended to me:



I've had a chance to see or attend a fair number of the first talks, but the others are new to me as of today. Anyone else have any suggestions? Add to the comments (or mail me and I'll post them here).

-the Centaur

The Wiki Is Dead Again…

centaur 0
... and I know why, though I haven't been able to fix it yet. Stay tuned, or keep checking the wiki for details...

When To Wiki Rather Than Blog

centaur 0
Recently at my writing group someone mentioned they were having a lot of difficulty translating their story notes into an outline and asked for help. As we started talking to him, we found out that he'd bought a beautiful, expensive notebook into which he planned to write his thoughts, as soon as his thoughts were together. The advice of the group coordinator could be summed up as: "Get rid of your pretty notebook that you're afraid to write in, because it's getting in the way. Buy a cheap yellow legal pad and WRITE."

SO, what I've found? As cheap and disposable as blog entries are, they're still aimed towards recording complete thoughts. If you can't finish a thought, or it needs to be refined, blogging (for me) gets in the way, because my thoughts drift backward into the distance and I never finish them.

THAT is why I've reinitialized the wiki over at dresan.net. A wiki's pages are automagically editable and suitable for recording incomplete, incoherent, half-completed thoughts that can be edited, updated, or reorganized as need be. My blog was becoming my pristine notebook; so time to whip out something sloppy that I can just write on, regardless of how well formed my thoughts are.

So, for example, when I'm trying to get SLIME working for XEmacs on Windows with CLISP running on Cygwin, and I haven't quite figured it out yet, I can just create a wiki entry on dresan.net about Slime which captures my current thoughts, crossreferenced with XEmacs and CLISP and Cygwin which I can edit and refine to my heart's content.

If there's an easy way to do that on a traditional blog, I don't know it yet. But I can make a wiki proxy a blog: see the updates page of dresan.net for a good example.

Not that I want to give up blogging in favor of futzing around on a wiki; there's something deeply satisfying about this blog and its interface. But I do miss my wiki features on the blog, and I hope that one day either Blogger adapts those features or else that I find a wiki/blog/bliki that does the job that I can port all my old data from.

Blog/Wiki developers, take note.
-the Centaur

dresan.net

centaur 0
Over on our sister site www.dresan.net, I've added a wiki, a blog, and some forums. For an explanation of why, check out Why Dresan.Net? over on the dresan.net blog.

The short story is that the Library of Dresan will remain my primary blog, but I've created dresan.net as a playground to experiment with new technologies. It's still a little rough, but I hope to beat it into shape over the next few weeks.

So enjoy!
-the Centaur

Scrolling through RSS

centaur 2
Once again, I am behind the technology curve. Google Reader provides a convenient interface to a whole bunch of RSS feeds with a much more convenient interface than my other RSS readers - plus it has a neat "scrolling down counts a message as read unless you tell me otherwise" feature which makes it easy to keep up with new articles just by scrolling through whatever's new every time you look at it. Like Google Bookmarks (available if you log in) and Google Notebook (available through the Google Labs page) all these "always-on" services are changing my view of the Web.

Except of course I still can't get internet at home, dag nab it, since I live on the surface of Mars, which does put a kink in the whole thing (hence my nickname "Internet Cafe Boy"). Oh well. I pray that state of affairs won't last forever.

-Anthony

Pacman … in Excel???

centaur 0
Mother of Mercy. I was digging through my old posts and found this unpublished, unfinished draft started on October 4, 2006 titled "pacman???". Apparently I stumbled across version of Pacman written in Excel and was so shocked that I could only write the outline of the post in a barely organized list of URLs.

Reading through those ... apparently my initial horror led me to look into a whole bunch of other things, including the Javascript Arcade with versions of classic games written in Javascript. Back then, people were looking at using a variety of DHTML tricks to do graphics in Javascript. In the days of Chrome Experiments, a few short years later, this no longer seems insane, though now you're more likely to want to do this in Flash ... and sure enough someone has done so.

Reading through the tiny notes and trying to reconstruct my thought process ... apparently the idea of using Excel to implement Pac Man, and the challenges of drawing lines in the DOM, took me back to the ideas of in Fundamentals of Interactive Computer Graphics, Jim Foley's text, the first book I learned graphics from. There have been many versions of that book since, but they'll all tell you how to create lines on a grid, whether you're doing it with low-level hardware or with cells in Excel ... shudder.

Apparently creating graphics on top of a windowing system and browser reminded me of the idea of virtual machines, a fundamental idea in computer science in which one computer system can be used as the "physical hardware" to create another computer system on top of it. Once you create one virtual machine, it can then be used to create another ... and another, and another. Another "seminal" book for me, Douglas Hofstadter's Godel Escher Bach, explores the consequences of layers of virtual machines in much creative detail.

So the point being, the more advanced our computers become, the more likely it is that we'll be creating things like Pac Man in Excel.

I don't know whether to weep in joy or fear.

-the Centaur

A little better…

centaur 0
The feed is improving. Corrected ordering, titles, added escaped summaries, fixed date format and got a temp ID up, plus fixed some of my own Python problems. More in a bit...

-the Centaur

I know Atom Fu

centaur 0
Show me.

Seriously, Fanu Fiku now has a nascent Atom feed. The atom.xml feed produced by fiku.py has some validation errors but the feed seems to read fine in my first newsreader tets.

Hopefully before the next issue goes up I'll be able to correct the blog title issue and make the validation problems go away with the help of the Feed Validator and the Atom Standard.

Once I get it running, I'll post a bit more about what's going on under the hood in fiku.py to make this happen.

Till then, fellow fanu, remember to believe...

-the Centaur

Football vs Videogames: A good question

centaur 0
Alright, I'll bite: Why are we upset about videogame violence if regular sports also cause violence? Simply because videogames are new and different? Or, because they are the banner of a new generation, they are "safe" for an older generation of politicians to attack?

Clearly high school sports violence isn't something new, and few people would consider banning it. How do we educate our public and politicians about how to think properly about things that are new and different?

And by "properly" I don't mean "agreeing with me" --- reasonable people can disagree about the possible dangers of things like videogames and still remain reasonable --- instead I mean testing ideas against evidence, putting things in their proper context, and applying values formulated as universals, which means that in general you do NOT toss a call for ban or investigation onto the publicity trail of every pseudosensation that swims down the stream, but take a measured ... dare I say "conservative" ... attiude towards any call for government regulation.

-the Centaur

Wiki Hacked Again

centaur 0
Well, the wiki is down again. Some idiot with a spambot corrupted all the pages - and when I tried to correct them, it appeared like the pages changed back to spam as fast as I corrected them. So it's down. Up again soon, I hope. If only I'd written down all those cool things Bolot showed me ... oh, wait, I did :-)

-Anthony

Memories…

centaur 0
Wow. This set of screenshots on the evolution of Windows from 1.0 to Windows XP really brings back memories. I first started using Windows in college around version 2.0 - I remember seeing Windows 286 in stores but don't recall using it. Windows 3.0 was a big step forward for us early adopters - up until Windows 2000 I always managed to score a prerelease version (though as a point of pride I always went out and bought a real copy as soon as it hit the stores). I held off on Windows XP, though, as long as possible, waiting until I bought a machine with Windows preinstalled.

But, while I relish the memories, I'd never go back (though I may end up going forward to Mac OS X :-):





Here's an early 10th birthday to you, Windows.

-Anthony

Words of Wisdom … Not Just for Software

centaur 0
Erich Gamma, one of the software luminaries behind the Design Patterns book and now part of the Eclipse Project, had the following things to say about software ... that apply to a little more than just software:

Eclipse's Culture of Shipping: "In software, having cool ideas is nice, but shipping them is what counts. For us it only counts if you have shipped the thing. That's really the mindset we have. And given that you focus on shipping, we never want to be in a mode of always being two years away from shipping. You need to have a short-term deliverable. You also plan, decide and act with this mindset."


You know, all artists should probably learn this lesson. It's easy to plan the Great American Novel or the Next Great SF/Fantasy Trilogy, but in the meantime write some damn stories, paint some paintings, write a webcomic, and get your stuff out there.

-the Centaur

Bolot Kerimbaev, Technology Commando

centaur 1


SO many of you (where many is defined as N greater than or equal to one) may remember that the Wiki was down for "security reasons". Well, this wasn't that someone had hacked the site, trashed the data or even just spammed the comments pages: it was, more literally, a security issue with my web hosting provider, which tightened its security provisions on script hosting and killed OddMuse, the wiki engine I was using. Fortunately Bolot Kerimbaev, a friend from Taido class, uses the same wiki engine and the same service provider, and he told me that the use of semicolons rather than ampersands in the URLs was causing the problem. A simple fix, really.

Well, not so simple.

I worked at it for a while, but found that other features were broken on my site as well ... because semicolons were EVERYWHERE in URLs in the OddMuse code. At first I tried changing them individually, then, as the problem got more complex, decided to try to abstract out the separator character into a $SEP variable that I could change and control. That worked well ... for a while ... but eventually the OddMuse instance I was working on became unstable, then stopped working entirely. Because I'd been futzing around with vi on a local directory and uploading the Perl script to my web site rather than using proper source control (for shame!), I couldn't even roll things back successfully without losing all of my changes.

SO I called Bolot for help, and we got together at Atlanta Bread Company at Perimieter Point to take care of the problem. This Atlanta Bread Company (one of their best stores) is right next to a Starbucks Coffee, which kindly provides T-Mobile Wi-Fi. So we logged in and tackled the problem, and after a few minutes showing Bolot what was going wrong, he took over the keyboard to fix it.

And a whole lot more.

First, rather than laboriously editing the files locally and uploading them with FTP, Bolot suggested we use SSH and edit the files in place so we could see the changes immediately. This point is so important I'm going to follow it up with a separate post, but that's another blog for another day. Now, apparently I got through thirteen and a half years of Georgia Tech without using SSH extensively (I almost always relied upon remote X Windows logins prior to my Windows/Cygwin days) so this option never occurred to me. Bolot, however, was able to do it almost instantly:

ssh -l username hostname

Moreover, we found that using the Cygwin instance on my laptop, we could not just SSH in to the site ... but could actually use VIM, the enhanced VI editor. And with a few quick commands, he had syntax highlighting and color schemes working - remotely, via SSH, in the bash window already set up in Cygwin on my machine. Other than the window title and the lack of a toolbar, it looked identical to the gVIM I frequently use on my machine.

vim
   :colors darkblue
   :set nu

(Note tab completion actually works on setting the colors!

After finding and fixing the first and most important of the problems, we then went to test. Bolot immediately became frustrated with my Internet Explorer installation and turned to my copy of Firefox instead, which was hopelessly out of date. Within moments, he showed me why people use Firefox: within moments he was able to painlessly install gesture support, web developer tools, a variety of search tools, flash blocking, ad blocking, and a host of other applications which made the Firefox experience almost palatable, despite the fact that its interface is still slower, clunkier and uglier than IE. Shortly thereafter, Bolot was able to find and eliminate the rest of the problems in OddMuse, realizing that the problem was not semicolons in URLs in general, but the presence of the string ";id" in the URL. By the time he was done, he had not just corrected the problems in OddMuse itself, but also other problems with my installation which were interfering with stylesheets.

SO: an improved browser, web site, method of connecting to the web site, and a whole host of other tools. All delivered straight to my brain in less than an hour.

Lessons learned: Be dogged with your tools. Find out all they have to offer you. Use them as they were best intended. And be dogged about eliminating problems in your way. Make it possible to get feedback on changes instantly, so you make many small changes safely and feel free to experiment. Then, you will be able to work far faster than you ever thought possible.

More thoughts on this later .... but, until then, hats off to you, Bolot Kerimbaev, Technology Commando.

-the Centaur

I am not alone

centaur 0
So at least Slava Pestov sees the rising tide of jargonitis that I do. (Of course, he's writing Factor, his own next-generation Forth (perhaps the only language as terse as APL ... almost), so you'd expect he'd be down on jargonitis).

But the point is, it ain't just me.

Clean up your act, folks. This will come back to bite ya.

-the Centaur

Trying to decipher line noise?

centaur 0
Try the Regex Coach --- this looks like a way cool way to figure out the comic-book cusswords that Perl, Awk and their friends use for regular expression matching (finding strings in longer strings).

I particularly like the tool's ability to translate what a regular expression means into human-readable language:



Check it out!
-the Centaur

Oh, and I just discovered RSS…

centaur 0
... so sue me. Or just subscribe to the Library of Dresan
RSS Feed.
Actually technically it's an Atom feed, but, hey, they're all the same to SharpReader.

Ok, so now I have to upgrade my Python webcomic script to produce an XML site feed, which I suppose means I have to add XML support to Sangreal for when I switch the script over to Sangreal. Rassen frassen ... yes, I *do* plan to join the 21st century, give me a break...

My First APL Program

centaur 0
As a side project right now I'm investigating computer languages --- not just experimenting with Perl vs. Python but trying to expose myself to different families of languages, such as functional, logic, imperative, object oriented, and obfuscated.

Most recently, someone mentioned that array languages are the least
widely known family --- perhaps because the founding language in the group,
APL, was written with a nonstandard character set. Perhaps the most terse
of all programming languages, APL spawned a series of children, like J and K,
which, even though they can be written in a normal alphabet, retain APL's
essential terseness --- or, dare we say, obscurity?

I plan to learn J. However, before I did so, I committed myself to learning
at least a smidgen of the original APL, so I could see how the language was
originally intended to work and look.

Here's my first APL program, designed to produce a Vigenere tableau:



Note the code isn't in the standard ASCII character set, so I had
to represent it as an image file.

The heart of the code is the central box of the next image. This should read as:



disclose (( -1 rotate (indexList (shapeOf Y)))
(outerProduct rotate) (enclose Y))



and executes right to left:



To translate into pseudocode:


// Assign the alphabet to the variable Y
Y = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
// Now perform the following:
(unbox
((outerproduct rotate)
(rotate -1 (enumerate (length y)))
(box y)
)
)
 
// This is the moral equivalent of:
// (1). Treat array Y like a "scalar" variable
boxedY = box(y)
 
// (2) Find the length of Y - in this case,26
lengthOfY = length(y)
 
// (3) Get an array from 1 to the length of Y
// We will use this (1 2 ... 26) later to
// rotate the alphabet to the side
list1toY = enumerate(lengthOfY)
 
// (4) Rotate list by one so that the first
// row is a "no-op" rotation: (26 1 2 ... 25)
// (I should have just have subtracted one
// from each list to get (0 1 .. 25), but
// it's just my first APL program!)
rotateAmounts = rotate(-1, list1toY)
 
// (5) Create a "mapping rotate" function that takes
// a list of integers as its first argument and
// rotates each element of its second argument
// by the supplied integer.
// We had to "box" Y earlier because APL by
// default treat each of its elements as a one-element
// array.
mapRotate = outerproduct(rotate)
 
// Now create 26 copies of Y, each rotated by the amount
// specified in the rotateAmounts variable, and collect
// them all into a list. This is morally equivalent to:
// list(
// rotate(26, boxedY),
// rotate( 1, boxedY),
// ...
// rotate(25, boxedY)
// )
rotatedY = mapRotate(rotateAmounts, boxedY)
 
// Now "unbox" the rotated list, which takes the
// list of lists of rotated Ys and turns them into
// a matrix or grid rotation
return unbox(rotatedY)


The idea in my mind was to take an input array and print
a diagonalized rectangle with it. With the alphabet, this
becomes a Vigenere table --- once the "indecipherable cipher",
now a trivial matter for any modern computer.

With a different string, like "01" or "_[]" (reading the two
brackets as the APL Quad character), and a suitable change
in length of the output, it becomes instead a checkerboard:



Deciphering that is left as an exercise to you, dear fanu.