Popular Posts

Tuesday, March 22, 2011

C/C++

All languages use libraries, so that isn’t really quite a distinguishing feature. However you should probably pay attention to the *quality* of libraries available.
Java and Python have the best general libraries, hands down. C++ is good with QT.

http://olvemaudal.wordpress.com/2008/11/27/c-idioms-by-example/
http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms
http://www2.research.att.com/~bs/bs_faq2.html (bjarne’s style/idioms faq)
http://stackoverflow.com/questions/1759613/what-c-idioms-should-c-programmers-use

- qt smart ptrs:
http://stackoverflow.com/questions/2884202/qt-and-auto-ptr
http://labs.qt.nokia.com/2009/08/25/count-with-me-how-many-smart-pointer-classes-does-qt-have/

PIMPL (pointer to implementation idiom)
http://en.wikipedia.org/wiki/Opaque_pointer
http://www.c2.com/cgi/wiki?PimplIdiom
http://www.gotw.ca/gotw/028.htm (fast pimpl)

RAII
http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization

Patterns:
http://en.wikibooks.org/wiki/C++_Programming/Code/Design_Patterns
http://en.wikipedia.org/wiki/Singleton_pattern
http://en.wikipedia.org/wiki/Observer_pattern
http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern
http://en.wikipedia.org/wiki/Decorator_pattern
http://en.wikipedia.org/wiki/Delegation_pattern
http://en.wikipedia.org/wiki/Factory_method_pattern
http://en.wikipedia.org/wiki/Reactor_pattern

COM:
http://msdn.microsoft.com/en-us/library/ms680573%28v=vs.85%29.aspx
http://en.wikipedia.org/wiki/Component_Object_Model

Look at the syllabi:
Basic
  1. Introduction to the STL
    • purpose and structure of the STL: containers, algorithms, and iterators
    • review: class and function templates
    • container classification, characteristics, and content
    • iterator classification and behavior
    • generic algorithms and iterators
    • design of generic algorithms and performance guarantees
    • iostream iterators
  2. Generic Algorithms
    • review: generic algorithms and helper templates
    • interaction between algorithms and iterators
    • generic algorithm goals, documentation, and design
    • sequences, subsequences, and sequence errors
    • descriptions of STL algorithms
  3. Containers
    • properties, insertion and deletion effects, specific functionality
    • vectors
    • lists
    • maps
    • containers and exceptions
    • choosing an appropriate container
    • container adapters
  4. Function Objects
    • functions and generic algorithms
    • function objects and generic algorithms
    • algorithm families
    • function objects and containers, strict weak ordering
    • standard function objects
Advanced:
  1. Adapters
    • function object adapters
    • binders and negaters
    • helper tempates and template argument deduction
    • pointer to function adapters
    • composing new function objects
    • designing function object adapters
    • container adapters
    • priority_queues and heaps
  2. Iterator Design
    • the iterator base class and iterator traits
    • review: class template specialization and partial specialization
    • iterators and const_iterators
    • accessing iterator information in generic algorithms
    • versioning of generic algorithms based on iterator class
    • reverse iterators and iterator adapters
    • insert iterators, adapters, and helpers
    • raw storage iterators, adapters, and helpers
    • designing new iterators
  3. Container Design
    • containers vs. STL containers
    • STL container requirements
    • design of a simple STL container
    • design of a more complex STL container
    • containers, iterators, and const_iterators
    • basic STL components
  4. Allocator Design
    • containers and memory management
    • allocators and the standard allocator
    • allocator portability problems
    • container use of allocators
    • design of a special-purpose allocator
    • allocator hacking techniques
"i'm used to writing async code already and this is all neatly tied to the posix layer, which makes non-blocking network stuff ridiculously easy. there's also the package system (npm), async test suites, no worries about messing up the global namespace, etc. you gotta OOP tho if you just throw literals around you can't have or protect a local scope"

Javascript (node.js) http://nodejs.org/ review:

http://www.w3schools.com/js/js_howto.asp
http://www.w3schools.com/xml/xml_whatis.asp
http://www.w3schools.com/dom/dom_intro.asp

NODE
  • downside, requires libssl-dev (fixed with -no-ssl)
  • install with “git clone https://github.com/joyent/node” (ryan is now joyent)

