53
I Use This!
Activity Not Available

News

Analyzed about 1 month ago. based on code collected 3 months ago.
Posted over 16 years ago
I’ve been spending more of my free time recently restoring vintage computer hardware. I am interested in Commodore 8-bit equipment, from the PET/CBM line through to the 64/128 home computers. I think it’s important to preserve computer history to ... [More] remember the machines that got us where we are today. Since much of the hardware I restore is over twenty-five years old, at least half of it is not working when I receive it. I try to repair everything I can when it’s practical. My Flickr photos page has daily progress of my chip-level repairs on this equipment. Recently, I received a Commodore SuperPET computer. This is a remarkable machine that was a collaboration between Commodore and the Computer Systems Group at the University of Waterloo in Ontario, Canada. The SuperPET is a standard Commodore PET 8032 computer with an internal expansion that adds a powerful Motorola 6809 microprocessor, an additional 64K of expansion RAM, a fast 6551-based RS232 serial port, and custom Waterloo software in ROM. The SuperPET can operate in MOS 6502 mode, where it is a Commodore PET 8032 with the extra 64K expansion and 6551 ACIA. Curiously, this 64K expansion memory is not compatible with the 8096. A switch on the side puts the SuperPET into 6809 mode, where it can run a number of disk-based Waterloo programming languages including BASIC, Pascal, APL, Fortan, and COBOL. When in 6809 mode, a menu in ROM prompts the user to select a language which is then loaded from disk. My SuperPET seemed to work when I got it, with the 6502 mode working perfectly and 6809 mode showing the power-on menu. However, after obtaining the disk-based software, none of the Waterloo languages would run after loading. After verifying the disks were good, I suspected the 64K expansion RAM since the rest of the machine seemed to be working. Using technical information from the PET Index on 6502.org, I wrote several memory test programs to exercise the expansion RAM. The expansion RAM is comprised of thirty-two 4116 DRAM chips. A couple of these had become loose from their sockets and my test program found that one of them had failed. I got a replacement from the pick-up counter at Jameco and installed it. Now, my SuperPET passes my expansion memory test and also boots all of the Waterloo languages. It is now fully functional and I’m exploring the Waterloo software. One of the most interesting features of the Waterloo languages is how files are accessed. Commodore disk drives attached to the SuperPET are accessed with a filename like disk8/1.program-name which selects unit 8, drive 1. The SuperPET was designed to be attached to a mainframe computer, known as the “host”, through its serial port. Accessing a file like host/program-name would load it from the mainframe if it was running the special HOSTCM program from Waterloo. The HOSTCM program was available for VM/CMS and other mainframe operating systems. Beyond that, I’ve not been able to find out much information about it. I would like to figure out the protocol and write a program so that a modern PC could be used as a host computer for the SuperPET. If you have any information on the SuperPET or have Commodore hardware you’d like to donate, please contact me. [Less]
Posted over 16 years ago
Matthew Weier O’Phinney and I gave a tutorial session at ZendCon 2008 this year titled “PHP Developer Best Practices”. The tutorial touched on source control, coding standards, testing, documentation, and more. The slides are now available in PDF ... [More] format. We were located in Hall B of the Santa Clara Convention Center, which is a very large room that’s also used for the keynotes. Andi told us the room was selected based on the number of people who registered for our session. We initially had doubts but the attendance was greater than any previous year and the room worked out quite well. We were thankful that unlike last year, everyone was able to get a seat. Thank you to all who attended. We enjoyed meeting many of you during the breaks and hope that you found our session helpful. [Less]
Posted over 16 years ago
The files below are EPROM images from Bil Herd’s prototype Commodore LCD. kizapr-u102.bin sizapr-u103.bin sept-m-13apr-u104.bin ss-calc-13apr-u105.bin You can also download them as a single archive: commodore-lcd-roms.zip I’ve always been curious ... [More] about this machine so I sent my device programmer to Bil so that he could read the EPROMs. Bil was very kind to do this and we should all thank him for it. This is the first time that these images have been seen in many years. Start your disassemblers! [Less]
Posted over 16 years ago
It’s been a while since David Sklar called out to let a thousand string concatenations bloom. That discussion produced some entertaining suggestions for putting strings together such as using preg_replace and calling out to MySQL with SELECT CONCAT. ... [More] Here’s an approach that uses filesystem functions. When combined with some lesser-known PHP streams functionality, it has several practical applications. Opening Files for Reading and Writing There are several modes for opening a file that will allow you to seek to arbitrary positions in the file and read or write at those positions. One of the most frequently used of these modes is w , which the tmpfile function uses automatically. We can repeatedly write, then rewind the pointer and read: $f = tmpfile(); fwrite($f, 'foo'); fwrite($f, 'bar');   rewind($f); $contents = stream_get_contents($f); //=> "foobar" fclose($f); When writing to the filesystem, the above provides yet another inefficient solution to David’s exercise. Now let’s take it a bit further to see how this can be useful. In-Memory Streams PHP 5.1 introduced two new in-memory streams: php://memory and php://temp. The php://memory stream operates entirely in memory. The php://temp stream operates in memory until it reaches a given size, then transparently switches to the filesystem. We can modify the above example to use the php://memory stream instead of hitting the filesystem: $f = fopen('php://memory', 'w '); fwrite($f, 'foo'); fwrite($f, 'bar');   rewind($f); $contents = stream_get_contents($f); //=> "foobar" fclose($f); Putting a string inside a fast temporary stream can be very useful. For example, we can then attach filters to that stream. Testing Temporary streams are also handy for testing. There are some rather elaborate virtual file system libraries out there but many timeTruncated by Planet Horde, read more at the original (another 4353 bytes) [Less]
Posted over 16 years ago
Stable release: Nag H3 (2.3.1)
Posted over 16 years ago
Rodney Gedda from IDG Australia interviewed me for a new series on TechWorld's website called "Open Source Identity".
Posted over 16 years ago
Highlighting some recent work
Posted over 16 years ago
Horde Groupware Webmail Edition 1.2 has been released.
Posted over 16 years ago
Stable release: Gollem H3 (1.0.4)
Posted over 16 years ago
Summary: moving forward with Horde 3.3 and 4.0 cycles, moving to Git for future source control, moving to more frequent BC-breaking releases.