How I wrote a Tamil essay using Machine language

Ever wondered how your mobile keyboard suggests you the next word you are going to type?

WhatsApp Image 2017-04-13 at 2.51.39 PM

The answer is machine learning. Your mobile learns from the previous words you have typed in and predicts the next word you are going to type.

Now assume you have a book of text. And your program has learned from it. You type in “I am” and the program knows what word is the next probable one.

Taking it to the next level, you can guess the next word in a book. What if you start from a sentence and ask the machine to guess every other word. The machine ends up writing its own novel. Thats what I have tried here using torch-rnn. This library helps to create a recurrent neural network which learns the text you pass to it.

In this case I used சிவகாமியின் சபதம் an awesome tamil novel. I was able to get the text from Project Madurai. So to simplify the steps.

  1. Choose a good amount of training data set for the program to study.
  2. Run the train command for the program to learn.
  3. Provide a sample and let the program generate the essay for you.

For the training data set, I tried multiple books. The first book I used was around 60 pages and the results weren’t so great. The program was not able to generate any meaningful text. I played around with increasing the size of the training data to end up with sivagaminyin sabatham.

Training the data is time and memory cumbersome. It took me few hours to train the data in a 16GB, quad core processor. That was a problem because to test each dataset I had to wait so long.

So this is the end result from the program.

ொஜயன்பதாக விசையாகக் காணவில்லை. அங்கிருந்து கிட்டு தடவை
சுகந்தனை பரவண வாய்ந்து அப்பேர் அவள் ஒருவேளை ஏதோ என் தங்கச் சிலாதாபிச் சாத்துவித்திருக்கோம். என்னிடம் வேண்டும்; ‘ஜிவகாபன குதி சுரப்பக்கிற்று. அந்த வாரியில் இருந்தது. மற்ற வடிவமாக வௌியேறினார்.
“பல்லவ வீரர்கள் கற்புக்களின் மௌனமாயிருந்தது. களவுகள் உயலிலேதான் நிழல்கூட மகன் பேச்சைக் கண்டாய், பயன்மாம், இலண்ணீர், எனக்குள்ளம் செய்து கொள்ள விருங்க ஏறின. மகள் அது என்னைப் பார்ப்பானா? என்ன அந்த ஆறையிலே ஒத்துவிட வேண்டும் ‘துரவுக்கரசர் ஒரு பாட்டினங்’ ஒருவாறு சிவகாமி, “சிவகாமி! வாலையைப் பார்க்க வேண்டியதில்லை; அந்தப் நம்பித்துவிடல் அப்படியும் வடநிலைகளை நாட்டின. கவனிழ் ஒரு நுழைந்தார்கள். “சத்ருக்னனுக்குத் தெரிந்து கொண்டுவையும், இப்படி என்பதை அடைந்து பிரதியாது. அதோ சொல்லி நின்றாள். தகவினான், சற்று உடச்சித்து வர முடியுமா

ஆனால் சொல்லியிருக்கிறது பல்லவ இராஜ்யத்தில் போன முக்கிய துவாபித்தது. தோப்பாடர்கள் மாமல்லரை முடித்த திறந்து விட்டவண்ணே! என்னை?” என்று தங்களுக்கு முன்னால் தங்கக் காடனே துடித்துக் கொண்டு வந்த பிறகு, பாவித்தார்கள். அப்பனே! அரண்மனை செய்ததும் கண்ட உணர்ச்சி கேட்டுத் தூர்த்து மயில்’ என்ற நாகநந்தி சப்தம், தமிழ் ஒருகொள்கிறார்!” என்றான் கள்ளவர் கம்புக் கலங்க வாஷலுக்கு ஏற்படலாய்ப் போவது போல் தொடங்கினார்கள். இர்ந்தாய் அன்று விதமானது பிடித்துக் கொண்டிருக்கக் கச்சிக்கு உறுதியைக் குறித்தபடியே வந்திருந்த எங்களிடம் கம்பாஷங்களை தெரிந்திருந்த போதும், கலைத்துக் கொண்டு போனதாயிற்று, அவசரமாகவில்லை. சிறிது நல்லுவேன்” என்றார் பைத்தியமாய் விட்டு இம்மாதிரி காலையிற்று.
வரவிலும் தடத்தியமாய் ஒரு நிசித்திரன் குகைப் புதல்வன் புரியும். அந்தச் கோவர் கோபம் சிவகாமி காற்றில் புலகத்துடன் தழுத்தேன் என்று உபகாரிக்க முடியவில்லை. அதற்கு நான் புலிகே அந்தபட்ட என்ன இராஜ்யத்தில் போய்ப் பெண் பேசி மலர் நீ இன்னும் தான் பேசிக் கொண்டிருந்தால், நீ! மறந்தோ தெரிந்து கொண்டிருப்பது போர் மின்னல் மண்டலங்களும் அவளுக்கு என்ன வேலை செய்தி அறைவிலும் அச்சமயம் குதிரைத்தான். ஆம்! இந்தப் பேச காலமும் சிவகாமி தடைப்பட்ட மன்னிப்பில் வந்தால் தன்னைச் சிலாசாஙி, சக்கரவர்த்தி என் தமதி சொன்னார்… இந்தப் பெரும் நினைத்து இப்போது ஏகாம்பரம் பிடித்து நின்றார்கள். அந்தக் காட்டின்தான், காஞ்சிக்கும

Advertisements

My few pennies towards Open source

Over the past few years, I have made minor bug fixes and feature additions to some open source projects. Let me note down all those projects here.

  • angular-ellipsis
    • We used angular ellipsis in one of our projects. This utility provides a nice simple way to add ellipsis in text after n lines which is not possible through native CSS. When our app went through pen testing, we realised testing failed because of this library. The library didn’t HTML escape text. So time for a PR to the component.
  • officegen
    • This node tool is used to generate microsoft office documents. This doesn’t support all the features yet. We needed to add borders to the table in the word file. So I ended up adding that feature to the library.
  • cordova-plugin-apprate
    • Was working on a side project. A hybrid mobile app, I wanted the user to rate the app in play store. The plugin din’t support tamil, so added tamil translations for the plugin.
  • AndroidFileBrowser
    • This plugin allows to bring a file chooser kind of popup in a mobile app. I had added an option where you provide the file type to the plugin and it hides other file types from the view.
  • Kadhambam
    • An android mobile game, added option to install in sd card.
  • Contributed to few of friends projects generator-boomiconategenerator-smacssCSS-Hacks,
  • Improved documentation for quite a lot of projects including angular, brunch, generator-gulp-angular, node-schedule, essential-js-design-patterns, gitignore.io, rpush,

HTML list with Tamil numbers

Its possible to use pure css to get HTML ordered lists in Tamil.

ol {
    list-style-type: -moz-tamil;
    list-style-type: tamil;
}

You can use ol html tag and list-style-type css property to make list with Tamil numbers. Works on Mozilla Firefox only as of now. Chrome supports other regional Indian languages, hope Tamil is also supported soon.

A Cool Join Us Page

Few days back, I was reading the book ‘Scope and Closures‘. I wanted to try an example in the page. I am used to running JS in Chrome developer console. My Chrome had Pinterest opened in it. When I opened the developer console, I found this message

♥ web? –> joinUs()

I got the clue, and ran joinUs() in the console. It redirected me to their careers page. That was an interesting way to attract developers to your startup.

Hide Android App Title Bar

To hide the title bar of the android app, add this code snippet to the onCreate method of the Activity before setting the content view.

requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
  WindowManager.LayoutParams.FLAG_FULLSCREEN);
Enhanced by Zemanta

Interview Questions

These are a list of few interview questions I was asked during different occasions.
  1. What is the difference between interface and abstract class?
  2. How to create a Java class which can have only one object?
  3. Is it possible to access the cookie of any other domain?
  4. Is there any restriction in number of connections from a single web page?
  5. What is a kernel?
  6. What are thread-safe methods?
  7. What is deadlock and when does one arrive?
  8. Explain Pigeon hole principal.
  9. Given n integers of size 8-bits, write a program to find the minimum difference between them.
  10. Given a binary tree with values in its nodes, write a program to sum the values of nodes within height k.
  11. How to use grep command to search files which contains the string ‘cat’ in its file name?
  12. What is the purpose of explain command in MySql?
  13. Is it possible to start a new Activity using Intents during start-up?
  14. What is the service used to load other services during booting of the Android device?
  15. What is the algorithm behind Java’s GC?
  16. Why is HTTP stateless?
  17. How do you implement chaining of methods as in jQuery?

Using SSH from Android

SSH is a protocol used to run commands securely in a remote machine. In my dissertation I needed to invoke latex commands in a remote machine the user mentions from an Android app. I explain the steps below to connect to a remote machine through SSH from an Android app. We will be using SSHJ API to do this. SSHJ is an open source Java implementation of the SSH protocol.

The steps involved in using the SSH protocol are as follows

  1. Include the library files in the build path.
    • Download the latest version of the SSHJ library from https://github.com/shikhar/sshj/downloads
    • Extract the zip file and copy the “sshj-0.8.1.jar” into the libs directory of your android project.
    • Include the dependencies of the SSHJ library also in the build path.
      • SLF4J – logging library. (slf4j-api-1.6.99.jar, slf4j-simple-1.6.99.jar)
      • Bounty Castle – Security library. (bcpkix-jdk15on-147.jar, bcprov-jdk15on-147.jar)
      • JZlib – Compression library. ()
    • Include the above mentioned jar files also into the lib folder of the Android project.
  2. To use username and password authentication use a NullHostKeyVerifier like the below one.
import java.security.PublicKey;

import net.schmizz.sshj.transport.verification.HostKeyVerifier;

public class NullHostKeyVerifier implements HostKeyVerifier {

/*
* This method is used to bypass HostKeyVerification.
* It returns true for whatever the input is.
*
*/
@Override
public boolean verify(String arg0, int arg1, PublicKey arg2) {
return true;
}
}
  1. Then use the below code to connect to a remote machine and to execute a command in a remote machine and to get the output of the command in the remote machine.
// creates new SSH client
final SSHClient ssh = new SSHClient(new AndroidConfig());
Command cmd = null;

// Adds a nullHostKeyVerifier
ssh.addHostKeyVerifier(new NullHostKeyVerifier());

// default port number
int pn = 22;

// connect to the machine
try {
ssh.connect(ipaddress, pn);
} catch (IOException e) {
Log.e(TAG, e.getMessage(), e);
}

// Authenticate with the password entered
ssh.authPassword(username, password);

// start a new session
final Session session = ssh.startSession();

// runs the commands in the remote machine
cmd = session.exec("ls");

// reads the output of the command
result = IOUtils.readFully(cmd.getInputStream()).toString();

I have excluded the try catch from the code.
Note: Line number 2 is the difference in using the code from a Java application and from the Android application.

Enhanced by Zemanta