[Laravel] - How to protect upload folder from web access

Standard

1. Create .htaccess file
2. Create mod rewrite rule
    RewriteRule ^upload/(\w+)\.([a-z]{3,4})$ file.php?name=$1&type=$2 [L]
3. Create file.php
if(Auth::user()->role == 'admin') {
    header("Content-type: image/" + $_SESSION['type']);
    readfile("/path/to/image/" + $_SESSION['name'] + '.' + $_SESSION['type']);
else {
    header("Location: http://mysite.com/login");
}

Ref : http://stackoverflow.com/questions/15474742/laravel-protect-image-folder-from-web-access

How to change mysql password

Standard
How to change MySQL password


1. Login to mysql
    mysql -u root -p

2. Select Database mysql.
    use mysql;

3. Use this systax to change MySQL password.

SET PASSWORD FOR 'user-name-here'@'hostname-name-here' = PASSWORD('new-password-here');
UPDATE mysql.user SET Password=PASSWORD('new-password-here') WHERE User='user-name-here' AND Host='host-name-here';
Ref : http://www.cyberciti.biz/faq/mysql-change-user-password/

Laravel create dropdown list from database with concatidinate field

Standard

Sometime i want to create dropdown list from database with combine two field . You can use Fluent Query Builder and Eloquent.

Example

{{Form::select('User', AccountUser::select(DB::raw('id') , DB::raw('concat (first_name," ",last_name) as full_name'))->where('account_group_id','=','3')->lists('full_name','id') ) }}

C# System.TypeInitializationException was unhandled exception [Solved]

Standard



When  i found error, I search for this exception.
Generally, a TypeInitializionException is thrown when another exception happens inside a static constructor.
Check for the InnerException property of the former, and you will get more information about the actual error.


Ref. http://stackoverflow.com/questions/7202543/how-to-solve-system-typeinitializationexception-was-unhandled-exception-in-vb-ne
------------------------------------------------------------------------------------------
my exception is.
{"The type initializer for 'Myproject.Main' threw an exception."}
and InnerException  is
{"Could not load file or assembly 'MySql.Data, Version=6.4.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)":"MySql.Data, Version=6.4.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"}
It's error from MySql.Data . I fixed by remove and add reference again.

Install Cacti On CentOS

Standard



Assume you have this package

- Apache
- MySQL
- PHP

Install Required Packages
1. Install php addon
yum install php-mysql php-pear php-common php-gd php-devel php php-mbstring php-cli php-mysql php-snmp -y

2. Install net-snmp
yum install net-snmp-utils net-snmp-libs php-pear-Net-SMTP -y

3. Install rrdtool
yum install rrdtool -y

Start SNMP Service
service snmpd start
chkconfig snmpd on

Create Database for cacti
1. Login to mysql
mysql -u root -p
Enter password : xxxxx
2. Create Database
mysql > create database cacti;
3. Create User (chage username and password to your info)
mysql > grant all on cacti.* to username@localhost identified by 'password'
4. Reload Grant Table
mysql > flush privileges;

Check or edit php.ini
date.timezone = your timezone
--- Example ----
date.timezone = Asia/Bangkok    // Thailand

Install CACTI
1. Download cacti from http://www.cacti.net
2. Unzip and upload file to   /var/www/html/cacti
3. Restore cacti database (chage mysql user and password to your info)
# mysql -u mysqluser -p cacti < cacti.sql
# Enter Password : mysqlpassword
4. Edit config file   "include/concifg.php"
   $database_username="mysqluser";
   $database_password="mysqlpassword";
5. Call cacti url =>  http://your ip/cacti
    -  Cacti Installation Guide Page 1  => Click Next
    -  Cacti Installation Guide Page 2  => Select New Install and Click Next
    -  Cacti Installation Guide Page 3  => Click Next
    -  Cacti Installation Guide Page 4  Login with defual Username and Password (admn , admin)
    -  Cacti Installation Guide Page 5  Change admin password

Create Contrab
1. vi /etc/cron.d/cacti
2. Add this command
*/5 * * * * root /usr/bin/php /var/www/html/cacti/poller.php > /dev/null 2>&1


How to install MCRYPT extension when using MAMP on OSX

Standard

  1. Go to Terminal
  2. Enter which php
    • If it says /usr/bin/php, then proceed to 3.
  3. Enter sudo nano ~/.bash_profile
  4. then paste this export PATH="/Applications/XAMPP/xamppfiles/bin:$PATH"
  5. ctrl - O then enter to save, then ctrl - X to exit.
  6. restart terminal.
  7. Enter which php
    • If you did it right, it should be the same as the path in #4.
Ref : http://stackoverflow.com/questions/16830405/laravel-requires-the-mcrypt-php-extension

Install nginx and php on Window with hidden console

Standard

1. Download nginx & PHP for window
2. Unzip file and copy to your path such as c:\nginx , c:\nginx\php
3. modify nginx config  (nginx\conf\nginx.conf)

location ~ \.php$ {
      root            html;
      fastcgi_pass    127.0.0.1:9000;
      fastcgi_index   index.php;
      fastcgi_param   SCRIPT_FILENAME c:/nginx/html/$fastcgi_script_name;
      include         fastcgi_params;
 }
4. Download HiddenConsole for start php-cgi.exe in background
5. Create Start.bat and Stop.bat
@ECHO OFF
start c:\nginx\nginx.exe
RunHiddenConsole.exe c:\nginx\php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx\php\php.ini
ping 127.0.0.1 -n 1>NUL
echo .
echo ..
echo ...
ping 127.0.0.1 >NUL
EXIT
@ECHO OFF
taskkill /f /IM nginx.exe
taskkill /f /IM php-cgi.exe
EXIT
6. Double Click Start.bat to start nginx
7. Create PHP file to test
<?php
    echo phpinfo();
?>

Ref.
http://wiki.nginx.org/PHPFastCGIOnWindows
https://www.digitalocean.com/community/articles/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04

Install OpenERP on CentOS

Standard
#!/bin/sh
# Modified script from Carlos E. Fonseca Zorrilla
yum -y install wget unzip
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh http://yum.pgrpms.org/9.2/redhat/rhel-6-i386/pgdg-centos92-9.2-6.noarch.rpm
yum -y install python-psycopg2 python-lxml PyXML python-setuptools libxslt-python pytz \
            python-matplotlib python-babel python-mako python-dateutil python-psycopg2 \
            pychart pydot python-reportlab python-devel python-imaging python-vobject \
            hippo-canvas-python mx python-gdata python-ldap python-openid \
            python-werkzeug python-vatnumber pygtk2 glade3 pydot python-dateutil \
            python-matplotlib pygtk2 glade3 pydot python-dateutil python-matplotlib \
            python python-devel python-psutil python-docutils make\
            automake gcc gcc-c++ kernel-devel byacc flashplugin-nonfree poppler-utils pywebdav\
yum -y install postgresql92-libs postgresql92-server postgresql92
service postgresql-9.2 initdb
chkconfig postgresql-9.2 on
service postgresql-9.2 start
su - postgres -c "createuser  --superuser openerp"
cd /tmp
wget http://gdata-python-client.googlecode.com/files/gdata-2.0.17.zip
unzip gdata-2.0.17.zip
rm -rf gdata-2.0.17.zip
cd gdata*
python setup.py install
cd /tmp
adduser openerp
DIR="/var/run/openerp /var/log/openerp"
for NAME in $DIR
do
if [ ! -d $NAME ]; then
   mkdir $NAME
   chown openerp.openerp $NAME
fi
done
rm -rf openerp*
wget http://nightly.openerp.com/7.0/nightly/src/openerp-7.0-latest.tar.gz
tar -zxvf openerp-7.0-latest.tar.gz  --transform 's!^[^/]\+\($\|/\)!openerp\1!'
cd openerp
python setup.py install
rm -rf /usr/local/bin/openerp-server
cp openerp-server /usr/local/bin
cp install/openerp-server.init /etc/init.d/openerp
cp install/openerp-server.conf /etc
chown openerp:openerp /etc/openerp-server.conf
chmod u+x /etc/init.d/openerp
chkconfig openerp on
service  openerp start


http://forum.openerp.com/forum/topic36094.html

Socket programming in python

Standard
TCP/IP Server
 ---------------------------------------------------------------------------
import socket
import sys
from thread import *
 
HOST = ''   # Symbolic name meaning all available interfaces
PORT = 8888 # Arbitrary non-privileged port
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
 
#Bind socket to local host and port
try:
    s.bind((HOST, PORT))
except socket.error , msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
     
print 'Socket bind complete'
 
#Start listening on socket
s.listen(10)
print 'Socket now listening'
 
#Function for handling connections. This will be used to create threads
def clientthread(conn):
    #Sending message to connected client
    conn.send('Welcome to the server. Type something and hit enter\n') #send only takes string
     
    #infinite loop so that function do not terminate and thread do not end.
    while True:
         
        #Receiving from client
        data = conn.recv(1024)
        reply = 'OK...' + data
        if not data:
            break
     
        conn.sendall(reply)
     
    #came out of loop
    conn.close()
 
#now keep talking with the client
while 1:
    #wait to accept a connection - blocking call
    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])
     
    #start new thread takes 1st argument as a function name to be run, second is the tuple of arguments to the function.
    start_new_thread(clientthread ,(conn,))
 
