Monday, 16 December 2013

How to list and sort directories by size in Linux/Unix

Had a brain freeze and forgot how to list all files within a directory and sort by size - google returned me this awesome gem:
du -k | sort -nr | more

Or human readable output:
du -sh

http://snippets.aktagon.com/snippets/86-how-to-list-and-sort-directories-by-size-in-linux-unix

Thursday, 7 November 2013

CQ component - disable target in context menu

http://aemfaq.blogspot.com.au/2013/05/how-to-disable-target-context-menu-in.html

The "target" option in the context menu of a CQ component can be hidden/disable by setting cq:editConfig/cq:disableTargeting to true.


In code level:
<?xml version="1.0" encoding="UTF-8"?>
<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
    cq:dialogMode="floating"
    jcr:primaryType="cq:EditConfig" cq:disableTargeting="{Boolean}true"/>


Reference: http://forums.adobe.com/message/5334713

Wednesday, 23 October 2013

Cygwin - finding out what package to install

http://www.trueblade.com/knowledge/finding-which-cygwin-package-contains-a-particular-file

Cygwin's cygcheck utility for finding out package needed:
cygcheck -p strings.exe

This will tell you that strings.exe is in binutils. If you know that it's an executable you're looking for, it's best to add the ".exe" extension. If you look for just "strings", you get a list of 144 packages that contain a file with the word "strings" in the filename.

Friday, 4 October 2013

JSTL c:forEach varStatus properties

http://www.bmchild.com/2012/03/jstl-cforeach-varstatus-properties.html


Property Getter Description
current getCurrent() The item (from the collection) for the current round of iteration
index getIndex() The zero-based index for the current round of iteration
count getCount() The one-based count for the current round of iteration
first isFirst() Flag indicating whether the current round is the first pass through the iteration
last isLast() Flag indicating whether the current round is the last pass through the iteration
begin getBegin() The value of the begin attribute
end getEnd() The value of the end attribute
step getStep() The value of the step attribute

Thursday, 19 September 2013

How to manage devices in Amazon

http://www.amazon.com/gp/help/customer/display.html/ref=hp_rel_topic?ie=UTF8&nodeId=201252640

Go to Manage Your Kindle to manage your Kindle device or Kindle reading app. The names of your Kindle devices and reading apps appear in a list under Registered Kindles and Kindle Reading Apps.

  1. Visit Manage Your Kindle 
  2. Click Manage Your Devices. 
  3. Click Edit next to the name of the device or application. 
  4. Enter the desired name. 
  5. Click Update.



Wednesday, 18 September 2013

How to repeat an event in Google Calendar

Say if you want to repeat an event every 60 days, what do you do?


There is no option for 60 days!!??

So what's next?

Use Quick Add:
https://support.google.com/calendar/answer/36604?hl=en

Essentially, click here (the triangle next to "Create"):


Enter:
Your event 10pm Oct 14 repeats every 60 days


Viola! You're done =)

Wednesday, 11 September 2013

Images in Responsive Web Development

http://greatfridays.com/blog/images-in-responsive-web-development/

Retina displays:
1. CSS3
2. @font-face icons
3. Pixel density CSS Media Queries
4. SVG images

Image optimizations:
1. Encoding
2. Image compression
3. CSS Sprite sheet

Image replacement:
1. Server side detection frameworks
2. CDN Proxy
3. HTML5 picture element
4. JavaScript detection

Recommendations by Adam Foster


For now, project requirements decide which image replacement technique we use. But regardless of the approach our Engineering team try to adhere to the following, for images in responsive web:
  • Use CSS3 in place of images whenever possible
  • Rasterized background images should be optimized for Retina displays, using a media query or/and @2x images
  • SVG is the prefered format for vector based images
  • Use CSS Sprite sheets to reduce HTTP requests for images
  • Compress images as much as possible while preserving quality. Take time to experiment with compression techniques such as the ‘more detail with less kilobyte’ image compression approach
  • The image replacement approach needs to allow for art direction
  • Images should be optimized for a range of device resolutions
  • Users shouldn’t download multiple versions of the same image

And finally, a few things we are looking forward to making part of our responsive web development workflow in the near future:
  • @font-face custom font for an icon library
  • SVG fragment identifiers
  • The proposed HTML5 picture element


Tuesday, 10 September 2013

You are 31 when you become a billionth-seconds-old

Itchy ass, so I wrote a Python script to verify:

