ติดตั้ง Android NDK + Hello World [Ubuntu]

Monday, December 15, 2014 12:15 AM 0 Comments , ,

1. ดาวโหลด NDK ตัวล่าสุดได้ที่ https://developer.android.com/tools/sdk/ndk/index.html

2. แตกไฟล์

chmod +x android-ndk-r10d-linux-x86_64.bin
./android-ndk-r10d-linux-x86_64.bin

3. สร้าง toolchain standalone โดยไปที่ folder android-ndk-r10d/build/tools

./make-standalone-toolchain.sh --arch=arm --ndk-dir=/home/null//android-ndk-r10d --install-dir=/home/null/android-toolchain --platform=android-8  --system=linux-x86_64 --verbose

4. สร้างไฟล์ hello.c ที่ /tmp/hello.c

#include <stdio.h>
int main() {
        printf("Hello Anroid NDK\n");
}

5. ไปที่ standalone toolchain ที่สร้างขึ้นมา

cd ~/android-toolchain/bin/

6. compile hello.c ด้วย arm-linux-androideabi-gcc

./arm-linux-androideabi-gcc /tmp/hello.c -o /tmp/hello.bin

7. อัพไฟล์ที่ compile สำเร็จ hello.bin ไปที่ /data/ ของ Android (ต้อง root เครื่อง)

adb push /tmp/hello.bin /data/hello.bin

8. ทดลองรัน


0 comments:

PHP-FIG คืออะไร

Saturday, November 29, 2014 4:41 PM 0 Comments , , ,

สำหรับบทความนี้เป็นการแปลมาจากเวป http://www.php-fig.org/ แบบคร่าวๆ และมั่วๆนะครับ ผิดพลาดประการใดก็ต้องขออภัยไว้ก่อนนะครับ



PHP-FIG นั้นย่อมาจาก PHP Framework Interop Group ซึ่งถ้าแปลเป็นภาษาไทยก็หมายถึง กลุ่มของ PHP Framework ที่ทำงานร่วมกัน โดยมี PHP Framework ดังๆเข้าร่วมกันเต็ม ซึ่งแนวคิดของกลุ่มจะเป็นการนำเสนอแนวทางที่จะทำงานร่วมกัน และทางกลุ่มก็ได้กำหนด Code Standard ขึ้นมาเรียกว่า PSR (PHP Standard Recommendation) โดยมี PSR ทั้งหมดดังนี้

PSR-0 Autoloading Standard (เลิกใช้เมื่อวันที่ 2014-10-21 โดยไปใช้ PSR-4 แทน)

PSR-1 Basic Coding Standard

PSR-2 Coding Style Guide

PSR-3 Logger Interface

PSR-4 Improved Autoloading


โดยผมจะไม่พูดถึง PSR-0 แล้วนะครับ มาเริ่มกันที่ PSR-1 เลยล่ะกัน


1. PSR-1 Basic Coding Standard

1.1 ต้องใช้ tag <?php หรือ <?= เท่านั้น

1.2 ไฟล์ต้องใช้ encoding UTF-8 without BOM

1.3 ชื่อของ Class, function, constant ต้องสื่อให้ถูกต้องกับสิ่งที่ทำ และต้องไม่มี  code ที่ก่อให้เกิด side effect ได้

1.4 Namespaces และ Class ต้องปฎิบัติตาม PSR-4

1.5 Class ต้องประกาศด้วย StudlyCaps

1.6 Class constant ต้องประกาศเป็นตัวอักษรใหญ่เท่านั้น

1.7 ชื่อแต่ละ Method ต้องประกาศด้วย camelCase



2. PSR-2 Coding Style Guide

2.1 code ต้องปฎิบัติตาม PSR-1

2.2 code ต้องใช้ 4 space indent แต่ละบรรทัด ห้ามใช้ tab  เป็นอันขาด

2.3 ไม่มีการจำกัดจำนวนบรรทัด ซึ่ง code แต่ละบรรทัดควรไม่เกิน 80 ตัวอักษร

2.4 เมื่อประกาศ namespace หรือ use ต้องเว้น 1 บรรทัด

2.5 ปีกกาเปิด { สำหรับ class ต้องอยู่บรรทัดต่อไปจากที่ประกาศชื่อ class และ ปีกกาปิด } ต้องอยู่บรรทัดถัดไปกับสิ่งที่อยู่ใน class

<?php
class KittinanHandsome
{
    //body
}
?>

2.6 ปีกกาเปิด { และ ปีกกาปิด } สำหรับ method ปฏิบัติเช่นเดียวกับข้อ 2.5 คือต้องเว้นบรรทัด

<?php
class KittinanHandsome
{
    public function getHeight()
    {
         return 180;
    }
}
?>

2.7 ประกาศ visibility (public, private, protected) ทุก property และ method ส่วน abstract และ final ต้องประกาศก่อน visibility และ static ต้องประกาศหลัง visibility

2.8 Control Structure  ทั้งหลาย (if else และ loop ต่างๆ)

2.8.1 ต้องมี 1 space ตามหลัง keyword เหล่านั้น

2.8.2 ต้องไม่มี space หลังวงเล็บเปิด

2.8.3 ต้องไม่มี space ก่อนวงเล็บปิด

2.8.4 ต้องมี 1 space ระหว่าง วงเล็บปิด กับ ปีกกาเปิด

2.8.5 code ที่อยุ่ภายใน Control Structure ต้องเว้น 1 indent (4 space)

2.8.6 ปีกกาเปิด ต้องยู่บรรทัดเดียวกับ keyword Control Structure

2.8.7 ปีกกาปิด ต้องอยู่บรรทัดใหม่ถัดจาก code ที่อยู่ภายใน Control Structure



3. PSR-3 Logger Interface

Logger Interface ประกอบไปด้วย 8 method (debug, info, notice, warning, error, critical, alert, emergency) ซึ่งเป็นไปตาม RFC 5424

ไปดูต่อได้ที่เวป php-fig เลยนะครับ ค่อนข้างเยอะ เริ่มขี้เกียจแล้ว



4. PSR-4 Autoloader

4.1 class ในที่นี่หมายถึง  class, interface, trait หรือ อะไรก็ตามที่มีโครงสร้างคล้ายแบบนี้

4.2 The fully qualified class name ต้องปฏิบัติตามฟอร์มนี้

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

4.2.1 The fully qualified class name ต้องมี top level namespace หรือที่เรียกกันว่า vendor namespace

4.2.2 The fully qualified class name อาจมี sub-namespace ตั้งแต่ 1 หรือ มากกว่านั้น

4.2.3  The fully qualified class name ต้องปิดท้ายด้วย ชื่อ class

4.2.4 underscore ไม่มีความหมายพิเศษใดๆในส่วนต่างๆของ The fully qualified class name

4.2.5 ตัวอักษรใน The fully qualified class name อาจผสมระหว่างตัวเล็กและตัวใหญ่

4.2.6 ชื่อทุก class ต้องอ้างอิง case-sensitive fashion

ข้ออื่นๆของ PSR-4 Autoloader เริ่มแปลไม่ค่อยจะถูกแล้วครับ ยังไงดูตัวอย่างน่าจะเข้าใจได้มากกว่าครับ

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md


สุดท้าย ก็ขอให้ทุกคนพยายามปรับเปลี่ยน style การเขียน code ให้เข้ากับข้อกำหนดของ PSR Standard นะครับ


อ้างอิง
- http://www.php-fig.org
- https://github.com/php-fig/fig-standards



0 comments:

Ubuntu 14.04 Genymotion Cannot mix incompatible Qt library [Fixed]

Monday, November 24, 2014 3:25 PM 0 Comments


Error :

[Genymotion] [Fatal] Cannot mix incompatible Qt library (version 0x40801) with this library (version 0x40804)

Solve :

1. install package

sudo apt-get install libxi-dev libxmu-dev


2. use the system qt

mkdir QtLibs && mv *Qt*.so* QtLibs

0 comments:

หนังสือ Git ฉบับภาษาไทย ฟรี

Tuesday, November 4, 2014 4:10 PM 0 Comments

บังเอิญไปเจอมาครับ จึงเอามาแบ่งปัน

http://www.slideshare.net/dekcomgang/git-book



0 comments:

วิธีการสร้าง Virtutal Host ให้กับ Apache บน Ubuntu 14.04

Monday, October 27, 2014 8:46 PM 0 Comments , , , ,

เบื่อไหมกับการรันเวปในเครื่องตัวเองแล้วต้องไปที่ http://localhost/xxxx วันนี้เราจะมาจำลอง Virtual Host กัน โดยหลักการการทำงานของมันก็คือ

- ชี้ Domain มาที่เครื่องเราเอง (localhost)

- สร้าง Virtual Host ให้กับ Apache เพื่อให้รองรับ Request สำหรับ Domain นั้น