s.close()
 
 
 
TCP/IP Client
---------------------------------------------------------------------------
[Receive Data]
import socket   #for sockets
import sys  #for exit
 
#create an INET, STREAMing socket
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
    print 'Failed to create socket'
    sys.exit()
     
print 'Socket Created'
 
host = 'www.google.com';
port = 80;
 
try:
    remote_ip = socket.gethostbyname( host )
 
except socket.gaierror:
    #could not resolve
    print 'Hostname could not be resolved. Exiting'
    sys.exit()
 
#Connect to remote server
s.connect((remote_ip , port))
 
print 'Socket Connected to ' + host + ' on ip ' + remote_ip
 
#Send some data to remote server
message = "GET / HTTP/1.1\r\n\r\n"
 
try :
    #Set the whole string
    s.sendall(message)
except socket.error:
    #Send failed
    print 'Send failed'
    sys.exit()
 
print 'Message send successfully'
 
#Now receive data
reply = s.recv(4096)
 
print reply
 
 
 [Send Data]
import socket   #for sockets
import sys  #for exit
try:
    #create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
    print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
    sys.exit();
 
print 'Socket Created'
 
host = 'www.google.com'
port = 80
 
try:
    remote_ip = socket.gethostbyname( host )
 
except socket.gaierror:
    #could not resolve
    print 'Hostname could not be resolved. Exiting'
    sys.exit()
     
print 'Ip address of ' + host + ' is ' + remote_ip
 
#Connect to remote server
s.connect((remote_ip , port))
 
print 'Socket Connected to ' + host + ' on ip ' + remote_ip
 
#Send some data to remote server
message = "GET / HTTP/1.1\r\n\r\n"
 
try :
    #Set the whole string
    s.sendall(message)
except socket.error:
    #Send failed
    print 'Send failed'
    sys.exit()
 
print 'Message send successfully'
 
 
 
 
 
UDP Server
 ---------------------------------------------------------------------------
import socket
import sys
 
HOST = ''   # Symbolic name meaning all available interfaces
PORT = 8888 # Arbitrary non-privileged port
 
# Datagram (udp) socket
try :
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    print 'Socket created'
except socket.error, msg :
    print 'Failed to create socket. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
 
 
# Bind socket to local host and port
try:
    s.bind((HOST, PORT))
except socket.error , msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
     
print 'Socket bind complete'
 
#now keep talking with the client
while 1:
    # receive data from client (data, addr)
    d = s.recvfrom(1024)
    data = d[0]
    addr = d[1]
     
    if not data: 
        break
     
    reply = 'OK...' + data
     
    s.sendto(reply , addr)
    print 'Message[' + addr[0] + ':' + str(addr[1]) + '] - ' + data.strip()
     
s.close()
 
 
UDP Client
 ---------------------------------------------------------------------------
 
import socket   #for sockets
import sys  #for exit
 
# create dgram udp socket
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
except socket.error:
    print 'Failed to create socket'
    sys.exit()
 
host = 'localhost';
port = 8888;
 
while(1) :
    msg = raw_input('Enter message to send : ')
     
    try :
        #Set the whole string
        s.sendto(msg, (host, port))
         
        # receive data from client (data, addr)
        d = s.recvfrom(1024)
        reply = d[0]
        addr = d[1]
         
        print 'Server reply : ' + reply
     
    except socket.error, msg:
        print 'Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
        sys.exit()
 
 
 
Reference :
TCP/IP => http://www.binarytides.com/python-socket-programming-tutorial/
UDP => http://www.binarytides.com/programming-udp-sockets-in-python/
 

Arduino Pitch follower | Play a pitch that changes based on a changing analog input

Standard
/*
  Pitch follower
 
 Plays a pitch that changes based on a changing analog input
 
 circuit:
 * 8-ohm speaker on digital pin 8
 * photoresistor on analog 0 to 5V
 * 4.7K resistor on analog 0 to ground
 
 created 21 Jan 2010
 modified 30 Aug 2011
 by Tom Igoe 

This example code is in the public domain.
 
 http://arduino.cc/en/Tutorial/Tone2
 
 */


void setup() {
  // initialize serial communications (for debugging only):
  Serial.begin(9600);
}

void loop() {
  // read the sensor:
  int sensorReading = analogRead(A0);
  // print the sensor reading so you know its range
  Serial.println(sensorReading);
  // map the pitch to the range of the analog input.
  // change the minimum and maximum input numbers below
  // depending on the range your sensor's giving:
  int thisPitch = map(sensorReading, 400, 1000, 100, 1000);

  // play the pitch:
  tone(9, thisPitch, 10);

}

Warning: Remote Host Identification Has Changed

Standard
กำลังจะ ssh ไปยัง RaspberryPi ก็เกิดปัญหานี้ขึ้นมา  วิธีแก้ง่ายสุดคือ  ลบไฟล์ known_hosts ออกครับ

rm .ssh/known_hosts

http://www.cyberciti.biz/faq/warning-remote-host-identification-has-changed-error-and-solution/

[Unity3D] Design Game : ARWar

Standard
Objective
    1. นำความรู้จากวิชา Human Computer Interfaces มาประยุกต์ใช้จริง
    2. ศึกษาการใช้งานเทคโนโลยีเกี่ยวกับ Augmented Reality บนระบบปฏิบัติการ iOS
    3. เพื่อพัฒนาเกมที่มีการใช้สภาพแวดล้อมจริงมาแสดงร่วมกับสภาพแวดล้อมเสมือน
Design
 เกมส์จะใช้เทคโนโลยี Augmented Reaility โดยผู้เล่นจะต้องหันกล้องไปที่ Marker แล้วจะมี วัตถุต่าง ๆ ของเกมส์ปรากฏขึ้นมา    เมื่อมีวัตถุปรากฏขึ้นมาแล้วผู้เล่นจะต้องยิงกล่องเป้าหมายที่กำลังเคลื่อนที่ให้ได้จำนวนมากที่สุดภายในระยะเวลาที่จำกัด   ซึ่งเป้าหมายจะมีกำแพงบังอยู่
    เมื่อเริ่มเล่นเกมจะมีการจับเวลา  40 วินาที  สามารถยิงเก็บคะแนนได้จนกว่าเวลาจะหมด
             Game Process เมื่อผู้เล่นยิงกระสุน   จะมีการสร้างกระสุนขึ้นมา  และเคลื่อนที่ไปยังทิศทางที่เล็งไว้  เมื่อกระสุนหลุดออกนอก Workspace กระสุนจะระเบิด   และเมื่อกระสุนชนกับเป้าหมายจะมีการทำลายเป้าหมายและบวกคะแนนในการเล่น  โดยขณะยิง  เป้าหมายจะเคลื่อนที่ไปเรื่อย ๆ ผู้เล่นต้องคำนวณการยิงเพื่อให้โดนเป้าหมาย     ระหว่างยิงจะมีกำแพงบังเป้าหมายอยู่ในฉาก  ผู้เล่นจะต้องหมุนตัวเองเพื่อหาเป้าหมายให้เจอ  ซึ่งความยากจะมี 2 ระดับ   ระดับแรก  จะมีกำแพงบังในแนวตั้ง   และระดับที่สอง  จะมีกำแพงบังทั้งแนวตั้งและแนวนอน
     
Implementation
1. ออกแบบวัตถุในเกมส์


2. ควบคุมการทำงานส่วนต่างๆ ของโปรแกรมด้วย Play Marker


3. Build เกมส์ สำหรับ iOS
4. Complie xCode Project และ Build Application บน iPhone


Videos of Operation  


ทดสอบการทำงานของเกมส์





Problem & Solution Procedures
  • ไม่สามารถ Detect Image Marker ที่สร้างขึ้นมาเองได้ ต้องใช้งานในสภาพแสงที่เพียงพอ
  • Application crash เนื่องจากมีการสร้าง Object และไม่ได้ทำลาย
  • มุมมองแนวราบกับ Marker มักจะ detect marker ไม่ค่อยเจอ  ต้องออกแบบให้ Plane ลอยขึ้นมาเหนือ Marker พอสมควร 
Conclusion & Comment
      การออกแบบเกมส์ที่ทำงานบน iOS ควรจะจัดการเรื่องการสร้าง Object ให้ดี  เพราะจะมีการใช้ Memory ค่อนข้างเปลือง ทำให้โปรแกรมหยุดการทำงานลงได้   และการทดสอบโปรแกรมควรจะทดสอบในสภาพแวดล้อมที่กล้องสามารถทำงานได้ดี    เช่น  ในสภาพแวดล้อมที่แสงสว่างมาก ๆ จะช่วยให้กล้อง detect marker ได้ง่ายขึ้น   