billion = 1000000000
sec_365 = 31536000 # (60 * 60 * 24 *365)
sec_366 = 31622400 # leap years
sec_day = 86400 # 1day = 86400seconds
sec_hour = 3600 # 1hour = 3600seconds
sec_min = 60
years = 0
days = 0
hours = 0
minutes = 0
seconds = 0

def billionConvertToTime(secs):
  global years
  global days
  global hours
  global minutes
  global seconds
  if secs < sec_min:
    seconds = secs
    return years, days, hours, minutes, seconds
  elif secs > sec_365:
    if years % 4 == 0: # leap years
      secs = secs - sec_366
      years += 1
      billionConvertToTime(secs)
    else:
      secs = secs - sec_365
      years += 1
      billionConvertToTime(secs)
  elif secs > sec_day:
    secs = secs - sec_day
    days += 1
    billionConvertToTime(secs)
  elif secs > sec_hour:
    secs = secs - sec_hour
    hours += 1
    billionConvertToTime(secs)
  elif secs > sec_min:
    secs = secs - sec_min
    minutes += 1
    billionConvertToTime(secs)

billionConvertToTime(billion)
print ("One billion seconds equals to %s years, %s days, %s hours, %s minutes and %s seconds" % (years, days, hours, minutes, seconds)) 
Output:
One billion seconds equals to 31 years, 251 days, 1 hours, 46 minutes and 40 seconds

Monday, 9 September 2013

VNC client on 200 lines of JavaScript

How to create a simple VNC client in about 200 lines of JavaScript.
By only using HTML5 and JavaScript (client and server side).
The end result will be something like this:

http://blog.mgechev.com/2013/08/30/vnc-javascript-nodejs/


A Windows 7 environment within Chrome!

Eclipse install software timeout fix

If for any download you get a timeout. Add the following line to the eclipse.ini file (just after the vmargs line):
-Dorg.eclipse.ecf.provider.filetransfer.retrieve.readTimeout=60000


Useful JS libraries

A javascript library for multi-touch gestures.
http://eightmedia.github.io/hammer.js

Simple, lightweight parallax engine that reacts to the orientation of a smart device
http://wagerfield.github.io/parallax/
Github: https://github.com/wagerfield/parallax

write browser JavaScript programs using modules from NPM
http://requirebin.com/
Github: https://github.com/maxogden/requirebin

6 JavaScript Date Libraries for Developers
http://codegeekz.com/6-javascript-date-libraries-for-developers/

Make a use of your favicon with badges, images or videos (animating favicon)
http://lab.ejci.net/favico.js/


Friday, 30 August 2013

Semantic CSS With Intelligent Selectors

http://coding.smashingmagazine.com/2013/08/20/semantic-css-with-intelligent-selectors/

Attribute selectors
[rel="prev"] {
  /* styling for "previous links" */
}

[rel="next"] {
  /* styling for "next" links */
}


Attribute selectors with simple Regex
a[href^="https:"] {
   /* style properties exclusive to secure pages */
}


[href$=".zip"]:before,
[href$=".gz"]:before {
   content: '\E004'; /* unicode for the zip folder icon */
}


An example of efficient CSS selectors with semantic HTML
/* BAD - The CSS for the class approach */

.new-window-icon:after {
   content: '[new window icon]';
}

.twitter-icon:before {
  content: '[twitter icon]';
}


/* GOOD - The CSS for the attribute selector approach */

[target="_blank"]:after {
   content: '[new window icon]';
}

[href*="twitter.com/"]:before {
  content: '[twitter icon]';
}


Specific selector using attribute
a {
  color: blue;
  text-decoration: underline;
}

a[rel="external"]:after {
   content: '[icon for external links]';
}



Rules for hyperlinks and buttons


  • Rule 1: “If it’s a hyperlink, it should have an href attribute.”
  • Rules 2: “If it’s a hyperlink and has an href attribute, it should have a valid value.”
  • Rules 3: “If it uses a button class, it should be a button — at least in the accessibility layer.”
  • Rules 4: “If it is an a element with role="button", then it should link to somewhere when JavaScript is off.”
  • Rules 5: “You can’t disable a hyperlink.”
  • Rules 6: “Buttons in forms should have explicit types.”
  • Rules 7:  “Both hyperlinks and buttons should have some sort of content or an ARIA label.”



Monday, 19 August 2013

HTML5 Please

http://html5please.com/

Look up HTML5, CSS3, etc features, know if they are ready for use, and if so find out how you should use them – with polyfills, fallbacks or as they are.

Friday, 16 August 2013

Animation with CSS

Animate.css - examples:
http://daneden.me/animate/

Client-Side Storage

http://tech.pro/blog/1486/client-side-storage-options

  • Web (Local & Session) Storage (current with limitations)
    For Local Storage usage example, you can see my post regarding HTML5 Contenteditable and KendoUI.
  • Indexed DB - e.g. idb.filesystem.js (near future)
  • File System - client (future!)
  • Web SQL (deprecated)

Potentially can develop a web-based app (supports mobile & desktop) without the need of an actual native mobile app.

Wednesday, 14 August 2013

IntelliJ - fix Maven dependency

Steps to go through fixing Maven dependency in IntelliJ -


  1. Check the POM - see if the dependency is defined properly
  2. Go to File --> Project Structure... and see if which Library is throwing up error
  3. Navigation to the Class file that the Library is pointing to, e.g. (in your Maven dir)
    [user_dir]/.m2/repository/[dependency]/[dependency_version]/... 
  4. Delete the Library with error in Project Structure.
  5. In command prompt, navigate to the directory of the project/Intellij module, run
    mvn install 
    to force download the dependencies
  6. In IntelliJ, top left hand corner, go to "Packages" view
  7. Right-click on the module --> Maven --> Reimport
  8. Go to File --> Project Structure... to see if error persist


Thursday, 8 August 2013

HTML5 Contenteditable Attribute - Front End editing

http://www.hongkiat.com/blog/html5-editable-content/

Try edit something here!


Note: Changes are saved to Local Storage in your browser.
For WebKit browsers, Chrome and Safari, it is stored under the ‘Resources’ tab.
For Firefox users, go to the DOM panel and search for "localStorage".

Kendo UI - WYSIWYG plugin

http://www.kendoui.com/ - leveraging HTML5 contenteditable attribute for editing content in context, this plugin adds the standard WYSIWYG functionality to it.

This example is based on this.


Try edit here!





Note: Changes are saved to Local Storage in your browser.
For WebKit browsers, Chrome and Safari, it is stored under the ‘Resources’ tab.
For Firefox users, go to the DOM panel and search for "localStorage".


Tuesday, 6 August 2013

JavaScript Regular expressions made easy

VerbalExpressions is a JavaScript library that helps to construct difficult regular expressions. 

https://github.com/jehna/VerbalExpressions

Animated line drawing in SVG

http://jakearchibald.com/2013/animated-line-drawing-svg/


7 JavaScript Basics Many Developers Aren't Using (Properly)


http://tech.pro/tutorial/1453/7-javascript-basics-many-developers-aren-t-using-properly - by David Walsh

1.  String.prototype.replace: /g and /i Flags


Javascript String's "replace" method only replace the first occurence. To replace all, us a regular expression and the global flag "/g":
// Mistake
var str = "David is an Arsenal fan, which means David is great";
str.replace("David", "Darren"); // "Darren is an Arsenal fan, which means David is great"

// Desired
str.replace(/David/g, "Darren"); // "Darren is an Arsenal fan, which means Darren is great"

To ignore case, use the "/i" flag:
str.replace(/david/gi, "Darren") // "Darren will always be an Arsenal fan, which means Darren will always be great"

2. Array-Like Objects and Array.prototype.slice


Convert Array-like objects like arguments, NodeLists, and attributes into true array:
var nodesArr = Array.prototype.slice.call(document.querySelectorAll("div")); // "true" array of DIVs

var argsArr = Array.prototype.slice.call(arguments); // changes arguments to "true" array

Cloning an array with splice: < br/>
var clone = myArray.slice(0); // naive clone

3. Array.prototype.sort


Noraml sort use:
var clone = myArray.slice(0); // naive clone

More powerful use of sort:
[
    { name: "Robin Van PurseStrings", age: 30 },
    { name: "Theo Walcott", age: 24 },
    { name: "Bacary Sagna", age: 28  }
].sort(function(obj1, obj2) {
    // Ascending: first age less than the previous
    return obj1.age - obj2.age;
});
    // Returns:  
    // [
    //    { name: "Theo Walcott", age: 24 },
    //    { name: "Bacary Sagna", age: 28  },
    //    { name: "Robin Van PurseStrings", age: 30 }
    // ]

4. Array Length for Truncation


JavaScript's pass-objects-by-reference nature can be confusing, therefore to remove an array:
var myArray = yourArray = [1, 2, 3];

// :(
myArray = []; // "yourArray" is still [1, 2, 3]

// The right way, keeping reference
myArray.length = 0; // "yourArray" and "myArray" both []

5. Array Merging with push


Merging array with push:
var mergeTo = [4,5,6],
var mergeFrom = [7,8,9];

Array.prototype.push.apply(mergeTo, mergeFrom);

mergeTo; // is: [4, 5, 6, 7, 8, 9]

6. Efficient Feature/Object Property Detection


How we normally detect a browser feature:
if(navigator.geolocation) {
    // Do some stuff
}

While that works correctly, it isn't always efficient, as that method of object detection can initialize resources in the browser. In the past, the snippet above caused memory leaks in some browsers. The better and more efficient route is checking for a key within an object:
if("geolocation" in navigator) {
    // Do some stuff
}

7. Event preventDefault and stop Propagation


A bad way to stop the behaviour when clicking on a link:
$("a.trigger").on("click", function(e) {
    e.stop();

    // Do more stuff
});

It's best to simply use preventDefault:
$("a.trigger").on("click", function(e) {
    e.preventDefault();

    // Do more stuff
});

Wednesday, 31 July 2013

Amazing HTML5 Canvas - A map of Stars near Earth

A colleague of mine, my Master of OCM - Gareth Fox, was brushing up his Canvas skills and developed a map of stars within 15 light-years of Earth.




So much to learn so little I know...

Tuesday, 30 July 2013

Setting up Sublime Text 2 for Velocity (HTML) + BracketHighlighter

Sublime Text 2


1) Download Sublime Text.
2) Go to "Preferences" --> "Browse Packages..."
3) Create a new file called "Velocity (HTML).sublime-settings" with this content:
{    
    "extensions":
    [
        "vm",
        "tpl"
    ]
}
4) Do "Ctrl + Shift + P"
5) Type in "SS Velo" and select "Set Syntax: Velocity (HTML)"

Viola! Sublime text can recognise velocity (vm) files.


BracketHighlighter


1) Download the BracketHighlighter Zip from Github
2) Go to "Preferences" --> "Browse Packages..."
3) Unzip BracketHighlighter to the Sublime Packages folder.
4) Rename the file to "BracketHighlighter"

Viola! You have highlighting for open and close quotes.

Monday, 29 July 2013

Ruby Warrior!

https://www.bloc.io/ruby-warrior#/

A TRIUMPHANT QUEST OF ADVENTURE, LOVE & DESTINY
ALL WITHIN A FEW LINES OF RUBY CODE



Tuesday, 16 July 2013

Edit read-only filesystem in Linux recovery mode

1. Choose recovery mode
2. Manually recovery
3. In the command prompt, use the following command to change the read-only filesystem to be writable:
mount -o remount,rw /

Wednesday, 10 July 2013

Steps to get IntelliJ working with Liferay portal services

Assumption - Liferay has already been run before with tomcat and everything all set up. Uses Liferay Maven to manage projects.


  1. Download and install IntelliJ (The latest version as of writing is IntelliJ IDEA 12.1.4)
  2. Create a new project and point the project root to the SVN parent folder
  3. In Module settings, type in the name of one of the folder in the SVN parent folder
  4. For existing svn checked-out folders, use 'Import Module...' to add more folder to the IntelliJ project
    1. Use Maven model to import
    2. Tick "Keep project files in" checkbox
  5. For the ones without a proper package, create a new module with the same name and do a 'Import Module...'
  6. For the ones that haven't been check-out from svn, use built-in subversion to check out the folder to a destination folder and 'Import Module'
  7. Select all the modules and do Subversion -> Update Directories
  8. Top left -> Project -> Package - if packages exist here, it means it has been imported to IntelliJ successfully (Automatically import Library Dependencies)


To test that it work:

  • Create a new "workspace" folder - Utilities
  • Create a new file - test.groovy
  • Type "GroupLocalService" and you should have liferay portal services for selection
  • Once selected, it should automatically import the relevant liferay service into the file
  • Do this
    GroupLocalService groupService = GroupLocalServiceUtil.getService();
    groupService.
    Note that the "." at the end is requried
  • and it should have a list of avaiable API for this service.



Thursday, 4 July 2013

