Category Archives: Lab

Getting “A” from Qualy’s SSL

Qualys SSL Labs provides a SSL Server Test for awhile. You can rate your web site at https://www.ssllabs.com/ssltest

To get rating “A”, there are few straightforward tricks:

  1. Disable all versions of SSL protocol. Enable only TLS. e.g.,
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2
  2. Choose only strong ciphers, e.g., you’ll sacrifice some very old clients.
    ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
  3. Use HSTS, e.g.,
    add_header Strict-Transport-Security max-age=31536000;

Optionally,

ssl_dhparam /etc/ssl/private/dhparam.pem;
ssl_stapling on;
ssl_stapling_verify on;

Create an aligned partition

An aligned partition gives you the best read/write performance, but you will have to sacrifice some space to align your partition.

To create,

# parted -a optimal /dev/sda mkpart primary 0% 100%

And you can check if it is aligned,

# parted /dev/sda align-check optimal 1

NGINX HTTP Basic Authentication with LDAP

First,  install libpam-ldap

# apt-get install libpam-ldap

Config ldap:// properly. This will add ldap backend to PAM.

Now, create a file /etc/pam.d/nginx

@include common-auth
@include common-account

This will add nginx service in PAM.

Then, config your nginx to enable HTTP basic authentication using auth_pam and PAM service name “nginx”

location /someplace {
  auth_pam "Restricted Area";
  auth_pam_service_name nginx;
}

Restart nginx. Done.

Setting Up Google SketchUp Pro 8 on Linux

วันก่อนลง SketchUp 8 ตัวฟรีไป ก็ไม่ค่อยมีอะไรต่างไปจาก 7 เท่าไหร่ .. แถมฟีเจอร์เด่นที่อยากใช้คือ Solid Tools จะมีเฉพาะตัว SketchUp Pro .. อย่ากระนั้นเลย .. Google ให้ Instructor ขอ Education License ได้ฟรี เลยสั่งซื้อ (ในราคา 0 USD) พร้อมกับส่ง approve doc. ไป .. เสร็จสรรพก็ได้ Education License สำหรับ Google SketchUp Pro 8 มา

ขั้นต่อไปคือติดตั้งกับ WINE .. ปรากฏว่ามันใช้ท่ายากกว่าที่คิดไว้นิดหน่อย คือมันต้องมี .NET Framework 2.0 ก่อน .. (เกลียดมันจริงๆ)

.. แต่ไม่เป็นไร .. บน WINE ก็ติดตั้ง .NET Framework ได้ไม่ยาก ด้วยแพ็คเกจ winetricks

$ winetricks dotnet20

แล้วก็กดๆๆ ไปเรื่อยๆ เดี๋ยวมันก็ลงเสร็จเอง จากนั้นก็ค่อยลง Google SketchUp Pro 8

$ wine GoogleSketchUpProWEN.exe

ถ้าไม่มี license มันจะให้ใช้งาน full feature 8 ชั่วโมง .. ก็กรอก license ให้เรียบร้อย แล้วก็ รอมัน crash เพื่อแก้ OpenGL เหมือนกับตัวฟรี

แล้วก็จะได้ใช้ฟีเจอร์ Solid Tools ที่สั่ง union, intersect, subtract, trim, split ได้ .. import/export DWG/DXF 2010 ได้

ส่วน LayOut ตอนนี้ยังใช้บน WINE ไม่ได้ .. รอกันต่อไป :P

Google SketchUp 8

Google SketchUp 8 รีลีสไปเมื่อวานนี้ ลองติดตั้งบน WINE สักหน่อย

% wine GoogleSketchUpWEN.exe

.. การติดตั้งราบรื่นดี ไม่มีอะไรจุกจิก

เรียกใช้งานครั้งแรก

เลือก template อะไรก็ได้เพื่อเริ่มใช้งาน โปรแกรมมันจะ crash .. อาการนี้เป็นปัญหา OpenGL rendering เหมือน SketchUp 7 วิธีแก้ก็เหมือนกับเวอร์ชัน 7 คือ ใช้ regedit เข้าไปแก้ใน HKCU\\Software\\Google\\SketchUp8\\GLConfig\\Display คีย์ HW_OK จาก 0 เป็น 1

% regedit

รันอีกครั้งก็จะใช้งาน SketchUp 8 บน WINE on Linux ได้ละ

More screenshots: 1 2

Karmic Koala – Bluetooth – PAN

เพิ่งรู้ว่า Ubuntu 9.10 มัน add bluetooth device แล้วตั้งให้ใช้ต่ออินเทอร์เน็ตได้ด้วย

ก่อนอื่น pair device ให้ได้ก่อน จากนั้นสำหรับ phone profile ตอนท้ายจะมี checkbox เพื่อเลือกว่าเอาไปต่ออินเทอร์เน็ตได้

แล้วมันจะโผล่มาที่ Network Manager เลย .. :D

กรณีข้าน้อยเป็น WM6 ก็เรียก Internet Sharing มารอ จากนั้นคลิ้กต่อจาก Network Manager ได้เลย ไม่ต้องลำบาก pand -c xx:xx:xx:xx:xx:xx อีกแล้ว

Yes, DTAC runs IPv6 too.

Netbook and H.264 HD Video

Cannot playback H.264 HD Video on your netbook ? Try mplayer-mt. It is multithreaded version of mplayer that allows to utilize multiple CPUs/cores. For Ubuntu people, try mplayer-mt from RVM ‘testing’ PPA repos. The others, try google or compile from git/svn.

After install mplayer-mt, add a line in ~/.mplayer/config:

lavdopts=skipframe=default:skiploopfilter=all:fast=1:threads=2

Or, run mplayer-mt on command line, e.g.:

$ mplayer-mt
  -lavdopts=skipframe=default:skiploopfilter=all:fast=1:threads=2
  path/to/media/file

Using XV should utilize about 2-4% of the Atom CPU to playback on 1024×600 fullscreen resolution. Using ALSA should eliminate PulseAudio overhead. The skipframe and skiploopfilter dramatically reduce CPU utilization required to decode H.264 video stream (it may introduce visible artifacts though). The threads=2 enables mplayer-mt to utilize multiple CPUs/cores.

With this setup, my netbook (Acer Aspire One D150 – Intel Atom N280 1.66 GHz, 2 GB RAM, GMA950) is capable to smoothly playback 4000 kbps H.264 video @ 1280×800 with 640 kbps AC3 audio. No "Your system is too SLOW to play this!" message. Cool eh ?

In fact, something like 6 GB BluRay-rip movies in MKV format (i.e. 6000 kbps H.264 video @ 1280×800 with 1536 kbps DTS audio) are also playable on the netbook. Full HD is also possible. To playback such higher bitrates, mplayer-mt may drop some frames and complain "Your system is too SLOW", but it will try to keep A-V sync’ed, producing acceptable video quality.

Using skipframe=nonref can reduce CPU utilization even more, but video may be jerky. The skipframe=bidir / nonkey / all also reduces CPU utilization but will seriously degrade video to something beyond recognition.

YMMV, so try it yourself. Install mplayer-mt on your netbook and have fun watching HD (or even Full HD) video :D

For encoding/transcoding, yes, mencoder-mt does exist.

JavaScript Benchmark

ทดสอบโดย http://celtickane.com/labs/web-browser-javascript-benchmark บน Acer Aspire One D150 (Atom N280 @ 1.667 GHz) ใช้ Linux 2.6.30, Ubuntu 9.04

  • Firefox 3.0.10
  • Firefox 3.5b4pre (Shiretoko)
  • Opera 10.0 build 4102
  • Google Chrome 3.0.183.1

ได้ผลลัพธ์เป็นเวลาในการประมวลผลในแกน Y หน่วย milliseconds ทดสอบ10 ครั้งแล้วเอาค่าเฉลี่ยมาทำกราฟ

Setup Stratum-1 Time Server

พรบ.คอมฯ 50 กำหนดไว้ว่าผู้ให้บริการต้องเก็บข้อมูลจราจรคอมพิวเตอร์ โดยมีความคลาดเคลื่อนของเวลาไม่เกิน 10 msec. จากเวลาอ้างอิง (stratum-0) ซึ่งเป็นเวลาที่ได้จากนาฬิกาอะตอม .. time source ที่เป็นนาฬิกาอะตอมไม่ได้หายากอย่างที่คิด สัญญาณจากดาวเทียม GPS ก็เป็นเวลาที่ได้จากนาฬิกาอะตอมเหมือนกัน ดังนั้นเซ็ต stratum-1 time server ก็แค่ใช้ time source จาก GPS เท่านั้นเอง

เพิ่งได้ USB GPS receiver แบบไม่มียี่ห้อ มาเมื่อหลายวันก่อน ใช้ชิปของ U-Blox ANTARIS LEA-4S ซึ่ง output เป็น NMEA messages ออกมาทาง USB ได้เลย และส่ง 1-Pulse-Per-Second (1PPS) ได้ด้วย เสียบ USB GPS Receiver เข้าคอมพิวเตอร์ (ติดตั้ง เดเบียน ลินุกซ์) ลอง cat /var/log/syslog หรือ dmesg ก็เห็นข้อความประมาณนี้

...
cdc_acm 1-1:1.0: ttyACM0: USB ACM device
usbcore: registered new driver cdc_acm
drivers/usb/class/cdc-acm.c: v0.25:USB Abstract Control Model driver for USB modems and ISDN adapters
...

แปลได้ว่าลินุกซ์เห็น USB GPS receiver เชื่อมกับ USB แล้ว และกำหนด device เป็น /dev/ttyACM0 ลอง

$ lsusb
...
Bus 001 Device 002: ID 1546:01a4 U-Blox AG
...

จะเห็นว่าลินุกซ์รู้จัก U-Blox AG. ด้วย ..ว่าแล้วก็ cat /dev/ttyACM0 ดูเลย

$ cat /dev/ttyACM0
...
$GPRMC,180032.00,A,1628.32246,N,10249.53339,E,0.362,287.84,261208,,,A*62
$GPVTG,287.84,T,,M,0.362,N,0.671,K,A*3B
$GPGGA,180032.00,1628.32246,N,10249.53339,E,1,04,3.23,226.6,M,-27.1,M,,*76
$GPGSA,A,3,22,32,16,06,,,,,,,,,3.98,3.23,2.31*02
$GPGSV,3,1,11,18,04,149,,14,46,058,,22,37,158,42,30,16,038,*71
$GPGSV,3,2,11,32,31,319,20,31,45,353,,29,11,081,,20,08,321,*7C
$GPGSV,3,3,11,16,55,199,44,03,03,197,33,06,10,185,27*4E
$GPGLL,1628.32246,N,10249.53339,E,180032.00,A,A*6C
$GPZDA,180032.00,26,12,2008,00,00*63
$GPRMC,180033.00,A,1628.32249,N,10249.53329,E,0.191,285.38,261208,,,A*66
$GPVTG,285.38,T,,M,0.191,N,0.354,K,A*32
$GPGGA,180033.00,1628.32249,N,10249.53329,E,1,04,3.24,226.6,M,-27.1,M,,*7E
...

จะเห็นเป็น NMEA messages ขึ้นมา .. ข่าวดีคือ NTP อ่าน NMEA message มาเป็น time source ได้เลย .. ก่อนอื่นลง package ntp ก่อน

$ sudo aptitude install ntp

แก้ไฟล์ /etc/ntp.conf เพิ่ม server ที่ใช้ Generic NMEA driver

server 127.127.20.0
fudge 127.127.20.0 time1 0.0 refid GPS

Restart ntp รอสัก 1-2 นาที แล้ว query ดู

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*GPS_NMEA(0)     .GPS.            0 l   13   64  377    0.000   -2.154   3.517

แปลว่า ntp มัน sync กับ stratum-0 time source ได้ และขึ้นมาเป็น stratum-1 NTP server เรียบร้อย :D

อย่างไรก็ตาม หลังรันเซิร์ฟเวอร์และเก็บสถิติไปสักพักก็พบว่า นาฬิกามันไม่ได้แม่นยำอย่างที่คิด เวลาที่ได้มีความคลาดเคลื่อนแกว่งไปมาในช่วง +/- 4 msec บางจังหวะ peak ไปถึง +/- 20 msec ซึ่งถือว่าเป็น stratum-1 server ที่ performance ไม่ได้เรื่องเท่าไหร่ และยังไม่ได้ตามข้อกำหนดตามกฎหมายด้วย .. สาเหตุความคลาดเคลื่อนคงเพราะ NMEA message ไม่ใช่ time source ที่แม่นยำ .. ถ้าจะให้แม่นยำกว่านี้ ต้องใช้ 1PPS

USB GPS receiver ที่ได้มามันไม่ได้ต่อ 1PPS ออกมาให้ใช้งาน จะใช้ก็ต้องต่อเอง .. สิ่งที่ต้องใช้ก็มี DB-9 connector ตัวเมีย สายไฟ หัวแร้งบัดกรี ตะกั่วบัดกรีนิดหน่อย คู่มือของ U-Blox ANTARIS LEA-4S บอกว่าขา 1-PPS (i.e., TIMEPULSE) อยู่ที่ขา 28 จอเข้ากับขา 1 ของ DB-9 (ขา Data Carrier Detect ของ RS-232) และต่อ ground ของ receiver ไปยังขา 5 (GND) ของ DB-9 connector ก่อนเอาไปต่อก็เอา scope วัดสัญญาณดู สัญญาณ 1PPS จะเป็น pulse low-to-high amplitude 3.3 V ใช้ rising edge บอกวินาที

เมื่อต่อเข้ากับ RS-232 ของเครื่อง แล้วทีนี้จะอ่านสัญญาณ 1PPS ยังไงดี ? .. มีอยู่สามทางเลือก LinuxPPS, GPSD, และ SHMPPS

  • LinuxPPS เป็น PPSAPI implementation ตาม RFC2783 มีผลพลอยได้คือ precision ของนาฬิกาจะเป็น nanosecond แต่ต้อง patch / recompile kernel และอาจจะต้อง patch ntpd อีกด้วย (- -‘)
  • GPSD เป็นอีกทางเลือก ลองแล้วไม่สำเร็จ ทั้งที่ GPSD อ่านสัญญาณ 1PPS จาก /dev/ttyS0 แล้ว แต่มันไม่ signal ไปยัง ntpd .. GPS receiver แบบที่ป้อน 1PPS + NMEA ผ่าน RS-232 เพียวๆ อาจจะใช้กับ GPSD ได้
  • SHMPPS เป็นโปรแกรมอ่าน signal จาก serial/parallel port เลือก signal ได้หลายขา แล้วส่งไปยัง ntpd ผ่านทาง SHM (SHare Memory) .. อันนี้ง่ายสุดแล้ว

ก่อนอื่น แก้/เพิ่ม config ใน /etc/ntp.conf ให้ใช้ SHM driver

server 127.127.28.0 minpoll 4 maxpoll 4 prefer
fudge 127.127.28.0 refid PPS

ดาวน์โหลด shmpps extract / make จะได้ shm_splc2 เป็น binary และมี wrapper scripts อีก 2 ตัว ไม่ต้องสนใจ wrapper script ก็ได้ .. ลองสั่งให้ shm_splc2 อ่านสัญญาณ Data Carrier Detect จาก /dev/ttyS0 กันเลย

$ /usr/local/sbin/shm_splc2 -d /dev/ttyS0 -s -l DCD -u 0 -D &

รอสักพัก

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*SHM(0)          .PPS.            0 l    3   16  377    0.000    0.047   0.003
+GPS_NMEA(0)     .GPS.            0 l   13   64  377    0.000   -2.154   3.517

ทิ้งไว้สักพักใหญ่ๆ .. offset และ jitter จะค่อยๆ ลู่เข้าสู่ 0.000

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*SHM(0)          .PPS.            0 l    3   16  377    0.000    0.000   0.001
 GPS_NMEA(0)     .GPS.            0 l   33   64  377    0.000   -5.702  5.288

ปิดท้าย ดูจากกราฟก็จะเห็นว่ามันไม่ได้ 0.000000 s เสียทีเดียว แต่มีจังหวะแกว่งมากบ้างน้อยบ้าง จะเห็นว่านาฬิกามันไม่เที่ยงก็ต้องดู scale usec ซึ่งเทียบกับ stratum-1 servers ของหลายๆ แห่งก็จะได้ precision ประมาณเดียวกัน และน่าจะเกินพอสำหรับ พรบ. ..

เทียบ Offset ของ NMEA กับ 1PPS (scale: msec)

เทียบ Jitter ของ NMEA กับ 1PPS (scale: msec)

Offset ของ 1PPS (scale: usec)

Jitter ของ 1PPS (scale: usec)

GPS and Linux

ได้ USB GPS receiver มา (ของ ยี่ห้อนี้) ไม่ต้องคิดมาก เสียบ แล้ว dmesg ดู

$ dmesg
[157930.448089] usb 2-1: new full speed USB device using uhci_hcd and address 3
[157930.612998] usb 2-1: configuration #1 chosen from 1 choice
[157930.718842] cdc_acm 2-1:1.0: ttyACM0: USB ACM device
[157930.726652] usbcore: registered new interface driver cdc_acm
[157930.727462] cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters

อ่อ มี ttyACM0 … cat ดูโลด

$ cat /dev/ttyACM0
$GPRMC,115258.00,A,1628.33537,N,10249.54838,E,0.155,223.32,081208...
$GPVTG,223.32,T,,M,0.155,N,0.288,K,A*3C
$GPGGA,115258.00,1628.33537,N,10249.54838,E,1,08,1.68,185.0,M,-27.1....
$GPGSA,A,3,26,24,15,12,05,29,10,30,,,,,2.29,1.68,1.56*0F
$GPGSV,3,1,12,26,60,037,19,24,49,356,18,15,80,028,22,02,29,105,*7F
$GPGSV,3,2,12,12,08,193,22,05,08,205,33,18,20,278,17,29,59,280,22*7C
$GPGSV,3,3,12,10,22,041,13,21,15,320,19,30,09,228,21,09,21,169,20*75
$GPGLL,1628.33537,N,10249.54838,E,115258.00,A,A*63
...

อืมมม NMEA message มาเลย :) .. งั้น GPSd เลยดีกว่า

$ sudo aptitude install gpsd gpsd-clients

ลอง man แล้ว run แล้วไม่ work แฮะ .. ถาม อ.กู้เห็นบางคนเขาจะ set speed ก่อน

$ stty -F /dev/ttyACM0 ispeed 9600
$ gpsd /dev/ttyACM0

ทีนี้ก็

$ cgps

ได้ผลเป็นแบบนี้

หรือจะ

$ xgps

หรือจะลอง tangoGPS

More tangoGPS screenshot: Street Map | Arial | Topo