Sunday, November 29, 2020

Doman-specific Language and Spoken Language

 The more I read about DSLs in computer science I keep thinking of how spoken language is evolving. Anyone who has lived more then 30 years has been able to witness the evolution of the spoken word around them. In which how they spoke as a teen-ager is very different compared to today.

Wish I had more time to chronicle all the fallacies and similia rites of Computer Science to real world DSLs, but I think most people can imagine the similarities for themselves.


Tuesday, July 28, 2020

Story Telling and the Dynamic Nature of it in Gaming

When I was a kid I got into role playing games. I think it has helped me a lot in my study of mathematics, as well as my communication skills in group based technical development. But what I think is most interesting is when I am preparing to have players go into a violent encounter, that can go in numerous different directions.

Firstly, I need to provide my definition of some words if you haven't read role playing games before:

NPC

Non Playing Character - Something that has intelligence that can interact with players.

Creature

Any object, animal, evil/neutral/good NPC, etc. that can attack players

The Dungeon

This is a good example of how things can be dynamic. Most adventures will have a creature in each room of a castle, underground cave, luxurious mansion, etc. But I always feel that once the players start fighting loudly with the first creature, all the other creatures will join the fight! So I often will have something that I think should be a bunch of small fights, into one large one. I'm not sure if this is right or wrong with may adventures I prepare for, but its how I run games. And the players normally enjoy it much more since it is more realistic of how those creatures would react to the combat situations.

The Story

This is often pre-defined by an adventure path, book, scenario, etc., but I think this should be very dynamic as well based upon the players and/or parties motivations for playing in the first place.

Saturday, July 25, 2020

Windows vs Mac

Normally every few years I switch between Windows and Mac for software development. Usually this is a painless process, and now that Windows 10 has the Windows Subsystem for Linux (WSL) I have been kind of happy. But now I have some BIG issues that I need to blog about so that I don't forget in 2050 (That is how old I plan to get to, I'll be 80 in 2050...)

1. No Trash Folder - I've been using this Windows laptop for a year now, and finally I deleted something that I wanted back! And then I see that there is no Trash folder! That by default it isn't turned on! And that I would have to change the settings to have it on... So now I use GIT for any files that I care about on this damn box...

2. Note - I'm a big fan of Note app on my old Mac, I have have a lot of notes and with Mac Note app I can sync it between my phone and laptop. And Windows doesn't have a good alternative. So now I'm paying for Evernote since I need my notes on all my devices...

3. Dark Mode - its just feels better on Mac, and all the apps I use on Mac support it. But with Windows a lot of apps I use don't plan to ever support it on Windows...

Etymologies

Etymology - the study of the origin of words and the way in which their meanings have changed throughout history. Here I have found that it is interesting that has knowledge and information is doubling every few days that people's vocabulary is also becoming more segregated. Working in computer science industry there are so many terms that have completely different meanings in other vocations. So I thought I would have this blog entry focused on a list of terms that have so many different meanings in different industries.

 4H - I grew up with that meaning Head,  Heart, Hands, Health and but most recently with technology companies it is now Honest, Humble, Happy, and Hungry.


Thursday, December 1, 2016

Language vs Language

When I was younger I took a number of classes in Spanish and French. When I was 19 I spent a month in France trying to absorb the language.

Recently I have been watching 3%, a series on Netflix that is in Portuguese. When I visited Spain I was amazed by the different languages spoken there. And I feel Portuguese is a language that has many differences compared to other languages.

For example, the work 'porque', which is also same in Spanish. This is translated as 'why', but I feel that has so much more meaning in Spanish and Portuguese.


Friday, November 25, 2016

Data Science Certification with Coursera

For the past year I've been working on a Data Science Certificate with Coursera. At first I was really excited about it. But as I've taken 9 classes toward the certificate I've gotten a little jaded. This is due to a few factors:

1. Cheating - The forum moderators have complained about the number of people who simply cut'n'paste from other website and submit that as their work. Which degrades what I have done.

2. Lack of Real World Knowledge - When I look at job openings in Data Science, I see they require developers with skills that are not at all related to the languages and exercises I've been doing for the certificate.

Link to one project I did for the classes I've taken:
http://rpubs.com/earlbingham/177552


Monday, September 19, 2016

First 10 out of 10 on Hackerrank

My first 10 out of 10!


import java.util.*;

public class Solution {

    public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);        
       String numArgsStr = scanner.nextLine();        
       double numArgs = Double.parseDouble(numArgsStr);        
       String integers = scanner.nextLine();        
       String[] integersArray = integers.split(" ");        
       double pos = 0.0;        
       double zero = 0.0;        
       double neg = 0.0;        
       for (int i = 0; i < integersArray.length; i++) {    
         int j = Integer.parseInt(integersArray[i]);            
         if(j < 0) {
                neg++;            } else if(j == 0) {
                zero++;            } else {
                pos++;            }
       }
       System.out.println(printDiv(pos, numArgs));        
       System.out.println(printDiv(neg , numArgs));        
       System.out.println(printDiv(zero, numArgs));    
    }

    static String printDiv(double num, double den) {
        if(Double.toString(num / den).length() > 8)
           return Double.toString(num / den).substring(0, 8);        
        else            
           return String.format("%-8s", Double.toString(num / den)).replace(' ', '0');    
     }
}

Friday, May 27, 2016

SailsJS

Just finished reviewing a book on SailsJS for Manning. The book was very fun to read and I learned a lot about JavaScript development. Last year I had worked on a couple of AngularJS projects, so it was refreshing to see a framework that could save a lot of time compared to Angular. http://nathanleclaire.com/blog/2013/12/28/the-good-the-bad-and-the-ugly-of-sails-dot-js-realtime-javascript-mvc-framework/ Nathan does a nice review of the frameworks in his article.

Monday, March 28, 2016

Coursera Class Online - Truly International

Just took my 4th Data Science class with Coursera and John Hopkins University. Thought this graph was interesting in regard to the number of students taking the same class at the same time. Amazing how you can take a class with 1100 other people all over the world. Yet I only had brief interaction with any of them. In which I had to grade some of the other students work.



Tuesday, March 22, 2016

Owning a Top 10 Website

17 years ago in a previous life I was the owner of righton dot com. When I would tell people that, they wouldn't believe I owned such a potentially lucrative website. This was when simple website names like that were selling for hundreds of thousands of dollars. In which a company in Oregon that had a device locking system sued to for the hostname. Back then I had a lot of free money and spent over $25k to keep the website URL.

What was interesting was the volume of emails I would receive. I had it setup so that if any email that went to XXX@ right on doc com would go into my email server. There I could filter through thousands of emails I would receive each day. I wrote filters that I applied so that I could find real emails compared to fake ones.

One interesting set of emails was some drunk guy in Australia who was trying to email a girl he had met. Obviously she had given him some fake email address and he kept emailing her, trying to apologize or something.

Monday, February 22, 2016

Why Tomcat Sucks

I've been a java developer since java first came out. During that time I have had to use HTTP protocol a lot, and with that Apache Tomcat. Initially I enjoyed how the JAR/WAR/EAR file would be used in a Tomcat container and have an uncompiled version in the 'work' directory.

Last year I had a new project where I could use whatever I wanted for the back-end. One of the first times I could choose. Since the project didn't have to scale to a high level, performance wasn't a primary concern. The HTTP calls did have to support the ability to upload and download excel type of data. So that needed to be fast, and I actually worked on 3 different ways to do the upload and download to see which would be faster. JSON, XML, and raw SQL.

All of this work I did using Python and Django, which I felt I was able to accomplish the work 3x faster than if I had written the same code in Java. Also the code was more self describing and would be very easy for a junior developer to review and pick up compared to its Java equivalent.

Here is a list of the things I think Python/Django is better than Java/Tomcat:

1. Real time compilation - I write a line of python, save the file. And the Django server automatically restarts with the new code. I know you can do the same thing using JRebel, but I have found that its a pain to support with various versions of Java and Tomcat. Also the Sales people at JRebel will call you almost every day asking if you plan to purchase the software, and/or how is the software going?

2. Self Describing Code - I felt the python is much more concise and easier to read. Decorators in Python are much more intuitive for security compared to Java annotations.

3. Online Documentation - Here is where I think Python shines compared to Oracles ancient documentation.

4. Native JSON Support - Having a JSON be a Dictionary object in python is awesome. In which a developer can easily stream a JSON request/response to a Dictionary object. Then do complex collection operations on the object.


Monday, December 14, 2015

node dot js


Great presentation on researching performance with node dot js:

http://techblog.netflix.com/2015/12/debugging-nodejs-in-production.html?imm_mid=0dd808&cmp=em-web-na-na-newsltr_20151209

I really liked how he had talked about performance troubleshooting in general, and then dives into explicit scenarios.

Tuesday, June 23, 2015

Manning Book Reviewers

Recently I have been very active reviewing new books for Manning:

http://www.manning.com/about/reviewer.html

Currently I'm reviewing a couple of books for them. One on Probabilistic Programming, and then another on salesjs.org

Both are very interesting subjects that I'm really excited about how these two technologies can be used.

