Saturday, December 28, 2013

Egg Thief

Lyric Hammonds, my girlfriend, has four chickens she takes care of to get fresh eggs.

Titan - The white one on the right
Schezwan - The butternut one on the left
Kung Pow - The speckled one on the left 

... and Cobalt by herself

Do their names give a hint which two were given to her from an Asian friend?

About three months ago, Lyric would get two eggs every three days. As the weather became colder, the eggs started to drop off, and she received fewer and fewer. This was despite a gift of two additional 'rescue chickens' from a friend. She somewhat expected the drop off, due to the cold weather and introduction of new chickens to her flock, until the chickens started producing zero eggs.

My girlfriend lives in a rapidly degrading neighborhood around University and Gold. Her neighbors are mid level drug dealers, distributing (mostly) weed. A half-way house just opened across the street from her. Someone was sleeping in a van in her parking lot. She's looking for a new place, but it's difficult to find something within her price range and this close to the university and community college. I became convinced that someone was stealing her eggs. This suspicion was further increased by the fact that she found TWO eggs on a very, very cold morning, when no one would want to go outside for an egg stealing mission.

I've been taking care of her chickens over the winter break, and during part of this time the egg thief was on vacation. At the earlier part of the break, I was consistently receiving an egg a day from the chickens, sometimes two eggs a day. After Christmas day, it's back down to an egg every few days. The egg thief is back.

Initially, I came up with all sorts of elaborate "traps" for the egg thief that would not also injure the chickens. My favorite idea was to block off the egg laying area to the chickens from the inside, and leave the hatch accessible. Inside the hay, I planned on placing a large rat trap with an egg on top. After realizing that chopping off someone's finger with a rat trap would likely require considerable explaining to members of the the judicial system, I decided against that idea. Also nix'd was the idea of setting up a web cam to record the coop area from inside my girlfriend's house. I really didn't want to involve the police in catching the egg thief, or start a fist fight, over eggs.

The conclusion I finally came to was to lock the coop.

Chicken Coop - Post Latch Installation

This latch was able to correctly install - no accessible screws.

This latch had accessible screws - due to the shape of the lid here, any other installation would have been difficult.

 I did not worry too much about the exposed screws, as the hinges have exposed screws. 

It would still be possible for someone to steal the eggs by unscrewing three screws, but in my limited experience with thieves they are not interested in any kind of work, or forethought, at all. Likely, this will increase my girlfriend's chicken egg output. I'm not 100% positive that someone was stealing eggs, and this will help us find out. My friend Rob suggested that the thief may be non-human. Rob also suggested a goose as a 'watch dog' against the non-human variety of egg thieves. Lyric confirmed this, and said she would only be interested in a goose if she hatched it from an egg in an incubator, since otherwise the goose would be too mean to her.

The materials cost about $20 for this project. With the cheap, small, regular eggs I buy being around $1.25 / dozen, we'll need to get 16 dozen (192) eggs before this project pays off. Lyric said her awesome, free range, extra large eggs cost $5 / dozen. At the Brian cheap rate, that's about six months of eggs at one a day. Lyric's hippy/expensive rate required 48 eggs to pay off, or about 1.25 months. Mostly I like helping with the chickens because it turns table scraps and other garbage into eggs, and my girlfriend likes it. Economically, it might not make the most sense in the world (unless you like blowing your money on 'natural' foods), but it is fun and her chickens are nice.

Thursday, November 28, 2013

Ask A Programmer - Part 2

I received two more questions from a Fiverr gig I have called "Answer A Programming Questions In Written English."

1. What kind of coding languages/programming/software would typically sit behind online 'article spinners? Some examples of article spinners:

Before I researched this question, I was unfamiliar with the term "article spinner." After researching that term, I realized that the purpose of article spinning is to generate multiple copies of an article, all of which are different enough to convince a search engine that they are not the same - which results in having 'more content' for a search engine to index. This is a way to game the search engine, and actually contributes nothing of value, but is a strategy to get a higher search engine ranking (because you have 'more content.')

Despite the fact that I try to create high quality, interesting, funny, articles, and think spinning is total crap, there are still numerous technical aspects to it that are pretty cool. 

I believe that the underlying mechanism that spinners use is found in probability, specifically random variables. A random variable represents a number of outcomes, each with a probability. For an article spinner, it would make sense that synonyms can be represented with a random variable, and the 'closer' the synonym, the higher the probability of it's replacement. For example, we could have the word "car" as a random variable associated with many terms. This can be expressed as