สำหรับโจทย์ก็คือต้องการสร้าง Domain  http://kittinan.localdomain โดยให้ชี้ไปที่  path /home/null/git/kittinan เรามาเริ่มกันเลยครับ

1. แก้ไฟล์ host ให้ชี้มาที่เครื่องเราเอง ก่อนผ่าน Terminal

sudo nano /etc/hosts
เพิ่ม 127.0.0.1  kittinan.localdomain ไปดังภาพ




2. สร้างไฟล์  Virtual Host ให้กับ Apache

- ไปยัง path /etc/apache2/sites-available

cd  /etc/apache2/sites-available
- สร้างไฟล์ kittinan.localdomain.conf

sudo nano kittinan.localdomain.conf
<VirtualHost *:80>
        ServerName kittinan.localdomain
        ServerAdmin webmaster@localhost
        DocumentRoot /home/null/git/kittinan
<Directory /home/null/git/kittinan>
    Require all granted
</Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>



- enable virtual host
sudo a2ensite kittinan.localdomain.conf
- Restart Apache
sudo service apache2 restart

3. สร้าง Folder ที่เรา point virtual host ซึ่งก็คือ path  /home/null/git/kittinan

- กลับมายัง home directory ของเรา
cd ~/
- สร้าง folder /home/null/git/kittinan
mkdir -p git/kittinan
- สร้างไฟล์ index.php  /home/null/git/kittinan/index.php
nano git/kittinan/index.php
<?php
echo 'Hello Kittinan';
4. ทดลองรันด้วยการเปิด Web browser ไปที่ http://kittinan.localdomain



เป็นอันเสร็จสิ้นการสร้าง Virtual Host สำหรับในการพัฒนาครับ

0 comments:

วิธีการติดตั้ง Apache + PHP + Mysql + Phpmyadmin บน Ubuntu 14.04

มาถึงปลายปี 2014 ผมเชื่อว่ายังมีนักพัฒนาเวปด้วยภาษา php หลายท่านยังใช้ Appserv, XAMPP, WAMP และ MAMP กันอยู่ ไม่ใช่มันไม่ดีนะครับ แต่เราควรที่จะเรียนรู้วิธีการติดตั้ง Software แต่ละตัวกันเองดีกว่า ผมจะยกตัวอย่างของ Appserv นะครับ Appserv รุ่นล่าสุดยังใช้งาน PHP ใน version 5.2 อยู่เลยครับ ซึ่งปัจจุบัน ณ เวลานี้ PHP ออก version 5.6 มาแล้วครับ

และอีกอย่างนึงก็อยากให้นักพัฒนาเวปด้วย php ทั้งหลายลองหันมาใช้ Linux กันครับ เพราะสภาพแวดล้อมจริงๆในการรัน  Web Server ส่วนใหญ่จะรันอยู่บน Linux ซึ่งจะทำให้ตัวนักพัฒนาเข้าใจสภาพแวดล้อมดียิ่งขึ้นครับ

เรามาเริ่มกันเลยครับ โดยผมจะใช้ Ubuntu 14.04 ในการติดตั้ง ผ่าน Terminal หรือ Command line นั้นเอง โดยบน Ubuntu 14.04 สามารถกดคีย์ลัดคือ CTRL + ALT +T

1. ติดตั้ง Apache Web Server

sudo apt-get install apache2



2. ทดสอบว่า Apache ติดตั้งสำเร็จ โดยเปิด Web Browser แล้วเข้าที่ http://localhost/

3. ทำการติดตั้ง Mysql Server (หากไม่ชอบ Mysql ผมแนะนำเป็น MariaDB แทนครับ Performance ดีกว่า Mysql มากๆ)

3.1 ติดตั้ง Mysql

sudo apt-get install mysql-server mysql-client

Enter Your Mysql Password











4. ติดตั้ง PHP และ Apache php module

sudo apt-get install php5 libapache2-mod-php5 php5-mysql php5-curl php5-gd php-pear php5-imagick php5-mcrypt php5-memcache php5-sqlite php5-json

5. ทดสอบว่า php ใช้งานได้

sudo chmod 777 /var/www/html/

5.1 สร้างไฟล์ info.php ที่ path /var/www/html/

nano /var/www/html/info.php

โดยใส่ code เข้าไปดังนี้

<?php
  phpinfo();










5.2 Restart Apache

sudo service apache2 restart

5.3 ทดสอบโดยการเปิด Web Browser ไปที่ http://localhost/info.php
















6. ติดตั้ง Phymyadmin

6.1 Download ไฟล์ phpmyadmin จากเวป http://www.phpmyadmin.net/home_page/downloads.php

6.2 แตกไฟล์ที่ Download ไว้ที่ /var/www/html/phpmyadmin

6.3 เปลี่ยนชื่อไฟล์ /var/www/html/phpmyadmin/config.sample.inc.php เป็น /var/www/html/phpmyadmin/config.inc.php

6.4 เปิดไฟล์ /var/www/html/phpmyadmin/config.inc.php และแก้ไข้บรรทัด

$cfg['blowfish_secret'] = '5555555555555555555555555555555555'; 

โดยใส่ค่ามั่วๆลงไป

6.5 ทดสอบโดยการเปิด Web Browser ไปที่ http://localhost/phpmyadmin




ก็เสร็จสิ้นไปแล้วสำหรับการติดตั้ง Apache + Mysql + PHP + Phpmyadmin นะครับ ไม่ยากเลยง่ายนิดเดียว

1 comments:

install Nginx + MariaDB + PHP-FPM + Phpmyadmin Ubuntu 14.04

Saturday, October 25, 2014 2:28 PM 0 Comments


1. install mariadb server

sudo apt-get install mariadb-server

2. install nginx

sudo apt-get install nginx

3. install php5-fpm

sudo apt-get install php5-fpm  php5-mysql php5-curl php5-gd php-pear php5-imagick php5-mcrypt php5-memcache php5-sqlite

4. Config Nginx

- backup default config file /etc/nginx/sites-available/default

mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

- edit file /etc/nginx/sites-available/default for config nginx pass fastcgi like this config

- restart nginx

5. change permission /usr/share/nginx/html depend on your config

chmod 777 /usr/share/nginx/html

6. test php that work

nano /usr/share/nginx/html/info.php
<?php

phpinfo();


http://localhost/info.php




7. install phpmyadmin

- download phpmyadmin here

- unzip to the folder /usr/share/nginx/html/phpmyadmin

- open http://localhost/phpmyadmin



0 comments:

rsync ssh custom port

Saturday, September 20, 2014 11:18 PM 0 Comments



rsync -avz -e "ssh -p $PORT" user@remoteip:/path/to/files/ /local/path/

0 comments:

Alternative Truecrypt "CipherShed"

Tuesday, August 19, 2014 11:14 AM 0 Comments ,

https://ciphershed.org/



 credit : Hacking & Security Book

0 comments:

[Facebook Trick] Find some friends of hidden friend list

Thursday, August 14, 2014 10:54 AM 0 Comments , , ,

Today i founded the trick to find some friend on friend list ("Only Me" Privacy setting friend list).

Facebook concern people can see your friendship on another timeline
The trick use Facebook Friend Suggestion feature to find some friend of victim.

Instruction:

1. Register new Facebook user

2. Find the victim who want to know (Victim user need "Everyone" can send friend request on their privacy setting)

3. Use New Facebook user send friend request to victim and then cancel it.

4. go to : https://mbasic.facebook.com/friends/center/suggestions

5. you will get some friend of the victim






P.S. i wrote simple php script to fetch some friend of victim here


P.S. i reported to facebook security team but they reply this is not a bug



0 comments:

Ubuntu Virtualbox Cannot register the hard disk fixed

Sunday, April 27, 2014 12:55 PM 0 Comments , ,

i found this problem after upgrade from Ubuntu 12.04 to 14.04. the problem is  cannot register the hard disk UUID because UUID already exists.



We need to change hard disk uuid from command line

vboxmanage internalcommands sethduuid vmimage.vdi


After change hard disk UUID, We need to add vm image to Virtualbox





Done. Happy!!!

0 comments:

Java Android Pause / Resume Thread

Monday, April 21, 2014 2:07 PM 0 Comments

This example from stackoverflow. Thank You Wroclai


class YourRunnable implements Runnable {
    private Object mPauseLock;
    private boolean mPaused;
    private boolean mFinished;

    public YourRunnable() {
        mPauseLock = new Object();
        mPaused = false;
        mFinished = false;
    }

    public void run() {
        while (!mFinished) {
            // Do stuff.

            synchronized (mPauseLock) {
                while (mPaused) {
                    try {
                        mPauseLock.wait();
                    } catch (InterruptedException e) {
                    }
                }
            }
        }
    }

    /**
     * Call this on pause.
     */
    public void onPause() {
        synchronized (mPauseLock) {
            mPaused = true;
        }
    }

    /**
     * Call this on resume.
     */
    public void onResume() {
        synchronized (mPauseLock) {
            mPaused = false;
            mPauseLock.notifyAll();
        }
    }

}

0 comments:

How to fix Ubuntu 14.014 ctrl+space do not work

Sunday, April 20, 2014 3:15 PM 1 Comments , , , ,

After i updated my ubuntu from 12.04 to 14.04. i founded problem ctrl+space key shortcut for code assist not work in Eclipse and Netbeans again. This is the solution to fix it.

1. Open Terminal run this command

ibus-setup

2. On next input method, delete ctrl+space



3. After deleted, Ctrl + Space will working fine!!!! Happy!!!

1 comments:

PHP-FPM vs HHVM

Tuesday, March 18, 2014 1:51 PM 0 Comments , ,

this is result i tested concurence between php-fpm (tcp) vs hhvm (tcp)

My http server is Nginx. i tested 1000 requests and 50 concurrence.


First i tested php-fpm the time taken for test is 8.272 seconds.

php-fpm result

i tested hhvm the time taken for test is  2.831 seconds

hhvm result
the code that i tested is my project based on cakephp framework.

conclusion hhvm is very very fast but hhvm is not support unix socket now. :-(

0 comments:

Raspberry Pi Wifi Auto Reconnect

Saturday, February 15, 2014 12:16 AM 0 Comments

1. Go to /etc/ifplugd/action.d/ and rename the ifupdown file to ifupdown.original
2. Then do: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
3. Finally: sudo reboot

thank you http://raspberrypi.stackexchange.com/questions/4120/how-to-automatically-reconnect-wifi

0 comments:

Easy Linux Email Server With iRedmail

Friday, January 31, 2014 2:46 PM 0 Comments , , ,

i find the solution to install email server but it's difficult and complicate. i found the iRedmail it's free and full-featured mail server solution. it's very easy to install. :-)

http://www.iredmail.org/

this is a how to install video.
http://www.youtube.com/watch?v=TqAdt2l1aDc


0 comments:

Facebook Special Token

Wednesday, January 29, 2014 11:20 PM 0 Comments , , ,


On the 16 Jan 2014. I found the Token from Facebook Official Application and Facebook Messenger Application. That Token can access emails & phones of your friends without ask them depends on their privacy setting and this token also can  get email & phones from not friends user if their has set public on privacy setting (You can't see email on the user who is not friend). ahh this token can query your friends of friends. it wonderful. i love this token.

That sure i reported this issue to Facebook security team, this is once of the answer

As https://www.facebook.com/help/359369650815737 notes, the privacy
setting of an email address controls who is able to see the information
outside of the context of Timeline. Shown on Timeline or Hidden from
Timeline are known as visibility settings and only control what information
is highlighted on your timeline. Can you demonstrate the ability to use
this token to access email addresses which you shouldn't be able to based
on privacy settings?


The tokens issued to the official applications have special permissions in order to allow them to function as efficiently as possible. Again, the application should not be able to return any information that it is not possible to access normally. Can you demonstrate a case where you are seeing the friend list for a friend where you could not otherwise see it? 


 Ok, Let's see how this work.

1. You must have Mobile device and installed Facebook Application, in this case i use my Android.

2. We will capture the special token from this software mitmproxy (http://mitmproxy.org/). This software that fake the certificate and make you can read https. Please see this blog for how mitmproxy work and use (http://blog.philippheckel.com/2013/07/01/how-to-use-mitmproxy-to-read-and-modify-https-traffic-of-your-phone/ )

3. After you learned the blog above you will got the special token when you open the facebook application and logged in


From Facebook Android Application

From Facebook Messenger Application

4. You can check the token here (wow the expire is never)



5. After i got the special token i use facebook fql to get data (https://developers.facebook.com/tools/explorer)

i will show you for some example

this is the query to get your friends email & phone number
https://developers.facebook.com/tools/explorer/?fql=SELECT%20uid%2C%20name%2C%20email%2C%20phones%20FROM%20user%20WHERE%20uid%20IN%20(SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%3Dme())

phones is not for regular facebook app token


After use the special token,  got email and phone number


this query can get your friends of friends depends on your friend privacy setting

SELECT uid, name, email, phones FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=FACEBOOK_ID)







0 comments:

mitmproxy : sniff https traffic

Tuesday, January 7, 2014 12:00 PM 0 Comments ,

http://mitmproxy.org

http://blog.philippheckel.com/2013/07/01/how-to-use-mitmproxy-to-read-and-modify-https-traffic-of-your-phone/


0 comments: