Nenad Rakocevic for O’Reilly 2013 Open Source Awards

May 16th, 2013

I realize that it is probably a long shot for O’Reilly to recognize a “fringe” language project as deserving of recognition in their open source awards. But I (and the rest of you!) would be remiss not to at least nominate Nenad Rakocevic a.k.a. @DocKimbel. He has spent two years of diligent work and organizing on Red…and that’s not to mention the broad open-source contributions to the Rebol community over the years!

Here’s the link where you can enter your nomination:

OSCON 2013 Nomination Form

And here’s what I wrote:

The closed-source Rebol interpreted language lived in the shadows for decades. Designed by one of the fathers of AmigaOS, it has impressed many…and is frequently cited by Douglas Crockford as his inspiration for creating JSON.

Nenad Rakocevic was one of the most prolific and high profile of open-source Rebol programmers. While Rebol and many of its clients were creating closed-source applications, he was BSD-licensing major projects like his web server Cheyenne, the Rebol MySQL driver, and the CureCode bug database.

In a classic example of how closed-source methods can hold back remarkable ideas, Rebol Technologies stalled development. So Nenad broke away with the idea of creating a “full stack” language based on Rebol called RED. But instead of merely having the same range of applicability as Ruby, Python, or other interpreted languages…his plan for Red was to apply the methods to create compiled (or mostly-compiled) code. This could just as easily be used for device drivers as high-level programming.

Nenad’s progress has been prolific over two years. Most suspect his speed and community inclusivity was the trigger that caused Rebol’s creator to open-source his own project in December 2012. Thanks to his efforts, the Rebol community has *two* strong codebases to build from going forward.

Red (and Rebol) are currently in the margins of the technology world. But it would impress me if O’Reilly recognized the efforts of someone working diligently to lead longstanding closed-source tools into the light, as well as eliminate complexity (rather than continue to build upon pillars of salt and sand.)

Read more at: http://red-lang.org

Sharing a Host’s Directory Into Virtualbox Using NFS

April 14th, 2013

(UPDATE: A reader has pointed out that the specific problem that I was trying to address is actually solvable using another workaround. Due to bugs in VirtualBox shared folders handling symlinks, they were actually disabled on purpose…and no check box was provided in the UI to turn them back on. But if you’re a “risk taker” and have read the issues and don’t think they affect you, you can use VBoxManage to enable it on a case by case basis…for particular shares in a particular VM.

So if you go to the directory where your virtual machine lives, and the VM name is VM_NAME with your share named SHARE_NAME, you just need to type:

VBoxManage setextradata VM_NAME
VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1

That turns shared links back on, for that VM and that share. And if you don’t know how to mount VirtualBox shares from within the client in read/write, in my case you have to specify your user id as MY_ID in the following way:

 
sudo mount -t vboxsf -o uid=MY_ID,rw share /path/to/share

In my basic tests, this seems to work. If anyone has insights into what the actual dangers to doing this are, please add a comment.)


Before I mentioned how I had moved from VMWare to VirtualBox, so that more of the stack I use would be open source. Besides the “Genuine Windows” VM re-activation annoyance I mention (due to a perceived hardware change), everything seemed to go fine after that.

A couple months later I hit a snag. In my configuration I wanted to keep certain project directories on the host…and be able to read and write those directories in the guest. I expected to be able to use the “Shared Folders” feature, which does exactly this. It’s built into VirtualBox:

Shared Folders Feature in VirtualBox

But eventually I ran into a problem…