car = {(auto, 0.98), (automobile, 0.95), (truck, 0.80), (ford, 0.75), (chevy, 0.70) ... (boat, 0.001)}

Where the first value in the tuple () is the term we want to substitute, and the second value is the associated probability (which has to be between 0-1.) So, substituting "auto" for "car" can work in 98% of cases. For our spinner to work well, we need to have a LARGE number of terms we can substitute on (random variables) and a LARGE number of HIGH PROBABILITY substitutions to make. Think of the article spinner playing mad-libs, but with high probability substitutions. The quality of the spinner is going to depend on the quality of the synonym lists.

OK, so we have our term substitution outlined above, what does our software actually conceptually look line? Something like this: 

And then you hit the "Go!" button, and the software makes a number of articles based on your input article (with how many depending on how far you cranked the "number of spins" knob), and those articles match somewhere between 0 (with this being a mad-lib, where the grammar of the language holds, but not much else) and 1 (where the articles perfectly make sense, but use different words that mean EXACTLY the same thing.) The output is a series of articles. "Max" is going to be the maximum articles that can be generated by counting the permutations on the synonyms found in the spinner and original article. Any spinner that guarantees 'infinite' spins is either:
  1. Ignorant of combinatorics
  2. Lying
  3. Performing very, very, very, low probability/acceptability substitutions on already spun articles. This would result in a computer playing the game 'telephone' where the message is continuously distorted (which, mathematically speaks, still results in a finite number of articles, but would be large enough for all practical purposes.) 
This describes the conceptual framework for how I imagine an article spinner works. Compared to the dudes I hang out with, I suck at math. Most of the guys I spend time with are super, duper, smart and good at programming, computer science, and math. I have a BS and MS in Computer Science, which is sort of like getting an undergraduate minor in math, which isn't very much math. I'm all right, but please excuse me if my probability terms aren't perfect. I'm not sure about the second knob and using an actual random variable - I'm describing something similar, but not exactly like a random variable. 

I imagine that these spinners are subscriptions to websites. Which means that a large portion of their implementation is web programming : HTML, CSS, and JavaScript. However, the algorithm I described above would make sense to implement server-side, so that someone cannot just look at your JavaScript code and have access to your spinner logic. 

With regard to programming langues, I'd like to implement this in a programming language called "Python" since I'm pretty good at writing programs in Python. Since it would need to be part of a web page, I'd probably take a look at a framework called "Django" which is not to be confused with probably the first Quentin Tarantino movie I ever liked, called "Django Unchained." Basically though, any kind of server-side language would work. Php is super popular as far as server-side languages go. One of my friends uses Java as part of the Tomcat framework for server-side work. This is all based on the idea that someone is selling a web-based subscription to a spinner, as used through a web page. If someone were selling a binary (.EXE on Windows) then any language which compiles into an .EXE could be used - like C++, or any compiled language.

2. What languages/coding/software would be required if I wanted to add extra features like bring up url lists of top 10 youtube videos, or newspaper articles, or Flickr photos - all based on the main article keyword. Eg. An article with a keyword of "good running shoes" would bring up links for good shoe videos and pictures and online articles from reputable news sources (to get good quotes and statistics).

I actually built something like this for scraping My scraper would accept a term and a zip code, and then grab all the results and put the results in a database. For any of these things, you need a 'scraper' which is a piece of software that crawls through a target website, and collects information. For the most recent scraper I wrote, we only cared about I would put the results into a MySQL database, so that different programs and/or web services could use the results from my scrapes.

Since Youtube, Google News, and Flickr all have different interfaces (ways of accepting input, and displaying results) you'd need a scraper for each one. Scrapers may exist, but I haven't had very good luck in finding existing scrapers, so I always write my own. You may be able to take advantage of RSS feeds if you were interested in very general top results, but for results for a specific term, I'm pretty sure you'd need a scraper.

I love using Python and BeautifulSoup for scraping. Putting the results into a database makes a lot of sense usually, since then any other program can use the power of a database to access the scraping results.

Things have been super, super busy with my software company, but I like this Fiverr gig. It gives me interesting questions to answer (for money) and helps me build my blog content (without article spinning!)

Wednesday, November 6, 2013

417.5 Princeton = Available

