Wednesday, 1 June 2016

How to Install Ubuntu on an External Drive and boot it on a Surface Pro 3

I've been trying to get a full Ubuntu install on an external USB3 SSD, but I could never make it boot. It turns out the files on the EFI partition have to be renamed. If one knows how to do that, the rest is quite simple.

Wednesday, 11 September 2013

Internet Explorer on Windows RT



I got my Surface a fortnight ago and I'm extremely happy with it - no complaints at all!

Understandably I use the Metro version of IE. At first I found it a bit limited compared to using Chrome (as that's what I've been using on my laptop) but found out that it's quite powerful.

The desktop version is the key to tweaking the Metro app. Here are a few things I changed that made my experience with the Metro app totally awesome.

Wednesday, 6 June 2012

New Book Renderer in Albite 3

I'm experimenting with a new renderer which will look a bit more realistic. Also, I'm planning to have a different kind of night mode: instead of having a black background, the overal contras will be decreased and a few light effects will be added so as to simulate reading under the light of a night lamp.

Of course, there will be an option to switch back to the classic renderer as well.

Albite 3 UI


I've been working on a custom GUI for Albite 3 which would be a lot slicker, faster and far more useable than what J2ME provides by default. The graphics content mainly comes from Android 2.x, though there are some thematic touches from ICS.

Tuesday, 20 December 2011

Visualisation of my implementation of a multi-level pseudo-LRU cache

I've just finished my Java implementation of a multi-level pseudo-LRU cache. You can see it in action for yourselves:



The abstract code is just 10KB, and a simple direct implementation of the abstract classes is a kilobyte and a half.
Initially, I though of implementing a LFU cache, but then I realised that for caches that are large enough, the pseudo-LRU algorithm would work nicely.
The four main actions on a cache are:
  • adding an item to the cache
  • getting an item from the cache
  • invalidating an item in the cache
  • trashing the whole cache
The added items should implement the Cacheable inteface, which requires the implementations to have the `getPhysicalSize()` method, which should return the expected physical size of the item in bytes. Such approach has, of course, it's liabilities but I think it would be good enough for some practical use-cases.
What's special about my cache is that:
  • It can chain multiple caches, so that removed items from a front cache are not immediately lost, but moved to a back cache.
This is useful in situations when the back-cache is slower, but considerably large than the front cache (like a file-based cache), but using it is still faster than recreating the cached item.
On the other hand, one can have multiple smaller specific front caches, all backed-up by a single larger back cache. This would help if there's a tendency to have items from the same type at a given time, effectively expanding their local caches.
  • When there's not enough space in the cache, items need to be removed. Often, only a few items need to be removed at a time. Removing a very small amount of items would mean that the next time one needs to add an item there might again be not enough space in the cache. To remedy this inefficiency, one can choose a minimum limit for the amount space to be freed when trash cleaning is triggered.
The code is available at GitHub as usual.

If using NetBeans, right click on VisualCacheTest.java and select Run.

Saturday, 8 January 2011

Flypad BETA

Wanted to use your phone as a driving wheel? Finally, a fully working beta of Flypad!


Implemented Functionality
  • The accelerometer is used to control the Rotation-X analog component of the virtual joystick
  • Two bars (in green) for the Axis-X & Axis-Y analog components.
  • Four buttons (in blue) corresponding to buttons 13–16 of the joystick
Requirements
  • 32-bit editon of Windows
  • Bluetooth Dongle, that works with drivers from Bluesoleil or Microsoft
  • PPJoy
  • J2ME touchscreen phone with accelerometer and Bluetooth, i.e. CLDC 1.1, MIDP 2.0, JSR-82, JSR-256
Installation
  • Install PPJoy
  • Insert your Bluetooth dongle
  • Enable Bluetooth on your phone
  • Install FlypadPhone-0.9.0.jar on your phone and run it
  • Grant necessary permissions if asked to
  • You should see the app showing 'Awaiting client connection'. If it's showing something in red, then you may need to restart your phone and run it again. Bluetooth seems to be buggy on my Samsung Star.
  • Start Flypad HOST on your PC using the 'start.bat' file. It should find the device and show its URL. To stop it, press CTRL + C. Due to a certain bug (possibly in my code) it's important the you start Flypad HOST after Flypad PHONE is ready and indicating that it's waiting for client connections
  • Open the joystick settings in the Control Panel and check if it's working fine
  • You can stop FlypadPhone using the Red key on your device
Notes
  • May not work well on Nokia phones for the moment for their autorotate feature
  • NFSU2 doesn't seem to work well with PPJoy
  • Doesn't support multitouch so one can't press to buttons at once. It wasn't a problem for me, but it may need some getting used to
The source code is available at GitHub.

Saturday, 18 December 2010

Next project: Flypad!

Ever wanted to use that mobile as a driving wheel? Or a keyboard? Touchpad? Well, why not?

There you are. Flypad. Using your touchscreen and bluetooth connection, it would be possible to use your Java Mobile phone as:
  1. Wireless mini keyboard
  2. Wireless mini touchpad
  3. Wireless driving wheel (if the phone's got an accelerometer)
Have a look at those prototype images of the 'keyboard' and 'touchpad' modes. The code for the 'driving wheel' is also almost ready, though there's nothing to show at the moment.

The driving wheel will be available only for Windows through a virtual joystick driver: PPJoy. I've tried that and the driver was working just perfectly (even under Vista).