Ryan Harrison My blog, portfolio and technology related ramblings

'Tsunami' Trojan ported to Mac's

According to this post from TechSpot, researchers have discovered that hackers have now managed to port an old Linux trojan to work on Apple’s Mac OS X platform.

“Once it is running on the host machine, it connects to an IRC channel and awaits further commands from the hackers. They can then use the combined connections of the all the computers in the botnet to flood servers with requests, bringing them down in DDoS attacks. Hackers are able to download files to the infected computer for it to update itself or install additional malware, and gives complete control of the host machine to execute any command they choose.”

Mac users seem to think that their machines are immune to any form of infection. It’s good to know that the platform really isn’t as secure as many people think. Could this be the start of a new demand of anti - virus programs for Max OS X?

Read More

Java Yahtzee Game

Here is a small game of Yahtzee I have been recently working on in Java. At the moment it takes the form of a standalone swing application, although I may port it to a Java applet for in browsers games. Full source code can be found on the GitHub repository

Game screenshot

Rules for Yahtzee

Download the game (.jar)

Read More

Windows 8 Developer Preview Released

Microsoft has now released the developers preview for Windows 8, which includes -

  • A 64-bit Windows Developer Preview
  • Windows SDK for Metro style apps
  • Microsoft Visual Studio 11 Express for Windows Developer Preview
  • 28 Metro style applications including the BUILD Conference app

It’s available here.

Although I haven’t personally installed the release, here are a couple of screenshots from a user running it in a Virtual Machine.

Metro UI

This shows the new ‘Metro’ UI in Windows 8. It consists of a series of tiles and widgets that link to the most common applications. I can’t really see anyone using this on a desktop computer, but I suppose it’s meant to be for mobile devices with touchscreens, which will benefit hugely from the large icons.

Start Menu

Here is the new desktop and start menu in the developer release. Although most of the desktop is similar to that of Windows 7, huge changes can be seen in the new start menu which has been completely revamped to fit in with the new Metro style.

Ribbon in Explorer

One of the main changes in the new release is the new Ribbon in Windows Explorer. For more basic skilled users this could be a real time saver, as it stops people from trawling through the edit menu in order to find ‘Copy’. However on the other hand, on smaller resolutions the Ribbon can take up a lot of real estate, and won’t leave much room for the actual files to be displayed. I can see most advanced users instantly hiding the Ribbon, as most of it’s features can be accomplished with simple keyboard shortcuts.

Task Manager

The task manager has also been given a much needed face lift. It’s now much more graphic, and offers the user more information than in previous versions. This will also apparently be a window that many users will see, as Microsoft have recently said that most people use the task manager on a day to day basis to ‘kill’ programs. This doesn’t really say much for the developers.

Control Panel (Metro)

Metro Apps 

Finally there is the new Metro Control Panel and a possible Metro equivalent to ‘All Programs’. I hope that Microsoft still include the old versions however, as I can see trying to navigate the control panel on a desktop computer taking twice as long as it should do.

Of course this is a very early build of Windows 8, but shows a taster of what’s to come. I find it surprising that Microsoft have made such large changes from Windows 7. Obviously Microsoft are trying to integrate the new release with Windows Phone devices, and Metro will look and feel great on a touchscreen device, but I don’t really think that it offers any use whatsoever to the majority of users sitting at their desks.  Plus considering that Microsoft’s clients are mostly corporate, I can’t see the new changes being that popular with them. It will probably decrease productivity and will confuse many users, especially considering that many businesses have only just made the leap from Windows XP to Windows 7, and from Office 2003 to 2010. The leap has just been made at my college, but not without major problems. Many have had problems using Libraries, and the whole network has been down for hours at a time. Of course the problems will be fixed soon, but it doesn’t bode well for Windows 8 considering that it took the best part 8 years to upgrade to Windows 7.

Expect to see a lot more about the new release in the near future.

Read More

Java 7 Released

