I tried Python out a while ago, but stopped trying it to learn it after some major frustrations. Maybe I didn’t dig deep enough into it. I found the documentation hard to read, and the module layout seemed a little random at times. For some reason I found executing an external process and getting the results to be a little convoluted. (Since then I’ve learned to use popen(..).communicate())
I ended up messing with other languages to try to find one that suits my tastes, like Erlang and D.
Erlang
- I had written a post about how to set up reloader.erl about a year ago. Reloader.erl is an incredibly useful library included in mochiweb for automatically reloading erlang libraries if they’ve been recompiled. I had also written a post about iWatch and phpunit to follow source directories and automatically run a unit test (or other command) when src files change. Really great for rapid development - you can code in one window and just glance over to know if things are working as expected.
- I wrote this post a few months ago when I was developing a new Erlang application. I eventually ended up using the reloader I mentioned at the end, but never documented it. Now I’m about to start writing a new app, and I’m on a different machine. First, get the reloader. It was developed as part of mochiweb but functions just fine on it’s own. Just put it somewhere accessible - I use the ebin directory in my home folder.
- Say you’ve got an Erlang app with the standard file system layout, with your source code in src/ and your compiled code in ebin/. I’ve found this makes using the interactive shell interpreter a little harder. Lets use the Emakefile that Erlang supports to let us recompile and reload our code on the fly. Create a file called Emakefile, and put the below line in it. There’s other options, but this keeps things simple.
- First, make sure you have the compile flag (+debug_info) set when compiling your source, then fire up the debugger: 1> i:im(). My Erlang Makefile: EBIN_DIR := ebin SRC_DIR := src EXAMPLES_DIR := examples INCLUDE_DIR := include ERLC := erlc ERLC_FLAGS := +debug_info +native -W -I $(INCLUDE_DIR) -o $(EBIN_DIR) all: @mkdir -p $(EBIN_DIR) $(ERLC) $(ERLC_FLAGS) $(SRC_DIR)/*.erl clean: @rm -rf $(EBIN_DIR)/* @rm -f erl_crash.dump Read up on the Erlang docs.
- This was really useful for me in scripting TextEdit to run my unit tests, as Erlide has been crashing every time I use it. erl -run mymodule myfunc -run init stop -noshell http://www.trapexit.org/Running_Erlang_Code_From_The_Command_Line
- Gen_server is a great way to create simple servers without having to write a lot of code at all. Here’s a brief overview to get you started. For some reason, figuring out how the gen_server behavior works in erlang was kind of a pain for me. I think it’s because I can’t just implement something, I need to know why it works. Well, now I know. So, lets get started. Gen_server is built into erlang.
- If you’re running into trouble with Mnesia not writing your data to disk, make sure you create the schema BEFORE you start mnesia. Otherwise you’ll get errors like opt_disc. Directory "c:/Documents and Settings/jhaddad/workspace/Mnesia.localhost@whatever" is NOT used.
- I hate looking stuff up. I just like having this type of thing 1 click away, in a nice summary. This post is mostly for me. Define a record: -record( rule, {ruleid, site, rule, original} ). You can define a record in the shell using rd: 99> rd(rule, {ruleid, site, rule, original} ). rule Create an instance of a record: 100> A = #rule{ ruleid=1, site=2, rule=2, original=3}.
- Leex is an erlang version of Lex, a Lexical Analyzer Generator written by Robert Virding. Robert (and several others in #erlang on freenode) were incredibly helpful and considerate in helping me understand these tools. Leex is a tokenizer. It breaks the pieces of your file or text into tokens. You can then use a tool like yecc to take these tokens and generate useful parsers. First, you’ll need the source. Leex source is available here.