Wednesday, October 31, 2007

Linus on GIT

The concept of distributed source code management system is very interesting. IMHO GIT is a much better idea compared with Subversion. GIT takes care of the social factors involved in running a open source project. Here is a talk by Linus on GIT.

Interactive Shell

Interactive Shells for some popular languages.

IPython ==> Python (supports readline)
IRB ==> Ruby (supports readline)
php -a ==> PHP
BeanShell ==> Java (interpretor for compiled language?? )
SquareFree Shell ==> JavaScript

Installing readline library should help you auto complete and browse through history.

Yahoo! Pipes

I've been playing with Yahoo Pipes for a while now. Here is a Yahoo Pipe to read orkut scraps. You can choose to receive the scraps in RSS form.

Douglas Crockford on JavaScript

YUI Theater has excellent talks by Douglas Crockford on JavaScript. JS follows prototype based objects and supported prototyped inheritance. Douglas explains the fundamental difference between prototype based object orientation and class based object orientation.

Friday, October 26, 2007

Meta Programming with Ruby at Singapore Ruby Brigade

Choon Keat Chew gave an excellent talk on Meta Programming at the Singapore Ruby Brigade today. He explained meta programming with a logger example. Generally in Java we program to the interface and subclass existing classes to introduce new features. But in Ruby you could directly implement the new method or feature to the object and it instantly gets reflected over the entire scope of the program. It is kinda dangerous in large teams, since anyone can override existing classes and change their behavior by modifying their methods. He also discussed extensively about method_missing , *args feature in Ruby. From what I understand the method_missing function lets you avoid "method not found exception", and also generate setter/getter and other simpler functions automatically. This is one case where meta programming is explicitly visible. He also discussed about simplicity of Rake. Implementing a simple task with Rake will take a lot less time compared with Ant. We also discussed about ducktyping, design patterns and readline library in the end.

Wednesday, October 24, 2007

FaceBook Developer Garage

Today I attended Asia's first Facebook developer garage at NUS Staff Club. The even was extensively advertised and there were around 200 people. But most of the people were only interested in business and social networking part. There were very few developers as usual. I was late; hence I missed the video conference with F8 developers from SanFransico. For those who didn't turn up, don't worry you did not miss anything.

Comparing Programming Languages

Comparing programming languages has always been interesting. A thorough understanding of Object Orientation, Static/Dynamic/Duck typing, Functional Programming, Generics, Aspects, Closures, Design Patterns, Data Structures and Meta Programming will let a programmer hop from one language to another very easily. For example, though both Java and JavaScript are Object Oriented, Java is Class-Based whereas JavaScript is Prototype-Based. Java forces programmers to implement proper namespaces, where as JavaScript does not. Most JavaScript programmers define variables in global scope, though it is possible to organize them with namespaces. Haskell is fundamentally different from other programming languages since it uses functions as basic building blocks. Python, Perl, Ruby and PHP support Dynamic Typing, where as C, C++ and Java support Static Typing. DuckTyping is implemented in the core of Python, but not in languages like Java, though you can emulate Duck Typing in Java as well. Design patterns are suppose to be language independent, but some of them get implemented in the core of some languages. For example the Iterator pattern is implement in Java, Python etc. So we don't even realize that we are using Iterator patterns when we use Python or Java. On the other hand we manually implement Iterator patterns in C.

Java Bean Shell

Java Bean Shell is a handy tool for Java programmers to test APIs, regular expressions, and other small code snippets. In particular if you are working on Client-Server architecture, it takes long time for you to test small changes in the back end. Though Java is compiled language, the interpreter tool in BeanShell will let you interpret the code. It can be downloaded from http://www.beanshell.org/ .

Demo

//to start Console
$ java -classpath ./bsh-2.0b4.jar bsh.Console
//to start Interpreter
$ java -classpath ./bsh-2.0b4.jar bsh.Interpreter
bsh % import java.io.Decoder;
bsh % String dir = "%2Fhome%2Fcodeshepherd";
bsh % System.out.println(dir);
%2Fhome%2Fcodeshepherd
bsh % System.out.println(Decoder.decode(dir));
/home/codeshepherd


The Interpreter does not support history and coloring. But the Console does. But the output from Console is thrown in the parent shell.

Monday, October 22, 2007

Open Web Application Security Project - Singapore Chapter

