All of the interesting technological, artistic or just plain fun subjects I'd investigate if I had an infinite number of lifetimes. In other words, a dumping ground...
Monday, 23 November 2009
Wednesday, 4 November 2009
Bsdiff Bspatch
http://www.daemonology.net/bsdiff/
Tuesday, 3 November 2009
Friday, 9 October 2009
Creating a new module in CVS
Creating a new module in CVS.
Fisrtly "cvs -n" is your friend!
It allows you to run changes without actually changing anything.
cvs -n -d :pserver:@ptserver:/Realtime import -m "Initial check in" rap tohare initial
cvs -d :pserver:@ptserver:/Realtime import -m "Initial check in" rap tohare initial
cvs -d :pserver:@ptserver:/Realtime checkout rap
Wednesday, 23 September 2009
Wednesday, 16 September 2009
Bobby Tables
Python
Using the Python DB API, don't do this:
cmd = 'update people set name='%s' where id='%s'%(name, id)
curs.execute(cmd)
instead, do this:
curs.execute('update people set name=:1 where id=:2', [name, id])
http://bobby-tables.com/
Wednesday, 9 September 2009
Open energy monitor
From http://lwn.net/Articles/349007/
The OpenEnergyMonitor project
The OpenEnergyMonitor project is based on the work of two developers, Trystan Lea and Suneil, both from Wales. "This is a project to develop and build open source energy monitoring and analysis tools for energy efficiency and distributed renewable microgeneration." The project appears to have been launched in the summer of 2009.
The OpenEnergyMonitor project's graphic [PDF] describes the goals, which include:
- Monitoring AC mains for energy analysis purposes.
- Energy prediction for renewable energy feasibility studies (Planned).
- Monitoring energy captured from wind, solar water and photovoltaic sources.
- Storage, analysis and display of energy usage data.
- Development of energy technologies.
- The export of energy usage information to the Internet (Planned).
The OpenEnergyMonitor site lists several example projects:
- Non-invasive AC mains current measurement
- Invasive AC mains power measurement
- Invasive 12V DC power measurement
- load controller for small wind generators
OpenEnergyMonitor features a simple structure that is built from a variety of open-source hardware and software components. The data flow through the system starts with an Arduino processor and a custom built I/O shield for interfacing the analog signal to the Arduino. The Arduino sends data to the host computer via a USB serial connection.
The project provides several ways to collect and display the power data. The simpler batch mode works as follows: The ArduinoComm Java program can be used to copy a batch of recorded data to a file using a command such as:
$ java ArduinoComm >tmp.datGraphing of the captured data can be done with the KDE utility kst, see the Using KST for graphing document for details.
A more interactive real time display can be achived using the PowerLogger and PowerSampler Java programs. A test installation of both programs was performed on an Ubuntu 9.04 system. The OpenEnergyMonitor java software guide was followed. Each program requires installation of the associated Arduino program (sketch) on the Arduino board. Your author had several Arduino Deicimila boards around from other projects and an already installed version 17 of the Arduino IDE. The Arduino Power Logger program (sketch) was retrieved, compiled and installed on the Deicimila board without any problems.
Next, Java was installed on the machine along with the RXTX serial/parallel communication library. The Java code was compiled and run with the java ContinuousPower command. The ContinuousPower GUI showed up and after clicking on the Start button, the Arduino status indicated that a connection was established and an a flow of data was seen from the Arduino board. The real time graph's X axis changed with advancing time and the data changed slightly due to noise. Unfortunately, your author did not have the parts on hand to construct an input shield board, so monitoring of some real data was not possible. The PowerSampler program was compiled and installed with similar results.
For more information on the inner workings of the Java software, see the Power Logger Source Code Guide and the Program Structure and Data Flow Diagram. The latter explains both the Power Logger and Power Sampler Java programs since both share a large percentage of source code.
OpenEnergyMonitor is an interesting project in the early stages of development. It comes along at a time when the renewable energy field is seeing a lot of growth, and efficiency monitoring of non-renewable sources is becoming more important for both financial and ecological reasons. Hopefully, future releases of OpenEnergyMonitor will include a wider variety of supported sensor devices. A multi-channel temperature monitor would be useful for characterizing a variety of solar energy sources such as photovoltaic, hydronic (hot water) and solar-heated air panels.
The OpenEnergyMonitor project could also be useful for providing a base of working code for a more generic Arduino-based data logger, and the real-time data visualization capabilities are an added bonus. A thread on the Arduino forum about an Open Source Data Logger Project Using the Arduino indicates some potential interest, but that project apparently never got off the ground.
Wednesday, 2 September 2009
Friday, 28 August 2009
Thursday, 27 August 2009
Wednesday, 26 August 2009
Webhooks & PubSubHubbub
http://googlecode.blogspot.com/2009/08/towards-programmable-web-pubsubhubbub.html
http://code.google.com/apis/pubsubhubbub/
http://github.com/progrium/hookah/tree/master
http://code.google.com/p/pubsubhubbub/wiki/PublisherClients
http://blog.webhooks.org/
Monday, 24 August 2009
Thursday, 20 August 2009
Wednesday, 19 August 2009
Qt Designer and subclassing QGraphicsView
From http://doc.trolltech.com/qq/qq20-jambi.html
The display is implemented by subclassing the QGraphicsView class. When using Qt Designer to create our user interface, this custom widget is unavailable to us. But it is still possible to include the widget in the user interface definition by "promoting" one of Qt's regular widgets as a placeholder for it on the form we create in Qt Designer.
So, when designing the user interface, we put a QGraphicsView widget onto the form, Then we open a context menu over it and click Promote to Custom Widget. In the dialog that opens, we specify the name of our subclass: QtanoidView in this case.
Tuesday, 18 August 2009
Roulette Ruby
Assumptions:
- we get double our bet back when we win
- we reset the bet to 1 when we win
- we leave the bet at the maximum bet of $50 when we hit it
- we double our bet each time we lose (this is the theoretical lynch pin in that you can win back your previous losses eg. you lose with bets of 1,2,4,8. Then you win with a bet of 16. So total profit is 16 - 8 - 4 -2 -1 = 1. So you never really lose. Until you hit the table betting limit.)
- we keep betting until we run out of money or we make 1.05 * initial bank
This is the highest win ratio but the wins are so small that one loss wipes them out.
tohare@pts-tohare-laptop:~/projects/ruby$ ruby roulette.rb
count: 368, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 190, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 233, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 1361, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 192, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 425, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 702, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 219, bank 2101, bank - INITIAL_BANK 101, bet 1
count: 15496, bank 44, bank - INITIAL_BANK -1956, bet 50
count: 1078, bank 2101, bank - INITIAL_BANK 101, bet 1
Times Won: 9
Times Lost: 1
Average win amount: -105
tot amount: -1047
class RouletteTable
BLACk=[2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35]
RED=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36]
def self.spin
srand()
result = rand(37)
#puts "Result: #{result}"
return :green if result == 0
return :black if BLACk.include?(result)
return :red if RED.include?(result)
end
end
INITIAL_BANK=2000
BETTING_LIMIT=50
winnings=[]
10.times do
bank = INITIAL_BANK
bet = 1
count =0
while 1
break if ((bank - bet) < 0)
break if (bank > (1.05 * INITIAL_BANK))
bank -= bet
count += 1
if RouletteTable.spin == :black
bank += bet*2
bet = 1
next
end
bet = (bet*2).to_i
if bet > BETTING_LIMIT
bet = BETTING_LIMIT
end
end
winnings << bank - INITIAL_BANK
win = bank - INITIAL_BANK
#puts "count: #{count}, bank #{bank}, bank - INITIAL_BANK #{win}, bet #{bet}, winnings #{winnings}"
puts "count: #{count}, bank #{bank}, bank - INITIAL_BANK #{win}, bet #{bet}"
end
profit = winnings.select{|i| i > 0}.length
loss = winnings.select{|i| i < 0}.length
tot = winnings.inject{|acc,i| acc + i}
avg = winnings.inject{|acc,i| acc + i} / winnings.length
puts "Times Won: #{profit}"
puts "Times Lost: #{loss}"
puts "Average win amount: #{avg}"
puts "tot amount: #{tot}"
Monday, 17 August 2009
Real time physics simulators
From http://users.softlab.ntua.gr/~ttsiod/games.html
I want to "lure" my nephews and nieces towards science and engineering, and one of the things I've done towards that goal is to code some real-time physics simulators.
|
Monday, 10 August 2009
Git
git reset --hard HEAD
git checkout master
for i in $(git rev-list --reverse origin..master) ; do git cvsexportcommit -W -c -p $i; done
$ git cvsimport -i
$ git rebase origin
$ CVSROOT=$URL cvs co module
$ cd module
$ git cvsimport
hack, hack, hack, making two commits, cleaning them up using rebase -i.
$ git cvsexportcommit -W -c -p -u HEAD^
$ git cvsexportcommit -W -c -p -u HEAD
http://blogs.frugalware.org/vmiklos?blog=7&page=1&disp=posts&paged=2
Friday, 7 August 2009
HTML 5 resources
Click here to launch the experiment! (beware: sophisticated browser needed)
HTML5 is getting a lot of love lately. With the arrival of FireFox 3.5, Safari 4 and the new betas of Google Chrome and Opera, browsers support some great new features including canvas and the new audio/video tags. Most interesting: modern mobile devices like the iPhone or Android-based phones also support new standards in favor of Flash. The future looks bright for HTML5.
Time for us to play with this technology. We've created a litttle experiment which loads 100 tweets related to HTML5 and displays them using a javascript-based particle engine. Each particle represents a tweet – click on one of them and it'll appear on the screen.
The original particle engine was ported from a Flex/AS3 project that we've created to javascript. We're using processing.js for particle rendering on canvas which is a very useful graphics library created by John Resig. The music will only be played if the browser supports the audio tag. To detect if the audio or canvas feature is present we use the awesome modernizr library. We could have used a fallback solution like playing the sound via Flash. But this experiment is about HTML5 – and who needs Flash anyway?
Big thanks to spokenlounge.com for supporting us and for providing the mp3 track.
If you want to dive into further ressources, then try:
- HTML5Doctor, great ressource about everything HTML5
- Official Mozilla Canvas Tutorial
- Carsonified linklist about HTML5
Thursday, 6 August 2009
Open Source Windows Applictions
VirtualBox is a powerful x86 virtualization product for enterprise as well as home use.
Paint.NET is free image and photo editing software for computers that run Windows
T r u e C r y p tFree open-source disk encryption software for Windows Vista/XP, Mac OS X, and Linux
PDFCreator easily creates PDFs from any Windows program.
Wednesday, 5 August 2009
Wednesday, 29 July 2009
Tuesday, 28 July 2009
Monday, 27 July 2009
CPAN install Bundle::CPAN fails on RHEL 5
cc1: error: unrecognized command line option "-fstack-protector"
cc1: error: invalid parameter `ssp-buffer-size'
SHA.c:1: error: bad value (generic) for -mtune= switch
Find where these parameters are set:
[root@ /usr/lib/perl5]# find . -name "*" -exec grep -H ssp-buffer-size {} \;
./5.8.8/i386-linux-thread-multi/Config_heavy.pl:config_arg2='-Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables'
./5.8.8/i386-linux-thread-multi/Config_heavy.pl:config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Dversion=5.8.8 -Dmyhostname=localhost -Dperladmin=root@localhost -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux -Dvendorprefix=/usr -Dsiteprefix=/usr -Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid -Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endservent_r_proto -Ud_setservent_r_proto -Dinc_version_list=5.8.7 5.8.6 5.8.5 -Dscriptdir=/usr/bin'
./5.8.8/i386-linux-thread-multi/Config_heavy.pl:lddlflags='-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -L/usr/local/lib'
./5.8.8/i386-linux-thread-multi/Config_heavy.pl:optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables'
And delete them from these files.
Thursday, 23 July 2009
Why Software Sucks
We work at the sausage factory, so we know how this stuff is made. And it is not pretty. Most software is created by bad programmers like us (or worse!), which means that by definition, most software sucks. Let's refer to Scott Berkun's Why Software Sucks to nail down the definition:
When people say "this sucks" they mean one or more of the following:
From http://www.codinghorror.com/blog/archives/001289.html
- This doesn't do what I need
- I can't figure out how to do what I need
- This is unnecessarily frustrating and complex
- This breaks all the time
- It's so ugly I want to vomit just so I have something prettier to look at
- It doesn't map to my understanding of the universe
- I'm thinking about the tool, instead of my work
Tuesday, 14 July 2009
Programming book for kids and beginners
Hello World! Computer Programming for Kids and Other Beginners | |
author | Warren and Carter Sande |
pages | 430 |
publisher | Manning |
rating | 9/10 |
reviewer | JR Peck |
ISBN | 978-1933988498 |
summary | Computer programming for kids and other beginners. |
http://books.slashdot.org/story/09/07/13/1349203/Hello-World?art_pos=11
Easy serialization in C using structs
Easier?Here is a test program.
The array size of 20000 creates a 625kB file.
(Build on linux with gcc -Wall -Wextra -o serial serial.c)
#include <stdio.h>
#include <string.h>
typedef struct node_struct {
char label[20];
float x;
float y;
struct node_struct * other;
} node_t;
#define ARRSIZE 20000
int main()
{
node_t nodearr[ARRSIZE];
node_t readnodearr[ARRSIZE];
int i;
for (i=0; i < ARRSIZE; ++i) {
strcpy(nodearr[i].label, "test label");
nodearr[i].x = i + 2.3;
nodearr[i].y = i + 4.3 + nodearr[i].x;
if (i > 0)
nodearr[i].other = &nodearr[i-1];
else
nodearr[i].other = NULL;
printf("%d %f %f", i, nodearr[i].x, nodearr[i].y);
}
FILE* fp = fopen("nodes", "w");
fwrite(nodearr, sizeof(node_t), ARRSIZE, fp);
fclose(fp);
fp = fopen("nodes", "r");
fread(readnodearr, sizeof(node_t), ARRSIZE, fp);
fclose(fp);
int rtn = memcmp(nodearr, readnodearr, ARRSIZE*sizeof(node_t));
printf("\n------------\n");
printf("%d %f %f;", 0, nodearr[0].x, nodearr[0].y);
for (i=1; i < ARRSIZE; ++i) {
printf("%f %f, %d, %s %f %f;", nodearr[i].other->x, nodearr[i].other->y, i, nodearr[i].label, nodearr[i].x, nodearr[i].y);
}
printf("\nrtn %d\n", rtn);
return 0;
}
Monday, 13 July 2009
Gprof graphviz/dot plotting
Gprof2Dot
Convert profiling output to a dot graph.
About
This is a Python script to convert the output from prof, gprof, oprofile, Shark, AQtime, and python profilers into a dot graph.
Thursday, 2 July 2009
Auto indent in Vim
Wahla.
Thursday, 18 June 2009
Wednesday, 3 June 2009
HDD data recovery
TestDisk is OpenSource software and is licensed under the terms of the GNU Public License (GPL).
TestDisk is a powerful free data recovery software! It was primarily designed to help recover lost partitions and/or make non-booting disks bootable again when these symptoms are caused by faulty software, certain types of viruses or human error (such as accidentally deleting a Partition Table). Partition table recovery using TestDisk is really easy.
TestDisk can
- Fix partition table, recover deleted partition
- Recover FAT32 boot sector from its backup
- Rebuild FAT12/FAT16/FAT32 boot sector
- Fix FAT tables
- Rebuild NTFS boot sector
- Recover NTFS boot sector from its backup
- Fix MFT using MFT mirror
- Locate ext2/ext3 Backup SuperBlock
- Undelete files from FAT, NTFS and ext2 filesystem
- Copy files from deleted FAT, NTFS and ext2/ext3 partitions.
TestDisk has features for both novices and experts. For those who know little or nothing about data recovery techniques, TestDisk can be used to collect detailed information about a non-booting drive which can then be sent to a tech for further analysis. Those more familiar with such procedures should find TestDisk a handy tool in performing onsite recovery.
GetDataBack is more than an undelete or file recovery program or a system restore:
Tuesday, 2 June 2009
Monday, 1 June 2009
Wednesday, 27 May 2009
Wednesday, 20 May 2009
Tuesday, 12 May 2009
Monday, 11 May 2009
HBase: Bigtable-like structured storage for Hadoop HDFS
Just as Google's Bigtable leverages the distributed data storage provided by the Google File System, HBase provides Bigtable-like capabilities on top of Hadoop Core. Data is organized into tables, rows and columns. An Iterator-like interface is available for scanning through a row range (and of course there is the ability to retrieve a column value for a specific key). Any particular column may have multiple versions for the same row key.
Wednesday, 6 May 2009
Thursday, 30 April 2009
libxml2 indenting or formatting output
The xml file was:
<?xml version="1.0"?>
<root>content<child1>child1 content<child2>child2 content</child2><child3>child3 content</child3><child4>child4 content<child5>child5 content</child5></child4><child6>child6 content</child6></child1></root>
Here you notice that the nodes that have child nodes also have content - I didn't know this was possible in xml. I guess that's why Daniel Villiard harps on how whitespace is significant.
Anyway I removed the content from the nodes that had children and low and behold:
<?xml version="1.0"?>
<root>
<child1>
<child2>child2 content</child2>
<child3>child3 content</child3>
<child4>
<child5>child5 content</child5>
</child4>
<child6>child6 content</child6>
</child1>
</root>
Works like a dream...
Friday, 24 April 2009
OpenMP programming
g++ -Wall -o opm opm.cc -fopenmp
#include <stdio.h>
#include <omp.h>
int main () {
int nthreads, tid;
/* Fork a team of threads with each thread having a private tid variable */
#pragma omp parallel private(tid)
{
/* Obtain and print thread id */
tid = omp_get_thread_num();
printf("Hello World from thread = %d\n", tid);
/* Only master thread does this */
if (tid == 0)
{
nthreads = omp_get_num_threads();
printf("Number of threads = %d\n", nthreads);
}
} /* All threads join master thread and terminate */
}
Wednesday, 15 April 2009
Tailor CVS to Git migration
Tailor VersionOne
Tailor is a tool to migrate changesets between Aegis, ArX, Bazaar?, Bazaar-NG, CVS, Codeville?, Darcs, Git, Mercurial, Monotone, Perforce, Subversion? and Tla? repositories. There are OtherTools with a similar goal, most of them tied and sometime more specialized on a particular system.
See SourceRepository and TargetRepository for more details on supported version-control systems, and ConfigurationFile for how to describe to tailor what you want it to do.
It perform its job executing several MigrationSteps, using a ReplayMechanism? that basically fetches the changesets from any of the source backends and effectively replay each one on the target system. The process can be configured very deeply in several ways, from tweaking a relatively simple configuration file to writing pre- and post- PythonHooks?.
It was written by Lele and it is implemented in Python.
Be sure to RTFM :-)
Local Amazon's EC2 api
Tuesday, 14 April 2009
dual screen script
#!/bin/bash
#xrandr --addmode VGA 1280x768
#xrandr --addmode VGA 1440x900
#xrandr --output VGA --mode 1440x900
#xrandr --output VGA --right-of LVDS
xrandr --output LVDS --auto --output VGA --auto --right-of LVDS --output TMDS-1 --off
Monday, 30 March 2009
Friday, 20 March 2009
Using Open Office/Excel to convert a unix epoch time_t value to a date and time
=(((D2/60)/60)/24)+DATE(1970;1;1)+(10/24)
http://spreadsheetpage.com/index.php/tip/converting_unix_timestamps/
http://www.fourmilab.ch/documents/calendar/
Tuesday, 17 March 2009
Monday, 16 March 2009
Qwt - Qt Widgets for Technical Applications
5.1.1
The Qwt library contains GUI Components and utility classes which are primarily useful for programs with a technical background. Beside a 2D plot widget it provides scales, sliders, dials, compasses, thermometers, wheels and knobs to control or display values, arrays, or ranges of type double.
Friday, 13 March 2009
Thursday, 12 March 2009
Monday, 9 March 2009
Comprehensive C Archive Network
List of all CCAN modules:
Note that two downloads are offered: the first includes with all the other ccan modules this module uses, the second is a standalone download.
Or you can just download the tarball of everything including CCAN tools (142K).
Wednesday, 25 February 2009
Git code review using Gerrit
Web based code review and project management for Git based projects.
Objective
http://code.google.com/p/gerrit/
https://review.source.android.com/Gerrit#all,open,n,z
Thursday, 19 February 2009
Sphinx full text search
Generally, it's a standalone search engine, meant to provide fast, size-efficient and relevant fulltext search functions to other applications. Sphinx was specially designed to integrate well with SQL databases and scripting languages. Currently built-in data sources support fetching data either via direct connection to MySQL or PostgreSQL, or using XML pipe mechanism (a pipe to indexer in special XML-based format which Sphinx recognizes).
As for the name, Sphinx is an acronym which is officially decoded as SQL Phrase Index. Yes, I know about CMU's Sphinx project.
Wednesday, 18 February 2009
Tuesday, 17 February 2009
Metapixel
Metapixel - A Photomosaic Generator
What is it?
Metapixel is a program for generating photomosaics. It can generate classical photomosaics, in which the source image is viewed as a matrix of equally sized rectangles for each of which a matching image is substitued, as well as collage-style photomosaics, in which rectangular parts of the source image at arbitrary positions (i.e. not aligned to a matrix) are substituted by matching images.
Simpycity in Pylons
Posted Tuesday Feb 10th, 2009 05:02pm
by Aurynn Shaw | Permalink
Project Design
Simpycity's core philosophy is that the DBA is going to perform the vast majority of the schema design without the aid of a conventional ORM.
This is a marked divergence from most other ORMs and database abstraction layers, and it has an impact on how your project should be designed.
The best results with Simpycity will be seen with a strong up-front requirements analysis, thorough schema design, and a consistent, fixed database API.
Wednesday, 11 February 2009
Thursday, 29 January 2009
Wednesday, 14 January 2009
Fivedash accounting
FIVEDASH™
Australian bred accounting software for small business
Why use FIVEDASH™?
- · Unlimited users
- · Cost-effective customization
- · Secure, reliable back-end
- · Feature competitive
- · No license fees (GPL 3)
We believe
- · the basic tools of business should be free
- · software should be customizable, and easy to customize
- · software should grow with your business, from sole operator, to multinational
- · everyone has a right to data security
- · business data should be transportable, and accessible from anywhere
tim's shared items
Blog Archive
-
▼
2009
(64)
-
►
August
(16)
- Pyjamas examples
- Skype trojan source code
- Webhooks & PubSubHubbub
- Pyjamas - Google Web Toolkit in Python
- electronic music
- Qt Designer and subclassing QGraphicsView
- Message Queue links
- Electronic music and Sound Cloud
- Roulette Ruby
- Ruby Roulette
- Real time physics simulators
- Git
- static checking tools
- HTML 5 resources
- Open Source Windows Applictions
- Compiler errors
-
►
August
(16)