http://hapijs.com/

Also reviewed a book on sails dot js, nice javascript framework to build sites.

Git and Linus Torvalds

I've seen articles regarding how Linus Torvalds made git in just 2 weeks. It is amazing how in 2007 no one was using Git, and now in 2015 everyone is using it (MicroSoft, Apple, Google, etc.)

What I thought was really interesting was the Google Talk Linus gave in 2007 to Google Engineers:

https://www.youtube.com/watch?v=4XpnKHJAok8

Here he states anyone who likes any other revision control system is stupid and ugly. Which at first I thought was very condescending. But as he goes into the reason why, I felt that level of confidence is amazing. It is amazing how one person can completely focus on one thing, and then do it really well. 

Here are the main salient points he gives in his presentation that are crucial to how Git has changed how work is done:

1. Performance - Branching, merging, updating is done in milliseconds, rather than minutes/hours with any other revision control system. That is a game changer in regard to productivity and how we do work.

2. Distributed - Network of Trust - Two terms used in his presentation that are fundamental to Linus philosophy on life, and being able to create unique value to something we all care about and inherently do naturally in our day to day lives.

3. Sha1 Hash Function - I've used this encryption often, but hearing him discuss it really makes the information hit home.

---

Recently I've become a big fan of git. Specifically for showing minor differences between the code I've been working on. This is because I'm working on multiple projects with the same code base. And I have to test and simulate different environments and different versions quickly. To download git:

https://git-scm.com/downloads

I download a lot of software all the time, so if you plan to run git on windows. I recommend also downloading cygwin and winmerge. And then learn how to manage your command line environment variables. Specifically your PATH environment variable. I'm continuously changing it all the time for different software I'm running.

git init

Initialize a git repository of the current directory and sub-directory files

git status


Display the current modified files and new files that haven't been added to the git repository.

Thursday, January 29, 2015

AngularJS Interview Questions

Write a directive

If you have a million records, how do you display on a web page



Q: What is a scope in angularJS?

$scope is the application object (the owner of application variables and functions).
The concept of a scope in Angular is crucial. A scope can be seen as the glue which allows the template, model and controller to work together. Angular uses scopes, along with the information contained in the template, data model, and controller, to keep models and views separate, but in sync. Any changes made to the model are reflected in the view; any changes that occur in the view are reflected in the model.

Q: What is the difference between a service and a factory?

When used within a module, a service function call will return a new value each time it is calls. While a factory function call will return a consistent value each time it is called.


Q: What is bootstrapping?

This code downloads the angular.js script and registers a callback that will be executed by the browser when the containing HTML page is fully downloaded. When the callback is executed, Angular looks for the ngApp directive. If Angular finds the directive, it will bootstrap the application with the root of the application DOM being the element on which the ngApp directive was defined.



Javascript Interview Questions

Question: What are Promises?

Promise is a proxy object for an event that is not necessary yet happened. A success and failure callback functions can be given to a promise, and once the promise is resolved (i.e. the 'promised' event happens successfully) or rejected (the 'promised' event fails), the corresponding callback gets called.
To access an object's promise, the then method is called.

Question: What does setTimeOut() do?

  • setTimeout() - executes a function, once, after waiting a specified number of milliseconds

Question: What is closure?

This will always alert 16, because bar can access the x which was defined as an argument to foo, and it can also access tmp from foo.
That is a closure. A function doesn't have to return in order to be called a closure. Simply accessing variables outside of your immediate lexical scope creates a closure.


Question: Write a function that combines two arrays into one?


Q: What is a callback? Callbacks are a more traditional way of handling asynchronous execution in JavaScript. A callback is a function that is passed to another function as a parameter, and the execution of the callback happens inside the function that it was passed to.


How data is persisted

OMG! Please start using MongoDB now! It is fun and easy to use. But hard to troubleshoot once the level of complexity of your data grows. Keep it simple! KISS

How the web works

Another place holder blog entry. There are a bunch of great articles that discuss performance on the web and other networks. The information if always changing. So I hope to post the most relevant links I can find.

In my humble opinion (IMHO) I believe the best way to track such information is to track people. Google has the brightest and nicest folks who share that information:

Ilya Grigorik

https://www.igvita.com/

Matias Niemela

algorithms

Another placeholder blog post. Khan Academy is a great site for learning algorithms: https://www.khanacademy.org/computing/computer-science/algorithms

During the study of such things, it'll be good to have working examples of their implementations to do actual useful things. Things that actually provide return on investment (ROI) for companies. Remember that if you have a programming job, the company you are working for is really spending 4 times more than that on infrastructure to have what you're writing actually be used for your companies customers.

Data Structures

This is a placeholder for data structures. You know data structures! Oh wait! You may want to know the type of interview questions that are often asked regarding them. Knowing something, and the ability to actually communicate what you know in a job interview are two different things. Googling data structure interview questions is a good first step. But to be ready for interviewing, you'll need to think about the Q and A provided on interview question websites.

core java

What is core java? Well, basically all the javadoc for JDK 1.6, 1.7, and now 1.8. Need to learn a large majority of the classes documented. As well as the difference between versions 1.6 to 1.8. Right now most companies are bound to one of those 3 versions. And so if you want to work for a company that is using one of these JVMs, you need to have a lot of the fundamentals mesmerized.

For Example, java.lang.Object, which has the basic methods used for creating your own collections. These need to be understood and how to overwrite them.

Also, need to know Collections class and all of its implementations. When you would want to use one over the other, etc.

Also sorting algorithms, you should know how to write binarysort, bubblesort, and mergesort on a whiteboard really fast. I suggest practicing it in the evening, a couple of days before an interview.



Java to Javascript

I have a been a java developer for over 10 years. Which I think is 3 life times in silicon valley. During that time I have worked on J2EE, EJB 1, 2, and 3. Spring Frameworks. Struts 1.0, 2.0. JSP. JMS. JMX, etc. etc. All the acronyms at some point.

At the beginning of 2015 I found that there are still a lot of java positions. Many of which want people with core java skills. Those skills are tied to:


If you know these 5 things, you can get any java programming job. And I think someone graduating from college that has actually learned what was in the classes taught by computer science departments, should do just fine. BUT! And there is a big BUT, actually having the knowledge, and being able to communicate that knowledge to an interviewer at Google is something different. 

practice, practice, practice

The interview books that have 100’s of java examples is amazing. They really help. Also the new websites that teach you programming skills and have test areas on their sites is also very good.

javascript

Now knowing java, and knowing javascript I consider two totally different beasts. There is very little ‘java’ in javascript. The runtime environments are very different. The life cycle of objects in client and server are different. They have different design patterns. They have different ways of implementing OOAD, etc. From someone who has been paid for 10 years to write java, switching to javascript has a learning curve. Many enterprise developers may feel that it is a waste since only a small amount of code is being used.

But with node.js and angularJS becoming performant and fully supported by Google. You can have all your usual enterprise stack re-written using NoSQL (MongoDB), nodes, and AngularJS at the front end. And now with complete packaging such as meteor. You can go enter the next hackathon and kick ass over others attempting to use Spring boot, etc.







Wednesday, January 21, 2015

Stay Hungry

Humble, Honest, Happy, and Hungry! 4H!

Here are some sites I been using that really help with learning specific technologies.

This site is great for answering questions regarding technologies I use at work:
http://www.stackoverflow.com

Great for posting code that I've been working on:
http://www.github.com

Great site for getting some code time under your belt:
https://www.hackerrank.com/domains/algorithms/arrays-and-sorting

Monday, April 28, 2014

How to be a programmer

I have a friend of mine who is just getting started with programming and I've been helping him get up to speed on how to be a programmer. I love teaching others how to code, empowering them to have careers in this interesting market we have. Also my Son is getting into programming and is planning on going to a computer camp this summer. Here are some things that I believe are crucial to be a programmer and enjoy coding as a career. This is based upon my 20 years of work experience.

1. Personal Life

No matter how well you're doing in school, when you get a software developer job, if you don't have your personal life in order, your won't succeed as a developer. You have to know how to save money and have a stress free environment at home. That is up to you to define. But if you have credit card debt and expensive habits that make you live paycheck to paycheck, you will not be a good employee for any company, as well as if your self employed.

2. Don't be an Idiot Savant

Here is the definition: idiot savant: a person who is considered to be mentally handicapped but displays brilliance in a specific area, especially one involving memory.

When I was in college two different people (women) gave me a card that had a picture of a young kid trying to push at a door that had the words 'PULL' in front of it. And then at the top of the biulding he was trying to get into it said "School for the Mentally Advanced". They were subtly telling me I was really smart, but an idiot in regard to handling the real world. Looking back I have made a lot of dumb decisions in my personal and professional life. But I have learned that it is important to study and understand:

  1. Interviewing - It is a who art and skill of its own
  2. Discourse - My ability to communicate with others needs to be different based upon whom I speaking with.
  3. Stress - Need to have good stress management for your career and financial portfolio

3. Play with examples each day

Each day look at what others are doing that is new and exciting. Download the code, get it working.

4. Get Good At Editors

If you find a code editor that you like, learn all of its key bindings, and ways to save in keystrokes. Practice them. Use them.

5. Study Algorithms

Dude, no description needed.

6. Have Hobbies that Use Math

I enjoy Sudoku (Numbers...), Role Playing (Polyhedral Dice!), Tarot Cards, etc. Each day I do something that requires my brain outside of normal work. And I socialize with others who do the same.


Thursday, April 10, 2014

Android > iPhone

Reasons I like Android over iPhone
  • Podcasts - When I listen to podcasts and remove the airbuds, the audio automatically stops. But then when I put the headphones back in, it automatically starts playing again where I left off!
  • Podcasts - When I'm listening to a podcast that is being streamed over my wireless wi-fi. And if I leave the wi-fi network, it will automatically switch over to stream the content over my cell phone.
  • Google maps, can't compare.
  • Live wallpaper - with dozens of cool free ones others have developed
  • amazing number of options for power consumption
  • Widgets make the UX very nice
  • Weather display is way better
  • Play Pandora while playing other games
  • UI for cut'n'paste text is much easier to use, and more powerful, making it a lot faster to copy'n'paste, etc. I can actually look up address in Chrome, and quickly copy them into the Navigator app!!!
  • Texting - when I type something that it auto corrects, all I have to do is go back a space and it will redo the autocorrect. So if I'm purposely typing something weird, its easy to keep, and if I mistype something, it corrects it!
  • Cut'n'paste - once you understand the icons, it is super easy to copy/cut/paste text wherever you want it.

What I think is better on iPhone

  • Ringtones are not as good as iPhone ringtones, but a few are cute that I'm going used to.

Wednesday, October 9, 2013

Why JSP sucks

JSP sucks because of:

http://docs.oracle.com/javaee/1.3/tutorial/doc/JSPIntro8.html

Here the include directive doesn't support dynamic insertion of a value. Which causes a lot of proplems if your trying to use JSP in a web framework. I'm glad today no one uses it if UX.

Monday, August 19, 2013

JavaDoc Words

I find it interesting how much good documentation is on the java docs for  Java™ Platform Standard Ed. 6

In the webpage http://docs.oracle.com/javase/6/docs/api/java/util/RandomAccess.html the work asymptotically is used to define as: toward a line whose distance to a given curve tends to zero. An asymptote may or may not intersect its associated curve

Here they are using randomaccess to help improve performance of iterators of  lists.

This with http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html you have the word amortized used: amortized constant time with big O notation. Amortize means to liquidate gradually.

amortize - liquidate gradually 

Wednesday, July 10, 2013

Authors Websites I Love



javapapers.com
The author of the website, Joe, has always been interesting to read his articles on java programming. Glad the website has been around for so long.




Thursday, November 22, 2012

Solving the Rubik's Cube

I've been reading and practicing the rubik's cube for the past few years. When I was in grade school the rubik's cube had just come out. And a number of students could actually solve the cube. Which I thought was amazing, but I had never bothered to learn how to do so. What I find interesting is that a 3x3x3 cube has 43,252,003,274,489,856,000 possible configurations! Which is a good example of the almost infinite complexity that is the most basic structures we have all around us.

Over the Thanksgiving break I thought I'd write a program that could receive input of an unsolved Rubik Cube and output the moves required to solve the cube. I was thinking of various data structures to store the cube in a straight forward way. Here is what I was originally thinking for storing the pieces and positions:

public enum Cubies {
        WBO, WO, WOG, WG, WGR, WR, WRB, WB,
        BO, OG, GR, RB,
        YBO, YO, YOG, YG, YGR, YR, YRB, YB
    }

public enum Positions {
        WLR, WR, WRR, WML, WMR, WFL, WFM, WFR,
        BRE, BOE, RGE, OGE,
        YLR, YR, YRR, YML, YMR, YFL, YFM, YFR
    }

Here W=white, R=right/red, L=left, M=middle, F=front, B=blue,O=orange,G=green,Y=yellow

Then just have the actual cube stored as an array of strings that contain the actual color of each square. After struggling for a few hours on writing methods for createCube, printCube, TwistCube(Side), etc. I thought I'd google the code and found CubeTwister:

http://www.randelshofer.ch/cubetwister/

Which shows someone has been doing their homework in regard how to store the Rubik's Cube as a data structure. If you look at the ch.randelshofer.rubik.AbstractCube class you can see that the cube is stored as a number of int arrays. Here is one example:

    protected final static int[][] CORNER_TO_FACE_MAP = {
        {1, 0, 2}, // urf
        {4, 2, 0}, // dfr
        {1, 5, 0}, // ubr
        {4, 0, 5}, // drb
        {1, 3, 5}, // ulb
        {4, 5, 3}, // dbl
        {1, 2, 3}, // ufl
        {4, 3, 2}, // dlf
    };

0=right, 1=up, 2=front, 3=left, 4=down, 5=back

One of the most interesting integer arrays is a four dimensional


     Corner swipe table.
     First dimension: side part index.
     Second dimension: orientation.
     Third dimension: swipe direction
     Fourth dimension: axis, layermask, angle
   
                 +---+---+---+
                 |4.0|   |2.0|
                 +---     ---+
                 |     1     |
                 +---     ---+
                 |6.0|   |0.0|
     +---+---+---+---+---+---+---+---+---+---+---+---+
     |4.1|   |6.2|6.1|   |0.2|0.1|   |2.2|2.1|   |4.2|
     +---     ---+---     ---+---    +---+---     ---+
     |     3     |     2     |     0     |     5     |
     +---     ---+---     ---+---    +---+---     ---+
     |5.2|   |7.1|7.2|   |1.1|1.2|   |3.1|3.2|   |5.1|
     +---+---+---+---+---+---+---+---+---+---+---+---+
                 |7.0|   |1.0|
                 +---     ---+
                 |     4     |
                 +---     ---+
                 |5.0|   |3.0|
                 +---+---+---+

Thursday, November 15, 2012

Senior Developer = Mature Developer

I just read a few interesting articles regarding what a Senior Developer is:

http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/

Mature engineers do not shy away from making estimates, and are always trying to get better at it.

Mature engineers lift the skills and expertise of those around them.

Mature engineers make their trade-offs explicit when making judgements and decisions.


The Ten Commandments of Egoless Programming