Use Prototype Programming, Delegation.
prototype based programming -http://coweb.cc.gatech.edu/cs2340/4288
// Example of true prototypal inheritance style in JavaScript.
// "ex nihilo" object creation employing the literal object notation {}.
var foo = {one: 1, two: 2};
// Another "ex nihilo" object.
var bar = {three: 3};
// Gecko and Webkit JavaScript engines can directly
// manipulate the internal prototype link.
// For the sake of simplicity, let's just pretend
// that the following line works regardless of the
// engine used:
bar.__proto__ = foo; // foo is now the parent of bar.
// If we try to access foo's properties from bar
// from now on, we'll succeed.
bar.one // Resolves to 1.
// The child object's properties are also accessible.
bar.three // Resolves to 3.
Don’t bother with Normal OOP. tho you can :
  • http://msdn.microsoft.com/en-us/magazine/cc163419.aspx
  • http://en.wikipedia.org/wiki/Prototype_based_programming
  • delegation http://en.wikipedia.org/wiki/Delegation_%28programming%29
Docs:
  • http://www.w3schools.com/JS/js_intro.asp (javascript)
  • http://nodejs.org/docs/v0.4.1/api/all.html#__filename (node api)
operator overloading (not supported, this spec is fake)
http://www.mozilla.org/js/language/js20-2000-07/libraries/operator-overloading.html

https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript
node examples:
http://blog.osbutler.com/categories/node-by-example/?page=3
https://github.com/nodejitsu/nexpect/blob/master/demo.js (uses spawned procs)

“DOn’t bother with OOP, just learn the DOM”
http://en.wikipedia.org/wiki/Document_Object_Model

look at the GOOG custom search API, it’s in JSON:
http://code.google.com/apis/customsearch/v1/overview.html
http://www.w3schools.com/ajax/default.asp

Monday, March 21, 2011

Programming Languages as of March 2011

Tiobe's chart which force me to take stock of my favorite programming languages. Erlang is #39. It's pretty obvious it's nothing more than a POC language to take ideas from. Scala is even worse, down at #44. Go is at #14 and falling, and pretty much a one trick pony (Go routines).

Sunday, March 20, 2011

Mathematics

The “ESR 3”

additional:

Strain’s Map:

Thursday, March 10, 2011

Header

http://farm1.static.flickr.com/113/263512030_5d2e69d657_z.jpg?zz=1

ふい (coming to nothing, ending without result, total waste)

Saturday, March 5, 2011

How to Avoid Stupid Startup Recruiters

"So. What do you do?"

This is a question i hear more and more in the dot com cafe section of District Five - the cafe where all the hipsters fight over power plugs so that they can run their latest "XML and Java to put Stupid Stuff on the Web"(tm) startup from when the cafe opens at 6am to when it closes at midnight.

It is a question that makes my skin crawl.

I usually reply, "I am a programmer." If they still look happy to hear that, I continue with, "A programmer is a professional coder, which just means that you have grown the hell up and you have a freaking job and and you don't care about stupid stuff on the web cos you're making money and are acting as an ADULT.

When they try to tell me about all the wonderful web 2.0 bullcrap, I point out that I program things for medical barcode readers, and other medical software. "The stuff that keeps people alive."

Most piss off about then.

If they bother me more, I tell them that when I'm not at work, I try to stop talking about work.

Wednesday, March 2, 2011

Why I don't Use Facebook

People keep asking me when I will use Facebook.

Here's the long version of why I do not. Every time we choose to use a product we are choosing to support a design decision. Actually several design decisions, as engineers out there will know, since every project is a conglomeration of tradeoffs. The one major thing I cannot support in good conscience, is PHP.

Let me just give you a few quotes from the man who designed, maintains, and gave us PHP:

There are people who actually like programming. I don't understand why they like programming. -Rasmus Lerdorf

So as you can see, clearly, programmer happiness isn't something that Mr. Lerdorf cares about. So you can expect that since this isn't a priority, that coding in his language will be full of Pain and Suffering.

I don't know how to stop it, there was never any intent to write a programming language [...] I have absolutely no idea how to write a programming language, I just kept adding the next logical step on the way

I know how to stop it, Mr. Lerdorf. And it is called the Free Market. If everyone stops using a product written in PHP, then there will be no more engineers demanded who write PHP. Then there will be no more PHP.

And so that is why I will not use Facebook.