Test HTML email format

HTML email renders differently in various email client.

The most annoying of all is Microsoft Outlook 2007 and 2010 (could be more, but cbb to list them all). Why? They bloody use MS Word as their rendering engine!

Anyway, to test the format, try this site:
Puts Mail - http://putsmail.com

Put in your email address
Fix up the subject (optional)
Copy and paste your HTML code
Fire away to your mailbox!

Use the target email client to open up the mail to see the result of the HTML rendering.

Cheers

Thursday, 13 June 2013

HTML 5 form input types

http://sixrevisions.com/html5/new-html5-form-input-types/

Advantage of using HTML 5 form input types is that it is cross-platform enabled with mobile devices.
The mobile keyboard will change according to what input type it is.

HTML 5 input types:

Input TypeDescriptionHTML Markup
dateA control for entering the date.<input type="date">
datetimeDate and time using UTC date and time format<input type="datetime">
datetime-localDate and time according to your local time<input type="datetime-local">
monthMonth and year<input type="month">
timeThe time of day<input type="time">
weekAllows you to pick the week and year.<input type="week">
colorAllows you to enter asimple color value (which is in hexadecimal color notation)<input type="color"">
emailValidates the input using the standard email format<input type="email">
telGives you the ability to validate telephone numbers format against a pattern<input type="tel">
searchSearches a data set (like a <datalist> HTML element)<input type="search">
rangeA slider control for picking a number in between two numbers<input type="range">
numberAccepts numbers only<input type="number">
urlAccepts URLs only<input type="url">

Cheers.

Thursday, 6 June 2013

5 HTML5 Javascript APIs to keep an eye on

http://daker.me/2013/06/5-html5-javascript-apis-to-keep-an-eye-on.html


  1. Battery Status API (very cool!)
  2. Gamepad API (insanely cool!)
  3. Device Orientation API
  4. Geolocation API
  5. Page Visibility API
See examples in the above link.

Text-align: Justify and Responsive Web Design

http://www.barrelny.com/blog/text-align-justify-and-rwd/

Display stuff in grid dynamically (by changing the width of elements, the grid automatically changes) - without floats and calculation.

Thursday, 30 May 2013

5 HTML5 Features you need to know

5 HTML5 Features you need to know
http://daker.me/2013/05/5-html5-features-you-need-to-know.html


  1. DNS Prefetching
  2. Link Prefetching
  3. Download Attribute
  4. Regular Expressions
  5. Datalist Element

Friday, 12 April 2013

Liferay custom theme settings


Adding theme settings per page level (alternative to expandos)
http://www.liferay.com/web/raymond.auge/blog/-/blogs/theme-settings-and-new-advanced-controls

Note:
Need to update the <theme>\src\main\webapp\WEB-INF\liferay-look-and-feel.xml in exact order as follow:
  1. root-path
  2. templates-path
  3. css-path
  4. images-path
  5. javascript-path
  6. virtual-path
  7. template-extension
  8. settings
  9. wap-theme
  10. roles
  11. color-scheme
  12. layout-templates

Friday, 15 March 2013

High Level Home Media solution

TV with DTS support
|
HTPC running XBMC - Raspberry Pi Model B (with raspbmc)
|
NAS (media storage) - HP Microserver N40L


Question:
Where should I run Sickbeard / Coach Potato / Headphones? And usenet download client?

- on laptop with NAS mounted?
- on the NAS?

Here is a guide for a complete setup:
http://lifehacker.com/how-to-wire-your-house-with-cat5-or-cat6-ethernet-cable-480020760

Wednesday, 30 January 2013

Saturday, 26 January 2013

Andriod - Gingerbread 2.3 root access

While I've briefly covered how to gain root access from my previous post, this new post serves as an alternative with additional steps on setting up ADB. If you have already set up, go straight to the last step.

1) Installing Android SDK

a - To install android SDK, you will first need the JAVA Development Kit(JDK), download it and install it in your PC, if its already installed, move to next step.

b - After installing JDK, download Android SDK from here: http://developer.android.com/sdk/index.html. Install it. It is recommended to install it in root directory. My path looks like this:- C:\ android-sdk-windows.



2) Downloading ADB(Android Platform Tools)

a - Now, that you have installed SDK in your PC, open SDK Manager.exe from C:\Program Files\Android or wherever you installed it. In this window, you will be asked to download the development packages to install. Select the Android Platform Tools and the Google USB Drivers Package under "Tools", if you don't have your device's drivers installed in your PC.