Back in July, I wrote a blog post about the apartment I was living in being available for rent. This was 417 "B" Princeton. One major reason I moved out of my apartment, and significantly downgraded my standard of living, was the knowledge that my tenant in 417.5 Princeton might move out at any time. The tenant at 417.5 Princeton has rented from me for three years, performs beautiful landscaping, is almost never here, does basic repairs, always pays on time, and is basically the best possible tenant anyone could ask for. As a result of all these positive factors, I agreed to let him go month-to-month which is something I have never done before due to the uncertainty it introduces into my rental business. He has decided to cancel his lease at the end of November, so this posting shows the apartment I have available.

The apartment is a one-bedroom located on the second story. It rents for $560 / month. I pay for water, sewage and garbage. The new tenant would need to pay for electricity and gas. Internet access is available to share for an extra $20 / month. No pets.

 As you approach the apartment, you can see the newly rebuilt slat wood fence. When I purchased this property, about half the fence was chain link. Now there is no chain link fence anywhere on my property.

I always liked second floors - there are never any roaches, and it's nice looking out over everyone. 

 From outside the unit, you can see a clothesline...
 ...and my hot tub.

 The balcony / entrance walks into the kitchen.

 The kitchen sink was recently replaced (by me) with a top of the line Kohler sink.

Past the kitchen is the living room. 

The living room connects to a hallway, which leads to the bedroom and the bathroom. 

 I like all the windows in the bedroom.

 The apartment has ample closet space.

In the hallway, between the bedroom and the bathroom, there is a shelf with a lot of storage space.

 The outside of the apartment looks like a garden, because of the previous tenant.

Basically, all of my money is invested into this property, and I'm trying to have tenants that will help that investment grow, as opposed to destroy it. Until August, I lived on the property, and I plan on living on the property (in a different apartment) again very soon.

Thanks to my girlfriend Lyric Hammonds for helping me steam clean the carpets, do touch up painting, and take such nice pictures!

Friday, October 25, 2013

Последний Троллейбус

Последний Троллейбус - 1957

Я часто слушаю музыку когда я занимаюсь или программирую. Мне нравится электронная музыка - без слов. Я люблю эту музыку но мне не нравится ходить на “рейвы”. Я  ходил один на рейв один раз, и никогда больше не ходил. Слишком хаотично там - вот так. Когда я езжу на машине, я слушаю аудиокниги от <<LibreVox>>(бесплатно, законно.)

Моя песня называется <<Последний Троллейбус.>>. Булат Окуджава играет эту песню. Жанр зтой песни  бард. Мы слушали “Последний Троллейбус” в классе. Я думаю, что Окуджава играет не плохо. Я думаю, что троллейбусы в Москве были лучше чем авто́бусы в США. В США, у нас есть бомжи в авто́бусаx. Я думаю что эта песня о жизни - обнаружение счастья и любви в мире. Когда я слушаю эту песню, мне чуть чуть грустно. Может быть мне так грустно потому что поездка троллейбусa закончится.

Голос музыканта напоминает мне о Бобе Дилане, но русский. Слово “бард” описывает его хорошо. Мне не так понравилась песня, когда я её слушал первый раз, потому что я не люблю большенство русской музыки. Я никогда не понимаю ничего. Это весёлое упражнение слушать, перевдить, и говорить о песне. Вoобще, я не люблю русскую музыку.   Я помню когда я слушал русский поп это было ужасно, даже хуже, чем <<Ванилла айс.>> Однако, мне нравится Макс Барских и <<Z.DANCE>>

Saturday, October 12, 2013

Printing with an Efficient Printer

For the past four years, five months, and five days, I have been maintaining my father's computer systems down in Silver City. Barring the SINGLE event where an idiot ISP tech reconfigured a server (that I did not have the screen set to lock on) to test a new network connection, we have not had any disasters.

One thing I have learned since developing software and (sales training) selling printers and cartridges with a customer, is that inkjet printers are not cheaper, unless you print hardly anything, ever. The cost per page (black and white) for inkjets tends to be between $0.03 - $0.08 / page, while the HP Laserjet P4014 laserjet my parents have at their office costs somewhere between $0.0045 - $0.0185 / page. Every workstation has an inkjet printer next to it, but is also part of a local area network, with access to shared printing resources. The local injets make sense - sometimes they are printing out medical information they want to be able to immediately give to a patient, and not have to walk to a centralized printer. Sometimes not though.

Among other IT tasks, one thing I accomplished this weekend was in configuring the heterogeneous collections of workstations to use the more efficient HP Laserjet printer. As a user wanting to print, this can be accomplished by selecting the more efficient printer to use. When you print, make sure to select the efficient HP laserjet, if that is your intention. The below images show how to do that.

Windows 7 - After Telling a Document to Print, Choose the HP LaserJet Printer

Windows 7 - Chrome - After Telling a Page to Print, Choose the HP LaserJet Printer

Windows XP - After Telling a Document to Print, Choose the HP LaserJet Printer
(Windows XP Chrome looks very similar to Windows 7 Chrome Printing)

Technical information
If you want to add this printer to additional workstations, the IP address is Windows 7 was able to install this automatically, quickly and easily, while Windows XP required me to "add a local printer" and then enter in the IP address, and choose a driver that was along the  Laserjet P4000 series for the driver.

Hopefully this blog post helps the people working at my dad's office understand about choosing a printer, and save money on printing.

Saturday, September 21, 2013

Hammer.js + PhoneGap

PhoneGap developments are coming along well. If you already have a massive HTML5 canvas + JavaScript application (like my customer does) and you want to convert it to an app, PhoneGap may be the tool for you to consider. I have had a lot of fun, and not too much frustration, with developments.

Right now, I am using a library called hammer.js ("You CAN touch this!") for multitouch support. I highly recommend it. One of the only issues I ran into with hammer.js was it's event loop having some issues with JavaScript's event loop, when I (incorrectly) listened for hammer events on the body. When I listened for events only on my canvas, things worked all right.

Below are some images of the app running on my Samsung Galaxy 3S.

App Running. It can be a bit slow with tons of nodes, but is WAY better if my phone isn't running a ton of other crap. We're doing all the rendering in JavaScript. 

After a pinch-to-zoom.

Click on a node, and bring up information about them...

...and edit a node to bring up the on screen keyboard.

Or rotate your phone if you like landscape more.

I've been very happy to work on this project with a fun customer, that is paying me to learn about PhoneGap development and make a cool app. Eventually we may try deploying this on an iPad!

Monday, September 16, 2013

Ask A Programmer - Part 1

Since starting my own custom software development company, I occasionally pick up small gigs on different programming sites like oDesk, Freelancer, and Fiverr. On one of those sites, someone offered to pay me to answer five six (after an additional question) questions for them. Since I write blog posts basically for free I decided to take this customer up on his offer. Below are his questions, and my responses.

This customer asked me about 'trust seals' in an email before he actually asked his five below questions.

1- Is it possible to have a badge shown on the url area. there is usually a site lock and ssl verification, what is the process of adding one of your own? say on the right?

A trust seal is basically an image that says your website is trusted. Most modern browsers show images in the URL area when a site is using a properly signed (by a trusted organization, not a self-signed) certificate for SSL. These type of trust seals are built into the web browser.

However, you can show other icons to represent the page. The favicon is an icon that people use to show a quick, small, image representing the page used for shortcuts. With modern browsers, those are not shown in the URL area, but along the title bar, or with the tab. I believe they USED to be shown in the URL, but a quick test on modern IE, modern Chrome and modern Firefox show that is no longer the case.

As far as I am aware, it is not possible to show icons in most standard browsers in the place the 'lock' (for recognized SSL sites) or the 'broken lock' (for sites that have SSL problems) go. 

However, I sometimes like to add the W3C validated image on a site that I make, after the W3C validation engine validates it. That is the only trust seal I've ever put into my site, and I put it in just as an image when I'm writing HTML. This is not in the URL area though.

I have no idea if this website is valid or not. I just added the trust seal here. 

2 and 3 - server and website verification( as i read on wikipedia ) performs tests on servers and websites to ensure that they are not vulnerable. Are these web crawlers that do this? What program scans so intensely and how do you go about creating one?

There are web crawlers that do this. Most of these crawlers are created by malicious individuals, and/or government organizations that want to find vulnerabilities and exploit them for their own purposes. Metasploit is a well developed program which will automatically attack targets using a set of canned exploits. Another program which is useful in fingerprinting systems to determine which versions of programs (services) they are running is called nmap.

Whenever I've created something like this, I used a programming language called Python  and a package called BeautifulSoup to scrape and post to websites. Basically, any programming language can be used to accomplish this, but some are better suited to accomplish it quicker. Depending on what people are targeting, they will use a combination of unknown ('zero day') exploits and widely available, extremely well know, vulnerabilities.

If you run a server online, and you run a service called secure shell (ssh), you will immediately (within 10 minutes) start seeing people 'rattling your keys' with common username / password combinations trying to login to your system. Whenever I put together a website using a system called Drupal, I start seeing bots (web crawlers) signing up for accounts, and posting random crap to the Drupal site. These are pieces of malicious software trying to exploit, trying to be annoying, or just put together as an experiment for someone to learn from.

All of this is a reason to keep your software up to date, and run software that you trust.

5- instagram app, being able to upload to different social networks and managing different accounts in one place, like instagram or whatever. Such platforms seem very easy to build or create, but are they? are they expensive to build and maintain?

Social networks that have millions of users are extremely complicated pieces of software. They rely on gigantic server farms, and took lots and lots of time to build. They are very time consuming and difficult to build and maintain. If I remember the Facebook book correctly, it took Mark Zuckerberg like 6 months of programming all the time to get Facebook even kind of usable, and he sounds like he was a bad-ass. Even then, they had a few servers and multiple programmers working on Facebook full time. Building a social network is not easy. I spent some time working on a project using a tool called Social Engine for a customer, and that was my one clear failure in the year of programming. That failure happened for a variety of reasons, but one reason was that the software for that is extremely complicated (and I did not know much about Zend, the underlying system on which it was built.)

This may not be true for small social networks built on top of Drupal or WordPress but eventually if your social network continues to grow you'll have to hire some super smart dudes.

6 - Like you I am an entrepreneur and the questions I asked before where purely for research. What I want to know is how willing are people in your end of the world ( America) willing to adopt new products. I live in Botswana and before I launch anything I always second guess myself because in Botswana, its not only super behind on technology it's also super conservative and.. well pretty african.
So how willing are businesses and people in general willing to try out new products given the times you find your self in? Just your opinion.

People in the United States are willing to try new technological and business things very quickly, if properly sold on the concept. I believe our technological skills in the United States are the best in the world, and so are our sales skills. American salespeople are always trying to convince potential customers to try something new (as long as you speak English.) We are always looking for ways to do things more efficiently, with more profit, less waste, and more fun. Our minimum wage is very, very high, which discourages companies and individuals from hiring minimum/low wage people. It is much more efficient to try and replace a low skill, minimum wage person with technology even if somewhat more expensive, because software and robots do not cause any of the problems that people can in our society. The high minimum wage, combined with the the pragmatism Americans have, make it so we are interested in trying new products, especially if they can go back to the old way if the new way isn't any better.


Friday, September 13, 2013

A Year Later : My Experience as a Mercenary Coder in Albuquerque

A Year Later : My Experience as a Mercenary Coder in Albuquerque

Today I gave a presentation for the 2013 Albuquerque Tech Fiesta. This presentation went well. It would have been good to prepare my introduction a bit more, but overall I've been happy. Here is the blurb promoting my speech, and below is the speech.

Thank you all very much for coming to listen to my talk, “A Year Later: My Experience as a Mercenary Coder in Albuquerque.” My name is Brian Stinar, and a year ago I quit my 9-5 job to open my own software company called “Noventum.” I always like before-and-after pictures. Before I get really started in my talk, I want to show everyone a before and after picture of me.

Before (as an employee)

After (as an independent contractor)

I’ll introduce myself, give you guys a bit of background, go over some definitions, and then quickly summarize what my talk will be about today. Then, I’ll talk about it. After I finish talking about it, I’ll summarize what I talked about, and then have some time for questions. I tend to like predictable structures. No surprises here.

I’m basically as local of a New Mexican as it’s possible for someone to be, if their family hasn't lived here for six generations. We moved to Silver City, New Mexico, about 16 years ago. I went to high school outside of Silver City in  Cliff, New Mexico, did my undergrad in computer science in Socorro at New Mexico Tech, and then came to UNM for my master’s, also in computer science.

Before starting my own company, I worked full time for three years after completing my master’s. My first year out was at a small web development company called Leader Technologies. Leader Tech built product registration software. If you've ever bough a Logitech mouse or keyboard, a Kodak printer, an nVidia graphics card or any Adobe software, you’re probably receiving a spam marketing message a system I worked on sent you. After Leader Tech, I went to work for a computational fluid dynamics software company, located in Santa Fe, called “Flow Science.” At Flow Science, I learned a ton about object-oriented software development using a programming language called C++, as well as accomplishing technical objectives in a political environment. I’m grateful for all I learned at both these jobs.

