Filmmaker, Video Editor, Motion Graphics Designer, and Photographer in Cairo, Egypt.
Keeping notes to remember.. You may consider it some sort of Documentation.

Stay In Touch

Monday, December 21, 2009

Friday, December 18, 2009

Poster Design Tips

Indeed the first job of a poster is to attract the attention of the passerby and only once this is done can a message be delivered. A good poster then is one which is attention-grabbing, succinct, convincing and memorable.

To achieve these aims designers may use a large format and bold color, simple and minimal text and attractive illustrations which psychologically support and reinforce the written words. At the same time designers must consider the constraints imposed by the methods and places of display and competition from other posters whose messages may be as urgent and emphatic.

Content of the poster
  • Tell a story: provide clear flow of information from introduction to conclusion
  • Focus on your major findings - a common fault is to try to cover too much. Few delegates are going to read everything on your poster, so get to the point.
  • Use graphs, tables, diagrams and images where appropriate. Use boxes to isolate and emphasis specific points.
  • Put as little as possible on the poster (design or text).
  • Arrange the design and lettering to attract the attention of passers-by.
  • Consider where the poster will be hung or displayed.
  • Use harmonious color combination.
  • Design and text must complement each other.
  • Use a modern up-to-date art style.
  • The design should not detract from the impact of the words.


Friday, November 27, 2009

How To Say It: Marketing With New Media

# The Big Idea
This book offers new media tools that will help your business and your message stand out from the crowd. You're shown how to speak to your always-evolving audience, who are becoming more savvy, edgy, and impatient every day - as well as how NOT to go about doing so.

# Creating Your Marketing Message
A marketing message is a short statement that explains the purpose of your business to your target audience. You should be able to say what you do, who you do it for, and the benefits you
provide in the time it takes to ride the elevator - about thirty seconds.

Here's an easy “what, whom, and how” formula for creating a unique marketing message that will quickly communicate with your target audience:
What do I do?
Whom do I serve?
How specifically do my customers benefit?

The next step is to combine your what, whom, and how:
“Renaissance Bakery creates mouth-watering confectioneries that transform your celebrations from the simple to the sublime.”

# Getting Your Message Across With a Website
Your website is the hub - the gateway to all of your online marketing efforts. It is an integral part of your business identity and your calling card for doing business in the twenty-first century.

A website also is an essential lead-generating tool, capturing visitors' contact information and automatically building your authentic customer list spam free.

How to say it on your website
- Make it easy for customers to find you.
- Refine your home page copy.
- Write conversationally.
- Offer incentives.
- Use language that positions you as an expert.
How NOT to say it on your website
- Don't use corporate speak.
- Don't focus on your own gains.
- Don't lose track of the customer.

# Getting Your Message Across With a Blog
Blogs are the most direct two-way online communication vehicles, making them the heart of organic discourse. They're engaging; they're interactive; and as a result, they create a conversation, not a monologue. Blogs can offer fresh insights into a company, allowing for direct access to decision makers and encouraging communication between customers.

How to say it on your blog
- Name your blog so relates directly to your business.
- Keep your blog on focus with themes.
- Find a provider that offers all the technical elements you need.
- Keep the same look and feel as your other marketing products - both online and offline.
- Keep the tone casual, but maintain professionalism.
How NOT to say it on your blog
- Don't bombard your readers with listings and blatant advertising.
- Don't write in a stilted, awkward manner.
- Don't recite industry information without adding in your own thoughts.
- Don't write an essay.
- Don't be wishy-washy. Take a stand on the topic.

# Putting It All Together
Promote your business with several proven marketing tactics such as:

Search Engines:
Making sure your business is at the top of the search list is critical for if you want prospects to find your business.
Viral Marketing: Post an article or report online, embed the URL to your website or blog, and the world can follow you to wherever you lead it.
Social Media: The possibilities for spreading the word about your business to this global community are limitless.
Other tactics: The Internet allows you to attract attention to your business in numerous ways.

This is a summery for:
How to Say It: Marketing with New Media
Authors: Lena Claxton and Alison Woo
Publisher: Prentice Hall Press
Date of Publication: 2008
ISBN: 978-0-7352-0432-4

Sunday, November 8, 2009

Hints For Designing User Interface

# Know Your User or Client:
To begin, an understanding of the most important system or Web site component, the user or client, must be obtained. Understanding people and what they do is a critical and often difficult and undervalued process. The first step in the design process involves identifying people’s innate and learned characteristics, and understanding how they affect design.

# Understand the Business Function:
A system or Web site must achieve the business objectives for which it is designed. To do so requires an understanding of the goals of the system and the functions and tasks performed. Determining basic business functions, describing user activities through task analysis, understanding the user’s mental model, and developing a conceptual model of the system accomplish this. The system’s conceptual model must fit the user’s view of the tasks to be performed.

# Understand the Principles of Good Screen Design:
A well-designed screen must reflect the needs and capabilities of its users, be developed within the physical constraints imposed by the hardware on which it is displayed, and effectively utilize the capabilities of its controlling software.

# Select the Proper Device-Based Controls:
In addition to the keyboard, a system or Web site might offer the user a mouse, trackball, joystick, graphic tablet, touch screen, light pen, or some other similar device. Designer should identify the characteristics and capabilities of these various control mechanisms and provide the proper ones for users and their tasks.

# Choose the Proper Screen-Based Controls:
The designer is presented an array of screen-based controls to choose from. Selecting the right one for the user and the task is often difficult. But, as with device-based controls, making the right choice is critical to system success. A proper fit between user and control will lead to fast, accurate performance. A poor fit will result in lower productivity, more errors, and often user dissatisfaction.

# Write Clear Text and Messages:
Creating text and messages in a form the user wants and understands is absolutely necessary for system acceptance and success.

# Create Meaningful Graphics, Icons, and Images:
Graphics, including icons and images, are an integral part of design. Design guidelines for various types of graphics are presented. Icons are also described, including a discussion of what kinds of icons exist, what influences their usability, and how they should be designed so they are meaningful and recognizable.

# Organize and Layout Windows and Pages:
After determining all the components of a screen or page, the screen or page must be organized and its elements presented clearly and meaningfully. Proper presentation and organization will encourage the quick and accurate comprehension of information and the fastest possible execution of user tasks.

Wilbert O. Galitz, "The Essential Guide to User Interface Design", Wiley Computer Publishing, Second Edition

Thursday, October 15, 2009

Powerful Managers Understand These Two Concepts

Leaders need to become much better at getting more done with less. And, if those managers don’t change their ways, fewer people will stay with them. And their results will continue to decline. That, of course, will create more failing people and companies.

Unless you enjoy working at a place which seems to define success as simply not failing one year at a time, I suggest you learn to embrace these two concepts:

# Power is not the same as force
There’s a real difference between power and force but it’s widely misunderstood. Consequently, when times get tough, in an effort to get more productivity with fewer players, most managers simply try to push their teams ever harder. It’s kind of like trying to break your dog of a bad habit by using a whip – it’ll work for a while but at some stage the law of diminishing returns kicks in. And you may end up getting bitten!!

People appreciate being asked for their advice. Especially if the manager is sincere about using it. Team members will give power to the boss if she or he doesn’t use it against them. And the boss will get much more done he’s are on the employee’s side than would be the case by simply trying to force his decisions downward.

# The real organization's quality
You can tell the quality of an organization by those who are leaving it, not those who are joining it. Even in difficult situations, good managers can recruit and hire high-quality players to boost the performance of their team through the use of money or other perks. This can mislead the manager into thinking all is well (or at least that things will get better) with the new players on board.

In an environment where the contribution of everyone is paramount, watch carefully to see who is leaving on her own volition. Sick organizations have a way of causing the good players to bail out even if they’ve been told they’re being kept on during downsizing or difficult times. The result is that the new players who are recruited end up joining a team of losers and don’t make the hoped-for contribution.


Sunday, October 11, 2009

Activate "Confirm Order" Button in OpenERP

I was trying to create a user in my OpenERP system who has the privileged to confirm sales orders. The problem I faced is that I can't make the "Confirm order" button active for my user!! This button is active ONLY for Admin.

So how to activate that button??

Certain buttons like the "Confirm Invoice" etc have roles associated with them. These buttons will not be enabled (grayed out) in the GTK client.
Just go to the user configuration in Administration and the give the user privileges for the required role (simply add the role to his list of roles).

Something to say:
I've spent over than two weeks trying to figure the solution out!!

So, many and special thanks to Sharoon Thomas for his astonishing fast-response!

And special thanks to Eng Ahmed and Abeer for their unbounded stream of support and Chocolate :)

Thursday, October 8, 2009

Manage Sales Order in OpenERP 5.0.3

Step#0: Pre-Requirements:
- products module is already installed, and some products and partners (Customers and Suppliers) are defined in the system.


All the coming process are done with the "Administrator" user. That's why everything is accessible.

Step#1: Install Necessary Modules:
To manage the sales orders, you'd need to install the following modules:
- sale: Sale Management
- stock
: Stock Management

Step#2: Create Sale Order:

- From the menu: Sales Management> Sales Order, click the New Quotation sub-menu.
- This will open a new form for the new order.
- At the New Quotation form, insert the necessary information of the order.
- After selecting the product(s) to be sold and its quantity, click the Confirm Order button.
- This will change the order state from "Quotation" to "In Progress".

Step#3: Check The Stock:

- From the menu: Stock Management> Outgoing Products, click Confirmed Picking Waiting Availability sub-menu
- This will show a list of all waiting quotation orders, to be checked if they are available at the stock or not.
- Click on your latest quotation order to open it.
- The order form will be opened in a reed-only mod, with three buttons at the bottom.
- To check the stock click the "Check Availability" button, or "Force Availability" to force proceeding the order even if the quantity is not available at the stock.
- This will change the order state from "In Progress" to "Available", the "Check Availability" button & "Force Availability" buttons will be replaced by "picking Don" button.
- Now the "virtual stock" will be minimized with the ordered quantity, while the real stock will still as it is.
- When the customer pick the order, click the "Picked Done" button.
- This will change the state from "Available" to "Done".

Very Important Hint:
Earlier user manuals and functional books that talk about OpenERP 4.0.0+, would mention something about "Inventory Control" menu; "Inventory Control" of earlier versions have been changed to "Stock Management" in OpenERP 5.0.3+

Step#4: Creating & Paying Order Invoice:
- From the same form, click the "Create invoice" button that's on the right-hand-side of the form.
- Set the invoice configuration as it should be (according to your business rules).
- This will automatically redirect you to Draft Customer Invoices form, with a list of all draft invoices in your system. Or, you can view it from the main menu Financial Management> Invoices> Customers Invoices> Draft Customer Invoices.
Click on the invoice you had just created to be opened.
- Now you may send a copy to your customer by clicking the "PRO-FORMA" button.
- To create the the invoice click "Create" button. This will change the invoice state from "Draft" to "Open".
- To pay the invoice, click the "Pay invoice" button on the right-hand-side menu.
- Fill the required fields according to your business rules. Then choose "Full Payment" or "Partial Payment" as the situation requires.
- When the invoice if fully payed, its status changes automatically from "Open" to "Done".
- Now the sale order is ordered, picked, and payed.. Thanks to Allah :)

Some Related links:

Translate OpenERP Modules

# At the server side, in each module folder there exist its own .po file that contains its own translation

# To add translation to module(s):
- From the main menu click Administration> Translation> Import/Export> Export a Translation File.
- Choose the default language "English", and choose the file format to be a .CSV file
- Click the "Add" button to select the module(s) you want to translate.
- Then click "Get file" button
- This will give you a .CSV file with all objects/views/cods/buttons/etc that are related to the module(s) you picked.
- Now you may convert this .CSV to a .XLS file for edit-ability & readability (I don't know if Microsoft Excel could do this or not?! I'll check this later. meanwhile, you may try a converter).
- When you open this file, the first row shows the name of each field. You'll add your translation under the "value" column.
- Finally, reconvert the .XLS file to a .CSV.
- Import your updated file to your the desired DB through Administration> Translation> Import/Export> Import a Translation File.
- From the "User" menu, click "Preferences".
- Choose your recently imported language.
- Re-login to your system to see the change.

- Most probably, you wouldn't translate each and every row in the exported .CSV file. So, you could delete rows that you wouldn't translate.
- Make sure that rows in the imported .CSV are separated by a comma and a newline.

Related links:

Tuesday, October 6, 2009

Add Access Control to OpenERP Objects

I've started exploring, learning, and developing in OpenERP since last August. One of the most annoying things I found in it is its so bad documentation. Thus I thought I should add some documentation about it here, with some hints and tips about mistakes, errors, and bugs I faced with it.

So please.. Enjoy :)
To add security privilege to users on your OpenERP version 5.0.3+ system, follow those three steps:

Step #1: Create New Users

- Go to Administration> Users> Users
- Click "New"
- Fill the required fields about your new user. Important attributes for user are:
# Name: The user name that will appear at the user screen, and some reports.
# Login: The user's loging.
# Password: The user password.
# Home Action: Determine the desired menu that will appear once the user login to the system.

Step #2: Create New Group

- Go to Administration> Users> Groups
- Click "New"
- Define "Group Name" and "Users" associate with this group
- Click the "Menus"
- Select the menus that the user has the right to access
- Select the "Access Rights" tab, and define the access rights for each object

Some menus are accessible for all system users by default. To change this you need to define that "this" menu is accessible for "that" group.

Step #3: Create New Rules

- Go to Administration> Security> Record Rules
- Click "New"
- Select the "Object" to add conditions on it
- Add the "Test" to be checked by clicking on the "create New Record" button
- Set the rule to be applied on the object you choose
- Mark the "Global" check-box in case you want to make this rule public for all users.

You'll need to make rules if there's an "object" that you want it to be accessible for the group users under some conditions.

Tuesday, September 15, 2009

Programmers Peculiar Archetypes :D

Programmers enjoy a reputation for being peculiar people. In fact, even within the development community, there are certain programmer archetypes that other programmers find strange. Here are some types of programmers you are likely to run across. Can you think of any more?

# Gandalf
This programmer type looks like a short-list candidate to play Gandalf in The Lord of the Rings. Luckily for the team, this person is just as adept at working magic as Gandalf. Unluckily for the team, they will need to endure hours of stories from Gandalf about how he or she to walk uphill both ways in the snow to drop off the punch cards at the computer room. The Gandalf type is your heaviest hitter, but you try to leave them in the rear and call them up only in times of desperation.

# The Martyr
In any other profession, The Martyr is simply a “workaholic.” But in the development field, The Martyr goes beyond that and into another dimension. Workaholics at least go home to shower and sleep. The Martyr takes pride in sleeping at the desk amidst empty pizza boxes. The problem is, no one ever asked The Martyr to work like this. And he or she tries to guilt-trip the rest of the team with phrases like, “Yeah, go home and enjoy dinner. I’ll finish up the next three week’s worth of code tonight.”

# The Ninja
The Ninja is your team’s MVP, and no one knows it. Like the legendary assassins, you do not know that The Ninja is even in the building or working, but you discover the evidence in the morning. You fire up the source control system and see that at 4 AM, The Ninja checked in code that addresses the problem you planned to spend all week working on, and you did not even know that The Ninja was aware of the project! See, while you were in Yet Another Meeting, The Ninja was working.

Ninjas are so stealthy, you might not even know their name, but you know that every project they’re on seems to go much more smoothly. Tread carefully, though. The Ninja is a lone warrior; don’t try to force him or her to work with rank and file.

# The Theoretician
The Theoretician knows everything there is to know about programming. He or she can spend four hours lecturing about the history of an obscure programming language or providing a proof of how the code you wrote is less than perfectly optimal and may take an extra three nanoseconds to run. The problem is, The Theoretician does not know a thing about software development. When The Theoretician writes code, it is so “elegant” that mere mortals cannot make sense of it. His or her favorite technique is recursion, and every block of code is tweaked to the max, at the expense of timelines and readability.

The Theoretician is also easily distracted. A simple task that should take an hour takes Theoreticians three months, since they decide that the existing tools are not sufficient and they must build new tools to build new libraries to build a whole new system that meets their high standards. The Theoretician can be turned into one of your best players, if you can get him or her to play within the boundaries of the project itself and stop spending time working on The Ultimate Sorting Algorithm.

# The Code Cowboy
The Code Cowboy is a force of nature that cannot be stopped. He or she is almost always a great programmer and can do work two or three times faster than anyone else. The problem is, at least half of that speed comes by cutting corners. The Code Cowboy feels that checking code into source control takes too long, storing configuration data outside of the code itself takes too long, communicating with anyone else takes too long… you get the idea.

The Code Cowboy’s code is a spaghetti code mess, because he or she was working so quickly that the needed refactoring never happened. Chances are, seven pages’ worth of core functionality looks like the “don’t do this” example of a programming textbook, but it magically works. The Code Cowboy definitely does not play well with others. And if you put two Code Cowboys on the same project, it is guaranteed to fail, as they trample on each other’s changes and shoot each other in the foot.

Put a Code Cowboy on a project where hitting the deadline is more important than doing it right, and the code will be done just before deadline every time. The Code Cowboy is really just a loud, boisterous version of The Ninja. While The Ninja executes with surgical precision, The Code Cowboy is a raging bull and will gore anything that gets in the way.

# The Paratrooper
You know those movies where a sole commando is air-dropped deep behind enemy lines and comes out with the secret battle plans? That person in a software development shop is The Paratrooper. The Paratrooper is the last resort programmer you send in to save a dying project. Paratroopers lack the patience to work on a long-term assignment, but their best asset is an uncanny ability to learn an unfamiliar codebase and work within it. Other programmers might take weeks or months to learn enough about a project to effectively work on it; The Paratrooper takes hours or days. Paratroopers might not learn enough to work on the core of the code, but the lack of ramp-up time means that they can succeed where an entire team might fail.

# Mediocre Man
“Good enough” is the best you will ever get from Mediocre Man. Don’t let the name fool you; there are female varieties of Mediocre Man too. And he or she always takes longer to produce worse code than anyone else on the team. “Slow and steady barely finishes the race” could describe Mediocre Man’s projects. But Mediocre Man is always just “good enough” to remain employed.

When you interview this type, they can tell you a lot about the projects they’ve been involved with but not much about their actual involvement. Filtering out the Mediocre Man type is fairly easy: Ask for actual details of the work they’ve done, and they suddenly get a case of amnesia. Let them into your organization, though, and it might take years to get rid of them.


Saturday, August 22, 2009

Python And Eclipse

When I started learning Python, I used it's IDLE. That was a bit annoying, comparing with Java IDEs, such as NetBeans, or Eclipse (which I used them regularly that time). However, it was a good way to master coding with Python.

Python interpreter could be used to test smaller codes, but it is not a feasible way to write fast code for huge projects and systems. So Eclipse is probably the best open source IDE in the market for creating and managing Python programs.

Pydev is a plugin that enables users to use Eclipse for Python and Jython development -- making Eclipse a first class Python IDE. It comes with many goodies such as code completion, syntax highlighting, syntax analysis, refactor, debug and many others.

Pydev Extensions is a plugin that works with Pydev, providing many other features such as code-analysis, code completion with auto-import, a much better implementation of go to definition, remote debugging, 'quick-fixes', mark-occurrences, quick outline, browse globals, among others.


Python's Lambda

Python's lambda allows you to declare a one-line nameless minifunction on the fly. The format is:

lambda parameter(s): expression using the parameter(s)

It returns the result of the expression. The expression has to be a one-liner (no newlines)! Here is a little example ...

>>> def f(x):
... return x*2
>>> f(3)
>>> g = lambda x: x*2
>>> g(3)
>>> (lambda x: x*2)(3)

This is a lambda function that accomplishes the same thing as the normal function above it. Note the abbreviated syntax here: there are no parentheses around the argument list, and the return keyword is missing (it is implied, since the entire function can only be one expression). Also, the function has no name, but it can be called through the variable it is assigned to.

You can use a lambda function without even assigning it to a variable. Not the most useful thing in the world, but it just goes to show that a lambda is just an in-line function.

To generalize, a lambda function is a function that takes any number of arguments (including optional arguments) and returns the value of a single expression. lambda functions can not contain commands, and they can not contain more than one expression. Don’t try to squeeze too much into a lambda function; if you need something more complex, define a normal function instead and make it as long as you want.

lambda functions are a matter of style. Using them is never required. It could be used in places where you want to encapsulate specific, non-reusable code without littering your code with a lot of little one-line functions.


Tuesday, August 11, 2009

Python cPickle

Your Basic Pickle
Serialization, also called pickling or flattening, converts structured data into a data stream format. Essentially, this means that structures such as lists, tuples, functions, and classes are preserved using ASCII characters between data values. The pickle data format is standardized, so strings serialized with pickle can be deserialized with cPickle and vice versa.

The main difference between cPickle and pickle is performance. The cPickle module is many times faster to execute because it's written in C and because its methods are functions instead of classes. While this improves performance, it also means that the cPickle methods can't be extended or customized, whereas pickle classes can.

Serving Up Condiments: A cPickle Example
First, the script informs Python that we'll be using the cPickle module:
import cPickle

Next, I define the object I want to serialise and store. In this case, it's a list of condiments I've got in the fridge:
inFridge = ["ketchup", "mustard", "relish"]
print inFridge

That print statement's output will display the following:
['ketchup', 'mustard', 'relish']

I want to save my results in a file called fridge.txt, so the script creates a file handler and opens the file for writing:
FILE = open("fridge.txt", 'w')

Now the magic happens. I call the cPickle command, dump, to pickle my data and dump the results to the file:
cPickle.dump(inFridge, FILE)

I'm finished for now, so the script closes the file:

I now have a file, fridge.txt, that contains the following:

The pickle and cPickle modules have an option to save the information in a binary format; however, I've used the default ASCII because it is human-readable.

Now I've looked in my kitchen and realised I also have pickles. I can add them to my list and reserialize it, and cPickle will remember what's contained there without duplicating the information:

print inFridge

The output of my print command now displays:
['ketchup', 'mustard', 'relish', 'pickles']

That looks right, so I have my script repickle the inFridge list and add it to the file:
FILE = open("fridge.txt", 'w')
cPickle.dump(inFridge, FILE)

To get my information out of the file and back into a useable list, I simply open the file for reading and use the cPickle.load command to unpickle it. For the purposes of demonstration, I've used a new variable, inFridgeFile, to store the results:
FILE = open("fridge.txt", 'r')
inFridgeFile = cPickle.load(FILE)
print inFridgeFile

The output of the print command displays:
['ketchup', 'mustard', 'relish', 'pickles']

When I repickled my list, cPickle recognized my original contents and didn't duplicate them. The inFridgeFile variable contains my information restored to its original list format.

To Put A Lid On It
You have various options for serializing your data in Python, including pickle and cPickle. My cPickle example showed that this implementation is truly handy, especially since these commands will preserve your original object and allow modifications to be made even after it has been processed. This functionality will keep you from being stuck in a pickle next time you're saving or transmitting objects.


Sunday, July 26, 2009

Prepare And Act Positively In Job Fairs

Couple weeks ago, me and my team (graduation project team) participated in our collage job fair. It was a quite interesting experiences, that's why I thought I should share it here.

So, let's start from the beginning. What's a "Job Fair"?? Well, it's some sort of events that companies representatives (and in this case IT companies representatives) and fresh graduates are to meet each other. It aims to give fresh graduates an opportunity to hand their CVs to the IT companies, and also to make the companies have a look at the graduation projects (GP).

Sounds interesting, doesn't it? Most fresh graduate think it's a brilliant chance to hunt a job, through meeting IT companies, handing their CV, presenting their GP, having a small on-run interview. And if you ware good enough, you might get an interview appointment at the company headquarter.

There's some well-known fairs that I knew, such as ESEA Job Fairs in 2006 and 2007, Egyptian Engineering Day (EED) that still hold each year, and some fairs that's hold in different universities and collages like Cairo University, Helwan University, Ain Shams University, Faculty of Engineering, etc.

I had shared in ESEA Job Fair 2006 as an organizer in the GPs hall, and (as I said in the beginning) I'd just shared in FCI-CU Job Fair as a graduate with my GP. Now, I'm to list some tips what might help anyone likes to pass with such experience.

Preparing for job fairs should be on three main phases:

Phase#1: Before The Fair Day

Fair Organizers Committee will announce about the fair before its day with a sufficient time. So, you have to make the best of that. You may do the following:

1- Prepare your CV: Update, review, and revise it very well.

2- Get the list of the participated companies: If you are to meet *someone*, then you have to know that *someone*. Get the companies list, visit their website, study them well, and sort them according to your interests and priorities.

3- Know where the fair will be: Check the location of the even. Define how will you get there (car, bus, taxi, etc.), and how much time would it consume. That would help you to not waist time in the fair day searching for the right directions!

4- Prepare the presentation: If you'll share with your GP, then you'll need a PowerPoint presentation (PPT). Make sure that your PPT focus on the most important point in your GP. Important points that would attract your audience, such as the business value of your idea, the technologies and frameworks you used, challenges you faced and how you resolved it, etc.

5- Rehearse: Oh, I believe it's obvious now! Once there's a presentation, then there mush be a rehearse on it :D. Just don't forget to make a rehearsal with your team and divide the PPT between you all, and another one that each one of you do it alone by him/herself (I'll tell you why later on).

6- Expect on-the-fly interview: Well, it's not practically an interview, just expect some questions through your presentation. Don't answer such questions so lightly, as they're not *innocent* questions ;)

7- Ad your project: Make whatever possible to make your GP shiny. That would include designing and printing a poster. Just check if the event organizing committee allow hanging posters, and try to figure out what the color of the hall is (say the hall walls are brown, then you can't make your poster with brown theme). Some organizing committees print a brochure with a list of all participated GPs , then you have to choose the most perfect phases that describe your GP. Make it attractive, interesting, and to the point. Be creative and do whatever crazy ideas you have in mind ;)

8- Check your GP: Away from having good memories or bad ones with your GP before its discussion, you should take a look at it. Try to enhance its interface as much as possible, to be ready for the demo section in yourPPT.

9- Dress formally of course! Formal dresses, but comfortable too.

10- Get the day agenda. Most cases, you'd find it announced before the day.

11- Print your CV: Don't forget it. It's what the whole day is about. And keep this equation in your head
no. of participated companies = no. of CV copies + 3
Have +3 copies as risk handling ;)

Phase#2: At The Fair Day Itself

1- Be early: Try to be there before the day starts by 30min minimum. Registration process would consume some time. So, give yourself some time to find your position in the GP hall, set your equipments, hang your poster, handle any exception that might occur, and take a deep breath to start your day.

2- Link with the organizers: At the hall you will be, there will be some organizers (runners) to help you if you need anything. Have a quick and light friendship with those guys. Why?? OK, those guys have details about the participated company, and about all the GPs as well. Think of them as a link between you and the companies. So, you need to know one of the organizers (remember his name) and tell him a very brief description about your GP. You'd find him coming to you after a while with a representative of a company. Simply, use the organizers to propagate your GP. Keep in mind that he do this with all the others GPs, so choose small easy-to-remember keywords about your GP.

3- Be a bee: Oh yeah! Don't stand like a tree. Move through the whole space. Go to the companies disks or booths and invite them to take a look at your GP. Be updated with the whole atmosphere. Meet new people, make new relationships, and have new friends. Ask the organizers to fetch feedback from who you'd just make presentation. etc.

4- Utilize you energy: Believe me, if the event would last for only 4 hours according to its agenda, then you'll put efforts equal to working for only 4 day!! You'll find yourself doing too many exhausting activities (presenting, standing up for long periods, talking, etc.). So, save your power by switching load between you and your team. That's why I told you to rehears on making the whole presentation by yourself ;). Don't overload on one team member cause before the end of the day, you'll find him announcing his own end!!

5- Trace the process: Meeting too many people at very short time will cause memory overflow in your head! After each presentation, write down the representative's name, his contacts, his feedback and impression about you, and his company.

Phase#3: After The Fair Day

1- Have asleep! But not for weeks of course :D

2- Follow up: Remember that paper you wrote each representative you met? It's time to use it now ;). Follow up with them, and make them feel that you care and interested in their company.

3- Make issue-learned notes: Well, it still a good experience after all. So, write down things you learned from it. Maybe it'll be helpful some other time :)

At the end, well, It's only my own thoughts. Hope you find it worthy :)

And Good Luck en shaa Allah

Monday, July 20, 2009

Assess Company's Culture Before Take The Job

Have you ever been mislead about a company’s culture during an interview? Here are some tips for figuring out the real deal before you accept that job.

Elaine Varelas, Managing Partner of Keystone Partners, a leading career management firm specializing in career transition, has these suggestions for how to assess a company culture in 40 minutes or less. Wish I’d had these all those years ago.

Before The Interview
Ask your network: Use LinkedIn, Jigsaw, and other networking tools to query your network and determine if anyone has worked at the company or knows someone who does who you can audit about the culture.

- Invite current employees of the company to join your network and ask for their first-hand experience with the company.
- Check out the Web site and see if they have any employee testimonials. If so, do they seem authentic or scripted?

During The Interview

Observe everything: Evaluate all that you see and hear and everyone you meet during the interview process beginning when you walk in the door. Consider things like:

- First impression: What is the office space like, and can you see yourself working in it?
- Dresscode: Are current employees dressed professionally or business casual, or do they look like they just rolled out of bed?
- Energy level: Is the office buzzing, quiet, or chaotic?
- Personal Effects: Do people have pictures, toys, and other forms of self expression in their work area?
- Desktops: Do staffers have the latest laptops, 80s desktops, or something in between?

Question everything:
Don’t be afraid to ask questions about the culture, and the things you are seeing and hearing. Consider things like:
- Company behavior: Do they promote from within, sponsor team lunches, encourage professional development? If the interviewer answers yes to any of these questions, ask for specific examples.
- Ask each person you meet to describe the company culture and notice if you get consistent responses.
- Ask each person you meet with how long they have been with the company.
- If you feel you haven’t met enough people, ask if there are other members of the organization you can speak to about their experience.


Tuesday, July 14, 2009

Stay Out Of Trouble When Posting To Social Networking Sites

A few years back, social networking (SN) was just for kids. Sites such as MySpace and Facebook were used primarily by teenagers and college students to interact with friends. Now as we approach the second decade of the twenty-first century, social networking has grown up and entered the mainstream.

When you have such an eclectic group of people all watching, at the same time, what you're saying, it can present some challenges and potential problems. Most of us don slightly different personas depending on where we are and who we're with. We don't act the same or say the same things when we go to dinner with mom and dad as when we're out with longtime friends, and we adopt yet another demeanor when we're dining with business associates.

Yet our social networks may bring people from all these groups, and others, together. That's why it's important to sit down and think about a few issues before you begin building a social network, and plan a strategy that will let you enjoy its benefits without doing harm to your career, your marriage, or your friendships. And if it's too late for that, it's not too late to consider the following 10 things the next time you start to post to a SN site.

1- Where are you and what are you here for?
The first thing to consider is the nature of the social networking site(s) you're using. Some sites are geared toward professional and business relationships, while others are more purely social. Some posts that wouldn't cause anyone to lift an eyebrow on Facebook or MySpace would be considered inappropriate on LinkedIn. This is true even if you have the same contacts on both sites. Think of it this way: You probably don't behave exactly the same way in the office as when you're out at a restaurant or bar with friends from the office.

There are applications that allow you to link your updates across sites. For example, when you post to Twitter, the post also automatically becomes a status update to your Facebook page. This can save time and effort when used properly.

2- Who's in the audience?
SN is generally (although not exclusively) a form of written communication. All writers know that the first rule of writing is to know who's in your audience, because that determines not only what you say but also how you say it. If you've decided to use SN as a general public broadcast tool, being familiar with everyone in the audience is not as important.

Ultimately, most sites allow you to control who your audience is, and many of us pick our online friends pretty carefully. Then there are those who are "friend collectors." You know who I'm talking about: the guy or gal who has 1,500 "friends," many of whom he/she has never met, virtually or otherwise, and knows nothing about -- but he/she feels validated by this "popularity."

Politicians and celebrities often fall into this category, too. Sometimes, not so much because they compulsively seek out "friends" as because they're afraid to refuse any friendship request for fear it will mean a lost vote or a disgruntled fan. How many friends is too many? Only you can decide -- and there's no right answer. What's important is that you decide whether to have an open door policy or to be more picky, and tailor your posts accordingly.

3- Do you dare mix business with pleasure?
One of the biggest dangers of social networking comes when you mix your audiences -- for example, having friends or followers who are business associates on the same account as personal friends, family members, and so forth. Deciding what is or isn't appropriate to post can get complicated really fast in that situation.

Comments you make in response to an office mate's post on your wall could inadvertently reveal business information that those outside the company shouldn't know. And do you really want all your Internet pals to see those pictures of you as an awkward teenager that your Aunt tagged?

4- It's not just what you post
As we touched on with your Aunt's photos above, it's not just what you post yourself that can get you in trouble. Especially if you're new to social networking, you might not realize that your friends may be able to see some or all of what your other friends post on your site, as well as pictures they post on their own sites that "tag" (identify) you as one of the subjects.

Others' posts can end up embarrassing you without intending to, so keep in mind that old adage about choosing your friends wisely. And remember that it works two ways: Don't post things on a friend's site that could be an embarrassment to him/her if the other person's boss, spouse, or minister saw it.

5- A picture is worth a thousand words -- and can be a thousand times more embarrassing
Social sites such as Facebook and MySpace allow you to post much more than text. You can share pictures, videos, links, and more. This enables rich interaction, but it also provides even greater opportunities to make a faux pas that could be damaging to your career, marriage, or friendships.

Rule number one: Don't post pictures or videos of yourself in "compromising positions". Don't do it even if it's obvious to you that it's just a joke. Don't do it even if you think you've restricted viewing of the album to just your closest friends. Remember that even if you come to your senses tomorrow and take the picture down, someone could already have copied and saved it.

Rule number two: Don't post pictures or videos of other people without their permission or unless you're absolutely sure they don't mind -- including pictures that are not at all compromising or offensive. Many folks don't like being photographed or having pictures of themselves displayed, even if you think they look great.

6- Sensitive subjects can come back to bite you
Many people use status updates to post about what they're doing at a given time. Others use them more as mini journal entries, saying whatever might be on their minds regarding current events, their personal lives, etc.

As in the "real world," you have to be careful when you start offering opinions, judgments, and commentaries. Venture carefully when you address the traditional hot topics: politics, sex, and religion.

You should also think twice before you report on your involvement in legal issues. Your venting about something going on at work, or even your excitement about what's happening there, could get you in trouble or be a violation of a contractual agreement.

7- Avoid the perils of PUI: Posting Under the Influence
We all know that driving under the influence of alcohol or other mind-altering substances can lead to tragedy. Posting to social networking sites when you're inebriated can be almost as dangerous. Being under the influence of strong emotions, such as anger, fear, or grief, or suffering from lack of sleep can similarly impair your judgment and cause you to post things you otherwise wouldn't.

8- Be ready to reject a friendship request or "unfriend" someone
Some people have a hard time saying no. But if you accept every friendship request you receive, you may end up feeling as if you've thrown open the doors of your home and now you have a bunch of strangers camped out in your living room, watching -- and commenting on -- everything you do and say. This all goes back to knowing your audience. It also requires that you have the courage to risk hurting some feelings by declining some offers of friendship.
Even more difficult is the decision to "unfriend" a person who's already on your friend list. It might help to know that most sites don't explicitly notify people when they've been removed from your list of friends.

9- Are you familiar with the site's settings and options?
One of the most important things you can do when you start using a social networking site is to completely familiarize yourself with how it works and the settings and options you can configure. You may be able to place people into groups and then control which of your items (wall posts, friends' posts, etc.) they can see on a group-by-group or individual basis.

Social networking sites provide sophisticated privacy tools; take advantage of them to prevent faux pas. But remember that others who do have access can take screen shots or even digital photos of the screen and forward them to others.

10- Should you use a pseudonym?
You might be wondering if the best way to avoid all these problems is to just use a pseudonym for your social networking accounts. You could create a fake persona and say whatever you want and nobody would know it's you. Aside from the fact that this pretty much defeats the whole purpose of social networking -- getting to know people and letting them get to know you -- it is also a violation of the Terms of Service (ToS) of most social networking sites. In fact, in a famous court case, a woman in Missouri was charged with unauthorized computer access because she violated the ToS by creating a MySpace account with a false identity. (For details, see Judge tentatively acquits woman in MySpace case.) Although she was acquitted of the criminal charge, this points up the fact that the ToS is in essence a contract, and violating its terms can have legal ramifications.


Monday, June 8, 2009

Item-Based And User-Based Analysis For Recommendation Engines

There are two main approaches to building recommendation systems, based on whether the system searches for related items or related users.

In item-based analysis, when a user likes a particular item, items related to that item are recommended.

As shown in this figure:

If items A and C are highly similar and a user likes item A, then item C is recommended to the user.

There’s two approaches to finding similar items. First was content-based analysis, where the term vector associated with the content was used. The second was collaborative filtering, where user actions such as rating, bookmarking, and so forth are used to find similar items.

In user-based analysis, users similar to the user are first determined. As shown in the blow figure:

If a user likes item A, then the same item can be recommended to other users who are similar to user A.

Similar users can be obtained by using profile-based information about the user—for example cluster the users based on their attributes, such as age, gender, geographic location, net worth, and so on.

Alternatively, you can find similar users using a collaborative-based approach by analyzing the users’ actions.

Here are some tips that may help you decide which approach is most suitable for your application:

■ If your item list doesn’t change much, it’s useful to create an item-to-item correlation table using item-based analysis. This table can then be used in the recommendation engine.

■ If your item list changes frequently, for example for news-related items, it may be useful to find related users for recommendations.

■ If the recommended item is a user, there’s no option but to find related users.

■ The dimensionality of the item and user space can be helpful in deciding which approach may be easier to implement. For example, if you have millions of users and an order of magnitude fewer items, it may be easier to do item-based analysis. Whenever users are considered, you’ll deal with sparse matrices. For example, a typical user may have bought only a handful of items from the thousands or millions of items that are available in an application.

■ If there are only a small number of users, it may be worthwhile to bootstrap your application using item-based analysis. Furthermore, there’s no reason (other than perhaps time to implement and performance) why these two approaches can’t be combined.

■ It’s been shown empirically that item-based algorithms are computationally faster to implement than user-based algorithms and provide comparable or better results.

Satnam Alag, “Collective Intelligence In Action”, Manning Publications Co., first edition, 2009.

Sunday, June 7, 2009

Introducing The Recommendation Engine

A recommendation engine takes the following four inputs to make a recommendation to a user:
The user’s profile — age, gender, geographical location, net worth, and so on
Information about the various items available — content associated with the item
The interactions of the users — ratings, tagging, bookmarking, saving, emailing, browsing content
The context of where the items will be shown — the subcategory of items that are to be considered

While promoting top products is useful, what we really want is to create a personalized list of recommendations for users. Recommendation engines can help build the following types of features in your application:
■ Users who acted on this item also took action on these other items, where the acted on could be watched, purchased, viewed, saved, emailed, bookmarked, added to favorites, shared, created, and so on
■ Other users you may be interested in
■ Items related to this item
■ Recommended items

Here are some concrete examples of these use cases:
■ Users who watched this video and also watched these other videos
■ New items related to this particular article
■ Users who are similar to you
■ Products that you may be interested in

In recommendation systems, there’s always a conflict between exploitation and exploration.

Exploitation is the process of recommending items that fall into the user’s sweet spot, based on things you already know about the user.

Exploration is being presented with items that don’t fall into the user’s sweet spot, with the aim that you may find a new sweet spot that can be exploited later.

Greedy recommenders, with little exploration, will recommend items that are similar to the ones that the user has rated in the past. In essence, the user will never be presented with items that are outside their current spot.

A common approach to facilitating exploration is to not necessarily recommend just the top n items, but to add a few items selected at random from candidate items. It’s desirable to build in some diversity in the recommendation set provided to the user.

Satnam Alag, “Collective Intelligence In Action”, Manning Publications Co., first edition, 2009.

Saturday, June 6, 2009

Understanding Collective Intelligence

Newer web applications trust their users, invite them to interact, connect them with others, gain early feedback from them, and then use the collected information to constantly improve the application.

Users are expressing themselves. This expression may be in the form of sharing their opinions on a product or a service through reviews or comments; through sharing and tagging content; through participation in an online community; or by contributing new content.

This increased user interaction and participation gives rise to data that can be converted into intelligence in your application. The use of collective intelligence to personalize a site for a user, to aid him in searching and making decisions, and to make the application more sticky are cherished goals that web applications try to fulfill.

More formally, collective intelligence (CI) simply and concisely means To effectively use the information provided by others to improve one’s application.

What is collective intelligence?
When a group of individuals collaborate or compete with each other, intelligence or behavior that otherwise didn’t exist suddenly emerges; this is commonly known as collective intelligence. The actions or influence of a few individuals slowly spread across the community until the actions become the norm for the community.

Example: The Hundredth Monkey Theory
In his book The Hundredth Monkey, Ken Keyes recounts an interesting story about how change is propagated in groups. In 1952, on the isolated Japanese island of Koshima, scientists observed a group of monkeys. They offered them sweet potatoes; the monkeys liked the sweet potatoes but found the taste of dirt and sand on the potatoes unpleasant.

One day, an 18-month-old monkey found a solution to the problem by washing the potato in a nearby stream of water. She taught this trick to her mother. Her playmates also learned the trick and taught it to their mothers.

Initially, only adults who imitated their children learned the new trick, while the others continued eating the old way. In the autumn of 1958, a number of monkeys were washing their potatoes before eating. The exact number is unknown, but let’s say that out of 1,000, there were 99 monkeys who washed their potatoes before eating.

Early one sunny morning, a 100th monkey decided to wash his potato. Then, incredibly, by evening all monkeys were washing their potatoes. The 100th monkey was that tipping point that caused others to change their habits for the better. Soon it was observed that monkeys on other islands were also washing their potatoes before eating them.

As users interact on the web and express their opinions, they influence others. Their initial circle of influence is the group of individuals that they most interact with. Because the web is a highly connected network of sites, this circle of influence grows and may shape the thoughts of everybody in the group. This circle of influence also grows rapidly throughout the community

Example: YouTube
In October 2006, Google bought YouTube for $1.65 billion. In its 20 months of existence, YouTube had grown to be one of the busiest sites on the Internet, dishing out 100 million video (As of September 2006) views a day. It ramped from zero to more than 20 million unique user visits a day, with mainly viral marketing—spread from person to person.

In YouTube’s case, each time a user uploaded a new video, she was easily able to invite others to view this video. As those others viewed this video, other related videos popped up as recommendations, keeping the user further engaged. Ultimately, many of these viewers also became submitters and uploaded their own videos as well. As the number of videos increased, the site became more and more attractive for new users to visit.

Harnessing information from users improves the perceived value of the application to both current and prospective users. This improved value will not only encourage current users to interact more, but will also attract new users to the application. The value of the application further improves as new users interact with it and contribute more content. This forms a self-reinforcing feedback loop, commonly known as a network effect, which enables wider adoption of the service.

Satnam Alag, “Collective Intelligence In Action”, Manning Publications Co., first edition, 2009.

Tuesday, June 2, 2009

Wednesday, April 1, 2009

The Funny YouTube Guys!!!!

What would you do, if you wished to watch your favorite musical video clip on YouTube, then you found this "New Layout"?!!!! (Click the image for full view)

Then you find our kind Youtubers providing you with this so so so so so so helpful instructions :-s!!!!!!!(Click the image for full view)

O Allah!!! Those YouTubers are so funny!! They'd just broke the high score in "The Most Funny Developers"!!!!!

Well, it's NOT Funny at all!!!!!!! [-(

However, those YouTubers still creative as usual. I mean, how many times did you found an organization share special occasions with its customers and clients?!

This idea is silly, yet, it's very creative from designing, implementing, & marketing respective!