OWASP-Singapore meetup was held on 9th Oct at Geek Terminal in Singapore. Five of us meet and had a chat for about an hour. Geek Terminal is a nice place for geek meetups. I guess they provide laptops with wifi connection to use and they also have mini rooms with projects for conducting mini talks. I'm not sure if those laptops run Linux, would be great if it does so. Last Saturday Facebook and Slashdot community hosted a meeting there, but I could not make it . I hope we have more of these Security related meeting and Open Hack Days in and around Singapore.

An Informal Interview With a Haskell Hacker

2:33:03 PM codeshepherd: given that haskell is a functional programming language.. what are the main differences you find when you compare haskell with other langs
2:34:10 PM rajagopal.n: modifying the system state is something that is still tricky for me to do in some cases. For instance, I was thinking I had understood Monads properly, only to understand that there is more that I didn't understand clearly, when i tried to do some database manipulation using the HSQL connectors, and print the resultsets on a webpage using HAppS.
2:34:22 PM rajagopal.n: but otherwise, if all that you want to do is lot of computation
2:34:28 PM rajagopal.n: writing Haskell code is fun
2:34:36 PM rajagopal.n: you wanna one line binary tree?
2:34:38 PM rajagopal.n: you can
2:35:05 PM rajagopal.n: you can construct all such stuff with ease, without leaving space for much bugs.
2:36:43 PM codeshepherd: function are building blocks of language.. and not objects.. so is it difficult for people from OOP background to learn haskell ?
2:40:00 PM rajagopal.n: The difficulty of learning depends on the OOP that you were using. Most people find it difficult to get used to the concept of lazy evaluation, and immutable data in Haskell, being used to languages where the statements get executed in sequence, and having been used to using variables as counters and stuff. people tend to ask in C, C++, I can do a I++ to increment the value of I. but why does haskell make these variables immutable? It takes time for them to understand that immutability is a way to facilitate lazy evaluation.
2:40:27 PM rajagopal.n: It needs forgetting some of the imperative programming concepts to start accepting the functional programming concepts
2:41:46 PM codeshepherd: Does haskell support Meta Programming ? If so how different is it from Ruby's meta programming implementation ?
2:43:51 PM rajagopal.n: Haskell supports meta programming. I've just learnt it to understand some parts of the HAppS example blog application code. As I hadn't done any meta programming in Ruby, I'm not sure about how it compares to it
2:45:08 PM codeshepherd: Does Meta programming combined with Functional programming pose special advantages ?
2:49:53 PM rajagopal.n: I'm not sure about that da.
2:50:19 PM codeshepherd: ok.
2:50:41 PM codeshepherd: Does Haskell support Duck Typing ?
2:51:06 PM rajagopal.n: ya,

Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Prelude> let bar a = map (*1) a
Prelude> :t bar
bar :: (Num a) => [a] -> [a].

you see that it makes it Num
2:51:53 PM codeshepherd: Duck Typing with functions as basic blocks is kinda difficult to understand ? Do functions act like so called ducks in duck typing ?
2:54:16 PM rajagopal.n: There is not difference in the way you see functions and data in a functional programming language
2:57:02 PM codeshepherd: Is there any reason for people to choose Haskell over other languages for hobby programming ?
3:00:49 PM rajagopal.n: Haskell is pure functional. You get to learn a lot of new things, being a pure functional language that restricts modification to the state to be done only through monads. Learning Haskell and teasing the brain is refreshing when you get bored with all those languages that mostly differs only by syntactic sugar or a few extra features.
3:01:55 PM codeshepherd: ok

Friday, October 19, 2007

My talk at Singapore Linux Meetup

This wednesday I gave a talk on websecurity titled "Hacking the Web" at Singapore Linux meetup. This is my first talk in Singapore and as usual I was kinda nerves. Around 35 to 40 people attended the talk and there were lot of questions from the audience. We had some technical problems initially, with internet connection. I was not able to connect to the internet from my macbook because of dhcp version mismatch. So I'd to run through the talk without internet connection and then later borrow a Windows laptop to demonstrate things on internet. The slides are hosted at http://www.codeshepherd.com/hackingtheweb/hackingtheweb.html . Thanks to Darrel for organizing the talk and everyone else who came down. I will be giving the same talk at Singapore Poly, National University of Singapore, and Open Source Developers Conference 2007 at Brisbane, in the near future. Overall this talk turned out to be a very good experience.

