Sunday, January 23, 2011

Wireless internet

After a bit of thought, I committed to wireless internet with Clearwire. I'm pleased with the result. I have a faster internet connection and with no fuss!

Clearwire uses a network of transmitters throughout the area. Instead of running a wire to your home and supplying you with a "modem", Clearwire broadcasts the signal and supplies you with a "modem". (The modems are really routers.) The wireless router plugs in to your home network (or your sole PC) and you can start using it without any configuration. For those who are network admins, you *can* program the router for a specific subnet, for serving DHCP, and for port forwarding.

I still have the DSL internet service. I may keep it as a backup service, or I may keep it for the one client that insists on "no wireless".

Thursday, January 20, 2011

Ruby at the Hive

I'm working at the Baltimore Beehive tonight. This was a special night-hours session, with a bunch of people attending. The Beehive is a co-working facility, with tables, chairs, power, monitors, and network access (wi-fi and wired). And tonight they have chill/ambient music, which supports programming and design.

Most folks here (all but one) are using Apple computers. (And I am not the one! I have my old Apple MacBook.)

I'm working on the virtual microcomputer project from a while back. I call it "virtua". It's in Ruby, and it is bigger than I would like it to be. I have processors for the 8080, Z-80, 6502, 6800, and a phone one that I call a KA68. Each processor needs a definition, an assembler, and an absolute loader. And each of those needs a set of tests. It's more than I want, and I think that I can re-organize things to simplify this arrangement.

The experience of working at the Beehive is a good one. There are fewer distractions, and the chairs are better for long programming sessions.

Saturday, January 15, 2011

PCs and networks

I attempted to install Linux on the old IBM A20p Thinkpad today. Several times. I tried Ubuntu, Kubuntu, and SuSE. Each of them failed. During one re-start, the PC displayed the message "Extended ROM failure" with some additional diagnostics. This is bad. The extended ROM is a ROM BIOS thing, not a Linux thing or a driver thing. I'm writing the A20p off as unusable. (I'm sorry to see it go. It had a nice keyboard and a fabulous screen. Today's laptops all have the wide -- or short-height -- screens, and the older, taller displays are better for programming.)

I also visited the local store -- CyberGuys -- and checked out replacement laptops. They have a few, but all in the short-height flavor.

While there, I looked into the Clear Wireless ISP. I have been considering them as a replacement for Verizon DSL, and they seem reasonable. They offer faster speed (4-5 Mbps) at a decent price ($45/month). I checked the configuration settings for the router and it will work with my home network.

So if I start Clear, how long do I keep Verizon DSL? Should I keep it as a backup? Or for work in the office? (The office wants no wireless connection.) A little more thought is needed.

Thursday, January 13, 2011

Refresh meeting

I attended the Baltimore Refresh meeting this evening. This was a group of smart people, in a unique building, with an interesting topic.

The smart people were the Refresh Meetup group. They are a diverse set of folks: different ages, skill levels, and areas of interest. Some are web developers, others designers, and some teachers.

The unique building was the MICA main building, an old building from Baltimore's "Medieval period" when buildings were designed to look like old castles. Its also convenient, being close to Penn Station to allow me to attend right after work.

The topic was "web accessibility" -- making web sites that can be accessed by people with disabilities. The speaker was blind and used a laptop PC running Windows and JAWS to demonstrate well-designed and poorly designed web sites.

A better recursive mood

Today I thought about my palindrome detection function, and revised it.

func bool IsPalindrome(s)

return true if s.length < 2

return false if s[0] != s[-1]

return IsPalindrome(s.substring(1, s.length - 1))

end

This version separates the "no brainer" conditions from the recursive call. It also uses tail recursion.

Wednesday, January 12, 2011

Thinking in a recursive mood

A colleague issued me a lunch-time challenge today: Write a program to detect palindromes. After a few minutes of thought, I wrote a small program that used a single function to detect palindromes. It is a very functional-programming design, looking like this:

func bool IsPalindrome(s)

return true if (s.length < 2)

