Fixing Open Source (TestLink)

I love open source… but I still expect it to work. That expectation is misplaced since no one is officially supporting it – so I am thankful that I have enough skill to fix problems when I encounter them (even if it takes WAY too long).

I’ve been looking for a more formal way to document/store/re-use test cases and results for web app testing that I have to do for each web app I create. I never test my own work (a lesson learned while at IBM) except for simply functional testing. Also, my tester, Robin (my wife) who has become quite skilled at testing, lacks the formal discipline that a “career tester” has from corporate experience. So, I always sit down with her and create a very informal test plan. However, I desire to create a “world class” organization and that starts with good processes. So – I went searching for a testing framework… because tracking on Excel just won’t due.

Why won’t Excel do you ask? Simple… because I have dozens of test cases that need to be multiplied by 7 platforms (IE, Firefox, Chrome, Safari, iPhone, Android, Blackberry) and multiple screen resolutions, etc… and I’d like to be able to see where we’re at whenever I want without interrupting Robin to ask. Some quick research led me to TestLink. It looks simple but clunky, but hey, its open source (free), so I downloaded it, installed and started reading the docs.

The docs are horrible, clearly written by an ESL developer. So I started just using it. I’m kinda getting the feel for it, but an important feature was integration with defect tracking (Trac) that I use. They have a config for it, but it wasn’t working no matter how I tried to configure it. After a LOT of research, I found this bug report: http://mantis.testlink.org/view.php?id=5219#bugnotes (I had to create an account to even see the bug details). Anyway – someone had the exact same problem I was having.

Seems the good folks at TestLink wanted me to create an anonymous user and grant XMLRPC access to that account…. ya right! So this defect was trying to allow XMLRPC authentication using the correct method, but the code just wasn’t working, and the “solution” that they came up with in the defect didn’t work either. The problem is, the first connection to Trac needs to authenticate using the /login URI path, however the code is not doing that – its just using the basepath. So, to make a long story shorter, I created a new variable with the login path and substituted that for the first connection. For anyone with similar problems, here’ s the exact solution I am successfully using now:

