Showing posts with label Development. Show all posts
Showing posts with label Development. Show all posts

Thursday, January 28, 2010

What does it mean to be a developer?



I remember in the late 90's there was a lot of talk about the already made software packages, and how they will take over the industry, and that the needs for software developers will be reduced over time and to be replaced by Functional Analysts. Of course that shift never happened, and software developers demand have continue to increase there after.

However, since the introduction of the iPhone SDK, being a developer changed drastically, especially iPhone developer. For the first time software developers are utilizing their skills to invest into their own company, creating their products, that resulted in over 140,000 apps in less than 20 months. That's amazing!

Software Developers used to be just a day to day workers, but now thanks to the iPhone, that changed. Developers are company owners managing everything from the product design and analysis, development, marketing, testing, support, maintenance.

The opportunities will grow substantially with the introduction of the iPAD. Imagine what the same experienced developers who had been busy developing for the iPhone, what they will do with for the iPAD, with it's bigger screen.

The future is definitely very bright for the developers. Now it makes more sense why Steve Ballmer when he repeated over and over: Developers, developers, developers :)

Wednesday, January 27, 2010

iPad initial feedback


Disappointed indeed:
- No initial Arabic support. link. So existing Arabic-only apps will not run initially until the next software update. Same thing true for using Safari to browse websites with Arabic.
Update
:
According to iPhoneIslam Arabic text will be supported across all the Apps, including Safari, except support for Arabic keyboard will be supported as part of the initial release.

- No Camera. In additions not having the video chat capability, this will be limiting for software developers in creating apps utilizing the camera, for example note-taking, or Augmented Reality ...

- No flash support. not promising at all; not a good web experience.

- No Multitasking? this is what annoying me the most ...

On the bright side, this will open more opportunities for developers ...


Tuesday, November 17, 2009

MonoTouch?

MonoTouch: Developing iPhone apps using .Net, C#

Sunday, November 15, 2009

The two App Stores (good reading)


I ran into this article, eventhough it's over a month old, it's worth reading

Saturday, March 07, 2009

Fractions Helper is featured at the Apple Store


Apple is putting a lot of effort into marketing various iPhone applications, and they have choosen Fractions Helper as one of the Educational Application featured at the Apple Store, with it installed on their demo units.

Thursday, January 29, 2009

Get help in Fractions with Fractions Helper


Look for it in the iTunes AppStore. This application can be used as a teaching tool to show three simple, and yet detailed steps for solving fractions problems.

Monday, January 05, 2009

iPhone SDK online course materials from Stanford

Already with 20 lectures available in PDF format, click here. The course includes Unit Testing an iPhone application with sample applications

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

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!

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);
}
}
}

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");
}
}

Thursday, December 27, 2007

Arabic iPhone




This is very promising. I have already installed the Arabic font, and Arabic keyboard and now I can read/write Arabic SMS, Email, and open most of Arabic web sites.


The good news, more programs are in in the works right now including prayer program, Quran, and more. For more information visit this website: www.iphoneislam.com.
Also, for more inforation about the full Arabic support watch the following video: http://www.iphoneislam.com/?p=22


Also, I have been experimenting with writing a prayer program myself, and I am planning to post it soon on this blog. The program will play the athan at prayer times, and it will display the prayer times for the current day. More information will follow soon.


I am planning to put it as open source under google code portal