Friday, October 12, 2007

Geeky License Plates

geeky license plates..
http://thesiblog.blogspot.com/2007/04/top-ten-geek-license-plates.html

Thursday, October 04, 2007

Wife and Girl Friend

If
Family:Package
GirlFriend:Private
Wife: ?
Adultery: ?
Diverse: ?
OpenMarriage: ?

Choices
1)final
2)static
3)Public casting for Private
4)Abstract
5)Interface
6)BCEL


(03:18:29 PM) codeshepherd: if private is for girlfriend , then what is for wife ?
(03:18:46 PM) ***cybereal: hides his "jib" whatever that is...
(03:18:51 PM) Fanook: codeshepherd: static
(03:18:57 PM) cybereal: final
(03:19:18 PM) cybereal: unless you're in an open marriage, then it's abstract
(03:19:22 PM) codeshepherd: Fanook: static does not suit... finay may be ..
(03:19:36 PM) cybereal: Or if you're homeless it's transient...
(03:20:06 PM) Fanook: cheeser: hmmm, how would one implement a divorce then? :)
(03:20:22 PM) cybereal: Fanook: bytecode manipulation!
(03:20:26 PM) Fanook: hehe
(03:20:28 PM) cheeser: that's research i'll leave to others. P^)=
(03:22:08 PM) codeshepherd: adultery = ?
(03:22:21 PM) freeone3000: adultery is achieved through bcel.
(03:22:43 PM) freeone3000: Or those who put things public that should be private.
(03:22:57 PM) codeshepherd: hehe :)
(03:24:52 PM) cybereal: these metaphors would be more fun if java allowed multiple inheritence

Tuesday, October 02, 2007

A map is a collection of pairs, but it's not a Collection.

A funny discussion at #Java@irc.freenode.net


(02:13:47 AM) iamgedanken: sorry for the noob question, but what is the difference between an arraylist and a collection?
(02:14:13 AM) ojacobson: An ArrayList is one kind of Collection; there are others
(02:14:29 AM) Logi: ArrayList implements List extends Collection
(02:14:34 AM) iamgedanken: o rly
(02:14:42 AM) iamgedanken: ok that makes sense
(02:14:47 AM) ojacobson: ~javadoc Collection
(02:14:47 AM) javabot: ojacobson, please see java.util.Collection: http://java.sun.com/javase/6/docs/api/java/util/Collection.html
(02:14:49 AM) iamgedanken: thanks very much
(02:14:56 AM) Logi: HashMap implements Map which is a collection even if it doesn't implement Collection directly
(02:15:05 AM) kimtiede: An ArrayList gives easy random access to the elements
(02:15:12 AM) codeshepherd: Collection = List Or Set ; List = ArrayList or LinkedList .. iamgedanken
(02:15:21 AM) Logi: Map m=...; m.keySet() instanceof Set implements Colletion
(02:15:32 AM) cybereal_design_patterns_utah: Logi: to be fair, it's a relationship of collections as provided
(02:15:38 AM) cybereal_design_patterns_utah: entrySet, keySet, values
(02:15:43 AM) codeshepherd: List and Set are interfaces implementing Collection... ArrayList is a Class implementing interface List.. iamgedanken
(02:16:16 AM) iamgedanken: alright I understand now thanks for your time
(02:16:20 AM) iamgedanken: :)
(02:16:32 AM) codeshepherd: Logi: HashMap is not a Collection..
(02:16:45 AM) codeshepherd: HashMap does not implement the Collection interface ..
(02:16:48 AM) Logi: codeshepherd: it is with a lower case "c"
(02:17:24 AM) aditsu: in STL style it would be a collection of pairs :)
(02:17:33 AM) codeshepherd: Logi: sorry I dont unerstand.. what is the difference ?
(02:17:51 AM) ojacobson: codeshepherd: A map is a collection of pairs, but it's not a Collection
(02:18:01 AM) ojacobson: eg it doesn't implement the Collection interface
(02:18:03 AM) Logi: codeshepherd: Collection is an interface and Map doesn't extend it. but what ojacobson said
(02:18:21 AM) codeshepherd: oh ok.. Yes, in English.. not in Java :P
(02:18:26 AM) ojacobson: Right :)