return IsPalindrome(s.substring(1, s.length - 1) if s[0] == s[-1]

return false

end

No looping! All objects are immutable!

What surprised me is that I thought of this solution quickly, and without thinking specifically about functional programming. It came to me, rather than me sitting down and deliberately looking for a function-programming solution.

Sunday, January 9, 2011

Beehive for co-working

The Baltimore Beehive (http://beehivebaltimore.org/) is considering night-owl hours. This solves a number of problems. I plan on attending.

In other news, I attempted to set up NFS on //ophelia, a Dell GX280 running SuSE Linux 11.0. I'm almost there -- I have the NFS daemons installed and configured, and other systems can see it, but they cannot write to the directory.

Saturday, January 8, 2011

Because learning never stops

I'm planning to attend four conferences this year: three for software and one for science fiction.

The software conferences are: OSCON, Open Source Bridge, and the Central PA Open Source conference. The science fiction con is BaltiCon, and it is more of a writer's convention than science fiction convention.

I've looked at the costs, and I think that I can swing all of these. Of course, I plan to use my tricks for minimizing the cost of conferences. Those tricks are:

- Plan ahead
- Register early (and get reduced, early-bird rates)
- Use 'alumni' discounts, if available (O'Reilly conferences usually offer them)
- Book travel early (and get reduced fares)
- Use public transit (to avoid car rental and parking fees)

OSCON is in July, OSB is in June, CPOSC is in October, and BaltiCon is at the end of May.

Why attend conferences? Three reasons:

- Learn new things (or at least learn that there are new things)
- Get away from the daily routine
- Meet smart, interesting people

Learning never stops. We can always learn, always do something new.

Tuesday, January 4, 2011

.NET meeting

I attended the CMAP meeting tonight. The presentation was a group of speakers talking about tips for .NET development. The major topics were jQuery, an Extension loader for Visual Studio, and Silverlight. More interesting were the side conversations with people. One convo was about the format of XLS and XLSX files!

Monday, January 3, 2011

Fun with network shares

This past week-end I had quite the fun with network shares. I configured several Linux systems to auto-mount an NFS shared directory on another PC. I configured Ubuntu Linux, Kubuntu Linux, and Xubuntu Linux. On each system, I made a mistake, and had to check my work. What was nice was that I made different mistakes on the different systems. We learn from our mistakes, so I learned a lot!

And now all three systems are working with the shared directory.

Sunday, January 2, 2011

A little bit of fun

For fun, I wrote a little class in C# to handle arithmetic with significant figures. This is one of my goals for the new year. (I'm already getting one of them done! Wow, I am productive!)

I used Visual Studio Express for C#, which is simpler than the full Visual Studio package yet powerful enough to handle this task. The Express edition works almost identically to the Professional edition, so I was familiar with the environment.

The solution consists of a small class to handle the arithmetic and a small program to invoke the class. I don't have any test cases; I want to create some as I am uncomfortable working without them.

But the class does what it is supposed to do. The result of 1000 (1 sig-fig) plus 20 is 1000, not 1020 as one would expect. The answer should be 1000 since you must keep the number of significant figures at 1 and not expand it. Which means that 1000 plus 200 is also 1000, and 1000 + 200 + 200 + 200 + 200 + 200 is still 1000 although 200 + 200 + 200 + 200 + 200 + 1000 results in 2000, since the '200' amounts add up to 1000 and then the second 1000 yields 2000.

Leaving the oddities of sig-fig math, and coming back to programming, it was a fun project. Now perhaps I will port the solution to a few other languages.

Saturday, January 1, 2011

Looking forward

As a contractor, I must serve two masters: the client of today and the client of tomorrow. I recognize that there are no guarantees for the length of any contract, and I must be prepared for a new client. That preparation includes keeping abreast of current technologies. (It also includes connections and business relationships, but that is for another time.)

The turn of the year is a good reminder to look ahead and identify technologies and skills to learn. Here's my list for 2011:

- Functional programming languages
- Dynamic programming languages
- Virtualization
- Programming for Mac OSX
- Conferences
- Cloud computing
- Fun projects that aren't necessarily client-based

First, programming languages. I'm convinced that functional programming will be the new big thing, replacing object-oriented programming. I've already started by using Haskell on my home PC. I also have a few old projects with Ruby, and I want to re-start them.

Virtualization has been a challenge for me, mostly due to hardware. My PCs are not-quite-enough to support virtualized PCs. In addition, the three virtualization engines that I attempted in the past (that was, um, two years ago) were not quite willing to work for me. Two years and several Linux upgrades later, things may be different.

I've attended conferences in the past, and I expect to attend them this year. I miss the "Software Development" conferences run by Miller-Freeman; they covered different technologies and vendors without a specific agenda. In their place, I find the open source cons educational and informative. I'm looking at OSCON, Open Source Bridge, and the Central PA Open Source Conference for this year.

Cloud computing is the up-and-coming thing, and I would like to examine cloud-based processing. Perhaps with Google's App Engine, or maybe Salesforce.com.

For the fun projects, I'm looking at a software and hardware. For the software, I'm thinking of a class to perform arithmetic operations that respect significant figures. The math for "sig figs" is almost identical to "infinite precision" math, but the rounding is different. I may create something in C++ and then port it to Java, C#, Python, or Ruby. (Or perhaps several!)

The hardware project will be an HP scanner and some OCR software. I'd like to scan some pages from old programming texts and try out the programs.

All in all, this could be a very educational year.