December 21, 2011

[Mac] Delete backups from Time Macine

I got disk full message from Time Machine with 2TB external HDD.  I found this helpful video showing how to remove (old) backups from Time Machine disk.


December 19, 2011

Book: Programming Erlang: Software for a Concurrent World



I actually read this book a few years ago -- I was searching for a better way for concurrent programming and found Erlang.  Coincidently, Erlang was starting to get some attention little after.  I believe this was the only Erlang book  at that time.  The book clearly shows and explains how to program in Erlang.  Reading this book was like a wake-up call for me, whose background is mostly OOP and procedural languages.

Book: Clojure in Action


There are many books on Clojure, and after reading/skimming through most of them, I found this book is the best one to start with.  I enjoyed reading this book very much, and I strongly recommend to anyone who wants to know Clojure.  After this book, you might want to read Joy of Clojure, which delves into Clojure deeper.

December 2, 2011

Common Lisp, Web framework, VPS, OSX issues

Goal: 
Develop web apps using common lisp with a web framework in Linux environment.

Environment:

Dev: OSX 10.6 Snow leopard.  

Target: Ubuntu 10.10 on OpenVZ, tiny config, hosted in VPS.


Issues:

 Two widely used common lisp web frameworks and require multi threading: 

  1. weblocks
  2. hunchentoot

(Use quicklisp to install them.) 


1. Dev env:

OSX's CLISP binary doesn't support multithreading.

Tried SBCL, and macport binary does support multithreading.

 
2. Target env:

Ubuntu's CLISP package supports multithreading.  

SBCL install via apt-get failed. There's a problem with memory (don't remember the specific message).  It was due to SBCL's memory requirement, needing 8GB of memory for its GC, but the server only has 512MB with no swap, since openVZ does not give swap.

On dev env - use SBCL, on target, use CLISP.

Some suggested that LISPBOX has Clozure Common LISP and the binary supports multithreading on OSX, therefore use that (lispbox's clozure).  However, on this VPS' Ubuntu, installing LISPBOX seems unnecessarily difficult, due to the LISPBOX binary's age and wouldn't install on VPS' headless Ubuntu 11.04.


Conclusion 

There is an issue with CLISP on OSX , SBCL on OpenVZ based VPS.

 

Apache, Glassfish and JAX-WS

Install

Environment: Apache, Glassfish 3.1.1 (or here) on Ubuntu server 11.04, behind FW with VIP.  Here is the good tutorial on installing Glasfish on Ubuntu.


Start/Stop commands for Glassfish:

glassfish/bin/asadmin stop-domain domain1
glassfish/bin/asadmin start-domain domain1


- For virtual hosting, this page might be a good help.
- For SSL, see this page.

Apache + Glassfish

Usual Reverse Proxy configuration will work fine:

ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/


JAX-WS (Web Service) "soap:address location" Issue

My apache server is behind a firewall, and has a VIP, then using apache reverse proxy to Glassfish.  May be this set up is the cause of my problem, but I was getting the IP in ProxyPass/ProxyPassReverse in the JAX-WS's WSDL page for soap-address:location:
<soap:address location="http://127.0.0.1/myapp/mywebservice"/>

This is a problem for client to generate WS client codes using the WSDL.  I spent good amount of time Googling for the solution and found a few things:
1. it's been reported as a bug and is supposed to be fixed before 3.1.1.  May be my problem is caused by my environment: FW and VIP.
2. someone actually wrote servlet filtering to intercept the output, and regex the host name to change it to a correct one.
3. another solution was to grab the generated WSDL, save it locally, hand edit it, then upload.

#2 and #3 are all hacks and I applaud for the developers effort, but I did not like those solution because I am too lazy to do any workaround coding for some environmental issue, and do hand edit things each time WSDL is updated.  So did more digging and reading, found a simpler solution.  In the Apache config for the reverse proxy, just add one more line and it would look like this:

ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/



I hope this little finding saves other developers' time.

Rooting Nook Tablet

http://reviewhorizon.com/2011/11/how-to-root-jailbreak-enable-side-load-apk-on-nook-tablet-install-android-market-amazon-app-store/

It'd be nice if I can do some programming on the device directly (and compile too).

Nook SDK: https://nookdeveloper.barnesandnoble.com/tools-services/nook-tablet-sdk.html

Nook Color vs. Nook Tablet vs. Kindle Fire: http://www.barnesandnoble.com/u/compare-nook-tablet-vs-kindle-fire/379003173/

So far, Nook Tablet looks like it is the best low-end/cost tablet.

Amazon's Kindle source code

They're available for download at:
http://www.amazon.com/gp/help/customer/display.html?nodeId=200203720

...source codes for Kindle 2nd gen, 3rd gen, 3G, DX, 6" wifi, Touch, and the latest Kindle Fire.

September 15, 2011

Visualization

Great data visualization site: http://flowingdata.com/




Some interesting pages from this site:
Adding my two cents here:
  • GnuPlot, Python with Scipy/Numpy, PHP -- they are all very good tools for creating charts.
  • Use Google Chart, JavaScript or Flash for charting.
  • Search for existing tools first, rather than bang your head on the ground and write from scratch.


September 7, 2011

Great free kindle ebook from O'Reilly - Big Data Now



I just started to read this book.  It's very interesting and insightful.  Big data is becoming more and more important for any business and products.  Statistical and analytical approaches to derive meaning out of the data and add values to products is the key to win over competition.

September 6, 2011

quicklisp



ASDF doesn't work for me -- I couldn't install it properly on OSX, and it is obsolete anyway.  I found quicklisp (http://www.quicklisp.org/beta) instead, and it works quite well.


For Common Lisp, check your Common Lisp version -- I believe it requires at least 2.47.  


Simple Steps
  1. wget http://beta.quicklisp.org/quicklisp.lisp
  2. Run lisp: $ clisp (or sbcl)
  3. (load "quicklisp.lisp")
  4. (quicklisp-quickstart:install)
  5. ; load quick lisp at start up. do only once.
    (ql:add-to-init-file)
  6. ; check if pkg avail
    (ql:system-apropos "<package name>")
  7. ; load -- replace <package name> with package name
    (ql:quickload "<package name>")
Note
  • It will create and store downloaded modules under ~user/quicklisp.
  • Step#5 will modify ~/.sbclrc or ~/.clisprc
  • quicklisp doesn't resolve dependencies.
  • clbuild is another lisp package installer.
That's it.  Very simple.

September 3, 2011

Stanford opens some information technology courses to the world

Courses on artificial intelligence, machine learning, and databases will be delivered to virtual classrooms of ten of thousands of students, if not hundreds of thousands.


September 1, 2011

Book: The Passionate Programmer

I recently read The Passionate Programmer for the second time.  I wish I have read this book years ago.  If you are passionate about programming, or if you want to motivate yourself -- you should read this.  Ultimately, it is about being a great developer -- how to be one.

Get a Kindle
Very convenient and many ebooks are cheaper than printed books.

AI vs. AI. Two chatbots talking to each other

August 27, 2011

Mercurial using BitBucket and Eclipse

If the project is already created in Eclipse, but not in mercurial repository, then:

(1) Create a repository in BitBucket.
(2) Go into shell, and clone from BitBucket which is empty.

e.g. If I have created non-mercurial project in local eclipse called "hello_world":

$ mv hello_world hello_world.bak
$ cp -r hello_world.bak hello_world
$ hg clone https://bitbucket.org/BBUSER/hello_world
http authorization required
realm: Bitbucket.org HTTP
user: BBUSER
password: 
destination directory: hello_world
no changes found
updating to branch default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

(3) Then move or copy those files from the local project directory into the BitBucket cloned directory.


$ cd hello_world
$ hg add
adding ....
[ommit]

$ hg ci -u BBUSER
$ hg push

(4) Remove hello_world project from eclipse (make sure to have a backup) and from disk.
(5) In eclipse's menu -> New -> Other -> Mercurial -> Clone Existing Mercurial Repository, then click <next> button.
(6) In next dialog, enter URL to the BitBucket repository (get this when the repository was created, or go  to the site and find out),  username/password.
(7) Click next, next, finish.

...there should be an easier way...

August 26, 2011

12 Things A Programmer Really Needs To Know

"How do you answer the question, “what do I need to learn to be a good programmer?” I have written posts trying to answer that question, typically focusing on the languages that you should learn or the algorithms and other techniques you need to know. What about the rest of a programmer’s life? This is a less serious look at the life of a programmer. So, what does a programmer really need to know?"


...


http://regulargeek.com/2010/08/07/12-things-a-programmer-really-needs-to-know/

August 21, 2011

Selling Yourself: Why? and How!

Source:
http://www.javacodegeeks.com/2011/08/selling-yourself-why-and-how.html


I know many good developers who are under the impression that they either don’t have to sell themselves, or selling themselves is wrong, but is that really true?

First let me clarify by defining what I mean by “selling yourself”. I don’t mean “selling out”, I mean marketing yourself, what you’re doing and what your skills are. Especially to your organization.



June 16, 2011

Peter's blog: It's official: developers get better with age. And...

Peter's blog: It's official: developers get better with age. And...: "As a senior developer I get asked sometimes if constant change of technology is making me, well, obsolete. Personally I don't have problem w..."

May 19, 2011

(Updated) jMonkeyEngine + Eclipse = JMonkeyPlatform

JMonkeyEngine has "jMonkeyPlatform" -- all in one IDE (using eclipse) for jMonkey.  No more hassle with installing all different components.




May 3, 2011

April 30, 2011

ACM lifetime member!



I've been a member of ACM since 1998.  I finally decided to become a lifetime member. Being an ACM member means getting great benefits, magazines, and a lot of great information in Computer Science world.

My member VCARD: http://member.acm.org/~keithkim
Permanent email address: keithkim-at-acm-dot-org