A few days ago Oracle announced the availability of their new Java 7 SDK. Some of of the major changes include -;

  • New I/O APIs (Asynchronous I/O)
  • Strings in switch statements
  • Unicode 6.0
  • Elliptic-curve cryptography
  • Translucent and shaped windows
  • Heavyweight/lightweight component mixing
  • Swing Nimbus look-and-feel
  • Swing JLayer component
  • The integral types (byte, short, int and long) can also be expressed using the binary number system. To specify a binary literal, add the prefix 0b or 0B to the number.
  • Any number of underscore characters (_) can appear anywhere between digits in a numerical literal. This feature enables you, for example, to separate groups of digits in numeric literals, which can improve the readability of your code.
  • You can replace the type arguments required to invoke the constructor of a generic class with an empty set of type parameters (<>) as long as the compiler can infer the type arguments from the context. This pair of angle brackets is informally called the diamond.
  • A single catch block can handle more than one type of exception. This enables you to specify more specific exception types in the throws clause of a method declaration and reduces code repetition.
  • The try with-resources statement is a try statement that declares one or more resources. A resource is an object that must be closed after the program is finished with it. The try with-resources statement ensures that each resource is closed at the end of the statement.
  • Java API for XML Processing (JAXP) 1.4.5.

JDK 7 Release Notes

Download Link

Read More

C# The Google Currency API Update

NOTE: The Google Finance API has now been deprecated so this code will no longer work

After testing out the code from the recent post on the Google Currency API, it became apparent that the code had one very significant bug that caused an exception to be thrown when the user enters a value that returns a result over the one million mark. For example -;

http://www.google.com/ig/calculator?hl=en&q=1000000gbp=?usd

which gives back this JSON object -;

{lhs: "1 000 000 British pounds",rhs: "1.6399 million U.S. dollars",error: "",icc: true}

As you can see, instead of returning just a decimal number, it gives a number followed by a String, which caused the previous program to crash.

In this case to fix the bug, the Regex needs to be modified so that it returns not only the number, but also the new String in the same match. With this information, the number can then be multiplied to give the final result as a single decimal.

The Regex now becomes -; rhs: \\\"((\\d|\\s|\\.)*)(\\s[^\\s]+)

(the cluster of backslashes are to escape the possible escape sequences of ‘/d’ and ‘/s’ for example)

The new Regular Expression makes use of ‘Groups’ to store the two pieces of data in the same match -; the first groups contains the number, and the third contains the String due to the way this pattern is designed (it’s probably possible to modify this, yet it doesn’t create too much of a problem and so isn’t worth the effort).

We can now produce a match from the response using the same code as before -;

WebClient client = new WebClient();

string url = string.Format("http://www.google.com/ig/calculator?hl=en&q={0}{1}=?{2}", amount, from.ToUpper(), to.ToUpper());

string response = client.DownloadString(url);

Regex pattern = new Regex("rhs: \\\"((\\d|\\s|\\.)*)(\\s[^\\s]+)");  
Match match = pattern.Match(response);  

Once we have access to the match, we can extract the data into our own variables -;

string number = match.Groups[1].Value;  
number = number.Replace(((char)160).ToString(), "");

decimal num = System.Convert.ToDecimal(number);  
string units = match.Groups[3].Value.Replace(" ","");  

Here, the number is stored as a String from the first group and the ‘spaces’ are removed (for some reason in the returned String, ‘spaces’ have a Unicode value of 160, which is called the ‘Non-breaking space’). Next, the number is converted into a decimal and the units are extracted from the match and stored in the ‘units’ variable.

As the only possible values of the ‘units’ variable are ‘millions’, ‘billions’ and ‘trillions’, we can simply test the variable against each and multiply the number correspondingly to get the overall result. Finally, we just need to round the number to two decimal places to signify a currency, and return the value. Here is the full updated code which hopefully is bug free. The full source code can be found in GitHub.

using System;  
using System.Text.RegularExpressions;

public static class Currency  
{  
	public static decimal Convert(decimal amount, string from, string to)  
	{  
		WebClient client = new WebClient();

		string url = string.Format("http://www.google.com/ig/calculator?hl=en&q={0}{1}=?{2}", amount, from.ToUpper(), to.ToUpper());

		string response = client.DownloadString(url);

		Regex pattern = new Regex("rhs: \\\"((\\d|\\s|\\.)*)(\\s[^\\s]+)");  
		Match match = pattern.Match(response);

		string number = match.Groups[1].Value;  
		number = number.Replace(((char)160).ToString(), "");

		decimal num = System.Convert.ToDecimal(number);  
		string units = match.Groups[3].Value.Replace(" ","");

		if(units.Equals("million"))  
		{  
			num *= 1000000;  
		}  
		else if (units.Equals("billion"))  
		{  
			num *= 1000000000;  
		}  
		else if (units.Equals("trillion"))  
		{  
			num *= 1000000000000;  
		}

		return Math.Round(num, 2);  
	}  
}  
Read More