Search This Blog

Saturday, October 19, 2013

Ubuntu 12.04 - create a simple daemon (service) for your application

Creating a daemon in Linux is as simple as creating a BASH/SH script in /etc/init.d. BASH is NOT part of this short tutorial so I won't go into the details of the script itself.

To create a daemon create a script in /etc/init.d. To simplify the creation you can copy the skeleton script in /etc/init.d/skeleton. Your script need to handle the following daemon commands:
start
stop
restart/reload
force-reload
status

cp /etc/init.d/skeleton /etc/init.d/daemonName
sudo chmod 775 /etc/init.d/daemonName

To enable the daemon to start at boot:
update-rc.d daemonName defaults 97 03

http://manpages.ubuntu.com/manpages/hardy/man8/update-rc.d.8.html


To disable the daemon from starting at boot:

update-rc.d -f daemonName remove

Tuesday, October 15, 2013

Git - tips for console users

Get the tree-like view of commits in terminal

git log --graph --oneline --all

Get current branch name

git branch

Pull and rebase local changes

git pull --rebase



Revert all local changes in a GIT managed project

git reset --hard HEAD

or

git checkout .
git reset
git revert ...

and

git clean -df & git checkout -- .
(and press enter)



Check whether there are any uncommited branches

git log --branches --not --remotes

Extract three topmost commits from the current branch 

git format-patch -3


Check if there are any conflicts before applying the patch

git apply --check patch_name.patch

Apply a patch file to the local work-space

git apply patch_name.patch




Archlinux setting up VPN - couldn't open the /dev/ppp device: No such device or address

While configuring VPN on archlinux I followed the guide on:
https://wiki.archlinux.org/index.php/PPTP_VPN_client_setup_with_pptpclient


archlinux couldn't open the /dev/ppp device: No such device or address


SOLUTION:
add a new file:

nano /etc/modprobe.d/modules.conf

with the line:
alias char-major-108 ppp_generic


Linux - simple rar archive operations - checksum and rar archive test


1. Check checksums of files listed in ’files.sfv’: 
cksfv -f files.sfv 

2. Create checksums for a bunch of files: 
cksfv *.rar > files.sfv

3. Test rar achive
unrar t archive_name.rar








Sunday, October 13, 2013

Spring REST - access HTTP header data on the server side

This is an example of a simple REST call on the server side;

The call looks like the following:

[GET] http://localhost:8080/rest/user/getUser/userNameABC
Accept: application/json
Authorization: 123456


@RequestMapping(value="/getUser/{login}", method = RequestMethod.GET, produces="application/json", headers="Accept=application/json")
@ResponseBody
public User getUser(
   @RequestHeader(value = "Authorization", required = true) String authorization,
   @PathVariable String login) {
   
     if (login.isEmpty())
        return null;

     [....]
}

The @RequestHeader accesses for us data in the header. We can also get the Accept parameter by adding:

@RequestHeader(value = "Accept") String acceptString


Friday, October 11, 2013

Android - Find main activity name of the running application

Run as Android superuser:
adb shell dumpsys activity

This gives you the dump of all running activities. I wanted to find the activity name of the sftp server that was running in the background.

The line of interest was:

Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10104000 pkg=com.icecoldapps.httpsftpsserver cmp=com.icecoldapps.httpsftpsserver/.viewStart bnds=[145,610][345,787] }
      Hist #2: ActivityRecord{42d5cb18 com.icecoldapps.httpsftpsserver/.viewStart}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10104000 pkg=com.icecoldapps.httpsftpsserver cmp=com.icecoldapps.httpsftpsserver/.viewStart bnds=[145,610][345,787] }
        ProcessRecord{42c29950 15592:com.icecoldapps.httpsftpsserver/u0a6} 

So the main activity name is:
.viewStart


I was able to remotely start the application by firing up the command:
adb shell su -c "am start -n "com.icecoldapps.httpsftpsserver/.viewStart""
( I needed superuser priviledges)

To start this Android application as a regular user enter:
adb shell am start -n "com.icecoldapps.httpsftpsserver/.viewStart"

To kill the application:
adb shell am force-stop com.icecoldapps.httpsftpsserver

To uninstall the application:
adb shell pm uninstall com.icecoldapps.httpsftpsserver

Thursday, October 10, 2013

IntelliJ Android application - Android SDK is not specified

Are you getting a compile error:
Android Source Generator: [] Android SDK is not specified
?

These screens show how to properly configure IntelliJ to compile an Android application.





Monday, October 7, 2013

Android adb pull from specific device; adb pull error: more than one device and emulator

When your computer is connected to multiple devices which communicate via IP based adb the command:

adb pull /mnt/local/your_app/config/config.xml

will no longer work giving an error:

error: more than one device and emulator

You need to specify which device you want to download from:

adb -s 10.0.0.1:5555 pull /mnt/local/your_app/config/config.xml

or

adb -s 0123456789ABCDEF pull /mnt/local/your_app/config/config.xml


Friday, October 4, 2013

Ubuntu install cyanogenmod on Galaxy S3 I9300 - running heimdall on Ubuntu 10.04


Tutorial on cyanogenmod wiki for flashing CWM on the Galaxy S3 is here.

This is the easy guide to flash Cyanogenmod 10.1.3 on I9300. The machine is Ubuntu 10.04 x64

Download the required file.
run the copyToi386Lib.sh script before running heimdall!
Ubuntu 10.04 lacks libusb-1.0.so.0.1.0 lib!


$./heimdall flash --RECOVERY recovery-clockwork-touch-6.0.3.1-i9300.img --no-reboot

Uploading RECOVERY
100%
RECOVERY upload successful

Ending session...
Releasing device interface...
Re-attaching kernel driver...

Warning:
The device will hang on completion! You need now to manually reboot the phone into ClockworkMod Recovery mode by holding Home & Volume Up & Power.


After that the i9300 will enter the new TOUCH ClockworkmodRecovery.

Do the following steps:
- wipe DALVIK CACHE
- wipe CACHE&User data
- install update.zip from external SD card

  • cyanogenmod 10.1
  • gapps


Solutions for the following problems:

1. Heimdall does NOT WORK ON UBUNTU!

Run the 32-bit of heimdall on Ubuntu 12.04 ! The 64-bit version currently does NOT work!
The 32-bit version needs  libusb-1.0.so.0.1.0 lib. Download the required file.

2. Problem with detecting the device:

Detecting device...
ERROR: Failed to access device. libusb error: -3

TRY:
sudo chmod -R 777 /dev/bus/usb/001



The problem with libusb1.0:    libusb-1.0.so.0 => not found
- download the libraries from the package and copy them to:
/lib/i386-linux-gnu/

Git clone - use different keys for different repositories / user another private key

To clone git repository with a different private key than your /home/user/.ssh/id_rsa


  1. Create a script called: git_ssh_wrapper.sh
  2. Give the script executable permissions:

    chmod 777 git_ssh_wrapper.sh
  3. The contents of the script should look like the following:

    #!/bin/bash
    ssh -i /home/user/RSA_Keys/id_rsa $1 $2

  4. Export variable GIT_SSH:
    export GIT_SSH=~/git_ssh_wrapper.sh
  5. Clone the repository as usual:

    git clone user@server.com/repository.git

Tuesday, October 1, 2013

Draw a dotted line with GIMP

To draw a dotted line with GIMP:
  • Select an area with the Rectangle Tool ('R' key), when necessary change the "Rounded corners" option to an appropriate radius (usually from 10px to 20px)
  • RMB (Right mouse button): Select -> "To Path"   to convert your selection to Path
  • In the layers window choose the "Paths tab" and set the newly created path to "visible"

  • Choose the Path tool ('B' key) and select the path that you created earlier
  • Click "Stroke Path" and choose appropriate line styles