Appropriate, even if old…I’ve seen it referenced as coming from The Psychology of Computer Programming, written in 1971, but I don’t actually see it in the text. Regardless, here are The Ten Commandments of Egoless Programming, found on @wyattdanger‘s blog post on receiving advice from his dad:
  1. Understand and accept that you will make mistakes. The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry. We can, and should, learn, laugh, and move on.
  2. You are not your code. Remember that the entire point of a review is to find problems, and problems will be found. Don’t take it personally when one is uncovered. (Allspaw note – related: see below, number #10, and the points Theo made above.)
  3. No matter how much “karate” you know, someone else will always know more. Such an individual can teach you some new moves if you ask. Seek and accept input from others, especially when you think it’s not needed.
  4. Don’t rewrite code without consultation. There’s a fine line between “fixing code” and “rewriting code.” Know the difference, and pursue stylistic changes within the framework of a code review, not as a lone enforcer.
  5. Treat people who know less than you with respect, deference, and patience. Non-technical people who deal with developers on a regular basis almost universally hold the opinion that we are prima donnas at best and crybabies at worst. Don’t reinforce this stereotype with anger and impatience.
  6. The only constant in the world is change. Be open to it and accept it with a smile. Look at each change to your requirements, platform, or tool as a new challenge, rather than some serious inconvenience to be fought.
  7. The only true authority stems from knowledge, not from position. Knowledge engenders authority, and authority engenders respect – so if you want respect in an egoless environment, cultivate knowledge.
  8. Fight for what you believe, but gracefully accept defeat. Understand that sometimes your ideas will be overruled. Even if you are right, don’t take revenge or say “I told you so.” Never make your dearly departed idea a martyr or rallying cry.
  9. Don’t be “the coder in the corner.” Don’t be the person in the dark office emerging only for soda. The coder in the corner is out of sight, out of touch, and out of control. This person has no voice in an open, collaborative environment. Get involved in conversations, and be a participant in your office community.
  10. Critique code instead of people – be kind to the coder, not to the code. As much as possible, make all of your comments positive and oriented to improving the code. Relate comments to local standards, program specs, increased performance, etc.

Tuesday, September 25, 2012

Core Job Skills Need To Learn Young and Continue as An Adult


These skills should be continuously worked on even as an adult.

From:
http://oedb.org/library/beginning--online-learning/21-critical-job-skills-you-should-instill-in-your-kid?fb_action_ids=10151001742065178&fb_action_types=og.likes&fb_source=aggregation&fb_aggregation_id=246965925417366

21 Critical Job Skills You Should Instill In Your Kid

Today's job market is more competitive than ever, and it's not likely to change for the next generation. That means that today's kids really have to be on the ball when it comes to developing critical job skills, and parents have a responsibility to be a major part of that development. Developing job skills in your kids sounds like a big, scary job, but it can be as easy as giving them the opportunity to make their own choices, learn about teamwork, and bounce back from change. Read on to learn about 21 of the most important, but easy-to-teach, job skills you should focus on with your children to give them a head start in life.


How to make friends:

The job market is hyper-competitive, making networking more important now than ever. So often, it's all about your connections and who you know when it comes to landing the perfect (or any) job. Teach your kids how to make friends, giving them not just the opportunity to be around other kids, but the chance to choose their own friends and the freedom to interact without a lot of parental hovering. This will allow them to learn about healthy personal interaction and give them confidence to meet and connect with new people as they grow.


How to make a good impression:

Kids need to know how to dress for an interview and make a great impression. Teaching kids how to present themselves professionally is an important life skill. You can do this by encouraging them to make their own fashion choices while guiding and offering advice.


How to be resilient:

Setbacks happen in real life, especially at work. By teaching kids how to bounce back, you can prepare them to find success no matter what they're up against. Teach this important skill by allowing them to fail, while offering encouragement to pick up and try again. Show them that failure isn't the end of the road, just a momentary setback.


How to write well:

So many adults today lack basic writing skills, even though writing is more important now than ever in today's information age. With excellent writing skills, your child can get ahead in work and in life. Encourage writing from a young age by reading with them frequently, providing writing activities, and setting a good example as a writer.


How to solve problems:

It seems there's always a fire to put out at work, making problem solvers incredibly useful in today's workforce. Raise a child who knows how to handle sticky situations, and they'll be poised to take on the world. The key to raising a problem solver is giving them the opportunity to deal with their own problems. Offer guidance, but allow your child the pleasure of figuring it out for themselves. It may be hard to watch, but tackling a problem independently can give your child confidence to take on even more difficult tasks.


How to tackle projects:

Work is often an endless series of tasks and projects. You can help prepare your child for successfully tackling projects by sharing them with him or her. Let them see how to do it while you're working together, and help build their confidence to take on more projects independently.


How to stand up to bullies:

Bullies are everywhere, even in the modern workplace. Kids (and adults) who are well-equipped to stand up to bullies can be more productive and happy. Teach your kids how to respond assertively and avoid becoming a victim.


How to be organized:

No one respects a professional that can't get it together. Building organizational skills can be incredibly powerful for kids to learn as they grow into responsible adults. Parents can help teach organization skills from a young age, developing schedules, checklists, and responsibility calendars.


How to connect it all together:

Knowledge is important, but even more important is the ability to pull all of your knowledge together and make connections between concepts. Anyone can Google for an answer; only the truly valuable can link ideas together. Encourage this life skill by playing sorting games and discussing how different things you've learned all work together.
How to be decisive:

Leaders have to make good decisions, and learning to be decisive from a young age can be very valuable. Teaching the skill of decision making is as easy as allowing children the opportunity to make decisions for themselves. Choose age-appropriate decisions like choosing their own clothing or deciding what to pack for lunch.


How to be independent:

Workers who can't take care of themselves can be a drain on the workplace. Employers would much rather have an employee that can be independent and take care of themselves than one that needs help every step of the way. You can teach your child how to be independent by offering opportunities to step out on their own. Encourage time away from home, like overnight school trips and camps that will allow them to explore their abilities without the help of Mom or Dad.


How to work in a team:

Teamwork and collaboration are essential parts of work life, and at some point, your kids are going to have to learn how to work and play well with others. Kids can learn the value of teamwork by playing team sports, joining clubs, and participating in group activities.


How to dream:

Kids are naturally creative and curious, but as we grow, we often lose this skill that can help us to be more innovative and accomplished. Encourage your children to talk about their dreams. Ask them what they want to be when they grow up, and give them the tools and freedom necessary to tinker, explore, and follow through on their visions.


How to manage money:

Without basic financial sense, even a good paycheck won't go far. Teach your child how to properly manage money, and they'll be able to pursue a job they love, no matter what the pay is. Parents can teach good financial lessons by allowing children to manage money on a small scale, making them responsible for paying bills, saving, and discussing financial management.


How to manage time:

Time management is an essential skill at work. Can't get enough done, and you'll never get ahead. You might even get fired! Teaching kids how to stay on top of their time is so important, and can be started at an early age. Create a schedule together with your kids, and let them be involved in planning the activities they'll be doing. This helps even young kids better understand the value of time.


How to relate to others:

Your kids will inevitably work with other people, some of whom will be very different from them. It's important that they learn how to listen to and understand others, respecting how they feel and accepting them even if they are different. Parents can teach children empathy by explaining and showing them how to respect people, animals, and property. Turn moments of acting out into teaching opportunities, explaining that breaking things may hurt your feelings.


How to be responsible:

In the workforce, you're ultimately responsible for something, and workers who are able to take ownership of what they're in charge of tend to get ahead. Kids can learn how to be responsible by tackling tasks that they're in charge of. Parents can assign specific tasks to kids, explaining that they're in charge of making sure a certain chore at home gets done. This helps them learn how to be responsible and accountable, excellent skills for work and life.


How to speak in public:

Many kids are scared of public speaking, but as adults, it's an essential skill they'll have to master. Whether giving presentations or speaking up in a meeting, they'll have to get up and speak in front of a crowd at some point. Teach kids how to become comfortable with public speaking by giving them plenty of opportunities to speak with an audience, and offer encouragement.


How to negotiate:

Whether it's for a salary or a major contract, your kids will have to negotiate some day. Building this skill can be incredibly valuable, allowing them to negotiate successfully in their favor. Kids can learn about the art of the deal by negotiating with parents. Coming to an agreement on curfew, chores, allowance, and other issues is a great opportunity for kids to learn how to negotiate.

How to be flexible:

Change happens all the time, especially in today's workplace. Layoffs, mergers, new bosses, and changing roles can sometimes be a little intimidating, but those who can roll with the punches tend to come out on top. Being flexible is something you can teach your kids, perhaps most effectively by example. Show your kids that you're not afraid of change and that you can adapt to new things as they come along. When your family experiences change, walk them through it and explain how it can be an exciting opportunity.

How to teach themselves:

Self-education is an essential skill for today's workforce. As the world's employment needs change, so do our skills, and the people who are willing to change and learn new skills to keep up with new needs will find more opportunities. Adults who embrace exploration and self-learning will have no problem keeping up, as learning new things is something they enjoy doing. As a parent, you can help raise a self-learner by encouraging curiosity, sharing self-learning opportunities, and making it easy for kids to get access to educational materials that interest them.

Friday, July 6, 2012

A Software Architect

http://coderwall.com/p/lbda2q

A software architect lives to serve the engineering team -- not the other way around.

A software architect is a mentor.

A software architect is a student.

A software architect is the code janitor. Happily sweeping up after the big party is over.

A software architect helps bring order where there is chaos, guidance where there is ambiguity, and decisions where there is disagreement.

A software architect codes the parts of the system that are the most precious and understands them through and through.

A software architect creates a vocabulary to enable efficient communication across an entire company.

A software architect reads far more code than he or she writes -- catching bugs before they manifest as systems change.

A software architect provides technological and product vision without losing sight of the present needs.

A software architect admits when he or she is wrong and never gloats when right.

A software architect gives credit where it is due and takes pride simply in a job well done.

Java Localization

I have been working with various languages and found that double byte languages are a little difficult to work with in javascript and java. In which many of the common functions and methods do not natively work with double byte languages such as Chinese, Korean, etc.

native2ascii -encoding UTF-8 urlescaped_ascii.txt utf8file.txt

this command will work with latin based languages, but not chinese

Thursday, June 21, 2012

What is a good developer?

What is a good developer? The following two rules of thumb are what I hold true:

  1. Good developers are found by speaking to others who you know are good and who they recommend.
  2. You don't truly know how someone is until you have worked with them for 3 to 6 months.

I have interviewed hundreds of developers in the past and found that many people will ace the interview and speak very well. But then when they start working they will start to have a difficult time applying what they have said to actually getting work done. Then when speaking with them on progress and work they will have excuses, etc. Often a good developer will be a lousy interviewee. In which a good developer will speak poorly or have a difficult time responding to questions.

Also many people will have their ups and downs at work as they have personal events taking place outside of work. Some weeks developers will get a lot done, and then other weeks they will be slow. It isn't until you have worked with someone for months that you can then get an overall assessment of their work performance.

I have worked with numerous developers from China, India, Israel, Russia, Great Britain, France, and USA. I have found that each cultural group has their own way of getting things done and communicating. To be a good developer require just two important aspects:

  1. Communication
  2. Getting Work Done
Each work team will have its own personal dynamics for how work is being delegated and completed. Some people will work well in certain environments and others will work poorly in other environments.



Tuesday, May 22, 2012

Why I hate Windows 7

  • The personal folder created for your user has 'My Documents' and 'Documents' folders created. Which then becomes confusing as to which directory has my files in it...
  • When I open the Windows Explorer, as I click on directories, I continuously see the new hourglass circle, which gives the impression Windows 7 is much slower then Vista, XP, etc.
  • The auto-wireless tool will auto connect to a network. And then will not allow you to switch networks.