Friday, December 30, 2011

Chinese Character For Previous - #2

上页 (Shàng yè) - Previous


上一页 (Shàng yī yè) - Previous


Google translate has a text to speech feature that works for Chinese now:

According to the wikipedia article on Google translate, this feature's support for Mandarin launched on December 2010 and the open source project eSpeak was used. From its home page on Sourceforge, eSpeak uses something called a "formant synthesis" method. On eSpeak's languages page is a request for help from native speakers. A list of "provisional" languages indicates the ones that need help. Currently Welsh, Ancient Greek, Hindi, Armenian, Indonesian, Icelandic, Lojban, Georgian, Latin, Macedonian, Norwegian, Russian, Albanian, Vietnamese, Cantonese Chinese are listed.


Tuesday, December 27, 2011

New Year's resolution

一般
Yībān

I'm planning on doing a series of posts on Chinese characters for the New Year. Hopefully I will learn a little bit and have a chance to use some of the knowledge gained by taking an online a.i. class.

Today I did a Google search for a character meaning, and the engine figured out Google translate would be helpful.



Friday, October 21, 2011

Another whiteboard

Codeproject.com has some whiteboard projects to look at. An html5 canvas based whiteboard looked interesting. Besides the code, the author also helped by documenting a bit about how it works. Screenshots were included. They show the drawing board and a chat message box for text conversations. Drawing functionality included making a line, erasing, and clearing the entire space. The writeup also describes that he decided against polling to update the server due to scalability and user experience issues. He mentions the terms HTTP Push or Comet as alternatives, but he picked the WebSocket feature of HTML 5 for ease of implementation. However, his code still needed to "chunk" the message data into pieces small enough to transfer via the socket.

Thursday, October 06, 2011

Bournemouth University

YouTube has some videos of students in the Master of Digital Effects at the National Centre for Computer Animation.

From their page:

Using digital tools to create visual effects for film and television. Visual effects are typically shots or sequences of images that cannot be created live in front of the camera, but have to be created using production and post production processes.

The core of digital effects is the combination of captured live action with synthetic images, though sequences that are created could be all CG or all live action. The digital tools can take a variety of forms, including 3D softwares and compositing softwares. The main softwares taught and used by the students are: Houdini,Nuke, PFTrack.

Objective of the programme

Creating future industry leaders. People who, with time and experience, will become the next generation of visual effects supervisors and designers.

Saturday, September 24, 2011

Dabbleboard

From the Dabbleboard web site:

Dabbleboard is an online collaboration application that’s centered around the whiteboard. With a new type of drawing interface that's actually easy and fun to use, Dabbleboard gets out of your way and just lets you draw. Finally the whiteboard enters the digital age!

It seems to have some object recognition software that helps clean up rough lines, squares, and circles into cleaner geometric shapes.

Also, since the board is web based, naturally the video demonstrates online collaboration on a whiteboard.

Friday, September 23, 2011

Shell scripting

I would like to learn more about shell scripting but am uncertain whether to learn something like Bash-scripting or find and read Python shell scripts.

One advantage to Bash-scripting is mentioned at reddit:

Python uses more memory and requires more disk space to be installed. This is might be important in small resource constraints environments such as embedded systems or small VMs.

Also the shell is always running and so shell scripts should start up faster than Python scripts.

Perhaps on a low cost embedded device Bash-scripting is the way to go. I will try to follow up on this later. As far as I can tell, one must have a shell on the system to work with, but having python is optional if one is willing to give up a lot of software. Therefore, for a system with limited hardware, in a sense you get bash scripting for free.

Prusa Mendel

From the Prusa Mendel web site:

Prusa Mendel is the Ford Model T of 3D printers.

Like the Model T, the Prusa Mendel improves on a previous design by being more streamlined for manufacture. The Prusa Mendel is a simpler remix of the original Mendel. By default, it uses printed bushings instead of regular bearings, though options to substitute inexpensive lm8uu linear bearings or other types of bearings or bushings are available. The current version uses three 608 bearings in total, one for the X axis and two for the Y axis. The 624 bearings are gone altogether.

Prusa's main goal is to be the purest and simplest 3D printer you can build.

I would like to learn more about this printer, but I need to finish some other, easier projects like the pong clock. Some day I would like to find a database of 3d models to print with such a machine. Maybe it could use html5 canvas 3d elements to preview the printable objects.


Saturday, August 27, 2011

Introduction to A.I. class

A web site is offering a free online course:

A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide during the fall of 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams.
I have been doing some preparation for that online class lately. I bought a used copy of an older edition of the textbook, Artificial Intelligence: A Modern Approach, and am skimming the early chapters. The site mentions the book is optional though so I doubt it will help much with the work for the course. However, the book has shown some usefulness. Of course, having enough time to continue my studies is next to impossible.

Why take the time to do this course then? Clearly, by taking the course one would learn some of the basics, but what could one hope to accomplish with this knowledge? Many examples exist of what people have already done with a.i. The class site mentions things such as humanoid robots, Google goggles, and self-driving cars. An example closer to every day life would include household electronic devices that have a learner feature to gather information from their environment and then behave differently. Yet, I don't see myself working with cutting edge projects like Google goggles. Those types of projects seem more appropriate for people who could teach this course rather than one who needs to take the course. What kind of application of this learning would be simple enough for me to do but still be of help to some one else or myself? Perhaps applying a rational agent, as the book calls it, to a video project would be something approachable. I've seen a C++ boids example and Blender already has a boids particle system. I'm going to need more time to ruminate on this.

Thursday, August 18, 2011

Robot army video

from the description of the robot army video at youtube:

You could call it Mission Impossible: Robot Library Heist. An army of flying, rolling, and climbing robots have been taught to work together to find and snatch a book from a high shelf.

In a striking display of military-like precision, the robotic team, duhttp://www.blogger.com/img/blank.gifbbed the "Swarmanoid", attacks the problem with flying "eye-bots" and rolling "foot-bots". A "hand-bot" then fires a grappling hook-like device up to the ceiling and scales the bookshelf. Footage of the experiment, conducted by Marco Dorigo at the Free University of Brussels, Belgium, and colleagues, won the video competition at the Conference on Artificial Intelligence in San Francisco earlier this week.

Wednesday, May 25, 2011

Python Houdini Tool Post

Jasonfugh.com has a post of some video of a Python based special effects tool he made that works with Houdini. It is his first tool that he has made for Houdini. The software lives in a separate window to help change a rain effect in the main window.

Sunday, May 22, 2011

Monday, May 16, 2011

Historic computers on the web

The visual6502.org project is an interesting idea. The founders of the group take an image of a processor such as the 6502 and then simulate its operation based on software that interprets the transistors in the picture. There is a javascript simulation that will run in a web browser if one wishes to try it out.

Sunday, May 15, 2011

Computer Graphics, Fractals, Demoscene

A friend found a site by Iñigo Quilez about computer graphics, fractals, and the demoscene. The math section looked interesting. I didn't have time to go over it much right now, but I hope to visit it again later.

Sunday, May 08, 2011

Application in Python Using a Trie

I found a blog entry that describes using a Python implementation of a trie to calculate Levenshtein distance quickly but have yet to find the time to the sample code out. His implementation looks very readable and the concepts familiar. It seems like trying his software out could be a nice continuation of the concepts of the last project.

Wednesday, February 16, 2011

Programming Contest 43

I submitted some code for a programming contest at a C/C++/C# blog. The first-place entry was more than an order of magnitude faster and had a higher score, but at least I learned something about software development.

The contest involved searching for words in a grid of letters, as in the game of Boggle. Once a word in the given dictionary file was found, information about it needed to be stored in a output file. This information included things like the word's first letter coordinate in the grid, the line number of the word in the file, the score, and the direction to read the letters. The direction was given as a series of numbers starting with 1 as North, 3 as East, 4 as SouthEast, etc. A word would still be valid even if it needed to be read right to left instead of left to right. The dictionary was limited to about 14,084 words that contained between 2 and 5 letters. This letter count limitation simplified things, as the game board itself was 5x5. So words would always line up in a horizontal, vertical, or diagonal manner. No bent lines needed to be figured. Scoring was kept relatively straightforward as a count of the number of letters in the dictionary word.

The letter Q presented a complication. In the Boggle game, the Q die always has a U. So even though a given series of letters might just be QA, In the contest, QUA needed to be logged since it was in the dictionary of valid words, and the U included in the score, for a total of 3. One more case had to be considered involving Q. If a U die followed the Q, then the pair was accepted as QU. In other words, a U was sometimes ignored.

Unfortunately for my entry's ranking, my code didn't report a case where a valid word had a Q that wasn't followed by a U; so it didn't get to tie with the higher ranked entries based on score. During development, I believed this wasn't a valid case, but after seeing the results, I believe it was, although I haven't gone through the output of the other entries to verify this. I posted a comment about this problem, but sometimes it is difficult to get feedback on every software requirement, and one has to make reasonable assumptions.

The input and output involved text files. No graphical programming was needed for this code. The input file consisted of 100 lines of 25 character strings that represented 100 grids of letters.

Optimization was very important because in the event that applications reported the same score for their grids, the faster solution was ranked higher. Multithreading was used by some entries since each of the 100 grids could be scored as a game independently of the other grids. In one case, the OpenMP api was used. The use of this api looked interesting because the syntax needed to parallelize loops was minimal. However, parallel programming can still be prone to bugs, and OpenMP apparently leaves things like race conditions up to the developer to design out. Also, I'm not sure if there is a profiling tool that would work properly when parallelism is used. The only thing I've found on Google is ompP. I haven't heard of it before, but then OpenMP is new to me as well. It is built into Visual C++ 2010 Professional, but isn't in the express edition. It needs compiler support to work. I may need to use gnu c++ to try it out sometime but am reluctant to leave C#.

I placed the code in a Github account for later. Perhaps I will be able to incorporate some of the ideas from the other entries into later revisions and see if the application runs faster.

Wednesday, January 26, 2011

Tries

I learned a little about tries, or prefix tries, this month. I checked out the Wikipedia article, a Top Coder article, and saw a forum post about Patricia tries. There is a basic C# implementation of a trie at my Github account. In that case, each node has a lookup array for 26 letters that leads to a subtrees or leaf. Adding to the tree involves traversing each node's array for each character in a word until the last letter is reached. A flag in the node marks the end of a word. When a string needs testing as to whether it is in the trie, the test can possibly stop after only traversing a small number of the leading characters of the word. However, keeping 26 references on each node could use up a lot of space, depending on the data. There is a lot more for me to learn about the subject, such as how it relates to edit distance and spell-checking.

However, I'm currently checking out hash tables as an alternative. I also read some people use suffix arrays as another choice.

Thursday, January 20, 2011