b - Now click on "Install Packages". After the download completes, it will ask you to restart ADB, do so. Now your window should look somewhat as below.




3) Setting Path Variable

For an easy access to the ADB and other Android SDK tools using command lines, we need to set their path to the path environment variable. To do so, follow the steps below.
NOTE: This method is only for windows users.

a - Right click on the my computer and click on "properties". In this window, on the left panel, select "Advanced System Settings", and in that click "Environment variables". The following window will appear:



b - In this window, add a new System variable. click "New...". Create the following:
Name: <android_sdk>
Value: <C:\Program Files\Android\android-sdk> or wherever you installed it

Name: <JAVA_HOME >
Value: < C:\Program Files\Java\jdk1.7.0_07> or wherever you installed the JDK.


c - Find "Path" in the system variables and click on "Edit". Be careful, don't delete the existing entry. Add this path at the end of the existing entry:-

;%JAVA_HOME%\bin;%android_sdk%\tools;%android_sdk%platform-tools


Click on OK and close the window and restart your PC.

Now, we are done setting up Android SDK and ADB, and here starts the method for rooting.



4) Rooting Devices With Android 2.3 Gingerbread

a - First of all connect your device to your PC. Be sure that USB Debugging is enabled in your device(Menu>Settings>Applications>Development>USB Debugging).

b - Download the latest version of SuperOneClick by ShortfuseCL 

c - As we have set the path variables for ADB, we can now access it directly through command prompt [start>search>cmd]. Open command Prompt and type the following commands: "adb devices". You will get the ID of your connected device. Now, Type in "adb shell". The $ sign will appear. Now, copy the command below in your window and hit enter:-

echo 1 > /data/local/lge_adb.conf


Now your window should appear like this:



Note that I have got the "#" sign as my device is already rooted instead of "$", so don't worry.

d - Now open SuperOneClick, and select exploit as "zergRush". This is the new exploit added in SuperOneClick, which, for me, worked for rooting my device. Click on "Root" and wait for the process to complete. During the process, you may be asked to install Busybox if its not already installed, accept it if it's asked.
NOTE: Rooting process may take long time. For me, it took 8-10 minutes. So don't interrupt it in between, Especially on step 5.

                           
You're done!!!  Congrats!!! Enjoy your Root!!!


Here's how it looked during root process in my device:-



And Here's how it Looked when my device was Succesfully Rooted:-








Thursday, 24 January 2013

Nexus One - root & increase internal memory

My Nexus One is having low internal storage space issue again, despite moving all possible apps to SD.

This time I have decided to bite the bullet and root my precious phone.

Normally, you will have to unlock the bootloader to gain root access, this will imply that you void your warranty. But since I have my N1 for more than 2 years now, warranty is out of the question.

My main concern is more about security - Leaving bootloader unlock is a major security issue.

So I dig through the Internet and I found some exploits to change a few binaries in some file that will provide you root. <-- in layman terms

Anyway, there are some scripts created for gaining root access with those exploits, and the one I use was this:
DooMLoRD_v4_ROOT-zergRush-busybox-su

And here is a guide that I followed a bit for creating more internal memory:
Low internal memory problems on Nexus One

In a nutshell, this is what I did:

1)
- Manual Backup SD
- Take screenshots of my launcher
- Use "App List Backup" to create a list of currently installed app

2)
- Download and run the DooMLoRD_v4_ROOT-zergRush-busybox-su script to gain root access
- Use a Terminal app /  adb shell and do "su" to see whether root access has been gained

3)
- Install Titanium Backup and Link2SD

4)
- Create a partition from SD card (I used Easeus Partition Master)
1GB maximum partition,
ext3 filesystem,
Primary for both existing FAT32 and the new ext3 partitions

5)
- Reboot device

6)
- Run Link2SD
- Create "boot script"
- Quick reboot (may need to reboot twice to work)

7)
- Move all existing apps from SD to phone (Internal)

8)
- Once low on memory appear, select all current Internal memory apps
- Create "Auto Link" for all apps in Internal memory (except for Play Store / Launcher / Link2SD!)

9)
- Repeat step 7 and 8 until all apps are Linked and moved to the new ext3 partition on SD

10)
- Create Backup as necessary - Titanium Backup /  Manual SD card
- Freeze unwanted apps


Enjoy the free space! ;)