Programming

PHP-GD: Create Image from Text

Some people want to hide their text into image for any reason. As example, to avoid spambot steal their email address, or to generate dynamic images content.

Its simply done with PHP and GD Library. See this simple function:

function imgfromstring($string){
	$font  = 5;
	//dynamic size of image. to fit your text.
	$width  = ImageFontWidth($font) * strlen($string);
	$height = ImageFontHeight($font);

	//start creating the image
	$gbr = imagecreate ($width,$height);

	//set background to white
	$bgcolor = imagecolorallocate($gbr, 255, 255, 255);
	//set color for text
	$txtcolor = imagecolorallocate ($gbr, 0, 0, 0);

	//generate the image
	imagestring($gbr, $font, 0, 0, $string, $txtcolor);
	header("Content-type: image/jpeg");
	return imagejpeg($gbr);
}

//usage:
$txt = "[email protected]";
echo imgfromstring($txt);

example output:

Another sample is using image as the background. Its useful when you need to create waterwark to protect your images.
Sample code:

function toImgWithBG($str){
	$bg = "background.jpg";
	$font = 5; //Font size

	$gbr =imagecreatefromjpeg($bg);

	//Calculate string width and height
	$pos_x  = imagesx($gbr) - (ImageFontWidth($font) * strlen($str));
	$pos_y = imagesy($gbr) - ImageFontHeight($font);

	//set text color
	$teks = imagecolorallocate($gbr, 255, 0, 0);

	//generate the image, and put on the right bottom
	imagestring($gbr, 5, $pos_x, $pos_y, $str, $teks);

	header("Content-type: image/jpeg");
	return imagejpeg($gbr);
}

//Usage:
echo toImgWithBG("copyright: http://www.akemapa.com/");

example output:

You can download source code of this example here:
download here download this file

Tech-News

Create Permanent Static Route with Two Lan Card

I want to create routing for my two Lan Card. First Lan Card (eth0) for Internet access, and second Lan Card (eth1) for my Intranet. So when i access internet, it will route to my eth0 by default. otherwise, with eth1 for intranet access.

Public (eth0):
IP: 201.102.21.201
Netmask: 255.255.255.241
Gateway: 201.102.21.1

Intranet (eth1):
IP: 10.1.10.24
Netmask: 255.255.255.0
Gateway: 10.1.10.1

Basic command for adding route on Linux:

route add [-net|-host] <IP/Net> netmask <Mask> gw <Gateway IP> dev <Int>X

And this is what we do:

route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.1.10.1 dev eth1
route add -net default netmask 0.0.0.0 gw 201.102.21.1 dev eth0

To check the route, simply type “route” with no arguments

route

The output will seen like this:

Kernel IP routing table
Destination¬ ¬ ¬ ¬ Gateway¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ Genmask¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ Flags¬ Metric Ref¬ ¬ ¬ Use Iface
201.102.21.201¬ *¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 255.255.255.241¬ ¬ ¬ ¬ U¬ ¬ ¬ ¬ 1¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 0¬ ¬ ¬ ¬ ¬ ¬ ¬ 0 eth0
10.1.10.24¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ *¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 255.255.255.0¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ U¬ ¬ ¬ ¬ ¬ 1¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 0¬ ¬ ¬ ¬ ¬ ¬ ¬ 0 eth1
link-local¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ *¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 255.255.0.0¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ U¬ ¬ ¬ 1000¬ ¬ ¬ ¬ 0¬ ¬ ¬ ¬ ¬ ¬ ¬ 0 eth0
10.0.0.0¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 10.1.10.1¬ ¬ ¬ ¬ ¬ ¬ 255.0.0.0¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ UG¬ ¬ ¬ 0¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 0¬ ¬ ¬ ¬ ¬ ¬ ¬ 0 eth1
default¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 201.102.21.1¬ ¬ ¬ 0.0.0.0¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ UG¬ ¬ ¬ 0¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ ¬ 0¬ ¬ ¬ ¬ ¬ ¬ ¬ 0 eth0

Now, to keep this route persistent, add this lines to file /etc/networking/interfaces

up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.1.10.1 dev eth1
up route add -net default netmask 0.0.0.0 gw 201.102.21.1 dev eth0

Restart networking to confirm the changes

sudo /etc/init.d/networking restart

Other method, Create a file called defaultroute in /etc/init.d and make it executable (chmod +x /etc/init.d/defaultroute).
Add the route commands there and do this:

update-rc.d defaultroute defaults 99

.

Programming

Restore Ubuntu Boot Loader

To repair your Ubuntu GRUB, you need Ubuntu LiveCD, boot from this CD, and open a terminal. Be a root, by typing “sudo su” and enter your password.

Find the partition which your Ubuntu system is installed.

# fdisk -l

On my machine, my Ubuntu partition is on /dev/sda3, so i’ll use this for example.

Create a mountpoint for this:

# mkdir /media/rootgrub
# mount /dev/sda3 /media/rootgrub

Check if your partition is the correct partition

# ls /media/rootgrub

if the output is not like this, then you have the wrong partition

bin dev home lib mnt root srv usr boot etc initrd lib64 opt sbin sys
var cdrom initrd.img media proc selinux tmp vmlinuz

unmount the partition if have the wrong one, then mount the others. To make sure you have the correct partition, run ls /media/root/boot, which should output something like this :

config-2.6.18-3-686 ¬ ¬ initrd.img-2.6.18-3-686.bak ¬ ¬ System.map-2.6.18-3-686
grub lost+found ¬ ¬ ¬ ¬ ¬ vmlinuz-2.6.18-3-686 ¬ ¬ ¬ ¬ ¬ ¬ initrd.img-2.6.18-3-686
memtest86+.bin

Now when everything is ok, install the Grub:

# sudo grub-install –root-directory=/media/rootgrub¬ /dev/sda

If you have some warning, try this:

# sudo grub-install –root-directory=/media/rootgrub¬ /dev/sda –recheck

Change /dev/sda to other partition you want to install Grub on. If all goes fine, you will see the output like this:

Installation finished. No error reported. This is the contents of the device map /boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install’.

(hd0) /dev/sda

Restart to your harddrive (not to LiveCD) and see, your GRUB should be AUTOMAGICALLY appear!

anything

fixing monitor problem on zoneminder

After installing Zoneminder, some people (including me) reported that they had a problem with monitor. A black screen, or even no picture / video at all. From logs, it’s usually said: “Can’t get shared memory id…” or “Shared memory invalid…”, something like that. Especially when we’re using a webcam.
After googling, i found some solutions for this. First, increase the shared memory, and second, edit zmdc.pl file.

1. Increase shared memory maximum

Open the file “/etc/sysctl.conf”, and paste this 2 line at the bottom of the file.

# Increase the maximum shared memory
kernel.shmmax = 167772160

save, and restart your machine.
If still no luck, continue to the next step:

2. Edit zmdc.pl

We need to edit zoneminder source to point the video driver.
Open file ” /usr/bin/zmdc.pl” (the location on some machine, might be different)
and add this code, right before the “my @daemons =….” (about line 64).

$ENV{LD_PRELOAD} = ‘/usr/lib/libv4l/v4l1compat.so’;

.

*UPDATE!* added by ldp

Also work:
$ENV{LD_PRELOAD} = ‘/usr/lib/libv4l/v4l2convert.so’;

check your /usr/lib/libv4l or /usr/lib64/libv4l directory for other files to preload

save, and restart your zoneminder.

WALLA!!!
it works like charm…

Programming

Reset Mysql Root Password

Terrible, just setup a new server, then i forgot root password for mysql database. So i need to reset the root password.

This is the way i do:
1. Login to our server machine as root (system administrator). Yes! we must have root access to our machine.

2. Shutdown mysql server (if already running). Make sure no other mysql daemon running.

$ /etc/init.d/mysql stop

3. Create a text file and place the following statements in it. Replace the password with the password that you want to use.

UPDATE mysql.user SET Password=PASSWORD(‘YourNewPasswordHere’) WHERE User=’root’;
FLUSH PRIVILEGES;

The UPDATE and FLUSH statements each must be written on a single line. And make sure we have statement “where user=’root’“, to make sure, only our root password is updated.

4. Save the text file into our home directory, or somewhere else. Example, i saved this as: “/home/vandai/mysql-reset

5. Start the MySQL server with the special –init-file option:

mysqld_safe –init-file=/home/vandai/mysql-reset &

This will execute the contents of the file named by the –init-file option at startup, changing each root account password.

6. Don’t forget to delete mysql-reset file immediately!!

Now we will be able to login to MySql database as root with our new password.

Never forget the password again!!

Programming

PHP-GD: Resize Transparent Image PNG & GIF

By default, you will get black background if you resize a transparent image. Play Daisy slots to see how good the quality of the background images are. To fix it, you need set alpha channel imagecolorallocatealpha to 127.
With imagecolorallocatealpha, it will allocate a color for an image.

Usage:
int imagecolorallocatealpha ( resource image, int red, int green, int blue, int alpha)

From PHP manual:
imagecolorallocatealpha() behaves identically to imagecolorallocate() with the addition of the transparency parameter alpha which may have a value between 0 and 127. 0 indicates completely opaque while 127 indicates completely transparent.
Returns FALSE if the allocation failed.

Before using it, you must set to false the blending mode for an image and set true the flag to save full alpha channel information.

Example:

<? $newImg = imagecreatetruecolor($nWidth, $nHeight); imagealphablending($newImg, false); imagesavealpha($newImg,true); $transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127); imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent); imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, $imgInfo[0], $imgInfo[1]); ?>
Tech-News

Google has change the Google Search Favicon

Baru sadar, waktu lagi nyari sesuatu di Google, ada yang beda pada tampilan halaman Google.
Favicon Google berubah. favicon itu yang ada disebelah alamat URL pada address bar, dan juga biasanya ada di tab browser.

Biasanya selama ini favicon Google adalah huruf G dengan uppercase.
Sekarang jadi huruf g dengan lowercase.

Google Favicon

Tapi ternyata tidak semua mirror Google yang berubah. Pada beberapa negara masih menggunakan favicon yang biasa. Setidaknya pada mirror Google di Indonesia, Prancis, Italy, Belanda, Rumania, dan Malaysia faviconnya berubah.
Bahkan di server utama nya http://www.google.com/ masih menggunakan favicon yang standar kebesaran Google.

Yah, biar tidak bosan kali…