Creator
 
 Nattapong  Rodmuang
FRA'10     FIBO@KMUTT

[Arduino] - การใช้ Serial Port

Standard
บทความนี้จะนำเสนอการใช้ Serial บน Arduino  ซึ้งขั้นตอนมีไม่มาก 
ในบทความนี้จะมีการสร้าง Protocol ขึ้นมา  เพื่อใช้ในการส่งข้อมูลหลาย ๆ และป้องกันความผิดพลาดในการส่งข้อมูล  โดยมี Header (#) และ  Footer (!) เป็นตัวเริ่มและจบ protocol

1. Initial Baudrate  กำหนดค่า Baudrate  และประกาศตัวแปรเป็น Gobal
char StringIn[InputMaxLength] = {'\0'};   // เก็บค่าที่รับมาทั้งหมด
char DataIn[DataLength] = {'\0'};   // เก็บเฉพาะ Data  ตัด Header กับ Footer ออกไป
Serial.begin(38400);  // Initial Serial


2.  สร้างฟังก์ชันสำหรับรับค่า Serial  Protocol คือมี #  นำหน้าและ ! ปิดท้าย
int ReceivedSerialData(){
  while(Serial.available())
  {
   
    char inchar = Serial.read();
     // Get Header
     if(inchar == Header)
     {
        StringIn[0] = inchar;
        int index = 1;
        // GetData
        do{
          inchar = Serial.read();
          StringIn[index] = inchar;
          index++;
        }while( (index < InputMaxLength) && (inchar != Footer) );
       
        if (index > 2)  // Get Header and Footer
        {
          if(StringIn[index-1]==Footer)  // Footer & Header Correct
          {
            for(int c=0;c<index-2;c++)
            {
              DataIn[c] = StringIn[c+1];
            }        
            return 1; // Success
          }
          else
          {
            // Get Data fail
            Serial.println("Fail Protocol");
            return 0;
          }
        }
      }
  }
  return 0;
}

3.  ใน Loop  เรียกฟังก์ชันเพื่อรับค่า Serial
 if(ReceivedSerialData())
 {
// Implement Here
}

How to fix uiviewadditions errors (Manually Three20 to Xcode project)

Standard

UITouch ivars have been removed of the iOS 6 SDK headers. Fix by this code





#ifdef __IPHONE_6_0
@implementation UITouch (TTCategory)
NSTimeInterval _timestamp;
UITouchPhase _phase;
UITouchPhase _savedPhase;
NSUInteger _tapCount;
UIWindow *_window;
UIView *_view;
UIView *_gestureView;
UIView *_warpedIntoView;
NSMutableArray *_gestureRecognizers;
NSMutableArray *_forwardingRecord;

CGPoint _locationInWindow;
CGPoint _previousLocationInWindow;
UInt8 _pathIndex;
UInt8 _pathIdentity;
float _pathMajorRadius;
struct {
    unsigned int _firstTouchForView:1;
    unsigned int _isTap:1;
    unsigned int _isDelayed:1;
    unsigned int _sentTouchesEnded:1;
    unsigned int _abandonForwardingRecord:1;
} _touchFlags;

///////////////////////////////////////////////////////////////////////////////////////////////////
- (id)initInView:(UIView *)view location:(CGPoint)location {
self = [super init];
  if (self) {
    _tapCount = 1;
    _locationInWindow = location;
    _previousLocationInWindow = location;

    UIView *target = [view.window hitTest:_locationInWindow withEvent:nil];
    _view = [target retain];
    _window = [view.window retain];
    _phase = UITouchPhaseBegan;
    _touchFlags._firstTouchForView = 1;
    _touchFlags._isTap = 1;
    _timestamp = [NSDate timeIntervalSinceReferenceDate];
  }
  return self;
}


///////////////////////////////////////////////////////////////////////////////////////////////////
- (void)changeToPhase:(UITouchPhase)phase {
  _phase = phase;
  _timestamp = [NSDate timeIntervalSinceReferenceDate];
}


@end
#endif

https://github.com/facebook/three20/pull/809

Add Three20 : http://www.youtube.com/watch?v=huNoG3qM0cM&feature=g-list&list=PLvdcn28_WxZFt658gmYDhLPfT1X7EJ-XI