Thursday, April 5, 2012

Project Presentation

Just did a presentation about my project and it does not feel good. The project is great, flaws in implementation are undetectable))) It was nominated as the best project also. But it still does not feel right.

Probably the problem is my presentation. I did not prepare good enough. Come on! I know this project from the first line of UI code to the last problems in the threads model. I can make a good presentation easily, right? NOOOOO! It seems that I can't. Even if you are an expert in something, you still need to prepare presentation to make a good impression. And this impression about your project matters. You can have an amazing interface, efficient clear code and great user experience but your audience is not your users. People have not tried your application and they do not know that it is good or bad. You must convince them that you did a great work. You must amaze them with a presentation of your features and the technologies you used.

Monday, March 5, 2012

Code Signing

1. http://en.wikipedia.org/wiki/Code_signing
An article from Wikipedia. Not very good and does not provide a lot of information. But explains the general concepts of application signing and its purposes.

2. http://msdn.microsoft.com/en-us/library/ms537361.aspx
Introduction to code signing by Microsoft. General, no specifics, formal words.... Microsoft style. But one can understand some global purposes of signing from that.

Have not found anything useful yet....

Friday, March 2, 2012

Timsort

http://www.drmaciver.com/2010/01/understanding-timsort-1adaptive-mergesort/
Very good and clear article about the ideas under Timsoft algorithm.

http://svn.python.org/projects/python/trunk/Objects/listsort.txt
Original Tim Peterson description of the proposed algorithm and its evaluation.

http://warp.povusers.org/SortComparison/
Good and colorful comparison of standard sort algorithms (without optimization) but does not include Timsort.

Minus of the algorithm is that it uses O(n) space while normal merge sort algorithm uses only O(ln(n)) additional space in the stack (because it uses recursion). May be unsatisfying with really big N.

List Sort

A very simple programming problem gave me the idea to look what modern search algorithm is the best. At the moment, I know and have used only merge sort and insertion sort. But I have never tried to compare their performance in different cases (different list lengths, different data, etc.).

After several minutes of search, I found that the insertion sort performs better on small array while merge soft performs better on large arrays and is theoretically better. It takes O(n*ln(n)) time comparing to O(n^2) time for the insertion cost. BUT! Python introduced TimSort in 2002 and have been using it since. As I understood, Android uses it since API Level 5 and a discussion about Java sort algorithm started in 2009 leaded to Java using TimSort now too.

From Wikipedia I understood that Timsort (invented by Tim Tim's_Lastname but described in some paper in 1990s) is an adaptive search algorithm that uses the idea that real world data is usually not random but partially sorted. Thus, it explores different data features and adapt to them. It achieves O(ln(n)) result on partially sorted data and is only 1.5% slower that optimized merge sort on the completely random data.

To be continued....

Monday, February 27, 2012

End of Synchronization

Finally finished my Operating Systems project on threads synchronization. Baboons are happily on the right sides. The  task was a "Baboons on two sides" problem with a FIFO order requirement. Used classic Readers/Writers solution for the baboons problem and conditions variables to ensure the FIFO order. After the assignment is done it seems so easy))))

By the way, if you are new to synchronization, then check Little Book of Semaphores. It is easy to read and has a lot of solutions to the classic synchronization problems. Although, it is not very high-technology. For example, it does not use conditional variables to guarantee the FIFO order. Instead, it uses tricky constructed queue, which is much harder.

Source code: https://docs.google.com/open?id=0B150EMF9ZCuUbVdtZUU2cW9TNnVQX1B4Yk9zbHRDUQ

Sunday, February 26, 2012

How to Port PThread-Win32

Finally got it!
  1. Put your .h files (pthread.h, semaphore.h, sched.h) into $Visual_Studio/VC/include.
  2. pthreadVC1.dll goes to C:/Windows. Not the best idea but I am out of time and this works.
  3. pthreadVC1.lib goes to $Visual_Studio/VC/lib. Also, include it in the Linker. Project Properties -> Configuration Properties -> Linker -> Input -> Additional Dependencies. Add there pthreadVC1.lib.
These actions should eliminate all external linking errors. Although, you may still have problems when you run the application. I got the error: pthreadVC1.dll missing. In this case, put pthreadVC1.dll into C:/Windows/SysWOW64 where all other dlls are (like kernel32.dll). Probably it is a better solution to start with.

Also, use Sleep() for Windows (add #include <Windows.h>) and sleep() (add #include <unistd.h>) for UNIX-based systems.

Tuesday, September 6, 2011

Rainy in Tampa

Tropical climate cause tropical rain... A had to walk with the dog in the morning((
But in bad weather strange creatures come out) Like this ghost on skateboard))