Sunday, February 17, 2013

Event driven, asynchronous callbacks and Node.js

Node's approach of code execution isn't unique, but back end execution model is different from environments like PHP or Java.

Node.js core provides methods to reading content of a file in the file-system. fs module provides variety of file system methods.The easiest way to read the entire contents of a file is as follows.
fs = require('fs');
fs.readFile('/home/udara/docs/users.txt');
console.log("Hello Users !!");
Let's assume that the time taken to read users.txt is really long, JavaScript interpreter of Node.js first has to complete reading the users.txt file, and then only it execute the console.log() function. Same as in PHP if this code would be part of a webpage, the user have to wait until it read whole file at once and load the page.

Unlike PHP, Node.js there is only one single process. If there is something happen like above example this will effect the whole process and each and every user would be affected. But in PHP only user who request that web page feel slow page load, but other users requesting other pages would not be affected. 

So where is asynchronous of Node.js ????

fs = require('fs');
fs.readFile('/home/udara/docs/users.txt', function (error,data) {
console.log(data);
});
console.log("Hello Users !!");
Here, without expecting fs.readFile() to directly return a file content to us we pass second parameter an anonymous function.Now Node.js can handle fileread request asynchronously.Only when fileread is done then it will execute anonymous function that was passed to fs.readFile().

Without waiting for the fileread output system will out put Hello Users !! to the console.

 

Monday, February 11, 2013

How to move apps from phone memory to SD card in android

You may find many apps on google play which can use to move apps from phone memory to SD card, but for this to work developers need to enable this option in their apps.Following method is valuable if you do have a phone with small internal memory plus loads of apps which you cant move to SD card using apps like APP 2 SD.

  • Download latest version of Android SDK.
  • Connect the phone using USB cable and enable USB debugging mode.Settings -> Applications -> Development and enable USB debugging
  • Open terminal and navigate to android SDK directory, in my instance cd /home/udara/private/android-sdk-linux/platform-tools/
  • Add that directory to path using, export PATH=$PATH:/home/udara/private/android-sdk-linux/platform-tools/
  • Now by typing adb devices command you will get something similar to,

  • Type adb shell and then run command pm setInstallLocation 2.
  • Now on your phone go to Settings->Applications->Manage Applications and you will find most of the applications are now available to move from phone memory to SD card.

I have tested this on a rooted huawei U8160 running android 2.2(froyo) using UBUNTU 12.04. 

Tuesday, February 5, 2013

browscap to JS navigator

Browscap facilitate to identify what a visitor's browser is capable of, an improved version of native php function get_browser(). You need to update browscap.ini which resides on your server periodically in order to get the correct browser capabilities.

In the recent past with rise of the JS world, you can detect HTML5, CSS3 browser capabilities with the use of JS libraries like modernizr or even with simple JS navigator.

browscap output,


JS navigator output,


Tuesday, September 11, 2012

Password Protecting with .htaccess

1. create password file with encrypted password. Save password file as .ht{something} outside web root if possible.

for example .htukrpass file contain following
username:password

2. create .htaccess file with following content


AuthUserFile {fullpath to .htukrpass file}
AuthType Basic
AuthName "our test source dir"
Require valid-user
require user {username}



Monday, July 9, 2012

connect to mailbox with IMAP - php

install
  • php-imap
  • php-cli
modules in-order to work IMAP with php.

search for the  following line in your php.ini file

extension = imap.so

then search for the imap.ini file in /etc/php5/conf.d directory , if not exist create it with following line in it.

extension = imap.so


then restart apache server.

use following php sample code with your server name and user credentials to check connectivity.

XMPP chat logging with bandersnatch


add this in the modules section of ejabberd config file:
  {mod_service_log, [{loggers, ["localhost"]}]}

add this in the listeners section of ejabberd config file, you can use your own password:
  {5526, ejabberd_service, [{ip, {127, 0, 0, 1}}, {access, all},
                          {hosts, ["localhost"],
                          [{password, "secret"}]}]},

create bandersnatch database using given sql. make sure to remove TYPE=MyISAM if you are using innoDB mysql engine. and replace datatype timestamp(14) ,from timestamp all CREATE TABLE scripts.
modify bandersnatch/config.xml with the password.
  <server>
        <connectiontype>tcpip</connectiontype>
        <hostname>localhost</hostname>
        <port>5526</port>
    <secret>secret</secret>
</server>
<component>
    <name>localhost</name>
</component>

change,privacy value in site tag to 0.you need this change to set privacy level to log chat messages with sender and receiver details.
install the perl dependencies:
  sudo apt-get install libnet-jabber-perl

configure Perl interface to the SHA-1 algorithm using cpan.
  install Digest::SHA1

found bug in bandersnatch module you need to import Digest::SHA1 in order to make this work,add following line
  use Digest::SHA1  qw(sha1 sha1_hex sha1_base64);

in /usr/share/perl5/Net/Jabber/Component.pm
to start bandersnatch service
  perl bandersnatch config.xml

Sunday, February 12, 2012

PHP exec, the java process takes 100% CPU (SOLVED)

Exec is always tricky, on any language :-)

Try to:

use background execution (add & symbol at the end)
use shell_exec instead
specify the full path to java executable (may be the one available to PHP is not the one you need?)

export LD_LIBRARY_PATH="";
in the exec call: