Thursday, August 14, 2014
Hex Wallpaper
Thursday, June 14, 2012
Windows Carbon Fiber Wallpaper
1920:1080 (16:9 aspect) Download Zip Here
1920:1200 (16:10 aspect) Download Zip Here
And here's a bonus one for android.
I've included a blank carbon fiber so you can use it with the windows login changer for a clean login experience.
Wednesday, October 19, 2011
Friday, September 16, 2011
utorrent server linux startup script
Currently tested working on ubuntu and debian systems but should work on most linux boxes.
Tuesday, August 16, 2011
MKV2M2TS script for linux lovers
So I've patched it up and here's the fixed version:
Tuesday, July 12, 2011
The importance of intuitive interfaces
Grid.setSelectionModel(SelectionModel m);
The selection model affects what happens when a user tries to make a selection on a grid (think excel table). The method accepts any selection model as well as null. If a programmer wanted to disable selection on the grid they would intuitively do:
Grid.setSelectionModel(null); //Sets the selection model to null (disabled)
That would be what you and I would and without any prior knowledge of the library we would think this means that the selection model is disabled when it is not provided.
Obviously this doesn't work otherwise this post would be pointless if you try the above you get a null pointer exception. So how do we disable selection at all? Will through this obscure post we find out that in order to disable selection on the grid you must first provide it with a selection model and then disable it.
SelectionModel sm = Grid.getSelelctionModel();
sm.setLocked(true);
or in a more compact way
Grid.getSelectionModel().setLocked(true);
What's the problem? Well for one you still have a selection model in the system and all selection models have to implement this "locked" mode which means disabled. You can't just disable a selection model.
But you say "It is documented when you dig through the documentation" that much is true their documentation has this to say:
setLocked
public void setLocked(boolean locked)
- True to lock the selection model. When locked, all selection changes are disabled.
-
- Parameters:
locked- true to lock
But the point is when there is such a thing as the interfaces behaving in an intuitive way. A programmer should take into consideration their fellow programmers and add convenience methods in order to give other programs an intuitive way of doing things. For example if the grid itself had a:
Grid.disableSelection(boolean disabled)
Which sole purpose is to set the selection model locked or unlocked this would be much easier to use.
Wednesday, June 08, 2011
GXT comments: Useless at best, Confusing at worst
See the screen shot the return value doesn't make sense as commented.
Shouldn't an outerHTML return the outerHTML and not the innerHTML?
Tuesday, June 07, 2011
GXT sucks moment
Here's an example if you click on a menu button too fast your context menus never disappear.
It would appear that web developers don't have the same level of robustness as conventional developers / engineers. Then again maybe the people behind this library are just lazy.
Wednesday, February 09, 2011
My Opposition Letter to The CRTC regarding UBB
There are several major problems with UBB I will outline them for you below.
1. Independent ISP's already pay for the infastructure congestion is on the bell end and is not caused by the "strain
of independent ISP's" as they only get their agreed upon rate.
2. There is no free ride happening independent ISP's pay for infrastructure upgrades just like everyone else.
3. Accountable metering is needed if we go with UBB: For metered internet to be viable each house will have to get a certified meter installed of which the measurement is validated and government approved. Similar to the requirements of retail scales, gas meters, electricity meters, water meters. In the current model Bell can claim the user used X capacity and the user has no recourse as bell can claim whatever they want. This meter must be readable without requiring logging onto Bell's website (aka must not use bandwidth to check it).
4. Bell is not penalizing the "Bandwidth Hogs" the problem of capacity lies in what is known as "peak hour capacity" that is when everyone is trying to get online. Bell penalizes a 5Mbps plan more by giving them a lower cap vs a 25mbps plan. But the 5mbps users is far less likely to cause congestion because they simply cannot be as demanding as the 25mbps user.
5. UBB is a discouragement for network upgrades and continue investing. If you were Bell and you could just simply penalize your customers for using the service they paid for as a way to make your users demand less would there every be a need to upgrade your infrastructure? Nope. In fact if you knew every customer was capped at 25GB why would you even bother investing any capital at all in improving your network infrastructure? You've essentially frozen all possible future demand.
6. The tariffs don't reasonablely match the cost to produce each GB. Most of us understand there is some markup but Bell's markup model is insane. The price to deliver a GB including network upgrades done annually is less than 3 cents / GB. Yet bell turns around and charges of $2? The cost / GB would be reasonable if UBB was implemented at a rate of 5-10 cents / GB.
7. The tariff's don't reward the non-bandwidth hogs. If we have these tariff's in place what happens when you don't exceed the 25GB of allocated bandwidth? Surely bell will give you a refund or a credit for unused GB? You can carry them over to the next month right? Nope this 25GB just dissapears you don't get it back.
8. Canada already has the highest internet prices in the world. And yet we still can't keep up with our internet? The USA is already offering fiberoptic to the house while charging their customers far less. The argument that Canada needs to charge more to keep it's network running is completely fictitious.
10. Conflict of interest: Bell's own TV service isn't metered in any way. They are using UBB to effectively prevent new errants from entering the market like Netflix.
11. There is something seriously wrong when filling up 6 hard drives then overnight shipping them, and simply throwing them away will cost less than if the same data was delivered over the internet. http://www.canadiandownload.com/ is a business model that shows just how backwards our internet is.
12. Innovation will leave. Why in the world would companies that are creating new and innovative experiences on the internet stay in Canada when the Canadian public will be completely unable to utilize their services?
Friday, November 12, 2010
Javadoc Rant
Javadoc is this wonderful invention. It allows a programmer put a comment into their code above the methods they are writing in order to generate automatic API documentation. But it’s simplicity is also a curse often times Javadoc descriptions are absolutely awful.
And in some cases Javadoc descriptions which are suppose to contain how and why you would use something serve to only remind a programmer what the method name was called. For example in the GXT API for google web toolkit extra widgets we have this excerpt:
getStyle
public TreeStyle getStyle()
- Returns the tree style.
- Returns:
- the tree style
Hmm… I think most programmers can guess the that from reading the method. But what is a style? In particular what is a TreeStyle? What does it define?
Almost all JavaDocs I’ve come across so far suffer from lack of information. If any JavaDoc users out there are listening. The reason many programmers flock to languages like C# is the documentation is gold. Javadoc is a great technology but if it is to compete Javadoc writers need to not only state what the method does but also mention why you may want to use it.
In addition almost every MSDN documentation I’ve seen to date gives at least one example of the method in practical use so the programmer has no doubt as to how to use that API. Ask yourself when’s the last time you saw a useful example inside a Javadoc?
Technology is great Javadoc is incredibly easy to generate, but the ease of use leads to very poor documentation. Most JavaDocs are an afterthought and it’s highly disappointing.
Sunday, July 25, 2010
Windows Auto-Updaters
If anyone from Microsoft reads this I have a pretty simple feature request for Windows 8. Windows desperately needs some for of auto-update api. On my current Win7 install right now I have this situation:
Chrome: has their own updater
Firefox: has their own updater
Winamp: has their own updater
Flash: has their own updater
Digsby: has it’s own updater
iTunes: has their own updater
… etc.
Aside from all these programs requiring memory resident services in order to maintain the periodic update check the main annoyance is that each of these updates bug you at different times through a different interface about the programs they know about.
Since updating and patching for security flaws is a common thing in the modern application world this would be a big benefit to users of Microsoft products if there’s a centralized way of alerting the user of new changes. If it could be listed along with the standard windows update interface all the better (maybe a third party applications section).
I would submit to Microsoft directly but it doesn’t appear they have a feature request page in a casual search of the Microsoft Windows divisions site.
Wednesday, July 14, 2010
Reading Android XML Resources
The XMLPullParser works but it’s very bare metal and does leave quite a bit to be desired. So I decided to go ahead and create a generic XML parser that all android developers can use (and improve).
public class XMLData {
public String mValue;
public XMLData mParent;
public ListmChild;
public XMLData(String value, XMLData parent) {
mParent = parent;
mChild = new ArrayList();
mValue = value;
}
}
First we establish a base XML data structure I decided to keep things simple here so I'm not at all doing anything about attributes if you wish to handle attributes you need to add a new ArrayList for attributes.
Now that we have our basic XML data type we can start create a class to read it:
public static XMLData Load(XmlPullParser parser) {
XMLData xmlModel = null;
XMLData currentNode = null;
try
{
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT){
String name = null;
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
xmlModel = new XMLData("root", null);
currentNode = xmlModel;
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name != null) {
XMLData dataNode = new XMLData(name, currentNode);
currentNode.mChild.add(dataNode);
currentNode = dataNode;
}
break;
case XmlPullParser.TEXT:
name = parser.getText();
if (name != null) {
XMLData fieldNode = new XMLData(name,currentNode);
currentNode.mChild.add(fieldNode);
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
currentNode = currentNode.mParent;
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
Log.e("ParseEx", e.getMessage());
} catch (IOException e) {
Log.e("IOEx", e.getMessage());
}
return xmlModel;
}
So let's back up for a second and look at what this does. We start off by first executing:
This reads off our first tag for the XMLPullParser.what follows is the main while loop.
There are 4 Major event types we are concerned with:
START_DOCUMENT and END_DOCUMENT denote the beginning and end of the document when we get a start we concern ourselves with initializing the XMLData so we can start to build an XML tree.
START_TAG and END_TAG denote when each of the tags expand. On a START_TAG we prepare ourselves to traverse into the ENTRY by creating a new XMLData.
case XmlPullParser.START_TAG:
name = parser.getName();
if (name != null) {
XMLData dataNode = new XMLData(name, currentNode);
currentNode.mChild.add(dataNode);
currentNode = dataNode;
}
break;
dataNode in this case is the newly created node ready for traversal. We then perform currentNode = dataNode remember that we are now traversing down the node.
On END_TAG we do one and only one thing we go up one level from our tree structure. This is accomplished with the following code:
case XmlPullParser.END_TAG:
name = parser.getName();
currentNode = currentNode.mParent;
break;
Finally we have TEXT in which we read off the actuall data of an element:
case XmlPullParser.TEXT:
name = parser.getText();
if (name != null) {
XMLData fieldNode = new XMLData(name,currentNode);
currentNode.mChild.add(fieldNode);
}
break;
Hopefully this tutorial breaks down an easy way to access your XML data. If you want to use XMLData right away you can grab it here! I haven't decided what license I'll release it under but I'm thinking it'll be under the same license as Google SDK.
DOWNLOAD SOURCE
Monday, June 28, 2010
iTunesMonitor 2.5 (Update)
I've recently updated iTunesMonitor to 2.5 status you can find the original description here (The download link was updated there as well).
The main difference is it now respects Windows 7's UAC controls so no more crashing due to permission issues. Keep in mind you will need .NET framework 4 to run this now.
Among other nice features 2.5 iTunesMonitor finally gives iTunes the ability to work with your media keys even when iTunes does not have focus for those die hard iTunes users.
The system is "install free" meaning as long as you have iTunes installed detection and launching is automatic.
Download iTunesMonitor 2.5
Monday, May 17, 2010
Learning Unity a Beginner's Prespective
After some of the ground work had been established we decided that it's would be an appropriate time to take a look at some toolkits. The Unity Game Engine has been recieving a lot of praise from the indie crowd recently. I felt it was appropriate to at least give it a fair evaluation.
Arriving from a programmer's background the first thing one would notice is that Unity is built somewhere in between the artist and programmer tools. Although I would place unity more heavily towards the artist side of the game development. The first hurdle a programmer will find is that a lot of the terminology is geared towards the artist so it may be hard to figure out what "bones" are or the concept of a "scene" is.
Once you get beyond that and start your own project you find another lacking area of Unity the tutorials seem to span. "This is the UI" and "Here's an advanced tutorial that we expect you to know how to use the toolkit well" but nothing in between. What I was looking for as a coder is "this is your first unity level" but there really wasn't any tutorial that ran you through creating a box with the player in it and giving it some basic lighting.
In this area unit could be improved upon. If the tutorial exists then it really wasn't made that clear where you could go and find it.
As a programmer game development for us works as follows. Build Rough Game Mechanic concept --> Make ugly place holder graphics --> Test game concepts --> Refine and acquire final art assets. Unity however doesn't work this way. Any object you want to put into Unity must be first drawn in your 3D modeller package. Unity does not include any form of "primatives" you can just drop in. This basic disconnect forces people used to the programming model to adhere to the unity work flow model of: Build rough art assets --> Drop into unity --> Attach scripts --> Test gameplay --> Refine models.
Admittedly to non artists this model can seem Alien often times we use code to compensate for the fact that we don't understand how to use all the features of the complex 3D modelling packages such as rigging, bones, mesh deformation, and particle effects.
Overall though for a first look Unity may seem baffling at first but I can definitely see signs that once you get a hold of how to appropriately utilize the tools unity definitely seems to speed up the "concept / code / test" cycle we are used to. I only caution the programmers about to be introduced to this tool to be cautious and be aware that when they first start they will be baffled in what appears to be a tool designed for artists.
Flash programmers would be well aware of this concept that the editor doesn't assist the coders instead it's somewhat expected the coders use their own coding environments to get the job done.
Thursday, April 01, 2010
PS3 Firmware 3.21 Update Process Impressions
Like may people out there I was a bit disappointed when I heard that firmware 3.21’s only feature was the removal of Linux. I used it from time to time but I will admit it was not in steady use on my system for day to day operations.
That said I disagreed heavily with Sony’s underhanded approach of removing features that were obviously advertised on the side of the box my unit came in.
This is not about Sony’s update decision however there are plenty of posts on the internet about that, this is about the update process.
First off if you have another OS installed before you update you are required for format your HDD. Formatting your HDD removes all user settings, saved games, movies, music and photos you’ve loaded on. For me that’s 60GB.
I looked around for a “Just delete Other OS partition and resize” option but alas there was none.
Any sane user at this point would offload the data to a backup hard drive. So I went to the backup utility and selected backup to external HDD. This is where Sony’s lack of care for this release is made obvious the backup will take 2 hours to complete. I’m guessing since I’m in the middle of it that the restore will also take 2 hours.
4 Hours for a firmware update is by far the worst customer experience ever. I’m sure I’m not the only one that’s greatly disappointed in Sony for this.
It would’ve been possible to just wipe the OTHER OS partition and expand the main partition without losing user data. But no, Sony decided that he customer’s time is not really worth anything.
A very poor rollout Sony as much as I’m usually negative about Apple, their iphone and ipod releases are done far better. Major releases although they wipe your phone, automatically make sure everything is back the way you left it before the update is done.
In order to ease customer suffering Sony could’ve also implemented a prompt to insert an external HDD and have the user data reloaded when the update was complete. But to be honest a simple delete partition and resize main partition would have been much more effective and much faster.
Take note people this is NOT how to update consumer devices.
Sunday, January 03, 2010
Game Developments Thoughts
Suffice to say after several tech considerations we decided that the most appropriate platform (read not best) would be flash with action script 3.
In the last month I've been plagued with flash surprises that just astound me. For one flash is the only language that when you add an object that's already on the stage to another container that's also on the stage the original reference disappears from the first container?! This is a bit of an oversight since you will no longer be able to do instancing. Worse still there's no built in .clone operation for display objects so you'll have to start writing your own workarounds for this. Again oversight.
Performance wise we've been discovering flash isn't great for example one effect we wanted to do is a full screen lens blur. To make the CPU requirements low we decided we were just going to pre-process a blurred version of the image and alpha blend the clear version into the blurred one... Guess what full screen alpha blending with 2 images on flash is painfully slow and we had to ditch the idea, in favor of a static staged blend animation.
Progress on this project is pretty good everything is on schedule I'll be throwing in more of the art assets this week. The game is starting to finally look right moving past just a mechanical place holder and starting to take the final form of the game.
There's a lot of "what flash doesn't have this?" that I've been collecting I'm going to see if I can post some here and discuss why it feels like an oversight.
Tuesday, May 26, 2009
iTunes Monitor
iTunes on the PC is quite popular but iTunes has a nasty habit of more often than not eating up way too many resources even while it's not running.
The culprit?
iTunes needs several services that it doesn't shutdown when it closes these are:
iTunesHelper
iPodService
AppleMobileDevice
BonjourService
(and a few others)
I found this unacceptable so I wrote a little program I call the iTunesMonitor. It's sole job is to set all these services to manual so you don't get them on startup and to launch them when it's started and then launch iTunes once all the services are up.
The program then sits idle in the background checking every 5 seconds to see if iTunes is closed. When it sees this it will immediately clean up any remaining services.
What about the media keys they don't seem to work one you don't have iTunes in focus. Well since my program has to sit in the background and wait for iTunes to close anyways I felt that I should fix the way media keys behave. Now iTunes will respond to media keys regardless of if it's in focus or not and the media keys are unregistered when the program is closed.
Try iTunesMonitor for yourself. It requires no configuration other than an installation of iTunes. It will automatically detect your installation of iTunes and launch it along with the supported services. No configuration is required however it is recommended you replace the iTunes icon in your start menu with the iTunesMonitor for transparent operation.
Download iTunesMonitor 2.5
Thursday, May 07, 2009
ToJam 2009
Tojam 2009 concluded last Sunday. By far ToJam is the craziest most fast paced game development competition around. Teams and individuals try and put a game out from scratch in just 3 days.
Most teams work around the clock forgoing sleep to nurture their creations.
Team AnyKey pictured here this year went with a very ambitious project, and some members including myself are still spending a few hours a week tuning the final result for the arcade.
There were many days where we went from Extreme coders to musicians to artists in a way ToJam is less about what you know and more about raw talent. To anyone thinking of going to ToJam but fear they won't place, come anyway! Part of the joys of ToJam is being around great people doing what you love and learning in the process.
There were plenty of awesome games to be seen many of them way too good for you to feel like they could've been created in 3 days.
I can't credit these pictures above they were taken by David Vanvliet, another participant at the event.
Tuesday, April 28, 2009
A Better Game Sound Engine For AnyKey tojam#4
Today I had a thought about something quite interesting leading up to our game competition. Since none of us are music experts and all music loops are quite short and designed to be connected to each other I'm proposing a very interesting change to our game music engine.
Our original music engine was monolithic as in it only played one massive track.
< Level >
[Songfile]
We could in simple terms switch to a basic shuffle system
< Level >
[songfile1][songfile2][songfile3][songfile4][songfile5]
But then I thought of a much better idea which I hope to be able to be able to implement today or tomorrow. Each song data will consist of 2 parts the track itself and a linked list reference to another part. Music then becomes a sort of directed graph with cycles. Edges then can be taken randomly. This kind of thing is better explained with a picture.
The advantage to using this system is that we can prevent one obvious section from continuously looping and we can enforce tracks that sound better after each other to happen. The end result is a pseudo-random music that will make the listener think it's more intelligent than it is.
Auto-generated in game music
Our original music engine was monolithic as in it only played one massive track.
< Level >
[Songfile]
We could in simple terms switch to a basic shuffle system
< Level >
[songfile1][songfile2][songfile3][songfile4][songfile5]
But then I thought of a much better idea which I hope to be able to be able to implement today or tomorrow. Each song data will consist of 2 parts the track itself and a linked list reference to another part. Music then becomes a sort of directed graph with cycles. Edges then can be taken randomly
Hobbies
I need new hobbies. Two years into COVID-19 my hobby became everything COVID related everything from keeping up with the latest restriction...
-
Here's a linux utorrent script so you can start utorrent server like a service on linux machines! Currently tested working on ubuntu a...
-
It's time to switch up the wallpapers again so I've come up with a new concept for everyone to enjoy Hex WallPapers (in the same vei...







