Tuesday, December 23, 2008

iPhone "Algebra Helper 1" experience


I am currently working on multiple iPhone applications which I will be releasing very soon to the Apple AppStore. I have released one application so far, and the results so far is very encouraging. I am going to mainly focus on Education, as I see a potentail needs in the near future on the iPhone and iPod Touch devices.

Friday, November 28, 2008

From iTunes Store Team: Ready For Sale

Now I am dealing with setting up the contract, since it's not a free application

Sunday, November 16, 2008

My Live account was hijacked !

It is very scary what just happened to my Microsoft Live account, but some how my contact list was hijacked and an email message was sent to my entire contact list. This is very scary! The email message was sent in my name, however, it did not include my signature.

The only way this could have happened, is through me using public wifi's at Starbucks. This is only my speculation. Right now, I have set my password to automatically expire every 72 hours until I figure out what's the story

Any other recommendations?

Tuesday, September 16, 2008

Design Automation system with states for debugging purpose

It is very important to design your automation system with debugging in mind. For example, you have a an automated suite that runs in sequence, and you needed to make changes in the last test or even add a new test; if you don't design your system correctly, you will end up running through your entire test in order to debug your test under development.

Thus, the solution is to identify states in your system, which makes each of the test of test suite be dependent on any of these states.

For example, we could have the following states in our system:
  • StartUpState
  • LoggedInState
  • FileOpenState
This way, each test is independent, and you no longer are required to run the entire suite in sequence. This will make debugging and maintenance a breeze in comparison to create a sequential test suite. This concept is used heavily in SILK, with the Base State concept.

The interesting part is how to implement this concept taking advantage of object oriented language such as C#? I will cover this in my next post, stay tuned!

Monday, August 25, 2008

My first Mac



Finally, I broke down and purchased a white MacBook. I made this purchase mainly to do software development on it, and also to use it as a light weight laptop alternative. I have been using a heavy 15.4 inch Dell, which I have been happy with, except for it's size.

My MacBook came with a 2 GB of RAM, 160 GB HD, with a disappointing Intel Graphics Card (Intel GMA X3100). I did not want to get the MBP yet, as this is my first Mac System, so I wanted to ween my self slowly into the world of Apple.

Also, I have installed Vista Ultimate on it using Bootcamp 1.2 and to my surprise, I could not believe how easy the whole process. I am impressed with the performance of Vista running on the MacBook. Right now I am still learning my way around the Mac OS X.

The first applications I have installed so far:
- Office 2008 for Mac
- iPhone SDK
- Firefox
- Live Messenger, and Yahoo Messenger

...and I am still looking to what other applications to install.

Wednesday, July 16, 2008

Symptoms you are addicted to your iPhone


  1. You automatically assume that every screen is a touch screen: Many times I reach to my computer screen to use the same gesture I use on my iPhone to scroll up and down

  2. Can't sleep without it

  3. Can't stop playing with the iPhone even though you already checked everything on it less than 2 minutes ago

  4. You can't stop using the built in stopwatch

  5. You don't let your iPhone ever go out of charge no matter what.

Tuesday, June 03, 2008

Poll: What Feature do you want to see on the 2nd Generation iPhone in additions to 3G Support

Please participate

iPhone 2nd generation wish list

This is what I wish Steve Jobs will announce June 9th for the iPhone 2nd Generation:-
  1. 3G support
  2. Built in GPS
  3. 5 MP Camera
  4. Video Calling, i.e. front camera
  5. Video recording
  6. Stereo Bluetooth support

Six more days from now.

Monday, June 02, 2008

Agile Testing and Test Automation

Agile Testing and Test Automation goes hand in hand; without automated tests, agile testing becomes almost impossible.

Agile testing is all about evaluating software changes as soon as possible and as often as possible during the software release cycle. The key success to agile testing is to automate the tests that are executed most often, and in most cases the smoke test and the priority-1 tests are executed most often.

The way to introduce agile testing in an organization the first step is to put together a plan to move toward the agile testing approach. The plan will need to identify specific tasks and goals in meeting this goal, which is to test early and often.

