Here We gO. Big Goal for the Month

About a year ago I had to create a game engine for the course GAM 465 and GAM475 at Depaul. It was a pretty interesting experience working with nuts and bolts of OpenGL. I did pretty well till the point that we loaded full models into it. We started doing animations of the skeletons and honestly I made my engine a bit of a mess.

For the next semester Fall Term I’m interested in doing an independent research in order to complete my courses and finally graduate. The plan at the moment is to implement a small declarative UI language on top of the engine I did for that class. I’m going to try and work on this every day this month and try to solve the following three problems:

  • Text management.
  • Basic Display elements Panels and buttons
  • Display video on top of a texture.

If I manage to get those 3 things done I will be in a position that adding the layer of declarative xml and starting to building components would be achievable during a term.

Right now this is the first screenshot of what my project currently looks like I  will be updating everyday with screenshots thru the month.

image

We have the ability to display multiple models apply different rendering modes and also use more than one camera. We got camera controls set. We also have a scene manager in place.

My Rendering loop looks like this:

  1. Clear Buffer using glClear
  2. Update For the current scene
  3. Draw for the current scene
  4. GlutPostRedisplay
  5. GlutSwapBuffers

Tomorrow I’m going to look into how to insert drawing 2d for the current active camera.

Thanks for reading and here we go.

Reinstalling my box

It has been years since i had to a clean install of my system just did it two weeks ago was interesting the amount of tools i had to install. Placing the list here so people can see it and maybe recommend some alternatives

 
Photo
-Paint.net
-Arw Converter
-Photomatix
Lightroom

Software Development
-VS2013
-Vs2010 (install xna 4.0)
-Pycharm(Buy a new license)
-Python 3.3
-Python 2.7
-Resharper(Need to buy)
-Web essentials visual studio
-Sql server manager
-Perforce
-Unity
-Oculus SDK

Productivity
-Office 2013
-Blurb book application
-Skype
-Screen Castomatic
-Dropbox
-Chrome
-colplayer
-Itunes

Modeling/3dPrinting
-Blender
-Openscad
-INkscape

Gaming
Steam ->Redownload all my games
Blizzard ->Redownload all
Install league of legends
Drivers

Keyboard mouse
Video card
Lifecam

Some 3d printing money making ideas

I have been experimenting with 3d printing quite a bit learned to use tinkercad, renewed my interest in blender and discovered openscad which i find highly amusing.

While doing that i’ve been contemplating business possibilities with this tools and decided on the jewelry market. I hit the kindle to see what books are available in terms of how people are setting it up.

Below is a list of my recommended reads in terms of setting a store to sell your products note (i don’t buy books for fun over 10 anymore).

  • This first book is mostly about how to market your store its tangetially related to 3d printing but great ideas for how to generate sales.
    http://georiot.co/2Vhd
  • This one reads like a step by step and if you never had your own business this would be my first read.
    http://georiot.co/33Hz
  • Last but not least on this one is general but it sparked a bunch of ideas an niches i can explore.
    http://georiot.co/46hl

If you read them let me know what you think.

Getting started with OpenScad

Last year I did the whole series in blender modeling and creating small movies this year I’m getting back to my jewelry roots and going to start printing item using: https://www.shapeways.com
In terms of software I decided to use openscad since its similar to coding
http://www.openscad.org/
Install super simple
Save a file and press F6 and you will have your first rendered item

Decided to get started and for my first project I’m not really doing a sponge holder but a ScotchBrite sponge holder.

I started creating the shape little by little after measuring and creating the pieces the code ended like the one below I have commented all lines for anyone that wants to understand.

//My code after the second iteration

wallThickness = 10;

union()

{

//Squared holder for cleaning scrubs

cube([114.3,76.2,25.4]);

//first wall

translate([114.3,-35,0]) cube([wallThickness,146,50]);

//second wall

translate([-wallThickness,-35,0]) cube([wallThickness,146,50]);

//Third wall

translate([0,-35,0]) cube([124,wallThickness,50]);

//Last Wall

translate([0,96+(wallThickness/2),0]) cube([124,wallThickness,50]);

}

On my original upload shapeways told me that my file the cheapest to print it would be $600 dollars which surprised me a bit and I realized it was because I had set my wall to 25 milimeters which were pretty thick and using a lot of material. I changed the thicknes to 10 milimeters befor trying again

The upload was incredibly straightforward just clicked in export to stl and head towards printing. 

