Tuesday, September 9, 2014

Thoughts On Best Practices

OH: “Do programmers have any specific superstitions?”

“Yeah, but we call them best practices.”

-- David Grandinetti

Good read on best practices:

"It has a chilling effect on our progress as an intellectual craft when people pretend that a best practice exists" -- James Bach

"Rather than simply stating what we've done and how we did it, we feel compelled to puff it up into a spiny, intimidating best practice. We attach our egos to our code frameworks. If someone doesn't agree with our approach, they're attacking us personally. If someone has a different best practice, they're amateurs who don't understand the problem domain" -- Jeff Atwood

My aversion on best practices, everyone has their own beliefs, it follows that everyone has their own notion of best practice

There's really no best practice, everyone has one; or should we just take it the easy way and just find like-minded folks who share our notion of best practice? It's not good to find folks who'll just reinforce same beliefs, things are a lot better and interesting when we find others who can find loopholes or provide constructive criticism on things we believe are right

Lastly, most of the time, I find that people who tend to ask a best practice question can be classified in two types, either they are lazy and wanted to be spoonfed or an askhole

Believing our practice is the best practice, tends to make us crap on other people's choice and enthusiasm, and it's not good

Better not to believe there's a best practice at all especially if we will just use it on intimidating other people

Happy Coding!

Thursday, August 21, 2014

When using jQuery, let its API do the heavy lifting

Instead of this:

var particles = $('.particle');
$('li').each(function() {
    if (!$(this).is(particles))

Do this:
var particles = $('.particle');

Thursday, July 24, 2014

On TypeScript, the this keyword doesn't always reference the instance of a class

///<reference path='jquery.d.ts' />

class Mate {
    public n : number;

    public name : string = "Freddie";

    public nick : string = "Fred";

    public message() : void {

        var people = new Array<Person>();

            var p = new Person();
            p.name = "Ely";

            var p = new Person();
            p.name = "Raymund";

        $.each(people, function() {
            alert('inline: ' + this.name + ' -- ' + this.nick);
        inline: Ely -- undefined
        inline: Raymund -- undefined

        $.each(people, this.alerter);
        Coming from traditional OOP, I expected:
        Freddie -- Fred
        Freddie -- Fred

        What happens:
        Ely -- undefined
        Raymund -- undefined

        $.each(people, () => alert('inline: ' + this.name + ' -- ' + this.nick) );
        inline: Freddie -- Fred
        inline: Freddie -- Fred

        $.each(people, () => this.alerter());
        Freddie -- Fred
        Freddie -- Fred


    public alerter() : void {
        alert(this.name + ' -- ' + this.nick);



class Person {
    public name : string;

$(function() {
    var m = new Mate();

Thursday, May 15, 2014

Tuesday, May 6, 2014

PostgreSQL (mis)feature

Martin Smith pointed out a gotcha on Postgres feature I recommended

GROUP BY on alias doesn't work properly when the alias has a same name from the table's columns

select 'foo' as Table_name
from information_schema.tables 
group by Table_name

Live code: http://sqlfiddle.com/#!15/d41d8/1920

Tuesday, April 22, 2014

Dropdown in ng-grid

The controller:

var app = angular.module('app', ['ngGrid']);

app.controller('bodyController', function($scope, LanguageList) {
  $scope.myData = [{name: "Moroni", language: 'fr'},
                     {name: "Tiancum", language: 'en'},
                     {name: "Enos", language: 'nl'}];
    $scope.gridOptions = {
            data: 'myData',
                enableCellSelection: true,
                enableRowSelection: false,
                enableCellEditOnFocus: true,
            columnDefs: [
                    field: 'language', enableFocusedCellEdit: true,
                    editableCellTemplate: 'language_edit.html',
                    cellFilter : 'LanguageMap'
                {field: 'name', enableFocusedCellEdit: true }

            canSelectRows: false
    $scope.languages = LanguageList;
.factory('LanguageList', function() {
  return [
      { language_code : 'en', language_title: 'English' },
      { language_code : 'fr', language_title: 'French' },
      { language_code : 'nl', language_title: 'Netherlands' }
.filter('LanguageMap', function(LanguageList) {
  return function(input) {
    var languagesMatched = LanguageList.filter(function(lang) {
      return lang.language_code == input;
    if (languagesMatched.length == 1)
        return languagesMatched[0].language_title;
        return '*unknown language*'
    return text;

Main page
<!DOCTYPE html>
<html ng-app="app">
  <head lang="en">
    <meta charset="utf-8">
    <title>Custom Plunker</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
    <script type="text/javascript" src="ng-grid.js"></script>
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="ng-grid.css">
      document.write('<base href="' + document.location + '" />');
    <script src="app.js"></script>
<body ng-controller="bodyController">
    <div ng-grid="gridOptions" style="height: 400px">


Dropdown template:

ng-options='l.language_code as l.language_title for l in languages'

ng-class="'colt' + $index" ng-model="COL_FIELD" ng-input='COL_FIELD' data-placeholder="-- Select One --" 


Live code: http://plnkr.co/edit/IOBXNy2hcJWbtMXZS3SO?p=preview

Friday, March 14, 2014

Sprite Kit: Animation in English-Speak

Message sequence of actions to SKAction, then message that sequence of actions to repeatActionForever, then run that forever action to the player (SKSpriteNode)