0

ลอง Raspberry Pi และ GPIO

ซื้อ Raspberry Pi มานานแล้วไม่ได้ลองต่ออะไรเลย นึกว่ามันจะยาก ลองดูจริง ๆ ง่ายครับ อันนี้ลองต่อไฟกระพริบดู

สายต่อแบบนี้

IMG_3608

สีแดงขั้วบวก สีน้ำตาลขั้วลบนะครับ สลับไม่เป็นไรก็ลอง ๆ ดูได้ อย่างเอามาจิ้มกันตรง ๆ พอ อย่าลืมใส่ตัวต้านทานด้วย

ส่วน code ก็ตามนี้ครับ

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
while 1:
    GPIO.output(18, True)
    time.sleep(0.2)
    GPIO.output(18, False)
    time.sleep(0.2)

โปรแกรมก็รันเหมือนใช้ GNU/Linux ปกติครับ เหมือนเครื่องใหญ่ธรรมดา แต่ช้าหน่อยเท่านั้นเอง

ป.ล. ผมใช้ Raspbian ลงง่ายมาก

0

Apertium ภาษาไทย

Apertium เป็นระบบแปลภาษาแบบใช้กฎการถ่ายโอน (โดยเฉพาะแบบตื้น) ที่สำคัญมันเป็นซอฟต์แวร์เสรี (Free software; ~ Open source software)

Apertium กับภาษาไทยอยู่ในระยะเริ่มต้น แต่ก็เอาลงติดตั้งเพื่อช่วยกันพัฒนาได้ เอาไปใช้คงยังไม่ไหว

  1. เบื้องต้นดูตามนี้ได้เลย
  2. ใน svn ที่ sf.net/projects/apertium ใน trunk ลง lttoolbox apertium apertium-lex-tools
  3. ลง vislcg3
  4. ใน incubator ใน svn ที่ sf.net/projects/apertium ลง apertium-tha
  5. ใน incubator ใน svn ที่ sf.net/projects/apertium ลง apertium-tha-eng อันนี้จะท่ายากหน่อยเพราะต้องสั่งทำนอง ./autogen.sh –with-lang1=(ชี้ไปที่ path ของ apertium-tha) ที่ลงไปก่อนหน้านี

เสร็จแล้ว ใน folder ของ apertium-tha-eng ลองสั่ง apertium -d . eng-tha ก็จะเริ่มแปลได้นิดหน่อย

ตอนนี้มันก็จะออกมาฮาฮาประมาณนี้

$ apertium -d . eng-tha
I am a cat.
#ฉัน #คือ *a #แมว.

ป.ล. ไม่เข้าใจถามไดใน IRC ที่ irc.freenode.org ห้อง #apertium

0

wordcut 0.7.0 เรียกใช้จาก command line ได้แล้วครับ

wordcut คือโปรแกรมตัดคำ (word segmentation)

วิธีติดตั้ง

npm install -g wordcut

เวลาใช้ก็จะประมาณนี้อะครับ

$ wordcut
กากากา
กา กา กา

คือพิมพ์ กากากา เข้าไปมันก็ตัดได้ กา กา กา ออกมา

More info: http://github.com/veer66/wordcut

0

Ruby – return

เรื่องหนึ่งอาจจะยากที่สุดเวลาเขียน Ruby สำหรับคนที่เขียน Java มาก่อนอาจจะเป็นเรื่อง return

ผมว่าดูตัวอย่างพวกนี้แล้วก็จะเข้าใจได้ไม่ยาก

เหมือนกัน


def func1
  return 10
end

def func1
  10
end

ไม่แน่ใจว่าเหมือนกันไหมแต่ return ค่าเดียวกัน


def func2 a
  if a > 100
    return 10
  else
    return 20
  end
end

def func2 a
  if a > 100
    10
  else
    20
  end
end

แต่ถ้ามันมีหลาย ๆ คำสั่ง มันก็จะเอาคำสั่งสุดท้าย แบบข้างล่างนี่ก็จะได้ผลเหมือนกัน

def func3
  func4(10)
  return func5(20)
end

def func3 a
  func4(10)
  func5(20)
end

มีคนถามว่าแล้วจะมี return ไปทำไม มีคนตอบว่ามันทำให้ function หยุดตรงกลางได้ เช่น

แบบข้างล่างถ้า a = 101 มันก็จะ return 20 แล้วก็ไม่ไปทำ puts ข้างล่าง

def func6 a
  if a > 100
    return 20
  end
  puts 30
  puts 40
  50
end

ปกติแล้วเวลาเขียน Ruby เราต้องติดเสมอว่าจะ return อะไร

… ถ้ามั่วก็ขออภัย

ป.ล. ท่าพวกนี้ Ruby น่าจะได้มาจาก Scheme แต Scheme จะเขียนหลาย ๆ คำสั่งต่อกันเลยไม่ได้ ต้องมีบางทีต้องไปอยู่ใน (begin ) … แต่ช่างเถอะ :-P

0

คำแนะนำเกี่ยวกับ PHP บน Windows

มิตรสหายหลายท่านเขียน PHP กันบน Windows ครับ ผมก็ไม่ได้ใช้นานแล้ว ตอนโน้นผมใช้ XAMPP มันก็ ok อยู่นะครับ แต่ถ้า project ที่คิดว่าจะใช้เร็ว ๆ นี้ก็อาจจะเลือกตัวเก่า ๆ หน่อยนะครับสัก PHP 5.3 เพราะว่า server หลายตัวยังใช้อยู่ อย่างเช่น Ubuntu 12.04 LTS ก็ยังใช้ PHP 5.3.10 อยู่ เป็นต้น ครับ

0

ใช้ node.js กับ Apache HTTP server

ผมต้องการใช้ node.js กับ Apache HTTP server โดยที่ถ้ารับ request มาแล้วเป็นรูปภาพที่เป็น static file ก็ให้ Apache HTTP server เอามาแสดงผลเลย นอกจากนั้นก็ทำตัวเป็น reverse proxy ส่งต่อไปให้ node.js อีกที

สมมุติว่าเปิด node.js ไว้ที่ port 3000 แล้วกัน ที่ Apache HTTP server ผมต้องลง mod_rewrite และ mod_proxy_html มี set ค่าของ proxy นิดหน่อย ปกติใส่ในไฟล์ของ site ที่อยู่ใน /etc/apache2/site_enabled ถ้าใช้ Debian ตามนี้

  ProxyRequests off
  <proxy *>
     Order deny,allow
     Allow from all
  </proxy>

แล้วก็ใน .htaccess ผมใส่สิ่งนี้ไว้สำหรับ mod_rewrite อ่อแต่อย่าลืม AllowOveride ก่อนนะครับ

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} !^/img
RewriteRule (.*)$ http://localhost:3000/$1 [P]

อันนี้ RewriteCond ก็จะบอกประมาณว่าอะไรที่อยู่ใน img ไม่ต้องทำ rewrite ส่วน url ที่เหลือก็ทำตัวเป็น proxy ( [P] ) ไปเรียกที่ node.js อีกที

ผมก็มั่ว ๆ นะครับพึ่งเคยใช้ก็อย่าเชื่อมาก ปกติใช้ nginx น่าจะง่ายกว่า แต่ในกรณีที่มันไม่มีก็นะ …

0

Keon + Thai keyboard

Keon + Thai keyboard

 

ขอบคุณ patch โดย @pittaya และวิธี install จาก https://hacks.mozilla.org/2013/06/updating-and-tweaking-your-firefox-os-developer-preview-phonegeeksphone/

สิ่งที่ผมลงไปคือ สิ่งนี้ วิธีคร่าว ๆ ก็คือลง rom nightly แบบวิธีตาม link ข้างบนแล้วก็ clone Gaia มา build แต่ว่าใช้ branch master เลย แล้วก็ merge กับ patch ของ @pittaya

0

ใช้ $q กับ $http.post ใน Angular.js

$http.post ใน Angular.js มันก็เอาไว้เรียก HTTP request ที่แน่นอนเป็น async


function ReqCtrl($scope, $http) {
  $scope.seq = "Seq: "
  $http.post('/echo/json/', "delay=2&json={\"x\":10}").success(function (data) {
    $scope.seq += " " + data.x;
  });

  $http.post('/echo/json/', "json={\"x\":20}").success(function (data) {
    $scope.seq += " " + data.x;
  });

  $http.post('/echo/json/', "json={\"x\":30}").success(function (data) {
    $scope.seq += " " + data.x;
  });
}

แบบ code ข้างบนนี่มันก็จะรับประกันไม่ได้ว่า อันไหนจะทำงานก่อนทำงานหลัง ลองเล่นดูที่นี้ได้ http://jsfiddle.net/veer66/KXDX6/

คือจริง ๆ จะเขียนแบบซ้อน ๆ กันไปเลยก็ได้ แต่ว่ามันก็จะซ้อนกัน :-P … เรามีทางเลือกอื่นคือใช้  Q  แต่ว่า Angular.js มี $q ให้ในตัวเลย เขียนแบบข้างล่าง


function ReqCtrl($scope, $http, $q) {
  $scope.seq = "Seq: "
  var deferred = $q.defer();
  var promise = deferred.promise;
  deferred.resolve("nothing");
  
  promise.then(function(promise) {
    return $http.post('/echo/json/',
                      "delay=2&json={\"x\":10}").success(
                                     function (data) {
                                        $scope.seq += " " + data.x;
                                     });
  }).then(function(promise) {
      $http.post('/echo/json/', "json={\"x\":20}").success(
                                          function (data) {
                                             $scope.seq += " " + data.x;
                                          });
  }).then(function(promise) {
      $http.post('/echo/json/', "json={\"x\":30}").success(
                                          function (data) {
                                             $scope.seq += " " + data.x;
                                          });
  });
}

ลองเล่นได้ที่ http://jsfiddle.net/veer66/nxJFH/ จะเห็นได้ว่ามันเรียง 10 20 30 … อันนี้มันใช้ได้ เพราะว่า $http.post มัน return promise ออกมา ในสิ่งที่ถูก return ออกมาจาก function ใน then มันจะถูก check ว่าเป็น promise หรือเปล่าถ้าเป็นมันก็จะใช้ promise นั้นเลย ไม่สร้างใหม่ ถ้าเรา return string หรือ integer หรืออะไรอื่น ๆ มันจะไปสร้าง promise มาครอบให้

เพราะว่ามันใช้ promise เดิม เลยทำให้ $http.post แต่ละตัวเชื่อมกันเป็นลำดับได้