Once i did those changes the prices changed to about $45 dollars so i decided still not to print since i had a budget of $35. On my next post i will talk about my second test.

Aussie Puncharoo is out

After a lot of toil and fun the game I have been creating with the talented Louis Lonsway is finally out is the story about and australian bloke and his quest to get a Pint of Beer. Like everyday in the outback he gets attacked by tons of wild animals.

The game started has part of ludum dare 20 and me wanting to learn how to build a platformer. http://alfredoalvarez.com/blog/?p=160

To be honest I made a very big mistake building this game which was to focus on building and engine and spent less time on the game. Right now the game supports a lot of scripted mechanics not all which made it into the game.

The game is now on the store which is awesome and I can see that the process from the windows developer dashboard has been very streamlined.http://www.windowsphone.com/en-us/store/app/aussiepuncharoo/0cd99df2-fb9e-4774-8169-a9053f32c4ff

While I celebrate the victory of shipping I have already found the first list of improvements and bugs including a grave in which the game seems to be crashing to people with phones from the seven series. To the end of the development phase and the beginning of the support one.

Chromecast Review

This is not a programming post be warned. for my wedding i got a staples 100 dollars gift card and i thought i would use it to buy a ton of pictures printed. Then my xbox 360 account ran out of its subscription and i started thinking that the only reason i pay for the subscription is to use netflix.

Yesterday i went to staples and i had to get some outlet multi plugs while being there had about 50 dollars left on my gift card saw the chrome cast next to the register and did an impulse buy after all it was technically a gift.

Here are my thoughts on it so far.

The good
Integration with HULU and netflix is tight
Quality of items in the screen pretty nice
Setup is incredibly easy.
Casting browser tabs might be useful
Good range on the device

The bad
The electrical cable is too short
You have to leave your device on while casting
The flow after a movie end of making you have to go back to your app is kind of clunky
Loading takes more than loading just in your application.

Whats next
I want to try out the api see how good is the device for hacks.

Conclusion i think its a cheap and great one purpose device that seems to have a future for expansion via its api. Also it saved me from buying an xbox gold subscription.

Link to the product
http://georiot.co/3FLs

Getting back on the Selenium horse

For those that don’t know i left my position in Microsoft to go work for the startup that powers www.georiot.com. Because of this i have gotten in touch with a lot of tools that i had not used for awhile.

This post is my experience of coming back to Selenium from a 6 month Hiatus. This time i used it with the C# webdrivers library and ran it using the firefox browser.

The Good

  • I feel like the API has improved and getting a simple prototype of my automation took a manner of minutes.
  • The firefox profile class is completely straightforward.
  • The support for ghostjs and the possibility of running headless is pretty awesome.
  • Multiplatform support.

The Bad

  • C# drivers in Mono are kind of finicky(repo linked on the bottom fixes the zip dependency by moving from Ionic to Sharp Zip).
  • The User group in google groups does not get has many responses has i hope.

To talk a bit about my task i wanted to login in to a website an click a link to download a file. This was trivial after figuring the firefox profile. The profile below does the following configures Firefox to save & download files to a certain place without asking for confirmation.

var profile = new FirefoxProfile();
profile.SetPreference(“browser.download.folderList”, 2); // This item tells firefox  to use a specific directory instead of default
profile.SetPreference(“browser.download.dir”, DownloadFolder); //The specific directory to download
profile.SetPreference(“browser.helperApps.alwaysAsk.force”, false); // Tells firefox to not ask what you want to do with a file
profile.SetPreference(“browser.download.manager.showWhenStarting”, false); // Indicates that the download window should be off
profile.SetPreference(“browser.helperApps.neverAsk.saveToDisk”,
“text/xml, text/csv, text/plain, text/log, application/zlib, application/x-gzip, application/x-compressed, application/x-gtar, multipart/x-gzip, application/tgz, application/gnutar, application/x-tar, application/gzip”); // specifies all the extensions that should be auto download.

Definition of this items can be found at http://kb.mozillazine.org/About:config_entries

Thanks to free_at_last from reddit for helping me improve the article and the concise line to summarize the code.

My problems came when i started trying to run on mono using firefox at first like i mentioned i got an error that said path not found that i traced to this issue. Basically the library does not handle the paths in linux.

https://code.google.com/p/selenium/issues/detail?id=3804

I resolved that issue by switching the zipping library and placed the code for it here:

https://github.com/aallfredo/selenium

After that firefox would open but then i got into the socket error problem tried installing and older version of firefox and posting into the user group but no solution. (Note also tried it with the ghostjs drivers and they really don’t run in linux with mono). For the meanwhile im going to use a windows box to get me around.

 

So in summary great new API mono supports seems to be a bit lacking but is an open source project so it could be me that takes the mantle to resolve it on that.

 

Laptops close to 500 during Black friday

A List of the ones i thought were interesting.

SSD
http://www.tigerdirect.com/applications/searchtools/item-details.asp?EdpNo=5259372&csid=
http://www.newegg.com/Product/Product.aspx?Item=N82E16834312446
http://www.newegg.com/Product/Product.aspx?Item=N82E16834314226
http://www.tigerdirect.com/applications/SearchTools/item-details.asp?EdpNo=8557740&CatId=4936

non SSD

http://www.amazon.com/Q200E-BSI3T08-11-6-Inch-Touchscreen-Laptop-Slate/dp/B00BKRMMUS/ref=sr_1_1?m=ATVPDKIKX0DER&s=pc&ie=UTF8&qid=1385765249&sr=1-1
5400 rpms
http://www.tigerdirect.com/applications/SearchTools/item-details.asp?EdpNo=8555793&CatId=4935

Hackathon For Authism

The Bing fund in seattle organized and event called Hackathon for Authism. I participated this past weekend and just wanted to mention that it was awesome. While the food was kinda meh. Everything else rocked. 

The talks from experts and the testimonials from families afflicted were moving and gave us laser focus before starting.  The space on the surf incubator its pretty neat and made me feel extremelly comftable.  

This is my third hackathon in the seattle are and the feeling of cooperation here even between opposite teams was great. People were willing to stop by and give you feedback in the middle of the day.

We worked on a tool to help kids learn to type since its such an important skill in this day and age.

Our approach was to use open data sources to be able to provide the biggest range of content possible for images and for rewards video when the user completes an action. For more advanced levels we connected with Soddiio a mit project that lets people create stories(aba) so that kids can understand how to handle situations. We also gave the options to indicate if they were bored or if they got scared by the content and used twilio to notify the parents in these occasions. The architecture was a single html5 page doing the work with an azure backendimage

The project is open source so if you want to come help us drop by https://github.com/DevHuertas/typeit

Validating if a Sudoku solution is valid

I got this problem today has part of a conversation that I was having and thought I was interesting. Basically how can you in O( n ) validate that a 9×9 soduku is valid.

There are 3 rules that need to be followed for a validation to return true:

  1. For each row there can only be and instance of each numbers.
  2. For each column there can only be and instance of each numbers.
  3. For each cluster of 9 there can only be and instance of the set of numbers.

The trivial solution that comes to mine is to go and count for each of this different conditions but that would require at least 3 passes tru the grid. For my solution i decided to just store a hashset for each of the conditions that need to be valid and stop on a negative. We use the numbers has distinct markers and not has numbers in particular since being number has no properties that help us. Solution is below:

using System.Collections.Generic;

namespace Algorithms
{
public class SudokuPuzzleValidator
{
readonly int[,] _board;

 

public SudokuPuzzleValidator():this(newint[9, 9])

{}

 

public SudokuPuzzleValidator(int[,] board)

{

_board = board;

}

public bool Validate()
{
const int integersInGame = 9;
var rowSet = new HashSet<int>[integersInGame];
InitializeSet(integersInGame, rowSet);
var columnSet = new HashSet<int>[integersInGame];
InitializeSet(integersInGame, columnSet);
var subGridSet = new HashSet<int>[integersInGame];
InitializeSet(integersInGame, subGridSet);

for (var row = 0; row < integersInGame; row++)
{
for (var column = 0; column < integersInGame; column++)
{
var cval = _board[row, column];
if (rowSet[row].Contains(cval))
{
return false;
}
rowSet[row].Add(cval);
if (columnSet[column].Contains(cval))
{
return false;
}
columnSet[column].Add(cval);
var subGridNumber = FigureOutSubGrid(row, column);
if (subGridSet[subGridNumber].Contains(cval))
{
return false;
}
subGridSet[subGridNumber].Add(cval);
}
}
return true;
}

private static void InitializeSet(int integersInGame, HashSet<int>[] rowSet)
{
for (var i = 0; i < integersInGame; i++)
{
rowSet[i] = new HashSet<int>();
}
}

private static int FigureOutSubGrid(int row, int column)
{
return column/3 + row/3*3;
}
}
}