Saturday, October 27, 2012
Reversi to HTML5
As described in the slides, a sprite is a two dimensional image that gets placed into a scene. The map part means that there is a single file composed of several individual sprites. From what I've read, having a single file makes the transfer from server to browser more efficient. Perhaps this is because there are fewer transfers to setup.
On the other hand, I was originally planning on using an animated gif to animate the disc turnovers. A timer would start at the start of the animation and then swap out the animated gif with a regular image at the end of the turnover sequence. This method has a chance of getting the animation out of sync with the image swapping, so the sprite method seems better.
A Github repository has the demonstration code associated with the slides. I also need to look for images to make the sprite map for reversi. To animate the turning, I plan on scaling the images of the black and white disc and saving out the different scaled images with sumo paint online. A different github repository by Christian Cantrell has some images I can try to do this with. They have a transparent background so hopefully all I will need to do is scale the png files.
I don't have much experience with the sumo paint web site, but I assume scaling the images shouldn't be that hard. There should be a way to upload the images and then apply an image resize tool to them. Hopefully it will remember the background is transparent. Also, the newly sized image will need to be recentered and the image background size preserved to keep the sprite sizes the same. Also, since the goal is a collection of images in a sprite map, some of the images may need to be separated out and then put back together. That way, the original images will not get scaled along with the images of the discs turning. Recentering is important so that the disc does not shift during the turnover animation. One way would be to calculate the difference between the new image size and the original image size, divide by 2, and then shift by that amount.
So my next steps for the reversi project are to scale some disc images, collect them into a sprite map, reuse parts of the sprite engine from @rockncoder, and make a test html5 and javascript page that animates disc turning.
Sunday, October 14, 2012
Reversi Blog Posts
My current system is not as simple. To turn the coordinate into text I used base64 encoding of a byte array. Each byte I separated into a low and high 4 bit number to get a board coordinate. Base64 uses 6 bits instead of all 8 bits. However it still needs to end on a byte boundary and is an extra call. The minimal amount of bits to describe a coordinate is 6 bits, so it could map to Base64 encoding. However, it seems like it would get complicated aligning a series of 6 bits numbers to byte boundaries so I didn't go to the trouble of doing so.
A calculation can describe a rough estimate of the savings. For a maximum of 60 moves that could be played the single offset method would simply describe it with 60 bytes. If encoding with 6 bits instead of 8 bits, that would result in 360 bits or 45 bytes. So a potential savings of 15 bytes at the end. It seems like a lot of complication for 15 bytes so I haven't done it yet, but there is a difference that could add up if this operation is done a lot. However, if one decides to just send back one move at a time the base64 encoding would actually take up more bytes than the single character encoding method.
This seems like a change of detail that I might have enough time to do over a weekend. However, I would still need tools to quantify the benefit of making a change to 6 bits, while the change from a pair of numbers to a single character is clearly simpler to work with and may be the way to go. Hopefully, reading his other Othello blog posts will encourage me to work on my project again.
Saturday, October 06, 2012
Ruby Reversi
So far I've tried to get a grasp of the overall organization. It looks pretty logical. There are divisions based on the user interface, AI, game rules, board data, and some kind of dynamic controller. Of these divisions, two differences from my project that stand out. One is the separation of the game logic from the board's 2-d array data structure. I'm guessing that separating the 2-d array data structure from the game logic enables the 2-d array to be more reusable while isolating the specific problem domain code in the rule files. Perhaps this also helps readability because once one reads the file name "array2d" the behavior of that file is understood, and one can pretty much skip reading that code.
The other major difference is the method of program flow control. I'm not that familiar with Ruby, but it looks like his or her design is event based. When the user interacts with the program their actions raise events and are not causing a method to be called directly. Instead, it looks like an action method routes the event to the appropriate behavior. Benefits of this design may be those of using the command pattern: undo and macro operations. However I don't see those in the design. I'm not sure whether I like this way of organizing the behavior as it seems to complicate the initial reading, but it could have benefits in terms of centralizing and organizing how a program behaves.
Overall it was interesting to look over some one else's design and see some differences, such as in the language and the organization. It was not entirely obvious what the benefits and drawbacks are to the various differences, but by working on this post, I hope some of them were revealed. I also hope this post encourages me to finish the project.
Sunday, August 19, 2012
git
Sunday, July 29, 2012
One change in their updated solution is to use lazy evaluation with yield and itemgetter. A nice change to the list comprehension allowed the removal of the len and range and just iterated over each player in the player list to make tuples. The names were clarified to playerRolls and playerGroups instead of referencing a data structure. The flag to repeat rolls for ties with a while loop has been cleaned out in favor of recursion down each branch.
I modified the previous code by putting it in a function and adding a roll parameter to let me test their code. The pattern of ordering of player's rolling has been changed. It is like a depth first tree traversal now rather than breadth first.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from itertools import groupby from operator import itemgetter from random import randint from collections import deque def rank_players(playerList, roll): playerRolls = [(player, roll()) for player in playerList] playerGroups = groupby( sorted(playerRolls, key=itemgetter(1), reverse=True), itemgetter(1)) for key, group in playerGroups: grouped_players = list(group) if len(grouped_players) > 1: print('tied, need to reroll',grouped_players) for player in rank_players(zip(*grouped_players)[0], roll): yield player else: print('rolled ',grouped_players[0]) yield grouped_players[0] rollData = deque([ 6, 4, 4, 4, 3, 3, 3, 2, 2, 2, 3, 3, 3, 4, 5, 6 ]) order = rank_players(['one','two','three','four'], lambda: rollData.popleft()) print(list(order)) |
Saturday, July 14, 2012
Python review
from random import shuffle x = ['player t', 'player u', 'player v', 'player w', 'player x', 'player y', 'player z'] shuffle(x) print(x)
- Each player would roll a die.
- Ties result in another set of rolls to break the tie. But any higher values still count towards ranking ahead of lower values.
- For players who did not tie, their relative position would be determined by how high their roll was.
from random import randint from itertools import groupby tree = [['player t', 'player u', 'player v', 'player w', 'player x', 'player y', 'player z']] nextGeneration = [] keepPlaying = True while keepPlaying: keepPlaying = False for node in tree: if len(node) == 1: nextGeneration.append(node) else: keepPlaying = True rolls = [randint(1,6) for i in range(len(node))] turn = sorted(zip(rolls,node), reverse=True) print 'players roll:', turn for key, group in groupby(turn, lambda x: x[0]): nextGeneration.append(list(i[1] for i in group)) tree = nextGeneration nextGeneration = [] print([item for sublist in tree for item in sublist])
Friday, June 29, 2012
Roku Whiteboard Drawing App
Tuesday, June 05, 2012
8x8x8 LED Cube
Saturday, May 26, 2012
Rovio Battery Issue
Sunday, May 13, 2012
Machine Learning Class
Saturday, May 12, 2012
Software Requirements
This point from the paper is something I'm trying to remember and maybe follow up on later by reading about how Agile software development attempts to address this.
Requirements refinement and rapid prototyping. The hardest single part of building a software system is deciding precisely what to build. No other part of the conceptual work is as difficult as establishing the detailed technical requirements, including all the interfaces to people, to machines, and to other software systems. No other part of the work so cripples the resulting system if done wrong. No other part is more difficult to rectify later.
Sunday, May 06, 2012
Roku development
Developing on Roku
Roku introduced the first streaming video player in 2008, in partnership with Netflix. In the first two years nearly a million units have been sold in the US, and there are now over 100 channels available in the Roku Channel Store. Roku is the most affordable product for consumers looking to stream video over the Internet to their TV, and the most open for developers and content owners looking to reach new audiences.
For content owners or distributors, Roku represents a very cost-effective means to deliver their content to a rapidly increasing number of households. Roku has relationships with leading Online Video Platforms and development partners to further simplify bringing your content to Roku.
An open platform, Roku’s Streaming Player enables content owners to bypass traditional distribution routes and reach views and consumers directly. Roku’s platform allows a wide variety of channels and monetization options.
Wednesday, April 04, 2012
Kivy
Friday, February 03, 2012
Go Language for Python programmers
A Swarm of Nano Quadrotors
A Swarm of Nano Quadrotors
Monday, January 09, 2012
Project Possibility
Sunday, January 08, 2012
Processing
Processing.js is the sister project of the popular Processing visual programming language, designed for the web. Processing.js makes your data visualizations, digital art, interactive animations, educational graphs, video games, etc. work using web standards and without any plug-ins. You write code using the Processing language, include it in your web page, and Processing.js does the rest. It's not magic, but almost.
Saturday, January 07, 2012
Chinese Character For Next Page - #3
Friday, December 30, 2011
Chinese Character For Previous - #2
上页 (Shàng yè) - Previous
上一页 (Shàng yī yè) - Previous