Edit the file /lib/issuetrackerintegration/tracxmlrpcInterface.class.php and insert the following at line 75 (inside the completeCfg() function:

if( !property_exists($this->cfg,’urilogin’) )
{
$this->cfg->urilogin = $base . ‘login/xmlrpc’;
}

That sets up the login URI. Then, you want to use it later in the file on line 278:

$this->APIClient = new xmlrpc_client($this->cfg->urilogin);

I also had to change the trac config (in the TestLink webapp under Issue Tracker Management -> Trac -> change the template to use <user> instead of <username>. After that, I could successfully add a Trac ticket to a failed testcase and navigate to it from TestLink. Sweet.

Now I can happily finish my evaluation of TestLink to see if the rest of it will actually suit my needs.

Posted in Entrepreneur, Web Development | Tagged , , , | 5 Comments

HTML5 Video

I just received an email from Long Tail Video (creators of the ubiquitous JW Player – the Internet’s most popular media player for web pages) about the state of HTML5 Video.

Here’s their report: http://www.longtailvideo.com/html5/

Its a great summary of where things are with regard to video/audio and HTML5. Having used audio and video on several web sites, its a great summary and very informative. Seems like for the time being, the JW Player is still the best choice – no early migration to pure HTML5 – technology is just not quite all there yet.

Posted in Web Development | Leave a comment

They Call Me “Data”

Data from Star Trek

Data from Star Trek

I’m part of a mastermind group that was started with a friend of mine, Lee Jenkins, who runs the Think and Grow Rich page on Facebook.

Lee is a quick learner, and has enough technical knowledge to get done what he needs – enough to be dangerous, as they say. Every once in a while, he’ll ask me a web development question, which I usually know off the top of my head, or can look up in a minute or two. He is always amazed that while he spends a half a day trying to figure something out, I can do in a few minutes. He calls me “Data” at our weekly meetings.

It’s so good to have “go to” people to help satisfy specific needs when you lack skills. I love having people I rely on to bounce marketing ideas off, exercise routines, computer hardware questions and the list goes on. The more people you surround yourself with who are ready and willing to help, the better. Of course that means you have to be ready and willing to help those around yourself too.

I’m reminded of Henry Ford, when he sued a newspaper for libel for calling him an imbecile, he was asked a series of questions by a lawyer during the trial who was trying to prove him an imbecile – the lawyer asked a bunch of general knowledge questions and after he got tired on them he replied something along the lines of “Let me remind you that I have a series of push buttons at the top of my desk and the pressing of the right button will summon to me people able to answer any question pertaining to the object of my endeavor. Now you tell me sir, why should I clutter up my mind with general knowledge when I have at my disposal the mean to get anything I need?” Clearly he was not an imbecile.

How grateful I am for people who are willing to help me!

Posted in Entrepreneur, Personal, Uncategorized | Leave a comment

CEO vs Lead Techie

Split personality

Split personality

I am both. When your company is going nowhere its easy to do both. However, when your company is growing its hard.

For me its getting really hard to do both things. I’ve heard it said that CEO’s should spend about 50% of their time doing “visionary” work – directing the company planning future, etc. I really enjoy the visionary work, but I’m also the only developer in a company who’s product/service is a web tool.  Development is more than a full-time job. I enjoy doing the creative part, but after the creativity is over and grunt work is needed, its painful… but necessary. Finding the right balance is challenging, especially consider other aspects of life, such as husband, father, primary teacher, not to mention the other businesses I’m in.  On top of that, neither is the kind of thing that can easily be handed to someone else to do. Both are highly specialized, based on experience, intuition and skill.

Its nice to be able to do both, because doing solely one or the other for too long gets frustrating and I develop burnout. I wonder about my efficacy, and how long I’ll be able to sustain doing both jobs. And, for that matter, if I had to choose, which would I pick?

Posted in Entrepreneur | Leave a comment

Ripple effect – you can’t just make that change

Ripple effect

Ripple Effect

I was strategizing today about some upcoming changes to CalendarBudget. A lot of suggestions were thrown around by my non-technical people.

I try to consider each idea on its own without the developer in me kicking in and thinking – “oh my gosh, that’s gonna affect everything!” I’ve learned to fight that reaction because at the end of the day – who cares how long it takes me to develop something – so long as its the right thing for the customer/product it’ll be a good move. Since I tend to be very persuasive I think I could shut down ideas pretty fast if I weren’t careful. Thankfully the people I work with have excellent ideas and I’ve found away to keep quiet long enough for those ideas to be expressed and adopted, making CalendarBudget a much better service in the end.

Posted in Web Development | Leave a comment

Goal Setting: Putting your (family’s) money on it!

I’m a goal setter, but don’t like the drudgery of traditional goal setting. Also I feel that I am not the ideal person to identify my worst flaws and prioritize them. The best people to do that are those around me most – my family. But they don’t want to offend me – so I invented a way to get them best feedback with them feeling like they’re going to offend me (and this works for everyone).

Here’s the plan:

  1. Everyone in the family has to come up with a goal for everyone else in the family (not for them self). So in my family of 7, I’ll come up with 1 goal for each of my 6 other family members and they will do the same. This will generate a bunch of ideas of what each family members feels is most needed for me. If you’re worried about offending – do it secret ballot style. There will be a bunch of duplicates – consolidate them so each person has a set of suggested goals. For my family of 7, each person will have up to 6 goal ideas, but more likely 2-3 after consolidating duplicate ideas.
  2. Give everyone $10 monopoly money for each member of the family (this time including self). For my family, that makes $70 monopoly money for each person.? Each person has to spend $10 on each person – putting their money on the goal they would most like that person to work on. You may decide to limit it so they cannot spend on their own idea, or only half on their own idea.
  3. Add up the totals – whichever goal has the most money, is the top priority for that person.
  4. Attach a BIG reward to the accomplishment of the goal. “BIG” needs to be proportionate to the goal and person. For example, if my daughter gets a goal of “stop sucking your fingers” (which is a persistent problem), they may get a reward like a night out to Chuck E Cheese or a movie with mom and dad… something big to them. For adults – be creative within your budget.

Make sure the goals are specific, measurable, attainable, realistic, and time-bound (SMART).

Posted in Uncategorized | Leave a comment

My future Computer Workstation

http://www.novelquest.com/emperor.html

Bask in its eternal glory!

Posted in Uncategorized | Tagged | Leave a comment

Finally a good justification for me staying up late

This article from Psychology Today shows scientific evidence that night owls are more intelligent than morning larks. Enough with the early to bed-early to rise stuff :)

http://www.psychologytoday.com/blog/the-scientific-fundamentalist/201005/why-night-owls-are-more-intelligent-morning-larks

Posted in Uncategorized | Leave a comment

Implementing the aes encryption/decryption algorithm in java

Unfortunately it took me over an hour to find the correct information to implement the AES encryption algorithm, which is easy to use in MySQL as aes_encrypt(text, key) and aes_decrypt(text, key), so I’m posting the solution here for other fellow Java programmers.

import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class AESUtil {

private static final byte[] keyValue = new byte[]{'m', 'y', 'a', 'w', 'e', 's', 'o', 'm', 'e', 'k', 'e', 'y', ' ', ' ', ' ', ' '}; 

public static String aesEncrypt(String valueToEnc) throws Exception {
 Key key = new SecretKeySpec(keyValue, "AES");
 Cipher c = Cipher.getInstance("AES");
 c.init(Cipher.ENCRYPT_MODE, key);
 byte[] encValue = c.doFinal(valueToEnc.getBytes());
 String encryptedValue = new BASE64Encoder().encode(encValue);
 return encryptedValue;
}

public static String aesDecrypt(String encryptedValue) throws Exception {
 Key key = new SecretKeySpec(keyValue, "AES");
 Cipher c = Cipher.getInstance("AES");
 c.init(Cipher.DECRYPT_MODE, key);
 byte[] decordedValue = new BASE64Decoder().decodeBuffer(encryptedValue);
 byte[] decValue = c.doFinal(decordedValue);
 String decryptedValue = new String(decValue);
 return decryptedValue;
}

public static void main(String[] args) throws Exception {
 String eText = AESUtil.aesEncrypt("Text to encrypt");
 System.out.println("Encrypted text is " + eText);
 String dText = AESUtil.aesDecrypt(eText);
 System.out.println("Decrypted text is " + dText);
}

}

The key has to be 16 bytes – not longer, not shorter. If your key is shorter, pad the end with spaces as in the above example. This returns a base64 encoded string, which is safe to use in URLs and pass around in code/databases/across networks/inter-language/etc.

Its perfect for passwords or other sensitive data that should not be plain-text, but needs to be somehow visible, such as in URL parameters in links within personalized emails.

Feel free to use.

Posted in Uncategorized | Tagged , , , , , , , | Leave a comment

Bright people are hard to change

Not that anyone wants to change a person who is already bright, because — lets face it, bright people are right maybe 80%+ of the time and arrive at their conclusions MUCH faster than the average bear. But I’ve noticed the following… mostly in myself:

Bright people usually learn to be mentally lazy. This is because we don’t have to think as much as most people to keep up with them. So, often we’ll just match or barely exceed other around us and we learn that not thinking to our full potential is ok. This becomes a habit and we expect mental activity to be easy for us.

When a truly difficult mental exercise presents itself, we love the challenge, but if the answer doesn’t come quickly and with minimal effort, we’ll often give up. I think this is due to the habit of mental laziness. Although I am very interested in bettering myself, I find it very discouraging when I don’t “get it” right away. Truly the adage “thinking is the hardest work in the world” is correct. Recently a good friend pointed out a flaw in my thinking as I’m trying to adopt improved thought patterns. He was completely right, and I really appreciate him pointing it out – because often people are afraid to give me criticism — assuming that since I’m bright, I’m better that they are – which of course is non-sense. However, when he pointed out the flaw, for some reason I felt hurt – as if some perfect edifice had been found faulty.

The whole scenario was indicative of a huge flaw of mine – fear of failure. However, seeing as I’m trying to improve I’ve consciously overruled my defense mechanisms and am seeking for personal betterment. I asked about how I was wrong – took the feedback and want to do better.

This whole situation made me think how it can be hard for bright people to improve beyond their natural talents. At any rate, I seek for continual improvement – regardless of any past (incorrect) subconscious programming.

Posted in Personal | Tagged , | 3 Comments