Posts

    Wednesday, 21 January 2015

    WhatsApp Web desktop client for mac


    Whatsapp Messenger finally enabled users to use it from desktop. Unfortunately it is not a desktop client and you have to open the browser all the time to open it. Safari lovers have to open Google Chrome just to open WhatsApp! So I created an unofficial desktop app for mac using which you can get a standalone desktop experience while using it.


    Installing

    Firstly I am assuming that you have installed chrome browser. This will be a wrapper application around Google Chrome. Download the zip file. Extract the zip and simply double click on Whatsapp.app to open it! You can also move it to Applications folder to access it from anywhere. This is how it looks.

    Download WhatsApp for Mac



    How it works

    If you want to make the app yourself, Simply execute the following shell script!


    Now simply open the app!

    Saturday, 17 January 2015

    How to use youtube-dl on android

    There are hundreds of apps on Google Play which claim to download youtube videos. However most of them are either fake or not functional. Youtube recently added a feature using which it is possible to download youtube videos. But it stores it only for two days.
    We all know that youtube-dl provides us a 100% effective way to download videos from youtube. In this post I will show you how to do this:

    Step1

    Install python. See this Installing python on Android.

    Step2

    Download and transfer youtube-dl to your phone (you can do this directly on your phone if you don't have adb)


    Then open terminal on your android device and do this:


    Now you can easily download youtube videos using youtube-dl from terminal!!


    Monday, 12 January 2015

    How to use TP-LINK router to boost your network

    Do you have a spare router which you are not using? It is possible to use it to boost the network coverage of your existing WiFi by using it as a repeater! In this post I will show you how to use T-LINK WR740N router as a repeater to boost your network.

    Step1

    Connect your computer to router using a LAN cable. Open your route's admin page. It is either http://tplinklogin.net or 192.168.1.1. Then login with your credentials (default details are given at the back of your router).

    Step2 

    Now you will be shown the admin page of your router. Go to Wireless -> Wireless Settings. Check Enable WDS Bridging.


    Step 3

    Now enter the name(SSID) of the network of the main router (the one you want to boost). Then click on Survey button.


    Step 4

    Now click on the connect link corresponding to your main router.



    Step 5

    Now select the appropriate Key type, password and other security details of the main router. Note that Key type is usually WPA-PSK/WPA2-PSK and the options WEP Index and Auth type are not required.  Then click Save.



    Step 6

    Now the following text appears:

    The change of wireless config will not take effect until the Router reboots, please click here to reboot.

    Click on click here to reboot

    Step 7

    Now, similar to the way you logged in to the secondary router, login to the main router's admin page and disable DHCP and restart it.  You are good to go!

    Saturday, 3 January 2015

    Installing python on Android 5.0

    Executables with PIE (Position Independent Execution) have been supported since Android 4.1. It is a security feature involving address space layout randomization(ASLR) to prevent attacks such as buffer overflow. In Android's latest release Lollipop, PIE has been made a requirement. Similar to the way the shift from Dalvik to ART has crippled so many applications, this move has caused a lot of problems to developers.  Even some of the binaries shipped with android itself were broken because of this.

    I will be showing you how to install RunPythonFromShell. If you have already installed it and want to see how to bypass PIE go to the section Bypassing PIE.

    Step 1

    Download apk

    Install the apk and open it. Click the install button in the app to install all the modules and binaries.

    Step 2 

    If you don't want to run python from everywhere, skip this step. 
    • Open adb shell
    • Download the following gist. Move it to /system/bin and change set executable permission.
    • If you are running an android version older than lollipop then you are done! Lollipop users have to bypass PIE.

    Bypassing PIE

    Due to the PIE restrictions you get the following error when you run python:
              
             error: only position independent executables (PIE) are supported.

     The idea here is to replace the default linker with a custom linker (You need a rooted device. duh!).  First mount /system in write mode and backup the default linker.

    mount -o remount,rw /system /system
    mv /system/bin/linker /system/bin/linker.old

    Download custom linker

    Move custom linker to /system/bin. Then set proper permissions.

    chmod 0755 /system/bin/linker

    You can also use ES File Explorer or Root Explorer to do this. Permission of the file should look like this:

    You are done! You can run python from terminal!


    I will be writing a post on what all cool things you can do with python on android. Stay tuned! 

    Update

    Some of the users with 64 bit architecture were facing some linking problem. Here is what you have to do.
    Create a new lib64 directory and move the library file to that folder.

    mkdir /data/data/com.googlecode.pythonforandroid/files/python/lib64
    cp /usr/lib64/libcrypto.so   /data/data/com.googlecode.pythonforandroid/files/python/lib64

    Then you have to add this to the library path. To do that you have to update the variable LD_LIBRARY_PATH in the "/system/bin/python" script above.


    Thanks Yan Bellavance for pointing it out!

    Wednesday, 24 December 2014

    Add Exchange account to Gmail 5.0 on older android versions

    I installed unofficial CM 12 with Android 5.0.2 today. Earlier I was using stock Android Lollipop and it had the option of adding Microsoft Exchange account. Unfortunately CM12 didn't seem to have it.

    After doing some research I figured out that only devices running stock Android 5.0+ are capable of having exchange accounts. And CM12 although runs on Android 5.0, doesn't have this feature. On doing further research I found out that Android 5.0+ have something called Exchange services which enables gmail 5.0 to handle exchange accounts.

    Download Exchange Services


    Then, install and restart your device. Walah! Gmail will be able to add exchange accounts!

    Note: This method is not just for CM

    Friday, 5 December 2014

    How I fixed bootloop on my Nexus without loosing data

    I was playing around with framework-res.apk and SystemUI.apk to get Ambient Display on my Nexus 4. When I restarted my phone, it seemed to have stuck in a bootloop. I knew that factory reset might've worked. But I didn't want to lose any data.

    Fortunately adb was working. When I did adb logcat , it was logging an error saying:
     /system/framework/framework-res.apk is neither a file nor a folder (type=0)

    I realized that there was some problem with permissions of that file. I used adb shell and changed the permission of framework-res.apk and SystemUI.apk to 0644. But this was of no use. However I came to know that if I could somehow reset /system partition the problem would be solved.


    • So I downloaded the factory image of my phone. For nexus devices it is available here. 
    • Extract the contents of the image-xxxx-xxxx.zip to get the file system.img.
    • Then ran the following:
      adb reboot bootloader
      fastboot flash system system.img
    • This will wipe the /system partition and reset it without touching any other partitions. Hence you will not lose any data.
    • Restart. It took a while to start the phone completely. But it solved the problem!
    This is how I was able to reset my framework-res.apk and SystemUI.apk!


    Monday, 24 November 2014

    Type checking in javascript has never been easier

    I love languages which aren't strongly typed. It makes software development process very fast and very easy as we need not write huge, complex, unreadable code like in our typed languages. However this can lead to developer's worst nightmare: Runtime errors! In languages such as javascript it is not easy to check for type mismatches while in development process. Hence flow was invented!

    Flow is one of Facebook's open source projects. It allows developers to check for programming errors in javascript code with very less effort. This is a sample code available on their site:

    function foo(x) {
      return x * 10;
    }
    foo('Hello, world!');

    Note that a string is passed into the function foo and an arithmetic operation is performed on that string inside it. When flow is run on this code:

    01_HelloWorld/hello.js:7:5,17: string
    This type is incompatible with
      01_HelloWorld/hello.js:4:10,13: number

    It points out that the string is incompatible with number. Consider a much much complex code. An error like this can simply be unnoticed until a runtime error is raised.

    Source: https://github.com/facebook/flow
    Installation: http://flowtype.org/docs/getting-started.html
    Examples: http://flowtype.org/docs/five-simple-examples.html

    Sunday, 23 November 2014

    Navigation Bar suddenly disappeared on Nexus

    This can happen on any phone with soft navigation keys.

    Yesterday, I was tweaking my Nexus 4 after updating to Lollipop. When I restarted my phone I found that the Navigation Bar had disappeared! Even to switch from one app to another I had to restart my phone! Then I found a way to fix it.

    Install Root explorer or ES Explorer. Open it and go to /system and mount it in R/W.

    Then open the file build.prop in the current folder using text editor.

    Then go to bottom of the file and change the value of "qemu.hw.mainkeys" from 1 to 0
    Reboot and you are done!


    Thursday, 30 October 2014

    How to mount NTFS External Disk in write mode in OS X Yosemite

    This works for Mavericks also :)

    It is not possible by default to mount a NTFS External Drive in write mode on OS X since Mavericks. There is a complex way to do this. In order to make it simple for you, I wrote a script which does it.

    First you need to install Xcode and Homebrew. Google how to install them :P

    Download this script


    Then do this:
    chmod +x ntfs_write_mode_enabler
    ./ntfs_write_mode_enabler

    Now connect the drive. In Mavericks you will get a warning “Kernel extension is not from an identified developer”. You are good to go if you click OK. However, if you are using Yosemite, you have to restart your system to load the kernel extension. For more on that read this.

    In Yosemite you might get the following error if you are updating old osxfuse. As we have enabled developer mode which allows you to run unsigned kext, it will not be a problem.

    osxfuse: OS X Mavericks or older is required for this package.

    OS X Yosemite introduced a strict unsigned kext ban which breaks this package.You should remove this package from your system and attempt to find upstream binaries to use instead.

    Uninstalling


    Execute the following command to replace the modified NTFS mounter with the original one

    sudo mv /sbin/mount_ntfs.old /sbin/mount_ntfs

    Loading unsigned kernel extensions on Yosemite

    Since Mavericks, OS X started checking signatures of kernel extensions. However unlike in Mavericks, loading unsigned code to kernel is disabled in Yosemite (in Mavericks only a warning, “Kernel extension is not from an identified developer” was displayed). It is required to sign kernel extensions using the Developer ID obtained after enrolling in Mac Developer program. With Yosemite still in beta, it is hard to find signed kernel extensions other than the ones officially released by Apple. 

    You will get this error when you try to load unsigned kext:

    Diagnostics for [unsigned kext]:
    Code Signing Failure: not code signed
    ERROR: invalid signature for [unsigned kext], will not load

    This being said, it is possible to sign all unsigned kext by doing this:

    sudo nvram boot-args="kext-dev-mode=1"
    Restart to get all the kext running!