VirtualBox shared folders don’t support the creation of symbolic links by the guest in a directory owned by the host. Not even if the underlying file system on the host supports them.. :(

How to work around this? Networked filesystems were one answer, but have never been something I looked at favorably. They’ve always seemed overly complicated to set up, and platforms pull support for any given one at the drop of a hat. Plus, they offer ridiculously opaque error messages which give you no indication of what setting you might tweak to make them work.

So despite being the type of person who snarls at people who back up source code with zip files and demand they learn to use version control, I’ve been a luddite when it comes to networked filesystems. Rather than go through the pain of setting them up, I’d frequently resort to zipping up a directory…putting it on a ftp server…then downloading it to the other computer! :-/

But zipping the problem away wasn’t going to be an option in this case. So it was time to bite the bullet. I’m going to explain how I set up NFS on an OS/X host with a Debian VM.

Read the rest of this entry »

Iostreams Re-Examined

April 7th, 2013

One area in C++ I had never really spent a lot of time with until early last year is the iostreams library. I *thought* I understood it pretty well. At a superficial level, it made perfect sense: replace printf/scanf with an abstract interface for serialization that objects could implement for themselves.

As a developer whose post-stdio-era coding usually targeted things like graph databases instead of text files, I didn’t have all that many occasions to use iostreams. But as I became more involved in exchanging small conceptual programs with other developers, I realized that they are the “lingua franca” of standard C++. Using them began to teach me that there were many things about them I didn’t know…and that they could be very useful, as well as very tricky.

For instance, do you know the difference between these two lines?

std::cout << std::endl;
std::cout << ‘\n’;

I didn’t! That’s just for starters, so I gave a presentation on the topic to my Austin C/C++ Group in October 2011. In it, I represent some of my new understandings:

Slideshow iconView the presentation

At first, I delayed on publishing it to the Web for fear that it may not be 100% right. But then it languished in a private Google Docs presentation for a year and a half. I found it today, and if I’m worried about its inaccuracy it’s sure not going to get any better by leaving it there. And it might help someone, as I know there are a large number of people on the Internet who are even more less than 100% right. :-P

So here it is, and corrections are of course welcome–just leave a comment!

(Note: Learning the details about this would not have happened without the help of the active C++ community on SO. That’s where I spent most of my recreational programming time—instead of writing blog entries—in 2011. Both asking and answering questions offers insights. While some people seem to have a bit of what amounts to an “online game addiction”, it’s a case where their affliction can benefit you and the common good. :P)

Logo Design for the Open Source Rebol Project

January 11th, 2013

After decades of pondering and implementation, the Rebol programming language quietly went open source on December 12th, 2012 (12-12-12). The language’s chief designer, Carl Sassenrath (of AmigaOS fame), had this to say:

You probably thought the source release would never happen? Am I right?

Well, it’s there now in github. This is preliminary. Once I know some of you have built it successfully, I’ll make a more public announcement and add a tarball for download from rebol.com.

I’ll check in here for several minutes every night to respond to any questions.

Let’s see what happens… Who will be the first to port it to Android?

Within 8 days, German developers at Saphirion had made an experimental Android port. I myself made the minor patch to get Rebol building on HaikuOS. Instructions then came down the line for building on Raspberry Pi, Beagleboard, and Pandaboard.

As people began absorbing the good and bad of the first-ever-sighting of the source code for Rebol, wheels began to turn. By request, one of my pet projects (the redesign of the Rebol logo) was thawed out of its 3-year hibernation.

I won’t repeat the long-winded-argument I made years ago for Rebol Technologies replacing its old icon:

Historic Rebol Icon, white R in a Red Square with Purple Target

…with a new icon that I created based on Rebol’s heritage, as well as the notion of bracketed series of words (as in [o]):

New Rebol Icon Suggesting [o]

Rather, I’ll just talk about the issues involved in staging a “design intervention”. of this nature…

Read the rest of this entry »

Initial Build of Rebol for the Haiku Operating System

December 28th, 2012

For those not in the know: Haiku OS is a binary-compatible open source reimplementation of the “Be” operating system. As with the Amiga community, Haiku users are driven partially by nostalgia…but also by an aesthetic of “small is beautiful”. As with the Amiga community’s anger that history took a detour by endorsing the PC architecture, the Haiku community probably in large part feels that Apple missed the boat by going with a traditional architecture of OS/X rather than buying Be.

Anyway kids, I hear it was a holiday or something. Instead of LumpOfCoal.exe I bring you a Rebol binary that runs on Haiku. (Well, I didn’t address terminal issues like cursor keys doing a proper command history or whatever…I just got it started as a basic POSIX build, looking at little details that despite their littleness can be a bit of a block.) You can download it from the community builds site at rebolsource:

http://rebolsource.net

More work is needed, and a proper binary would probably use a binding other than POSIX, which the source is designed to permit. But the question that people don’t know to ask is “can it be used to bootstrap”? In short: Rebol’s cross-compilation strategy is to use a Rebol executable to generate a bunch of per-platform ANSI C which is compiled in with the rest of the C sources. So really all you need is a Rebol executable (on any platform) and a passable C compiler.

I started with a Debian build and then put in a thumbtack here and there to get a HaikuOS build. And indeed, you can bootstrap. It’s this easy…

Install HaikuOS in your VirtualBox or what-have-you. I used R1 alpha 4.1, which is the latest at the time of writing. Once you have it, follow the instructions in this video…except get your Haiku binary from rebolsource and not my server. (I made the video before the changes had been accepted to the trunk.)

The video was intended as a draft that I made to solicit feedback. But I haven’t gotten around to redoing it yet, so I’m going ahead and pushing this blog entry out in the meantime.


Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported
Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported