Showing posts with label other. Show all posts
Showing posts with label other. Show all posts

Saturday, January 23, 2016

Creating scalable images on the cheap

I just finished working on a banner for my univeristy. The design involves three logos for the three entities involved in this activity: the school mascot, the student organization and the house of representatives. I preferred the mascot vs the seal since I believe it's more natural for students to identify with. And to keep things light and informal I also preferred an easily recognizable figure rather than the official seal. There is indeed a nice such figure on their website here. Unfortunately, the image is small and the quality makes it even harder to use.


I don't really know much about graphics design or printing; only enough to know one needs high quality scalable images for something as large as a banner. To get a feel for the complexity of the issue, you may take a look at this webpage.

Since I really wanted to use this house figure for the banner, I decided to go through creating a scalable version. Here's what I had to do:

0. For all image editing I used the free Pinta Image Editor. Cropping out the text got me started with the circle I ended up spending long hours staring at.


1. I found a decent web service for tracing bitmap images into SVG files: vectormagic.com. They offer a couple free conversions after you sign up using your email. I tried so many inputs and made a single download once I was happy with it. Of course I was hoping I will just upload my cute circle and get back a scalable version, but here's what I got:


2. The logo has 50 little dots for each of the states around the circle containing the house figure. As the image comes in such low resolution, these dots are far from perfectly circular and the tracing software lumped each into a unique weird shape. So, it seemed I'll need to erase those from my input and figure out a way to put them back once I get the house.

3. It turns out the house itself isn't exactly symmetric, which means tracing ends up with different curves for corresponding features on the left and right. Not good. The only way I could thing of was to fire up my trusty Pinta and make sure the image is symmetric by copying the left half into a new layer, flipping horizontally and merging down.

This made things better, but for some reason, even with identical pixels on both sides, tracing didn't always produce the same result. So, I had to edit few pixels here and there to make it do what I wanted. The result was actually decent, at least for my purposes. Now I have my the main component in SVG format.

4. I should add that the circular boundary wasn't perfect either. Erasing the dots around it might have contributed to that. I spent sometime trying to fix it then I just gave up. Later on, I figured a fix, but this will have to wait for now.

5. Creating a separate SVG file with the 50 dots was the easiest part. It suffices to observe that there's a dot right at 12 o'clock, starting from there one can take steps of $\frac{2\pi}{50}$ to place each next dot. I wrote a script to generate the 50 dots of radius $r$ around a circle of radius $R$ with a controllable offset and scaling. This will come in handy as I had to tune the radii and offset to get something close to the original. This step provides a second SVG.

6. To merge the two SVGs, I found a free online SVG editor: vectorpaint.yaks.co.nz. I didn't know what to expect but they had a particularly nice feature that allows it to distinguish different parts of the SVG and manipulate each separately. I was happy to learn I could use this to remove the uneven boundary. This editor can draw some shapes. To get a perfect circle I found a donut shape that seemed to work for my purposes. However, I figured I'd better edit the script to include a background circle along with the 50 dots so I have fewer things to align.


Let me mention the editor couldn't load two SVGs so I did the merge manually, by copying the markup from one into the other, so I can load a single file. And that's it. Here's the final result, which I hope communicates what is intended:


Luckily, the university provides scalable trademark images including the mascot. As for the logo of student organization, which is a simple 3 letter design, convertio.co was able to do it easily.

I can't wait to see the 2'x12' banner!

Friday, February 5, 2010

Introducing Google App Engine - All in One

Google App Engine lets you run your web applications on Google's infrastructure e.g. GFS and BigTable. App Engine applications are easy to build, easy to maintain, and easy to scale as your traffic and data storage needs grow. With App Engine, there are no servers to maintain: You just upload your application, and it's ready to serve your users... more docs. An alternative introduction is available on Wikipedia.

I compiled a list of videos that should get your engines up and running on this exciting web framework:

Campfire One - Introducing Google App Engine:

  1. Pt. 1 (9:10)
  2. Pt. 2 (12:34)
  3. Pt. 3 (13:19)
  4. Pt. 4 (7:44)
  5. Pt. 5 (5:55)
  6. Pt. 6 (8:04)
Overviews:
  1. Google App Engine - Early Look at Java Language Support (7:38)
  2. Overview of Google Web Toolkit (4:10)
  3. Getting Started with App Engine in Eclipse (5:07)
Google I/O 2008:
  1. Google I/O 2008 - Working with Google App Engine Models (1:00:32)
  2. Google I/O 2008 - Building Quality Apps on App Engine (48:43)
  3. Google I/O 2008 - Engaging User Experiences with App Engine (45:32)
  4. Google I/O 2008 - Python, Django, and App Engine (57:09)
Google I/O 2009:
  1. Google I/O 2009 - A Preview of Google Web Toolkit 2.0 (1:00:53)
  2. Google I/O 2009 - App Engine: Now Serving Java (55:00)
  3. Google I/O 2009 - Groovy and Grails in App Engine (1:00:14)
  4. Google I/O 2009 - Java Persistence & App Engine Datastore (1:09:32)
  5. Google I/O 2009 - ThoughtWorks on App Engine for Java (1:04:18)
Check out the project homepage and the developer's guide for more and subscribe to the Google App Engine Blog.

Thursday, January 14, 2010

Daniel Pink on the surprising science of motivation - TEDTalks

A friend of mine recommended this video and I liked it so much I shared it immediately with other friends. As some of them were very busy to watch the whole thing, they asked for a summary. And since the topic was still active on my mind, I decided to do it for them and later I decided to make it available to everybody on this blog.

I have to emphasize that this text is based entirely and solely on this great talk. It is a mere attempt to provide a text version and summarize the main ideas, and I have to say it doesn't come close to the quality of the talk or the performance of the speaker.



A case for rethinking how we run our businesses.

Scientists of human behavior questioned the power of incentives. These contingent motivators: If-you-do-this then you-get-that, work in some circumstances but for a lot of tasks they actually either don't work or often do harm. This is one of the most robust findings in social science and also one of the most ignored.

There's a mismatch between what science knows and what business does.

Our business operating systems, the set of assumptions and protocols beneath our businesses, how we motivate people, how we apply our human resources. It's built entirely on these extrinsic motivators. Around carrots and sticks. This is actually fine for many 20th century's tasks. But for 21st century's tasks, that mechanistic, reward-and-punishment approach often doesn't work, and often does harm.

If-then rewards work really well for unsophisticated tasks, where there's a simple set of rules and a clear destination. Rewards by their very nature, narrow our focus. Concentrate the mind. That's why they work in so many cases. But for real problems, we don't want to narrow our focus and restrict our possibilities. For example, to overcome what is called functional fixedness.

Routine, rule-based, left-brained work, certain kinds of accounting, certain kinds of computer programming has become fairly easy to outsource, fairly easy to automate. Software can do it faster, low-cost providers around the world can do it cheaper. So what really matters, are the more right-brained, creative, conceptual kinds of abilities.

Think about your work. Are the problems you face the kind of problems with a clear set of rules and a single solution? No. The rules are mystifying. The solution, if it exists at all, is surprising and not obvious. If-then rewards, don't work in that case. This is not a feeling. This is not a philosophy. This is a fact, a true fact.

Too many organization are making their decisions, their policies about talents and people., based on assumptions that are out-dated, unexamined and rooted more in folklore than in science. If we really want high performance on the definitional tasks of the 21st century the solution is not to do more of the wrong thing: to entice people with the sweet carrot or threaten them with the sharper stick. We need a whole new approach.

The good news about all this is that the scientists who've been studying human motivation have given us this new approach. It's an approach built much more around intrinsic motivation. Around the desire to do things because they matter, because we like it, because they're interesting, because they're part of something important.

That new operating system for our businesses revolves around 3 elements: autonomy, mastery and purpose.
Autonomy: the urge to direct our own lives.
Mastery: the desire to get better and better at something that matters.
Purpose: the yearning to do what we do in the service of something larger than ourselves.

Today, we're going to talk only about autonomy.

In the 20th century, we came up with this idea about management. Management didn't emanate from nature, it's like: it's not a tree, it's a television set. Somebody invented it. And it doesn't mean it's going to work forever. Traditional notions of management is great if you want compliance. But if you want engagement, self-direction works better.

Let me give you an example of some kinds of radical notions of self-directions. You don't see a lot of it, but you see the first stirrings of something really interesting. Because what it means is: paying people adequately and fairly, absolutely, getting the issue of money out of the table, and then giving people much of autonomy. The 20% time, done famously at Google, where engineers can work 20% of their time on anything they want. They have autonomy over their time, their tasks, their teams, their techniques: radical amounts of autonomy. And at Google, as many of you know, about half the new products in a typical years are burst during that 20% time like: Gmail, Orkut and News.

Another more radical example of autonomy: something called the results only work environment or ROWE. In a ROWE people don't have schedules. They show up when they want, they don't have to be at the office at a certain time or any time. They just have to get the work done. How they do it, when they do it, where they do it is totally up to them. Meetings in these kinds of environments are optional. What happens? almost across the board: productivity goes up, worker-enga worker-satis turn-over goes down.

Autonomy, master, and purpose. These are the building blocks of a new way of doing things.

Now, some of you might look at this and say: mmm, that sounds nice but it's Utopian. And I say nope. I have proof. In mid 1990's Microsoft started an encyclopedia called Encarta. They deployed all the right incentives. They payed professionals to write and edit thousands of articles. Well compensated managers oversaw the whole thing to make sure it came on-budget and on-time. Few years later, a new encyclopedia get started. A different model. Do it for fun. No one gets payed a cent, or a euro or a yen. Do it because you like to do it. Now if you had, just 10 years ago, if you had gone to an economist, any where, and said: hey, I have these 2 different models for creating an encyclopedia, if they went head to head, who'd win? 10 years ago, you couldn't not find a single sober economist on planet earth who'd predicted the Wikipedia model.

Intrinsic motivators vs. extrinsic motivators. Autonomy, mastery and purpose vs. carrots and sticks. And who wins?

To wrap-up (17:20)

There's a mismatch between what science knows and what business does. And here's what science knows:
1) Those 20th century's rewards, those motivators, we think are the natural part of business: Do work, but only in a surprisingly narrow band of circumstances.
2) Those if-then rewards, often destroy creativity.
3) The secret to high performance isn't rewards and punishments, but this unseen intrinsic drive. The drive to do things for their own sake. The drive to do things because they matter.

And here's the best part. We already know this. The science confirms what we know in our hearts. So, if we repair this mismatch between what science knows and what business does. If we bring our notions of motivation into the 21st century. If we get past this lazy, dangerous, ideology of carrots and sticks, we can strengthen our businesses, we can solve a lot of our real problems and maybe, maybe we can change the world.

Thursday, December 31, 2009

Simulation and Kalman filter for a 3rd order kinematic model

Using a Discrete Wiener Process Acceleration (DWPA) model, we illustrate the usage of the Java implementation of the Kalman filter we presented in the previous post. The model we employ here is taken from Estimation with Applications to Tracking and Navigation.

We start by building the Kalman filter using this method:

public static KalmanFilter buildKF(double dt, double processNoisePSD, double measurementNoiseVariance) {
KalmanFilter KF = new KalmanFilter();

//state vector
KF.setX(new Matrix(new double[][]{{0, 0, 0}}).transpose());

//error covariance matrix
KF.setP(Matrix.identity(3, 3));

//transition matrix
KF.setF(new Matrix(new double[][]{
{1, dt, pow(dt, 2)/2},
{0, 1, dt},
{0, 0, 1}}));

//input gain matrix
KF.setB(new Matrix(new double[][]{{0, 0, 0}}).transpose());

//input vector
KF.setU(new Matrix(new double[][]{{0}}));

//process noise covariance matrix
KF.setQ(new Matrix(new double[][]{
{ pow(dt, 5) / 4, pow(dt, 4) / 2, pow(dt, 3) / 2},
{ pow(dt, 4) / 2, pow(dt, 3) / 1, pow(dt, 2) / 1},
{ pow(dt, 3) / 1, pow(dt, 2) / 1, pow(dt, 1) / 1}}
).times(processNoisePSD));

//measurement matrix
KF.setH(new Matrix(new double[][]{{1, 0, 0}}));

//measurement noise covariance matrix
KF.setR(Matrix.identity(1, 1).times(measurementNoiseVariance));

return KF;
}
Then, we simulate the accelerating target by generating random acceleration increments and updating the velocity and displacement accordingly. We also simulate the noisy measurements and feed them to the filter. We repeat this step many times to challenge the performance of the filter. Finally, we compare the state estimate provided by the filter to the true simulated state and the last measurement.
import static java.lang.Math.pow;
import java.util.Random;
import Jama.Matrix;

/**
* This work is licensed under a Creative Commons Attribution 3.0 License.
*
* @author Ahmed Abdelkader
*/

public static void main(String[] args) {
//model parameters
double x = Math.random(), vx = Math.random(), ax = Math.random();

//process parameters
double dt = 1.0 / 100.0;
double processNoiseStdev = 3;
double measurementNoiseStdev = 5;
double m = 0;

//noise generators
Random jerk = new Random();
Random sensorNoise = new Random();

//init filter
KalmanFilter KF = buildKF(dt, pow(processNoiseStdev, 2)/2, pow(measurementNoiseStdev, 2));
KF.setX(new Matrix(new double[][]{{x}, {vx}, {ax}}));

//simulation
for(int i = 0; i < 1000; i++) {
//model update
ax += jerk.nextGaussian() * processNoiseStdev;
vx += dt * ax;
x += dt * vx + 0.5 * pow(dt, 2) * ax;

//measurement realization
m = x + sensorNoise.nextGaussian() * measurementNoiseStdev;

//filter update
KF.predict();
KF.correct(new Matrix(new double[][]{{m}}));
}

//results
System.out.println("True:"); new Matrix(new double[][]{{x}, {vx}, {ax}}).print(3, 1);
System.out.println("Last measurement:\n\n " + m + "\n");
System.out.println("Estimate:"); KF.getX().print(3, 1);
System.out.println("Estimate Error Cov:"); KF.getP().print(3, 3);
}
Depending on how familiar you are with target tracking and Kalman filters, you may find it interesting to consider the following:
  • The error covariance reaches a steady state after a certain number of steps. By studying the steady state error, we can obtain a good idea about the performance of the filter. In addition, this can be used to precalculate the steady state Kalman gain to avoid performing many calculations at each step.
  • If you were to run this simulation yourself, you should experiment with differnet values of processNoiseStdev and measurementNoiseStdev and observe the steady state covariance and absolute error.
  • The simulation uses a position sensor to measure the current location of the target. This may not be available for you, specially in the case of inertial navigation. We will try to look into that in a later post.

Sunday, December 6, 2009

Java implementation of the Kalman Filter using JAMA

This is a very clear and straight forward implementation of the Discrete Kalman Filter Algorithm in the Java language using the JAMA package. I wrote this code for testing and simulation purposes.

import Jama.Matrix;

/**
* This work is licensed under a Creative Commons Attribution 3.0 License.
*
* @author Ahmed Abdelkader
*/

public class KalmanFilter {
protected Matrix X, X0;
protected Matrix F, B, U, Q;
protected Matrix H, R;
protected Matrix P, P0;

public void predict() {
X0 = F.times(X).plus(B.times(U));

P0 = F.times(P).times(F.transpose()).plus(Q);
}

public void correct(Matrix Z) {
Matrix S = H.times(P0).times(H.transpose()).plus(R);

Matrix K = P0.times(H.transpose()).times(S.inverse());

X = X0.plus(K.times(Z.minus(H.times(X0))));

Matrix I = Matrix.identity(P0.getRowDimension(), P0.getColumnDimension());
P = (I.minus(K.times(H))).times(P0);
}

//getters and setters go here
}
To use this class you will need to create a new instance, set the system matrices (F, B, U, Q, H, R) and initialize the state and error covariance matrices (X, P). When you're done building your filter, you can start using it right away as you might expect. You will need to do the following for each step: 1) project ahead your state by calling predict. 2) update your prediction by creating a measurement matrix with the measurements you received at that step and passing it to the filter through a correct call. I am planning to post a tutorial of this in the next few days. (Update: tutorial posted here)

For more information about the Kalman Filter algorithm, I highly recommend you refer to the webpage maintained by Greg Welch and Gary Bishop. In particular, check their excellent introduction to this interesting topic.

Tuesday, May 5, 2009

Tracking swine flu with Google Maps

FluTracker is a website that tracks the progress of swine flu using data from official sources, news reports and user-contributions*. The site was built using technology provided by Rhiza Labs and Google. This post on Mashable also has great information about tracking swine flu online.

Tracking epidemics was one of the first applications of geospatial information. In 1854, John Snow depicted a cholera outbreak in London using points to represent the locations of some individual cases, as mentioned on Wikipedia.

It also looks like someone is trying to make business out of this site. Check the bold section just above the map. Seems like everything can be exploited to make money.

I hope we don't see more circles, at least in our region. But I can't just stop here. I think that people, we, are very worried about pandemics and death. I mean, what if we track every sin all around the world?

(*) The main sources of information [on the web] today. Watch this great video of Eric Schmidt, Chairman and CEO of Google Inc., at the Newspaper Association of America on April 7, 2009.

Tuesday, August 12, 2008

Watching Beijing 2008 Olympic Games

it's very interesting to watch the competitors pushing the limits of our perception of human capabilities both physical and mental, as they strive for perfection and withstand termendous stress, being watched by millions of people worldwide, and also how they represent their nations, attempting to bring back as much glory as possible, and to be rewarded with medals and world records, with the national anthem playing in the background and the flag hanging above their heads.

Wednesday, July 9, 2008

Alarm Clocks For Dummies

You should always remember to switch on the alarm clock after you set it or else, it will never ring!

I used to stay up late during the last week and these days, I have to finish some errands early in the morning so I had to use the alarm clock, I decide when I'd like to wake up, set the alarm and go to sleep happily, do you see a problem? I didn't switch the alarm on!

What's even more interesting, I wake up around the same time I set the alarm to for no obvious reason! It's strange because I have no certain sleep patterns and the times I set the alarm to are quite random, but somehow whether I switch the alarm on or not, I wake up in time!

I thought that was interesting and funny, but I don't recommend you try it on an important day :)

Wednesday, April 16, 2008

Nile University: Wireless Intelligent Networks

For the last three days, I've been attending the conference on wireless intelligent networks organized by the Nile University in the Smart Village. The conference was held under the auspices of Dr. Tarek Kamel, the minister of communications and information technology. Ohio State and RICE universities also contributed to the conference. The conference was followed by a WARP workshop, but only a limited number of the attendees was invited.

It was a great initiative from the Nile University to introduce this interesting field to the academic community in Egypt. University students were also invited to get exposed to the ongoing research in wireless networks and get in touch with the world leaders in this technology. You can find all the information you need about the event on the conference website. The conference presentations should be available soon.

The conference was more oriented to EE topics. As a CS undergraduate, I had some difficulty following up with some talks, but it was a good experience after all. I talked to some of the speakers about the role of CS students in this field and here is what I got:

"The middle east is going to become very powerful both using and developing technology. There is going to be a tremendous need for better ideas," said Prof. A. Paulraj. He also mentioned some topics of interest regarding mobile technology including: powerful processes that consumed little power, new architectures that saves power using techniques like clock gating, more user friendly interfaces suitable for dealing with more data, security and clean slate internet.

"You should take your studies very seriously," said Prof. A. El Gamal.

"Go outside traditional education. Think outside the box. Whatever you learn isn't just courses, you should find points of interlinking between the things you learn. Think about the applications of what you study. Think about services and how it can be provided in a systematic and organized manner," said Prof. M. Eltoweissy.

"If you want to make something outstanding in networks, you have to combine the knowledge from both EE and CE. Without understanding the physical layer, your work will be rather theoretical," said Prof. A. Abozeid.

Finally, I would like to mention Prof. Hesham El Gamal and the Nile University students for their efforts in organizing this conference.

Friday, March 28, 2008

Probabilistic Chips

watch this interesting video! i liked the speaker way too much...

do you think it's really important that every calculation you make gives a correct result? of course it is !! but maybe not for all applications, let's see...

for example, if you're making a bank transaction, does it really matter the number of pennies or cents? what about computer simulations? it's already based on probabilistic models, so maybe a little bit of randomness in the results won't hurt too.

still not convinced? think about a DVD player generating many frames per second, if it messed up some pixels in a number of frames, it won't degrade the overall viewing experience, so maybe signal processing and sensor applications can find advantages to that new technologies.

but why should we bother developing new technologies given the undertaken risks in tolerating the incorrect results? that's because this can significantly reduce the power consumption without compromising user experience.

researchers are now developing a new type of transistors called PCMOS or Probabilistic-CMOS that will be available in 5 years, by making hardware a little bit unstable, we can realize the required randomness while significantly reducing the consumed power. actually this topic is very new that i can't find many articles about it, maybe you can check these links about a new embedded system architecture based on PCMOS, and a demo of PCMOS based DSP.


i think that's a very revolutionary approach in chip design, don't you agree?

Monday, February 25, 2008

Write Parallel Code

i was reading through the Computer Architecture textbook - Computer Architecture A Quantitative Approach, 4th Edition, when this caught my attention just on the 4th page "Whereas the compiler and hardware conspire to exploit ILP implicitly without the programmer’s attention, TLP and DLP are explicitly parallel, requiring the programmer to write parallel code to gain performance."

well, i've been hearing a lot of talk about parallelism and multi-cores during the last month, like when we had a session about Parallel Lock-Free Programming to talk about the advanced synchronization techniques the Microsoft PFX team is working on, also the Computer Architecture course this semester is specially interested in this stuff - as it was upgraded to the advanced level.

all that kept me thinking for some days what can we do to really exploit the power behind multi-core computers? this is a big question that i'm sure some of the smartest minds are working on and i find myself interested in the subject.

the sentence i quoted up there inspired me about a tool that will help programmers harness the power of multi-cores in the same way they do their normal work, the tool should help the programmer to write parallel code by viewing multiple code areas like in the compare editor and adding compiler directives, also it should support debugging support and auto-tests/suggests concurrency control. This should handle a variable number of cores for the target machine and maybe a variable platform too, regardless of the developer machine. The plug-in can be published as an open source project so everyone can benefit and contribute.

i didn't forget to check what have been done so far and i was not amazed to find that there is some work in this field but the Google search didn't return that many matches, that's a very new and open approach and we expect to witness a lot of achievements in the next years. I'd like to mention Model-Driven Development Tool for Parallel Applications and The Grid Compute Server Plug-in for NetBeans IDE besides the Microsoft PFX. You can also check this paper, it was published in 1989 and provides a theoretical treatment of the subject.

Wednesday, February 13, 2008

Computers and Artificial Intelligence at the Bibliotheca Alexandrina with Dr. Ismail Serageldin

yesterday a bunch of engineering students specially from our departement, attended the Computers and Artificial Intelligence three part series at the Bibliotheca Alexandrina. The department was kind enough to give the day off so all the students are able to attend this big event. It was long and rich with information, a lot of history too but i can say this helped to set the base for the thorough discussion introduced by Dr.Ismail.

The sessions outlined the development of computer systems along side the advancements in communications to the age of the internet and the ICT Revolution. A variety of visions were introduced from purely philosophical to purely technical to show the controversy about the definition of intelligence and the idea of creating intelligent machines and whether it's possible or not.

maybe it's suitable to mention the strongest of both sides of this controversy: the Chinese Room Argument that confines any machine intelligence to a set of predefined rules that can only be enlarged which is not real intelligence, opposed by Raymond Kurzweil who says that computers were able to break any borders that have been set before and predicted that computers will be able to defeat the world champion in chess by 1998 and it happened in 1997, 1 year earlier than predicted. there's more on that in the slides, but without the great presentation given by Dr.Ismail.

I added the links for you here, you can get that and more from Dr. Ismail's website.

Computers and Artificial Intelligence, A three part series - Part 1: Where did our computers come from?
Download Presentation
View Presentation
Computers and Artificial Intelligence, A three part series - Part 2: The Search for Artificial Intelligence
Download Presentation
View Presentation
Computers and Artificial Intelligence, A three part series - Part 3: Humans, Robots And The Future
Download Presentation
View Presentation

Wednesday, January 30, 2008

i can fly!

it gets very windy this time of the year, i remember i was once walking last year when i felt the wind pushing me from behind, it was so strong that it really pushed me forward, i decided to give it a try and just jump upwards to detach my legs from the ground and yes, the wind pushed me about a foot forward, today i got to do that again, i cut a long distance by just jumping upwards and i was accelerating in speed it got a little bit dangerous too,

it's really inspiring how strong the wind can be, no wonder people have always dreamed about sailing and flying, i'd love to try any of that but i don't think i'll get the chance in the foreseeable future,

Friday, January 25, 2008

i got lucky with algorithms!

the exams are finished, not bad i think, i just hope the grades come within the expected ranges, anyway i think i enjoyed this semester, now i have great plans for the midyear vacation, let's see what we're gonna do.

maybe the best thing that happened for sometime is that i got the highest mark in the algorithms year works, i'm so happy about that, i really love algorithms, maybe the course had some issues, but i hope it'll be good at the end.

Wednesday, November 28, 2007

Lateral Thinking

it's what they call "thinking outside the box", like that provoking questions u'd hear during interviews, sometimes it's a question or maybe a little story with few details and ur asked to give some answer or explanation, it can be very tricky or very obvious u'd be tempted to think further and slip, however it can be really smart sometimes,

it's considered a measure of creativity and innovation, that can be important for designers and marketing people, many real world situations show how people find strange solutions for their really difficult problems,

i found that site that lists a heck of those questions with answers, give it a try urself...