Showing posts with label Computer Science. Show all posts
Showing posts with label Computer Science. Show all posts

Friday, September 3, 2010

Design Patterns: Singleton

What is Singleton ?
i am not a good person to define things, but any way , when you feel you need only one instance from a class then you need a singleton!
Did computer scientists waste their time to instantiate only one object?
absolutely no , it is a very useful solution , some time having multiple copies of objects can lead to chaos , resource looking , resource over used , …. etc
When it is needed?
Most of the common usage is to handle global setting like database connections , registry settings  , who is online now ? , .etc

here is an example to implement singleton while connecting to MYSQL connection

<?php
//ConnectionConf.php
class ConnectionConf 
{
public $Username; 
public $Password; 
public $ServerAddress; 
public $Database;
}
?>
<?php
require_once 'ConnectionConf.php';
class Connection
{
/**
* Varaible to hold the unique instance  
* @var Connection
*/
private static $UniqueInstance; 
/**
* Connetion User name 
* @var string
*/
private $_strUsername; 
/**
* Connection Password
* @var string
*/
private $_strPassword; 
/**
* Connection Address
* @var string
*/
private $_strServerAddress; 
/**
* Database Name 
* @var string
*/
private $_strDatabase; 
/**
* Last Error happend 
* @var string
*/
private $_strLastError; 
/**
* mysql link identfier 
* @var mysql resource
*/
private $_resConnectionResource; 
/**
* Class constructor , it is private , 
* so no way you can create it using new Connection 
* @param $ConnectionConf ConnectionConf
* @return void
*/
private function __construct($ConnectionConf)
{
$this->_strUsername=$ConnectionConf->Username; 
$this->_strPassword=$ConnectionConf->Password; 
$this->_strServerAddress=$ConnectionConf->ServerAddress; 
$this->_strDatabase=$ConnectionConf->Database;
$this->StartConnection(); 
}
/**
* @param $ConnectionConf ConnectionConf
* @return Connection
*/
public static function GetInstance ($ConnectionConf=null) 
{
if (Connection::$UniqueInstance==null)
{
if ($ConnectionConf==null)
throw new Exception("Connection Configuration Can't be null at first time"); 
Connection::$UniqueInstance = new Connection($ConnectionConf); 
return Connection::$UniqueInstance ; 
}
return Connection::$UniqueInstance ; 
}
/////////////////////////////// Sets and Gets Start/////////////////////////////////// 
public function GetUsername () 
{
return $this->_strUsername;
}
public function GetPassword () 
{
return $this->_strPassword; 
}
public function GetServerAddress () 
{
return $this->_strServerAddress; 
}
public function GetDatabaseName()
{
return $this->_strDatabase;  
}
public function GetConnectionResource () 
{
return $this->_resConnectionResource; 
}
public function GetLastError () 
{
return $this->_strLastError;
}
////////////////////////////Sets And Gets End/////////////////////////////////////////////////////
/**
* 
* @return bool
*/
public function StartConnection () 
{
try{
$this->_resConnectionResource=mysql_connect($this->_strServerAddress,$this->_strUsername,

$this >_strPassword);
mysql_select_db($this->_strDatabase);
}
catch(Exception $e){
$this->_strLastError=$e->getMessage(); 
return 0 ;   
}
return 1; 
}
public function CloseConnection () 
{
try{
mysql_close($this->_resConnectionResource); 
}
catch (Exception $e)
{
$this->_strLastError=$e->getMessage(); 
return 0 ; 
}
return 1; 
}
public function RestartConnection () 
{
$this->CloseConnection(); 
$this->StartConnection(); 
}
}
$Config = new ConnectionConf(); 
$Config->Username= "root"; 
$Config->Password= ""; 
$Config->ServerAddress= "localhost"; 
$Config->Database= "road";
//First instance 
$Connection = Connection::GetInstance($Config);
var_dump($Connection); 
//will return the same instance declared before
$Connection1 = Connection::GetInstance(); 
var_dump($Connection1);
?>



here are the files


http://www.4shared.com/file/9d_RHQ0I/ConnectionConf.html
http://www.4shared.com/file/DoOt0KUh/singleton.html

Google Translator is using “Statistical Translation Machine”

Before i start the article , i want to send a message to a group of idiots that said “Google Is using Rule Based” , the amazing thing is they don’t know the difference between them , so if you still don’t know the difference , i will show you the difference in this article so you can be in the safe side not the idiot side.

Rule Based Approach:
you will spend a lot of years building this engine and you wont get  good results in the end.

summary :

at this approach you have a dictionary that contains the two languages that you will translate from and to the other. then you have an engine that contains your language rules and their exceptions. when you translate you keep in mind the subjects , adverbs , verbs , ….etc. in both languages .

Statistical Translation Machine:
All what you need is data !

summary:

it simulates the way humans learn a new language , when you learn a new language you wont necessarily need to know the rules of the language , you will need to know the sentence in Arabic and its English equivalent.
first you need data , the data in this approach is any piece of text and its translation , then the algorithm tries to find a pattern in the data , based on the frequency of the text.
here is a reference
http://translate.google.com/about/intl/en_ALL/


Friday, August 27, 2010

We were developers

Are you a computer science graduate ?

If so , here is the truth; our education in Egypt don't allow us to be a computer scientist! . i have never had the lecture that supposed to tell you "What Computer Scientists do ?" , it is supposed to be the first lecture in a reputable computer science faculty, any way forget about this lecture.

the software industry in Egypt is as follows:
  1. The Clients:  group of idiots that think you are doing the impossible or some magic for them.
  2. Software house companies:  group of idiots that have some information about the field , well you can say "dummies" not idiots , working without any standards or organized process


i don't mean that there are no reputable software companies in Egypt , there are but few. 

where is the problem? 

most of software engineers become plumbers !!, we used to develop like the plumber , he also used to plumb ! ! , we don't think before we develop . we are not working on the science any more !! , most of us googling all the day for examples !!. 

Another problem , when government created scholarships for any graduate to learn programming , they totally missed up !!!, they are teaching tooooooools not science , so you can hear some one saying "i am studding .Net right now" , what the hell is that !
  
i remembered a discussion between me and a friend , we were talking about MVC , he was telling me that MVC makes websites too slow, and there are some kind of web applications  that cant be implemented  using this design pattern , can you imagine that !!! , we were discussing a topic that was closed in the seventies.

another problem , employers don't know the right qualifications to hire a software engineer , most of the employers  are focusing on the experience  !! , big shit , experience  can be useful , but without science! , you have just hired a new plumber!

i dont mean that learning new tools is not something good, but learning based on knowledge and science is much better

There are hot topics in  science that can be useful to the business , science is created to solve problems , real life problems , guys if we didn't keep up with the science not the tool we will be obsolete and we will say


"WE WERE DEVELOPERS"