Ask HN: Do you have any code or projects of your own you would like to talk about instead?

165 points by raganwald ↗ HN
Tired of other discussions dominating the front page? Tell us what you're working on right now, and please include a link to actual code. Let's get back in touch with hacking!

105 comments

[ 4.6 ms ] story [ 84.4 ms ] thread
Right now (please call me on this sometime, it'd help me) I'm working on a clone of Burp, the industry standard web penetration testing tool, in Cocoa. I started with RubyCocoa, but I've ditched it for Objective C. It is (surprisingly) liberating to work in C after spending a year in Ruby; any time something looks expensive or naive, you just tell yourself, "what I'm doing here can't possibly be more expensive than what MRI Ruby would have done", and you go about your day. Highly recommended.

The last code I managed to publish was Ruckus:

http://github.com/tqbf/ruckus/

(a better description: http://wiki.github.com/tqbf/ruckus/crash-course)

Ruckus is a Ruby DSL replacement for Peach Fuzz, Mike Eddington's famous Python fuzzer library. It is distinguished by being about 100 times slower, using a DSL instead of XML, and providing a DOM-style interface to any packet format (you can tag fields, arbitrarily nested in a tree structure, with classes and id's, and then fuzz them using CSS selectors).

I have a JDWP JVM debugger (or rather a thin protocol driver) written in Ruckus if anyone's interested in seeing what it actually looks like. We never get to publish the actual protocols we build with this.

My programming "day job" (I'm one of 4 developers on the project) is Playbook:

http://runplaybook.com

Never had I felt more like I was tricking software into doing what I want to do than when I was trying to use Peach. I mean Michael's a nice guy, but you email the peachfuzz list or him personally on issues you're having and he convinces you that it's you not using the tool correctly and that you really don't want the feature you're asking. Modifying code was hellish because it's just thousands of lines of kludge, written as far from Python's usual styles as possible.

Good stuff on the Burp clone. Any plans to publish it eventually?

--

As for me, the last project I was working on is a complex structure analyzer plug-in for HexFiend along with basic plug-in functionality to support it.

I'm planning on wiring Ruckus into Hexfiend, so you can highlight hex characters Ethereal-style and using CSS selectors from packet formats.

I don't know what I'm going to do with the Burp clone, but if you ask me for it, I'll hand it over. =)

I'd like to take a look at the burp clone, not sure if I'll contribute.

Do you want help on wiring to hexfiend?

I just used RubyCocoa, but I haven't done much of the UI stuff yet. My contact info's in my profile, though.
(comment deleted)
I'm working on a programming language that has builtin support for reloading code at runtime. It'll also support various ways of modifying code at runtime, like with visual interfaces. The primary usage is for making interactive graphical apps, like games.

Intro is here: http://andyfischer.github.com/circa/intro.html

code is here: http://github.com/andyfischer/circa/tree/master

I've prototyped a similar concept in Perl (still a bit rough). I think this is a powerful concept.
Wouldn't it be better to modify an existing, popular language to support this feature?
It would be better, but I want to do some cool things that I'm not sure if I can support in an existing language.

One thing is automatically preserving state across a reload. This is really hard if I allow the programmer to store state any way that they want- I can't tell which things I should preserve. So the language forces the programmer to declare their stateful things in a special way.

Another thing is introspecting on code. I want to be able to click an image and then see all of the calculations that went in to that image's position (maybe so that I can change them). But this is pretty hard in most languages. Aliasing makes it hard. So this language discourages operations which are hard to introspect.

So I could theoretically support Ruby or something, but it would turn out to be "not really Ruby", because there would be a lot of stuff you wouldn't be allowed to do.

Unity is a game engine that uses Mono as its scripting languages. You can recompile on the fly (you frequently play the game in-IDE during development). All public variables are exposed to its inspector and survive this recompilation.

It's a great engine in general: http://unity3d.com

Mono is not a scripting language. The Unity Scripting language is similar to ECMAscript, but is not standard and does not have comprehensive documentation. It is true that you can interact with the mono / .net 2.0 system libraries.

... and you have about a 1/3 chance of it crashing if you are using the recompile on the fly as you edit.. command p, alt+tab, save, alt+tab, command p...

Did you check out Smalltalk?
sounds like you should look at haskell for a few design ideas about reifying state
Don't most dynamic languages already allow this? I know in python you can reload code.
Looks like a cool little project. You should, however take a look at how most Lisps do something similar. You appear to be trying to take it farther than most Lisps do, but do have a look so as to not reinvent the wheel.
Great idea, I have a ton of one-off side projects I'd love to share (and get some awesome hacker critique as well)

I've written a simple ruby worker management "framework" known as theman, which is a thin wrapper atop rufus-scheduler and god: http://github.com/jcapote/theman

Also, there's fieldy, a simple fixed-width field reader/writer library for ruby exposed as DSL: http://github.com/jcapote/fieldy

Lastly is AtomLog, a way to parse and expose ruby's Logger output to an atom feed: http://github.com/jcapote/atomlog

Right now I'm working on adding extensions to Chrome. The majority of the system is in this directory:

http://src.chromium.org/viewvc/chrome/trunk/src/chrome/brows...

And what I've been working on most recently is the code that renders little HTML-based toolbars. My most recent change fixed a race that caused them to not render correctly on the first run:

http://src.chromium.org/viewvc/chrome?view=rev&revision=...

I think one of the coolest parts of the system is the way that api methods are routed from JS running in extension processes to the browser process and back. The core of that is here:

http://src.chromium.org/viewvc/chrome/trunk/src/chrome/brows...

I've been working on my Z-Machine interpreter library again. It basically started as a project to turn Frotz into a Ruby extension (Frotz, probably the most popular interpreter, is written in C).

The code has undergone quite a few transformations now. Frotz uses a lot of static memory -- it's basically setup to run a single zcode program at a time. Which makes sense, of course.

For my library, I wanted to be able to run more than one program (or multiple copies of the same program) at the same time. So, I basically rewrote the core of Frotz. All the memory for a Z-Machine is broken up into structs which are passed around.

There were some fun memory management issues related to running multiple programs. The typical zcode program consists mostly of static memory (lots and lots of strings and code), so that static memory can be shared between programs. I have a test where I load something like 100,000 copies of minizork into memory and the process size "only" jumps to 118MB. Of course, normal code doesn't need that many simultaneous Z-Machine instances so garbage collection keeps memory pretty reasonable.

Last time I worked on dorothy, I setup a demo webapp here:

http://ifrotz.org

Which illustrates why I wanted to be able to run multiple programs. The demo runs minizork, dynamic memory is dumped and restored between requests. The hints, exits, and history feature is possible because the server "listens in" on your game and the games others have played.

Lately I've been working on more memory inspection stuff, and now I have to work on some of the unfinished Z-Machine features (I've only implemented the v3 screen model).

The code is on Github:

http://github.com/eki/dorothy/tree/master

Mentioned in some comment thread, but I just fixed LuckyTubes (http://www-personal.umich.edu/~swolchok/luckytubes/), my YouTube search/download/rip tool using youtube-dl and ffmpeg, to correctly rip the audio stream from the downloaded video without transcoding to 64 kbps MP3 (oops). It's called LuckyTubes because it does a "feeling lucky" YT search for the terms you type in. Code is at http://github.com/swolchok/luckytubes/ .

No code for this project, but UmBus (http://mbusreloaded.com/umbus) is my pet project to let UMich students get the GPS-estimated arrival times for the uni buses via text messaging. If I weren't so late to the party, I would try to compete with www.nextbus.com .

I'm actually looking for a new name for my project, so maybe someone here will have a good idea?

It's a framework for writing, running and analyzing simulations. It could take any kind of simulation: Physics, game theory, epidemic spread, electronics, whatever.

It's in Python.

This is where it currently lives:

http://github.com/cool-RR/physicsthing/tree/master

(Keep in mind it's still a very young project)

The readme there was written when I had mostly physics simulations in mind. Now I've generalized the project to take any kind of simulation. I'll update the readme soon to reflect that, but I would really like to find a good name. Maybe something with a suffix or prefix of "Sim", but maybe not.

Anyone has any ideas?

Prism would be cool, although Mozilla already has something with that name.
Fake Snake (a different way of saying "python simulator" :)
pysicsss (I dunno. Something trying to blend python, physics, simulation, and the sssss sound a snake makes).
Simitar! A cutting new technology.
I'm working on an interactive fiction framework with a web framework flavour. It's my first Ruby project and depends on Shoes for cross-platform UI. Defining rooms, items, and non-player characters is done in YAML.

I'm about midway through the project and, as a test and demo for the platform, am converting the 1978 game "Pirate Adventure" to the framework. Once the framework is done my partner and I plan to use it to create an adventure game based on the fashion world. This will inevitably lead to a movie deal and untold riches.

All in all, it has been fun, educational, and a nice break from my day job wrangling Drupal.

The code (so far) lives here:

http://github.com/mcantelon/fashion-quest/tree/master

Right now I'm working on a natural language task management system. Basically you enter something like "12 page paper in project hist201, due apr 23 est. 8h high priority" and it understands what the hell you're trying to say: project, deadline, estimated time, priority. It also checks similar tasks (using naive Bayesian classifiers) and gets you a probability distribution of velocities (estimated / actual / relevance for a word), and supposedly, but I am still working on it, will show you a probability of finishing it on time given past history of similar workload.

The goal is to be able to either Tweet your new tasks, add them in bulk (several lines), or even do something like "http://taskulus.com/12 page paper in project hist201 due apr 23 est 8h high priority" and then receive a lot of analysis.

(comment deleted)
Working on a messaging client that integrates Twitter and GTalk... And I mean really integrates. The end user doesn't know the difference between IM and twitter but the context in which the user sends a message decides the service to use. It's C# and WPF.

http://github.com/jcbozonier/alloy/tree/master

That would be a really useful thing. Keep us posted when that goes live.
I'm writing my own compiler and designing my own programming language, just like everybody else!

Practical, no. Fun, YES.

Practical, yes.

I am going back to 5 year old notes on instruction scheduling and using the same code and algorithms to deliver targeted advertisement on the net.

As a former compiler junkie that sounds interesting, can you elaborate?
[Edit: Sorry man, this is my bread and butter. Excitement got into my head and I barfed out a few things I should have left out.

I hope I don't come across as rude and evasive if I said "sorry, can't give any more info; just think hard about it" :-) ]

I'm working on a short product(license) key generation and validation framework for Mac OS X based on elliptic curve digital signatures. The goal is to write a replacement for AquanticPrime (which uses long RSA signatures). It's based on OpenSSL.

Code: http://github.com/dchest/ellipticlicense/tree/master currently in pre-alpha stage.

Would love to get code/security review!

Also I recently wrote a very simple Bayesian classificator for spam in Python: http://github.com/dchest/pybayesantispam/tree/master

I've been working on K7, an extension library/framework for linking the V8 javascript engine with existing C/C++ libraries. Kind of slow going since work has gotten busier, but hoping to get back to it soon.

http://github.com/isaacs/k7

I'm working on implementing a hyperspatial text classifier in Haskell. It's conceptually similar to the hyperspace classifier in CRM114 (essentially a weighted nearest-neighbor search), but shouldn't crash as much or corrupt its data files. I've thought of some interesting problems to point a fast and effective classifier at that aren't spam detection.

I'm also working on a library/framework in Clojure for apps that process a folder full of files in some way. The idea grew out of a Clojure program I wrote to make a folder full of images greyscale (http://github.com/zakwilson/imagesieve/tree/master).

Zak, by classifier I hope you mean "categorizer". i.e. given a text and a list of categories, return which categories the text belongs to, along with a confidence number.

If so, I say chase that thought a bit. You might save me from actually messing with NLP.

Yes, I do. The usage is essentially identical to the Bayesian probability classifiers commonly used for spam detection. I compared several of the classifiers available in CRM114 and found hyperspace to be the most accurate as well as being much faster when checking a large number of categories.
Amazing. This is pretty cool :-)

The thing is 100% statistical right? It doesn't know anything about the grammar of a natural language (say, English.) right?

It's entirely non-statistical. It works by measuring the Hamming distance between samples using features consisting of single tokens, sequences of tokens and sequences of tokens with gaps. For example:

The

The quick

The quick brown

The quick ... jumped

would all be features of the input "The quick brown fox jumped over the lazy dog".

It doesn't know anything about grammar, though as a performance optimization it might be useful to limit the length of features to detectable sentence boundaries. I intend to make that behavior optional. More information here: http://crm114.sourceforge.net/docs/KNN_Hyperspace_Filters/KN...

Meta comment: everyone is using github!
Git won me over when I found out that I could make all kinds of commits willy-nilly. I make a lot of small commits to my local repo throughout the day. At the end of the day I then take the time to go through them, merging related commits and removing stupid commits before I send my changes upstream. I've found that it's much easier to avoid breaking the build this way.
Another way to not break the build is to add a local git hook that compiles your project before allowing a commit. Assuming you compiled and tested your change already (you did right... :) the compile hook will take no time at all. Using this I have only commited broken builds once or twice when it built on my macbook, but not on Linux (case insensitive file system) Wrote up more details on hooks along with some examples here:

http://benjamin-meyer.blogspot.com/2008/10/git-hooks.html

I'm working on a program that renders Julia/Mandelbrot set fractals using the GPU. I know there are a few other such programs out there, but I'm trying to make gpufrac really configurable. It has a bunch of features already (normal mapping and orbit traps are my favorites).

http://github.com/emezeske/gpufrac/tree/master

In my spare time:

Structural engineering software. Python-C++ mix. Wish I could say more, but can't. :)

I am trying to keep online advertising fun by doing it in Lisp.

I "write" one web server a day, mostly customizing hunchentoot in some way. I have it malleable and obedient; nothing like having total mastery over your tools. I am at the point where I can look at a Lisp web app and I can see the cost of each form; thanks to weeks of disassembly, tweaking and benchmarking.