A plan may look like this:-
  1. Identify system smoke test, and system priority-1 tests.
  2. Automate System smoke test and system priority-1 tests.
  3. Identify area specific smoke test, and area specific priority-1 tests.
  4. Automate area specific smoke test, and area specific priority-1 tests.

In large systems, critical areas within the system gets to be automated first.

The result will be a repository of automated set of tests that will provide evidence that the software is OK from the testing side. Of course, prior to running this tester level automated tests, a set of developer level automated tests is run to provide evidence that the software is OK from the developer side. Both automated tests, tester tests and developer tests are executed together. This what makes agile testing possible.

Wednesday, May 28, 2008

Is Vista a failure?

I am getting sick and tired of reading about how failure Vista is. Vista being late is one thing, but stating that Vista is failure and XP is better, is totally wrong. I have Vista running on four of PCs running in my house and all are running very well. And no I don't have the latest hardware on all four of my PCs

This notion that Microsoft talking about Windows7 indicates Vista failure is also wrong. Microsoft have indicated regardless how success the current OS is that they will have a two year release cycle.

In all these reports that talk about how bad Vista is, never mention any specifics why Vista is a failure. It seems that picking on Vista without providing any details is becoming a popular trend

Multi-touch in Windows 7 demo


Video: Multi-Touch in Windows 7

I love the Mapping Application multi-touch experience, and the piano part is amazing.

Saturday, May 10, 2008

iPhone Arabic support is available now

I just installed it and it appears to be working better than the previous one. The good news it is currently provided for free from iphoneislam. From reading Tariq's blog this will be only available for free for only one month period. So I suggest you install it ASAP.

Sunday, May 04, 2008

Dubai skyline

Forwarded from a friend:
========================================================

An amazing view on one of Dubai 's city skylines.
This picture was not taken from an airplane, but from the world's tallest building:
Burj Dubai @ 2,620 ft / 801m!!!
===================================================================
I drove by Dubai Tower last week at night and definitely it can not be missed from a far distant. Driving through Dubai after four years of leaving was a shocking experience. Starting from the under development Dubai Metro system , The Emirates Mall with the in-door ski, to the massive development along Sheikh Zayed Road.


Tuesday, April 15, 2008

Thursday, April 03, 2008

Using The Microsoft UI Automation Library to Drive UI Automation

The UI Automation Library is included in the .NET Framework 3.0. The concept seems to be straightforward. Every UI control is an "AutomationElement" which can be found through searching from the Parent "AutomationElement". The top AutomationElement is defined as the "RootElement", which is the Desktop. Another way to get the AutomationElement Object to a given Window is by starting a "Process", and then using the Process MainWindowHandle to get the AutomationElement object.

The code shown below is basically a test that Invoke Notepad, Enters an input text, and then it compares with the text which is read from Text property of the Notepad Text Field, and then closes Notepad without saving.
using System;
using System.Windows.Automation;
using System.Diagnostics;
using System.Threading;
using System.Collections.Generic;
using System.Text;

namespace UIAuto_01
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Starting Notepad!!!");

// #1 Start Notepad
//
Process notepadProcess = Process.Start("notepad.exe");
Thread.Sleep(500);
AutomationElement aeDesktop = AutomationElement.RootElement;

// #2 Find Notepad
//
AutomationElement aeNotepad = AutomationElement.FromHandle(notepadProcess.MainWindowHandle);

if (null == aeNotepad)
{
throw new Exception("Notepad not found!");
}
Console.WriteLine("Found Notepad !!!!");

// #3 Find Notepad Text Field Control
//
AutomationElementCollection aeAllTextBoxes =
aeNotepad.FindAll(TreeScope.Children,
new PropertyCondition(AutomationElement.ControlTypeProperty,
ControlType.Document));

if (0 == aeAllTextBoxes.Count)
{
throw new Exception("Notepad Edit field not found!!");
}

Console.WriteLine("Found Notepad Edit Field!!!!");

AutomationElement aeNotepadDoc = aeAllTextBoxes[0];

// #4 Type the input value
//
aeNotepadDoc.SetFocus();
string InputValue = "Hello World!";
System.Windows.Forms.SendKeys.SendWait(InputValue);

