Six years ago, I was still a student at the University of Geneva, I decided to host myself a blog in order to be able to share my ideas and views with other people. It was also a convenient way for me to be able to remember some random ideas I would have read or learnt.  

I quickly realized that nobody was reading my blog :)! So I changed the switched the main language to English instead of French, this helped quite a bit to increase the number of visitors. I remember that I was really proud when around 30 people per day would visit my blog.

With time my focus and the focus of this blog sharpened on web design and web development (mostly Macromedia/Adobe Flash). Being actively focused drive this blog high in page rank and I had a decent amount of daily visitors (for a personal blog, that said).

Since my professional focus shifted from web design and development to software engineering and testing, the focus on this blog has been lost. Frankly, I am writing about too much random stuff to be able to capture someone attention.

In computer science there is a known paradigm, called divide and conquer, that state that to fix a complex problem a solution is to divide it in simpler problems. Starting today I will apply this paradigm to my online presence.

I am a software tester by profession and I am passionate about software testing knowledge and theories. I have opened a blog dedicated to software testing: testingpatterns.info where I will be blogging about software testing whenever I have something to write. Join me there if you are interested by software testing :).

I work at Microsoft, on Lync server and I own the testing for Response Group Service and Call Park Service. I have opened a while ago a blog on MSDN dedicated to this topic. Join me there if you are interested by Lync server response group service and call park service :).

What about metah.ch / ahmetgyger.com blog? Well I am going to use this blog only for more personal related blogging, giving my point of view on technologies and sharing some information about my life in the US.

Thanks for reading!
A.

 

Some interesting Spec Explorer videos from Channel9. It is all you need to get started with Model Based Testing.
The idea behind spec explorer is to make a model of the requirements of your products and let Spec Explorer generate millions of interesting test cases. You just need to find enough CPU power to run all the generated test cases :-)!

Continue reading »

 

In that time I was a big fan of SEO and thought that it would be cool to place my first name (Ahmet) in top positions of search engines. When I started I couldn’t even find a reference to my website while searching on Google.com (European server) and there are about 44,700,000 results when searching for Ahmet on Google. I’m now positioned in average at the 15 position, which isn’t bad at all :)

Why do I talk about this? Just because I think it will be harder to go above my actual positioning and I don’t have has much fun in old and traditionnal SEO.
So I am officially ending my (useless) experience about positing the Ahmet Keyword :)

Ahmet [Yes I'll keep on singing my post :) ]

 

Some days ago I started using FMS (Flash Media Server). Obviously I wanted to write my project in AS3 and realized that they weren’t a lot of documentation on the topic, that why I’ll post here every part of code I made working.

My last project was about creating a chat. I downloaded the demo from FMS2 and tried to update it to AS3, not a big deal, but I’m happy that it works now.

FMS Chat Demo

I didn’t design it in OOP (object oriented programming) as it is only a simple demo, but I think it can be a good start for anybody starting using FMS with AS3.

I wrote 2 files, one .fla for the client and one .asc for the server.

The .asc file

//Fired when the application is loaded on FMS
application.onAppStart = function()
{
	trace(" *** FMS Application Started *** ");
	/**/
	// Get the server shared object 'users_so'
	application.users_so = SharedObject.get("users_so", false);

	// Initialize the history of the text share
	application.history = "Welcome to this chat!\n";

	// Initialize the unique user ID
	application.nextId = 0;

}

//Fired when a client connect to the server
application.onConnect = function(newClient, name)
{
	// Make this new client's name the user's name
	newClient.name = name;

	// Create a unique ID for this user while incrementing the
	// application.nextID.
	newClient.id = "u" + application.nextId++;

	// Update the 'users_so' shared object with the user's name
	application.users_so.setProperty(newClient.name, name);

	// Accept the client's connection
 	application.acceptConnection(newClient);

	// Call the client function 'setHistory,' and pass
	// the initial history
 	newClient.call("setHistory", null, application.history);

	// The client will call this function to get the server
	// to accept the message, add the user's name to it, and
	// send it back out to all connected clients.
	newClient.msgFromClient = function(msg) {
		msg = this.name + ": " + msg + "\n";
		for(var i=0; i < application.nextId; i++)
		{
			application.clients[i].call("msgFromSrvr",null, msg);
		}
		application.history += msg;
	}
}

//Fired when a clien disconnect from the server
application.onDisconnect = function(client)
{
	trace("disconnect: " + client.name);
	application.users_so.setProperty(client.name, null);
	application.nextId--;
}

Here we got 3 steps,

  1. application.onAppStart: is called when the application is loaded in FMS, it basically inform us that the application is ready to use.
  2. application.onConnect: is called when a client connect to this application in FMS, here is all the server logic to interact with the client(s).
  3. application.onDisconnect: is called when a client disconnect from the application or when the application is unloaded from FMS

The .fla is only the for UI (user Interface) and for the interaction with the server. If you have trouble understanding what is happening look at this code where I explain how to call functions from server side to client and from client to server.

I know it is not the state of the art in terms of chat but again, this is just a small demo on which complex interaction could be built.

you need to download FMS 3 free developer edition to start having fun with FMS.

Download the source of the FMS Chat

Ahmet

 

AIR LogoIn an over charged world of projects management and ideas, it sometimes hard to gather the attention to the ultimate decider (your boss or yourself) to use new technologies.

I started at the beginning of this week to seed (and water it  ) my boss brain with new possibilities with AIR. Some techniques worked greatly and some did not…

I’ll try to gather all the different move I’ve made (and I’ll make) and let you know what to do and what to avoid ;)

My first step was to present to my boss what our existing technologies could be with AIR, all the advantages of desktop applications, supporting internal database, connections aware and finally demanding very few adjustment to our already existing application to be deployed.

Just told him about the few times involvement and the small budget to allocate and you’ll make a positive point in your argumentations.

The second day, very enthusiast I told him about the easy installation process and the lightweight of the plug-in: bad idea! Technical argument won’t, most of the time, speak to entrepreneurs.

If you are, like me, pushing your boss to shift to AIR, be smart and follow this thread ;=)

Any advices are welcome…

Ahmet

 

I often have to deal with client that want to made some ‘small changes’ in the navigation menu. Put element 2 before element 1 and change the name or the link…

So lazy as I’m, I decided to write (my first) a PHP Class, that should handle a two level navigation. Let me share with you how to use it:

< ?php
	include_once("Navigation.php");//the Class
	include_once('navigation_definition.php');// Array of Nav. Element
	$myNav = new Navigation($a); //Construct Nav.
?>

As you see we need to define a navigation file. This file is an associative array giving a list of information:

  • “key”: link name
  • “class”: the css class name
  • “href”: the URL of the link
  • “parent”: the key of the parent element
< ?php
$a = array(
"Top Level 1"=>array("class"=>"level1", "href"=>"test1.php", "parent"=>"no"),
"Top Level 2"=>array("class"=>"level1", "href"=>"test2.php", "parent"=>"no"),
"Level 2 sub 1"=>array("class"=>"level2", "href"=>"../nav/test3.php", "parent"=>"Top Level 2"),
"Level 2 sub 2"=>array("class"=>"level2", "href"=>"../nav/test4.php", "parent"=>"Top Level 2"),
"Level 2 sub 3"=>array("class"=>"level2", "href"=>"../nav/test5.php", "parent"=>"Top Level 2"),
"Top Level 3"=>array("class"=>"level1", "href"=>"test6.php", "parent"=>"no"),
"Level 3 sub 1"=>array("class"=>"level2", "href"=>"../nav/test7.php", "parent"=>"Top Level 3"),
"Level 3 sub 2"=>array("class"=>"level2", "href"=>"../nav/test8.php", "parent"=>"Top Level 3"),
"Level 3 sub 3"=>array("class"=>"level2", "href"=>"../nav/test9.php", "parent"=>"Top Level 3")
);

?>

Now it’s done, you can see a working example here.
If you like it, download the zip containing the Class, a navigation definition and a CSS file.

This will only work on PHP5 by the way…

Ahmet

 

I’m migrating my server from php4 to php5. As you may notice the website is weird and will stay until some time.
Please pardon the errors you encounter.

Ahmet