Tuesday, December 27, 2011
New Year's resolution

Friday, October 21, 2011
Another whiteboard
Thursday, October 06, 2011
Bournemouth University
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
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
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
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 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
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
Sunday, May 22, 2011
Monday, May 16, 2011
Historic computers on the web
Sunday, May 15, 2011
Computer Graphics, Fractals, Demoscene
Sunday, May 08, 2011
Application in Python Using a Trie
Wednesday, February 16, 2011
Programming Contest 43
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
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
Thursday, October 21, 2010
Pulverize Effect
Friday, July 23, 2010
GPU Ray Tracing
Monday, July 12, 2010
3-D with Javascript
Sunday, July 11, 2010
Mac OS X OpenCV
To get the FaceTracker sample to compile, I needed to make some changes to the include files in the FaceTracker.cpp file. I changed #include<OpenCV/OpenCV.h> to #include <cv.h> and added #include <highgui.h> for the window calls. The Willow Garage site already had the instructions on setting the header search path so that these new header files could be found.
Also, I needed to update the OpenCV frameworks group in the given X-code project to include libcv.dylib, libcvaux.dylib, etc. This again was covered at Willow Garage under the section titled Using OpenCV libraries in an X Code project.
So in the end, OpenCV worked. I'd like to cross compile for the iPhone next. Some places on the web with more information about this topic include Yoshimasa Niwa's site and Info dan's site.
Template change
Tuesday, June 15, 2010
A Technical Director's personal website
Monday, June 14, 2010
Scott Squires Bio
Tuesday, May 04, 2010
Another post at real-time rendering
The OpenGL 3.2 and GLSL 1.5 tutorial programs he mentions sound like they could be useful. I started to investigate the shader language part of OpenGL recently but didn't get very far. Using a gpu to speed up the drawing of computer graphics sounds like it could be useful thing to know. It seems the new features of OpenGL are encouraging that direction. At the least, I'm planning on reading the code for a phong shaded sphere at the tutorial site to compare with some the code of a toy ray tracer in Python.
Sunday, May 02, 2010
Image Convolution
Thursday, April 29, 2010
introduction to ray tracing
Tuesday, April 27, 2010
overview of ray tracing
The pictures at this site about terrain generation with ray marching do look interesting though, and the author claims that the code is simple as well. Also, the explanation of the method involves techniques similar to ray tracing.
Saturday, April 03, 2010
First iPhone Application tutorial
Saturday, March 20, 2010
Jansen walking machine animation
Wednesday, March 10, 2010
Rendering Tips
It is a Cinema 4D specific blog, but it looks like some of the tips could apply to Houdini as well.
OpenCL blog post
Friday, February 26, 2010
Performance Comparison of Houdini and SoftImage
The author of this blog entry describes how SoftImage's new feature called ICE compares with Houdini's VOPs. Both applications now have a node network, and the author shows some examples of them with some screen shots of tests he runs. These five tests are empirical in the sense that they are experiments that measure the time it takes to complete certain tasks. By presenting this timing data, the writer strikes a neutral tone while still encouraging the reader to make a value judgement about SoftImage's performance wins. While the differences in time he presents are in the range of seconds, it seems reasonable that such a performance improvement could build up to hours for renders with a large number of frames and calulcations. I haven't worked with Houdini or SoftImage for several months now, but this comparison still looked interesting.
Tuesday, February 16, 2010
High Speed Robotic Hand
from Ishikawa Komuro Lab, University of Tokyo:
Concept
Interactions in the real world (not only physical but also social and psychological interactions) are inherently parallel phenomena. By constructing models and engineering systems that take into account such parallelism, one can expect a better understanding of the real world as well as enhanced performance of systems when dealing with practical applications. These fundamental considerations lead us to concentrate on parallel processing for sensory information. Four main related topics are currently being explored in Ishikawa-Komuro Laboratory:
- Sensor Fusion theory and implementation in engineering systems;
- Dynamic Image Control Dynamic control of image based on high-speed visual information processing;
- Massively parallel image processing through a Vision Chip, which is capable of realizing high-speed real-time vision tasks on the basis of VLSI technology, and
- Meta Perception concerns ways of capturing, manipulating and presenting information which is normally inaccessible to humans and machines.
- (Past research on Optics in Computing: architectures that combine the advantages of optics and electronics to realize enormous computing throughput)
Saturday, February 13, 2010
Another Demo of Importing Data into Houdini
Thursday, January 07, 2010
Pessimistic article about OpenCL
from the article:
So let's accept and even celebrate OpenCL for what it is, and not try to make it what it can't be. There's danger is raising expectations too high, or claiming too much (a la Bernie Madoff); OpenCL can be influential and succeed without replacing other parallel languages. To correct Steve Job's quote: "While OpenCL is very similar in many respects to NVIDIA's CUDA, it adds features to take advantage of other targets; and though it's quite complex, it has the potential to deliver very high performance, and is much easier than trying to map your computation into OpenGL or graphics primitives." Hype I can agree with; but then, I'm not the Apple CEO.
Sunday, December 27, 2009
opencl
The Khronos group defines the OpenCL specifications. They also handle OpenGL. According to web articles both Nvidia and ATI now support OpenCL in many of their graphics boards. However I've seen some people mention problems trying to build and then get samples of the library to work with their graphics cards.
Friday, December 04, 2009
Surface Shader update on Vimeo
Saturday, November 21, 2009
PQ Houdini Tutorial on Vimeo
Saturday, October 10, 2009
Houdini and 3DConnexion Devices
He mentions a complication involving the lack of _ctypes.pyd in the Houdini Python distribution. Houdini 10 includes Python 2.5 and some commonly used modules with its 3d app, but apparently it was not enough for this project. I don't completely understand the post, but it sounds like this prevented the Python comtypes module from working, and that prevented Python from polling of the device driver using COM (Component Object Model). A workaround involved compiling the needed module himself with the Python compileall module in Houdini and then putting the binary code in the lib directory of Houdini. I'd never heard of the compileall module before reading the post and will take quick look at it later.
Another complication involved Houdini freezing during display of data from the 3dConnexion device into a window.
He posted a video of a demo to vimeo.
The post also references an odforce post with some one else's Python code that does the same thing and was apparently was developed simulaneously.
From the post:
The SpaceNavigator seems ideally suited to be able to control not just a camera but any object in 3 dimensions, provided that the application can see and understand the device.
Wednesday, October 07, 2009
more cg roundup podcasts
I still haven't gotten to listening to them yet.
A comment on one of these new podcasts mentions a blog post that does a comparison of ICE vs. VOPs. Looks interesting.
Thursday, September 24, 2009
Houdini books with applied math
They include:
Advanced Renderman
Texturing and Modeling, A Procedural Approach
Essential Renderman Fast
Maybe later I will attempt to take a look at a portion of one of them.
Wednesday, September 23, 2009
odforce post
PICAXE microcontrollers
Tuesday, September 22, 2009
Blog entry for an HDK project
Actually, a more recent post here describes this project at a finished stage. From the snippet of code it looks like he ended up using the C interface to SDL.
Saturday, September 12, 2009
Houdini HDK
Houdini has a Houdini Object Model (HOM) that can be accessed from Python. This link notes that together they may be used for HDK development, network rendering, and animation workflow.
From the site:
The Houdini Developer's Kit [HDK] is a comprehensive set of C++ libraries that give third party developers access tot he same API used by developers at Side Effects Software.
With the HDK, you can create plugins to customize virtually all aspects of Houdini.
Monday, September 07, 2009
Ubuntu Remix
Thursday, August 27, 2009
Python ocr and opengl libraries
I've downloaded Eclipse and pydev to start with. The web site says it supports Python 2.4, 2.5, 2.6, and 3.0 syntax but that part hasn't worked for me yet.
Thursday, August 20, 2009
cgRoundup
Sunday, August 02, 2009
Botanicalls Kits
They did the original prototype with an Arduino and then went to a board that looks like a leaf.
from the web site:
Botanicalls opens a new channel of communication between plants and humans, in an effort to promote successful inter-species understanding.
The Botanicalls project is fundamentally about communication between plants and people. We are empowering both by inventing new avenues of interaction. Plants that might otherwise be neglected are given the ability to call and text message people to request assistance. People who are unsure of their ability to effectively care for growing things are given visual and aural clues using common human methods of communication.
Who are we?
Botanicalls is an ongoing collaboration between Rob Faludi, Kate Hartman, and Kati London.
Saturday, August 01, 2009
Flash player update
From the site:
Update: An alpha refresh of 64-bit Adobe Flash Player 10 for Linux operating systems was released on 7/30/09. The release versions of Flash Player 10 for Windows, Macintosh, 32-bit Linux, and Solaris are now available from the Flash Player Download Center. Please download the latest prerelease versions below.
Wednesday, July 01, 2009
2009 Apprentice Challenge
http://www.youtube.com/group/3dworldchallenge
Monday, June 29, 2009
Google Trends
Tuesday, November 18, 2008
Adobe prereleases 64-bit version of Flash
Saturday, September 27, 2008
Saturday, September 20, 2008
Friday, September 19, 2008
closures in functional programming
Sunday, September 07, 2008
Houdini Training Product for Python scripting
Saturday, September 06, 2008
Sunday, August 31, 2008
console/window hybrid application
functional programming
Thursday, August 28, 2008
SanDisk Boosts SD Card Speed by Fifty Percent
The New SanDisk Extreme III 30MB/s Edition SDHC Line Easily Supports Continuous Shooting Performance in Nikon's New D90 Digital SLR Camera
Wednesday, August 27, 2008
Concurrency Friendly Data Structures
Problem with Windows XP SP 3 upgrade
You receive a “Stop 0x0000007E” error message after you upgrade to Windows XP Service Pack 2 or Service Pack 3 on a non-Intel-processor-based computer
Tuesday, August 26, 2008
RIAS
http://www.geog.ucsb.edu/RIAS/
This technology is designed to substitute for missing visual cues for those with limited or no sight.
Gram-Vaani
Researchers developed a low cost hardware and software platform for doing radio and wish to deploy it in India.