I like to define the terms I use. By “Mercenary coder” I mean freelance, or contract programmer. This means NOT an employee programmer. I try to avoid being treated like an employee, or taking any actions that the IRS would consider grounds for re-classifying me as an employee. Having my customer specify the place (their office) or time (9-5) of completing my work is THE major action that would result in me being treated like an employee. Reclassification sounds like a very painful and possible expensive process. As a programmer, I build software solutions for people using programming languages. I’m getting more and more into content management systems (like Wordpress and Drupal), which are not programming but still very useful.

My contract jobs tend to be hourly, but if my customer is able to provide a well specified project, I like to bid it out as a project. Often times, this is not possible because of unclear specifications though.

For example, a porn site. The porn site was EXTREMELY well specified. The customer had everything photoshopped, and very clearly specified. I ended up turning that job down, but it was VERY well specified.

It’s just me. I sometimes work with other contractors, and when I was extremely busy I looked at hiring an intern. But it’s just me.

What am I going to talk about today are my experiences during this year, and slightly before. I want to first go over the reasons I decided to go out on my own. After that I’d like to describe some of the challenges I’m still facing, like keeping my sales pipeline full and taxes. Then I’ll go over some areas I feel like I’m doing decently well in such as saying no to customers (or potential customers), accounting, and marketing. The last thing I’ll go over will be where I see myself going in the next year, and beyond. We still should have some time left at the end for questions, unless this goes WAY longer than I rehearsed.

Why Did I Go Out On My Own
I became bored at both my full time jobs pretty much as soon as I became very proficient. This increasing productivity did not ever result in getting paid more. I’m convinced that the only jobs that are actually paid according to their productivity as sales jobs. With programming, it’s difficult to measure exactly someone’s productivity, as it’s possible in physical manufacturing jobs, but it’s still possible to get an idea. If someone is cranking out tons and tons of code, and not being compensated accordingly, that person seems like someone that I could convince to give contracting a try. With owning my own company, I am paid EXACTLY how much value I contribute to my customers. Check out this image with salaries I put in for values I think are reasonable. This is my mental model of the career path available in New Mexico.

I did not want to continue to put time into the above graph, to make my income and responsibilities go up marginally.

I like learning. It’s fun for me to work on new technical projects, and solve problems for people in new ways. I wanted to learn all about running a business, and being in business for myself. That’s another major reason I started my own thing. This is the most I have learned in a year since I left college. It’s fun to grow.

Another reason is that I live a broke-ass lifestyle. Seriously, this was a major reason that allowed me to start up my own thing. The extremely inconsistent income from contracting (which I am going to talk about next) does not go well with a number of financial responsibilities. I do not recommend you start your own company if you have family members that depend on you. My family members are my parents, and my adult sister. None of them depend on me financially, so I was not neglecting my duties to try and start this up.

Challenges I’m Facing (work on transition)
The major challenge I face is managing my sales pipeline. This is different than making money, or getting sales. The mistake I’ve made twice has been to stay super focused on sales, then as soon as my leads start turning into sales, I neglect all future sales. Guess what happens after those projects finish? I have no new projects to work on and it takes a month for me to ramp up prospecting and converting leads into sales.

Sales Line. Don't Do This.

Sales Cycle. Do This.

This sales cycle image I grabbed from Google Images shows that sales should be a cycle, not a “start” and “end” with an arrow between. The ‘sales arrow’ instead of the ‘sales cycle’ is a problem I’m trying to avoid.

Sales needs to be a continuous process, not a ‘one-and-done’ thing you worry about when you’re finished with your existing customers. Every day I try and focus on sales for an hour, or more. I have developed relationships with existing customers to make this not as pressing, but a large portion of my projects tend to end when the project is finished, which makes sales completely necessary. These are extremely basic sales lessons, but it’s something I have to focus on and continuously try to improve on. My friends that have actual sales experience laugh at how basic of a principle this is, and I have to agree with them, but it’s still something I have to be mindful about.

The other issue I’m trying to focus on are my taxes. My tax bill this April was a gigantic surprise. This is because I did a poor job of planning my tax liabilities. Taxes are 100% predictable. My problems with taxes were caused getting my accountant all of my information not early at all, not paying any anticipated withholdings (which only resulted in a < $100 fine) and in using my accountant as someone to help me find creative, legal, tax deductions instead of as a tax and financial planner. My accountant used to be an IRS auditor, so he always has cool suggestions on legally avoiding taxes. If I had a gigantic pile of cash I earned, a ‘surprise’ bill like this wouldn’t be an issue. However, planning on being so profitable that certain segments of running a business can be completely neglected doesn't sound like a good idea to me. Moving forward, I am trying to proactively plan my tax liability so surprise tax bills are a thing of the past.

Things I’m Doing All Right In
By this point in the talk, I hope it is clear I am not an expert businessman. However, there are a few things I feel like I have focused on a lot, and am not doing horribly wrong.

One thing I feel like I’ve been well prepared by New Mexican universities, and my jobs, to do well is to solve my customer’s problems. That has to be the first thing in any business - customers giving you money are getting more value for what they get in return. I feel like with the vast majority of my customers, this has been true.

Saying “no” to customers is another thing I’ve had to become good at. Most customers I've dealt with have been extremely awesome to work with. Sometimes though, a customer isn't the best fit in the world, or they really aren’t that great to work with. A bit of my business comes from online contracting sites like oDesk, Fiverr or Freelancer (check my out on there, if you’d like.) Sometimes customers on those sites want me to do immoral/illegal things, or more commonly things that would be impossible or not feasible with the resource constraints they've given me to work under. Saying “no” online is much easier than saying “no” in person, but I've had to do both.

Accounting is something that I think is EXTREMELY fun. It’s basically like debugging a computer program, with money. If your books don’t match your bank account, you keep studying your books until you find the error. Being aware of where every penny goes to is extremely helpful for me. I use Quickbooks Pro, and had an ex-girlfriend that helped me a bit getting it setup. Plus, I had ONE accounting class a few years ago which helped me understand what I was trying to do.

I’m progressing with marketing in a meaningful way. Marketing is defined as promoting and selling, which is helpful in keeping my sales pipeline full and balanced. The UNM business library has a lot of great books on marketing, and I’ve been learning from one of my customers that has more sales experience than I do. This is the one I still need to work on the most, but I feel like I am moving forward. My speech today basically grew out of my (rough) marketing plan. My friend Travis (from POS Lavu, name dropping) and I thought giving an interesting speech about my experiences would help me find new customers.

Where Do I Want To Go
Ultimately, I’d like to have a product. Right now my product is my time which I can sell because of my skill at software development. That will not scale very well past about 50 hours / week. When I become extremely busy, I have my friends or other contractors, help me out. Still, that doesn’t scale well. My goal is to have a product that scales.

To build a product, I’d like to build a team. I’m good at programming, and not-horrible at business. As a programmer, if I’ve been able to hold your attention this long and not completely alienate you, that is pretty amazing too. However, I don’t have all the skills needed for developing, marketing, supporting, and growing a product. I’m very happy to have had this past year to develop skills that will help me with a product.


Sunday, July 14, 2013

PhoneGap on Ubuntu 12.04 VirtualBox Guest with Windows 7 Host

My favorite customer hired me again to work with her, this time on a Javascript-based project. She wants to port her existing Javscript, HTML and CSS code base to both Android and IOS native (ish?) apps. We're getting started with PhoneGap to accomplish this single-codebase-two-platform project. I thought I would put together a quick post about the "gotchas" that I ran into while setting up my development environment. All of the guides I found don't really cater to a virtualized Ubuntu setup, so I figured that some of the problems I overcame might help someone else.

One important lesson I learned at my last 9-5 job was to take advantage of the tools and support an integrated development environment (IDE) can provide you with. A lot of the Android + PhoneGap documentation is present for Eclipse, so that's what I went with.

This is what my first virtual Android device looks like.

I'm using Eclipse with the Android Development Tools (ADT) pre-bundled, and linking in PhoneGap version 2.9.0 on my Ubuntu 12.04 Virtual Machine running inside VirtualBox.

The main things I learned so far are:
  1. Running the ARM emulator takes a TON of resources. For the basic web development I mostly do, my Ubuntu VM is normally sufficient. I had to add another gig of RAM and double the processing capability to make this even responsive at all. It was basically taking about 5 minutes for the Android virtual device to boot before increasing the resources. After making this VM stronger, it became feasible to develop inside it.
  2. 3D acceleration inside VirtualBox and the 3D acceleration for the Android simulation don't play well together. Simulating 3D inside a simulated 3D environment seems like it might have some problems. I disabled 3D acceleration for VirtualBox, and now I only get one warning from Android. I'm pretty sure this is 100% not supported but it seems to be working for me, right now. Previously, I received a ton of errors.
  3. super.loadUrl("file:///android_asset/www/index.html");         super.loadUrl("file:///android_assets/www/index.html");

    are not the same. If you make this mistake, you will receive a "There was a network error. (file:///android_assets/www/index.html)" error. It needs to be "asset" not "assets." This is a little bit tricky, since inside Eclipse and my file system, you have "assets/www/" but when this gets moved to a phone, it's "android_asset/www/". 
PhoneGap development has been fun so far, even if I just barely finished with getting a "Hello World" program running. I'm not sure if I'll end up getting a Mac, or running on some sort of a weird virtualized Hackintosh to compile this for IOS using XCode. I don't yet have access to my customer's code base, so I cannot take the next reasonable step of trying to get their code running to see how native it looks, or if it works.

With getting this to actually run on my physical device, I had to install the Oracle VM VirtualBox Extension Pack on my Windows 7 host. I installed version 4.2.16. Then, my host went through some additional USB configurations, I rebooted the host and my guest, and I was able to see my phone from my Ubuntu VM.

DDMS Perspective in Eclipse

Inside my VM, I switched Eclipse to the perspective to DDMS. I didn't really know what DDMS stood for, or what it was, but all the other options seemed wrong. That was the correct guess, and I could select my device. I went to "Run" -> "Run", selected my device, clicked OK and then cheered when my Hello World program showed up on my screen.

Screen Shot of my Actual Screen - I'll try to take a picture, but my phone cannot take a picture of itself.

Task Manager While Running

The running app seems like it's taking a decent amount of memory. This is likely because PhoneGap requires a big .JAR file to be included with the project, in order for it to work.

Hopefully this post helps someone else, or me the next time I need to setup a PhoneGap development environment.

Thursday, July 11, 2013

417 Princeton - My Apartment

From time to time, I receive inquires about renting out my apartment located at 417 Princeton Dr SE, in Albuquerque, New Mexico. The two types of leases I've considered have been short term (daily) and long term (for a period of twelve months.) Regardless of which type of lease I actually go with, I thought that putting together a blog post about my place would be fun. That way, I can showcase some of the beautiful pictures my artistic friends took for me, and have something to look back on when I'm no longer living in this place.

My apartment is a big one-bedroom. They layout is such that from the front door, you walk into the living room. That leads into the kitchen. The kitchen can either lead into a hallway that goes into the bathroom, or the bedroom, or you can exit the kitchen. At the very end of this post, I have included a carefully constructed, artist rendition, of the layout of my apartment. It is included at the end of the post as opposed to the beginning to avoid scaring people away because I am the artist that constructed this crude rendition.

To start with the virtual picture show, the front room is the first thing people normally walk into. My friend Efrain Grijalva took this pictures for me, and helped arrange my furniture to make the place look good. Thanks Efrain! And thanks Efrain for helping refinish the beautiful hardwood floors too.

As you walk into the front door, this is what you see (when my place is clean!)

Then, if you walk forward and take a look to the right, this is where I have my dinner table setup.

Why not sit down, and enjoy some ale and fruit...?

Or perhaps go on a picnic* 

Walking through the front room leads into the kitchen. My girlfriend Lyric helped me take pictures of the kitchen. Thanks Lyric!

У меня много русских друзей. Казахстан!
Note the washer, but no dryer. The dryer is also known as a clothesline. Hey, it's New Mexico and usually dry and hot. I've been looking into getting a stackable washer/dryer combo like I did for my tenant's apartment next door.

I had a new dishwasher and a new stove installed. The fridge was a gift from my old boss at Flow Science, John Ditter.

My father and I installed the floating laminate floor together. It was a fun project, and I'm still amazed by how easy the installation was. Thanks Dad for the help, and the materials!

Lyric and I put up the tapestries together. I like those blue sarongs, tapestries, and other pieces of (potentially) decorative fabric.

The is the view looking from the corner of my room back toward the hallway.

This is the hallway leading from the kitchen into either the bathroom, or my bedroom.

Lyric strongly suggested I replace my shower head. This new Kohler shower head is awesome! I should have installed it a long time ago.

Artist's rendition of apartment layout, version 2.0. Scales are approximate, and the bedroom is bigger than I the artist made it. Additionally, the rooms are actually square. My measurements are not perfect. The black blurry things in the bedroom at the closets (2.)

Overall, I hope this gives people a decent idea of what my apartment looks like. Ideally, I would like to add more pictures from the outside of the place, and perhaps some videos. For now, I think that this is good enough. Thanks for reading!

* Picnic set only available for short term rentals.
** Please note, I only have a laptop and a ruger 10/22 worth stealing. The laptop is almost always with me, and the rifle is loaded.