// #5 Get the Text from the Text Field
//
TextPattern tpNotepadDoc = (TextPattern)aeNotepadDoc.GetCurrentPattern(TextPattern.Pattern);
string ActualValue = tpNotepadDoc.DocumentRange.GetText(-1).Trim();

// #6 Compare input and actual
//
if (ActualValue == InputValue)
{
Console.WriteLine("Test Passed!");
}
else
{
Console.WriteLine("Test Failed: Expected={0} Actual={1}", InputValue, ActualValue);
}

// #7 Now close Notepad
//
WindowPattern wpNotepad = (WindowPattern)aeNotepad.GetCurrentPattern(WindowPattern.Pattern);
wpNotepad.Close();

// #8 Find The Save, Don't Save, Cancel Dailog
//
AutomationElement aeSaveDailog = findElement(aeNotepad, "Notepad", 10);
if (null == aeSaveDailog)
{
throw new Exception("Notepad Save dailog was not found!");
}

// #9 Find the "Don't Save" button and Click it
//
AutomationElement aeDontSaveBtn = findElement(aeSaveDailog, "Don't Save", 10);
if (null == aeDontSaveBtn)
{
throw new Exception("Notepad Don't Save Button was not found!");
}
InvokePattern ipDontSaveBtn = (InvokePattern)aeDontSaveBtn.GetCurrentPattern(InvokePattern.Pattern);
ipDontSaveBtn.Invoke();

// #10 Done
//
Console.ReadLine();
}

// Returns a Automation Element based on the parent AutomationElement, and caption.
//
private static AutomationElement findElement(AutomationElement parent, string caption, int timeout)
{
AutomationElement aeNew = null;
int numWaits = 0;
do
{
aeNew = parent.FindFirst(TreeScope.Children,
new PropertyCondition(AutomationElement.NameProperty, caption)
);
++numWaits;
Thread.Sleep(100);
} while (aeNew == null && numWaits < timeout);
return (aeNew);
}
}
}

Wednesday, April 02, 2008

iPhone full Arabic support is here



Requirements:
1- Firmware version 1.1.3/1.1.4
2- Arabic Keyboard setup following instructions provided by Tariq @ http://www.iphoneislam.com/
Setup instructions:
1- Add the following Source in your Installer. This can be done by going to the Sources Tab, and selecting the Edit button. Then, type the following URL in the source field: http://repo.aakqtr.com/
2- After the sources are refreshed, navigate to BiOsS Modz category in the Install Tab, and select: iPhone Arabizer 1.0 and choose Install.
3- Reboot the Phone
4- At this point Safari can render the Arabic text to any Arabic website, Email, Contacts, and Calander also support Arabic text at this point
5- Go to Settings > General > International > Language: and choose Arabic (this will change your UI Language)
6- Go to Settings > General > International > Region Format and Select Arabic and the Country.
Now you have Full Arabic support in the iPhone.

Friday, March 07, 2008

iPhone SDK Announcement: SEGA on the iPhone


From what was presented on the special keynote the SDK looks promising. The only bad part the entire toolset are native Mac OS tools, no Windows.


The most impressive thing is the SEGA game that was developed in two week period using the SDK, and the comment about the quality of the game is console quality not cell phone quality.


Friday, February 29, 2008

Monday, February 18, 2008

Scripting with C# Script

I have been playing cscript recently and I have found it a better alternative to Jscript. With C# Script you have the power of C# Language with the scripting capability. Hence, you don't have to compile your code when making modification to it.

You also have the option to create an executable out of the script.

Here is an example of accessing COM from C# Script. Notice the include tag on the first line

//css_prescript com(SYSINFO.SysInfo.1, SisInfoLib);
using System;
using SisInfoLib;
class Script
{
[STAThread]
static public void Main(string[] args)
{
SysInfoClass sysInfo = new SysInfoClass();
switch (sysInfo.ACStatus)
{
case 0:
Console.WriteLine("Not using AC power");
break;
case 1:
Console.WriteLine("Using AC power");
break;
default:
Console.WriteLine("Unknown AC power status");
break;
}
if (sysInfo.BatteryLifePercent != 255)
Console.WriteLine("Battery life " + sysInfo.BatteryLifePercent + "%");
else
Console.WriteLine("Battery charge status not known");
}
}