วันศุกร์ที่ 22 สิงหาคม พ.ศ. 2557

Laravel - PHP Web Development Framework เรามาดูกัน

Laravel ดียังไง เจ๋งยังไง หรือว่ามีข้อเสียที่ตรงไหน ?


สำหรับมือใหม่ Laravel คืออะไร

สั้นๆก็คือว่า Laravel เป็น Web development framework ตัวหนึ่งในตลาดที่กำลังได้รับความนิยมมาก ณ ขณะนี้ เราอาจจะเคยรู้จัก CodeIgniter กันมาก่อนแล้ว ซึ่งก็ hot hit ไม่แพ้กันเลยทีเดียวในช่วงหลายปีที่ผ่านมา Framework 2 ตัวนี้มีความเหมือนกันคือ พัฒนามาจากภาษา PHP และเป็น open source ซึ่งเราสามารถศึกษาเข้าไปถึงการทำงานภายในได้ หากสนใจ เพราะ souce code ทั้งหมด มีมาให้อยู่แล้ว

สนใจติดตั้ง Laravel อ่านที่นี่

อยากทราบข้อมูลเปรียบเทียบ PHP Framework อ่านที่นี่

ข้อดีของ Laravel

  • มีเครื่องไม้เครื่องมือ ที่ช่วยให้ developer ทำงานได้เร็วขึ้น ไม่ต้องสนในส่วนอื่นๆ ที่ไม่ใช่ business logic เพราะเครื่องมือพื้นฐานอื่นๆ มีให้ครบครันอยู่แล้ว (ออกจะมากไปด้วยซ้ำ)
    • มีการรองรับ HTTP foundation ด้วย Symfony 
    • SwiftMailer สำหรับการส่งอีเมล
    • Carbon สำหรับการจัดการเรื่องวันที่ เวลา การแสดงผลในรูปแบบต่างๆ
    • Doctrine, Eloquent ที่ทำให้เรื่องยุ่งๆ เกี่ยวกับ database เป็นเรื่องง่ายๆ
    • ทำงานร่วมกับ  Composer Dependency Manager ได้เป็นอย่างดี ทำให้การอัพเดท เพิ่ม ลด module เป็นไปอย่างง่ายด้วย
  • ถูกออกแบบมาให้มี Testability คือ สามารถผนวก unit test เข้าไปได้อย่างง่ายดาย และเพิ่มความสามารถให้เปลี่ยน object ที่ทำงานได้ ขณะ run time ซึ่งทำให้การทำ unit test ถือว่าง่ายกว่า framework ตัวอื่นๆ concept ที่ว่านี้ คือ dependency injection หรือ IoC Container
  • Routing มีความยือหยุ่นสูง รองรับการทำงานได้ทุกรูปแบบ  HTTP GET, POST, PUT, DELETE หรือแบบ RESTFul ก็รองรับได้ทั้งหมด
  • Configuration management มีวิธีการรองรับ การ configure ที่แตกต่างกันในหลายๆ environment โดยที่ไม่ต้อง build package ใหม่ หรือแก้ไขอะไรที่ต้องผูกกับ environment เพราะสามารถ detect environment และเลือกค่าที่ถูกต้องมาใช้ได้แบบทันที
  • Template engine - Blade ช่วยให้การจัดเรียง code หน้า HTML ง่ายขึ้น และการดึงค่าจากตัวแปรมาใช้ในการแสดงผลง่ายขึ้น อีกทั้งยังรองรับการ reuse template เป็นอย่างดี เพราะสามารถ ใช้วิธีการ extend template และ include ได้ด้วย
  • Authentication มี built-in มาให้เลย รวมถึงระบบการส่งเมลเปลี่ยนพาสเวิร์ดด้วย
  • ระบบ Cache สามารถทำงานร่วมกับ Redis ได้เลย
  • มีระบบ Queues ฝังมาให้เลย เพื่อให้รองรับการทำงานที่เป็น batch ใหญ่ๆ ป้องกันไม่ให้ application ทำงานช้า หรือ block ขณะทำงาน รองรับ  Amazon SQS and IronMQ ด้วย

ข้อเสียของ Laravel
  • เนื่องจากมีเครื่องมือให้ใช้มากมาย ทำให้ผู้เริ่มต้น ต้องใช้เวลามากนิดหน่อย กว่าจะทำความคุ้นเคยได้
  • บางครั้ง เครื่องมือที่มีมาให้ ก็ไม่ได้จำเป็นไปซะทั้งหมด ทำให้เรามีส่วนของโค้ดที่ไม่ได้ใช้งานอยู่
  • เรื่อง performance - Laravel ไม่ใช่ PHP Framework ที่เร็วที่สุด (แต่ก็ไม่ได้ช้าที่สุด) ผู้ใช้งาน ต้องมีความรู้ในการปรับแต่งระบบ ให้ทำงานร่วมกับ Laravel ได้ดี
  • เนื่องจาก Laravel ก็ไม่ได้โดดเด่นเรื่องความเร็วหรือ performance ทางออกก็คือ มี server ที่ปรับแต่งขึ้นมาเพื่อให้บริการสำหรับ web application ที่พัฒนาด้วย Laravel โดยเฉพาะ ที่นิยมที่สุดในขณะนี้ ก็จะเป็น Forge ร่วมกับ DigitalOcean หรือ Linode 

โดยสรุป Laravel ยังเป็น framework ที่ยังมีอนาคตอีกไกล เราต้องรอดูต่อไปว่า Laravel จะพาเราไปยังดินแดนแห่งใหม่ได้ไกลแค่ไหน หรือจะมี PHP Framework ตัวใหม่ที่เจ๋งกว่านี้ มาให้เรียนรู้กันอีก





วันจันทร์ที่ 18 สิงหาคม พ.ศ. 2557

git คืออะไร และมันดียังไง

Git เครื่องมือสุดเจ๋ง ในการทำงานร่วมกันเป็นทีม

หากท่านทำงานอยู่ในสายอาชีพนักพัฒนาซอฟต์แวร์ และมีอายุการทำงานมานานกว่า 10 ปี หรือราวๆนี้ ท่านก็คงเคยผ่านยุคของ CVS / Subversion มาแล้ว

CVS / Subversion ถือเป็น versioning control system ยุคแรก ที่มีการทำงานเป็นแบบทุกอย่างรวมอยู่ที่ศูนย์กลาง คือ ต้องมี server แม่ข่ายอยู่ 1 แห่ง และทุกคนที่ทำงานร่วมกันใน project เดียวกัน ก็สามารถแบ่งปันข้อมูล อัพเดทไฟล์งานของตนเอง และเห็นการทำงานของเพื่อนๆได้ โดยมีเครื่อง server แม่ข่ายนี้เป็นศูนย์กลาง ข้อเสียก็คือ หากวันใดที่ server นี้ มีปัญหา ไม่สามารถใช้งานได้ตามปกติ ก็จะทำให้การทำงานของ project ต้องมีเหตุให้หยุดชะงักลง

ทีนี้พอมาถึงยุคของ git ซื่งปฏิวัติการงานแบบเดิมๆ โดยเปลี่ยนมาเป็นการทำงานแบบกระจาย (distributed) คือ ทุกคนเสมือนมีเครื่อง server อยู่ที่เครื่องของตนเอง ทำให้ปัญหาที่เครื่องศูนย์กลางการทำงานเป็นตัวปัญหาหมดไป ทุกคนสามารถทำงานบนเครื่องของตัวเองได้เสมอ (เว้นเสียแต่ว่าเครื่องตัวเองพังเสียเอง) เมื่อทำงานได้ปริมาณจนเป็นที่พอใจแล้ว จึงค่อยส่งไฟล์ของตนเองไปให้คนอื่นๆ ที่ทำงานร่วมกัน

ตัวอย่างคำสั่งของ git

git config --global user.name "your name"

git config --global user.email "your_email@domain.com"
git init project1

cd project1

git add file1.txt

git commit -m"First commit"

// Making quicker commit
git commit -am 'this is the commit message'

git commit --all --message='this is the commit message'

ตัวอย่างหน้าจอการทำงานแบบ command line
git example

เริ่มศึกษา git ได้ ที่นี่




วันพฤหัสบดีที่ 18 เมษายน พ.ศ. 2556

Batch image files resizing - using ImageMagick

1. Download ImageMagick http://www.imagemagick.org/script/command-line-tools.php
2. Install it.
3. The convert.exe can be used as command. (C:\Program Files (x86)\ImageMagick-6.8.2-Q16\convert.exe)
4. Syntax: convert.exe <input image file full path> -resize <width>x<height> <output image file full path>
For example: convert.exe d:\input.jpg -resize 200x100 d:\input_resized_200x100.jpg

วันจันทร์ที่ 3 ธันวาคม พ.ศ. 2555

Magento

Magento Terms

Theme - ประกอบด้วย templating files (layout, template, locale) และ skin
app/design - controls how the pages are render
skin - controls visual components

Block - เป็นส่วนประกอบย่อย ที่มีหน้าที่เฉพาะอย่างของใครของมัน มี 2 ประเภท คือ
  • Structural Block - กำหนดโครงสร้างของหน้า เช่น header, footer, left, main area
  • Content Block - กำหนด actual content ของ structural block อีกทีหนึ่ง

Layout - เป็นไฟล์ที่ map ระหว่าง structural block และ content block มี 2 หน้าที่คือ define block ทั้งสองประเภทและกำหนดความสัมพันธ์ระหว่าง block แต่ละ module ใน magento จะมี layout file ของตัวเอง เช่น catalog จะมี catalog.xml

Handles - ในแต่ละ layout จะมีการแยกย่อยเป็น handle หลายๆอัน เช่น <default> handle <catalog_category_default> handle เป็นต้น Magento จะมีการไล่อ่านข้อมูล ตามที่กำหนดใน app/etc/modules/Mage_All.xml


• type – This is the identifier of the module class that defines the functionality of the block. This attribute must not be modified.
• name – This is the name by which other blocks can make reference to the block in which this attribute is assigned (see diagram 3).
• before (and) after – These are two ways to position a content block within a structural block. before=“-” and after=“-” are commands used to position the block accordingly at the very top or very bottom of a structural block.
• template - This attribute determines the template that will represent the functionality of the block in which this attribute is assigned. For instance, if this attributes is assigned ‘catalog/category/view.phtml’, the application will load the ‘app/design/frontend/template/catalog/category/view.phtml template file.

• action – <action> is used to control store-front functionalities such as loading or unloading of a JavaScript. A full list of action methods will soon become available, but in the mean time the best way to learn about the different action methods is by playing around with them in the currently available layout updates.
• as – This is the name by which a template calls the block in which this attribute is assigned. When you see the getChildHtml(‘block_name’) PHP method called from a template, it is referring to the block whose attribute ”as” is assigned the name ‘block_name’. (i.e. The method <?=$this->getChildHtml(‘header’)?> in the a skeleton template correlates to <block as=“header”> ).




Widget - คือ frontend block ที่มีการกำหนดค่าเริ่มต้นบางอย่างไว้แล้ว สามารถแก้ไขได้จาก หน้าของ admin ช่วยให้จัดการกับ theme ได้สะดวกขึ้น โดยที่ผู้ใช้ไม่ต้องรู้เรื่องเทคนิคมากนัก เช่น เจ้าของร้านค้า
ตัวอย่าง - CMS Page Link, CMS Static Block etc.

Simple Product
Configurable Product
Up Sell
Cross Sell

วันพุธที่ 17 ตุลาคม พ.ศ. 2555

ความรู้/note เรื่อง HTML/CSS

POST vs GET ของ Form submission

POST is more secure - Cannot call an action via URL modification.
Using GET, users can modified the URL to call an actions.



Margin vs Padding

สรุปแบบง่ายๆ คือ Margin คือ ระยะห่างระหว่าง element border ของแต่ละ element
ส่วน Padding คือ ระยะห่างระหว่าง content กับ border ของ element หนึ่งๆ
link1
link2

"Margin is on the outside of block elements while padding is on the inside.
use margin to separate the block from things outside it, padding to move the contents away from the edges of the block." from stackoverflow


CSS - Margin Property เซตได้กี่แบบ

Examples:
  • margin:10px 5px 15px 20px;
    • top margin is 10px
    • right margin is 5px
    • bottom margin is 15px
    • left margin is 20px
  • margin:10px 5px 15px;
    • top margin is 10px
    • right and left margins are 5px
    • bottom margin is 15px
  • margin:10px 5px;
    • top and bottom margins are 10px
    • right and left margins are 5px
  • margin:10px;
    • all four margins are 10px
Note: Negative values are allowed. And default value is 0.



CSS - Overflow Property

Overflow ใช้กำหนดว่า เมื่อ content ล้นออกมาจาก element box จะให้แสดงผลอย่างไร

ValueDescriptionPlay it
visibleThe overflow is not clipped. It renders outside the element's box. This is defaultPlay it »
hiddenThe overflow is clipped, and the rest of the content will be invisiblePlay it »
scrollThe overflow is clipped, but a scroll-bar is added to see the rest of the contentPlay it »
autoIf overflow is clipped, a scroll-bar should be added to see the rest of the contentPlay it »
inheritSpecifies that the value of the overflow property should be inherited from the parent element


CSS - float Property

คุณสมบัตินี้ กำหนดว่า box of element ควรจะลอยหรือไม่

ValueDescriptionPlay it
leftThe element floats to the leftPlay it »
rightThe element floats the rightPlay it »
noneThe element is not floated, and will be displayed just where it occurs in the text. This is defaultPlay it »
inheritSpecifies that the value of the float property should be inherited from the parent element

http://www.w3schools.com/cssref/pr_class_float.asp


CSS - em vs px

หน่วย em แปรผันตามขนาดของ font-size เช่น ถ้า font-size คือ 12, 1 em คือ 12 ด้วย มักใช้เพื่อ mobile-device-friendly

หน่วย px ไม่เป็นแบบ scalable แต่เป็น fixed-size. 1 px คือ 1 จุดบนหน้าจอ


วันจันทร์ที่ 15 ตุลาคม พ.ศ. 2555

สุดยอด Paid Editor - Sublime Text 2

ผมเองเพิ่งจะมีโอกาสได้เรียนรู้การพัฒนาเว็บ HTML และ CSS อย่างจริงจัง ระหว่างที่เรียนรู้ด้วยตนเอง ก็ไปพบ Editor ตัวหนึ่ง ที่ทรงพลังมากๆ (แต่ว่าถ้าอยากเป็นเจ้าของต้องเสียเงินซื้อนะ) สามารถโหลดมาใช้ฟรีได้ เวลาใช้ไปเรื่อยๆ บางครั้งจะมี dialog ขึ้นเตือนว่ามันเป็น Unregistered version ก็กด Cancel ไป ก็สามารถใช้ต่อได้ ส่วนตัวผมแนะนำให้ซื้อนะครับ คุ้มค่า คุ้มราคามากๆอยู่แล้ว

สำหรับใครที่อยากลอง download ไปลองใช้ดู
http://www.sublimetext.com/2
สนนราคาอยู่ที่ $59 USD (ราคา ณ ปัจจุบัน เป็นเงินไทย)
http://www.sublimetext.com/buy

ที่นี้ถามว่ามันพิเศษยังไง? ลองดูรายละเอียดเต็มๆได้จาก http://www.sublimetext.com/
ผมจะพูดเฉพาะ feature ที่ผมประทับใจละกัน


  1. เลือกแก้ไขแบบ Multiple Selections ได้ ซึ่งระหว่างการพัฒนา code ต่างๆ บ่อยครั้งเรามีความต้องการที่จะแก้ไข code ทีเดียวหลายๆแห่งพร้อมๆกัน แต่ Editor ส่วนใหญ่ ให้ไม่ได้
  2. Cross Platform คือ สามารถใช้บน ระบบปฏิบัติการอะไรก็ได้ (ผมใช้ทั้ง Windows และ Mac) ซึ่งตอบโจทย์ของผมได้ดีทีเดียว
  3. ความสามารถในการค้นหาไฟล์และ code ส่วนที่เราต้องการลงไปแก้ไปหรือไปลงไปดู ได้อย่างรวดเร็ว โดยใช้ Ctrl+P
  4. มี Plug-in เจ๋งๆ มากมาย โดยเฉพาะ Zen Coding ที่ทำให้การพัฒนาเว็บด้วย HTML รวดเร็วมากๆ
วันนี้พอเท่านี้ก่อนละกันครับ


วันพุธที่ 10 ตุลาคม พ.ศ. 2555

เริ่มต้นที่เป้าหมายชีวิต

ผมเชื่อว่าคนส่วนใหญ่(รวมทั้งตัวผมเอง) เคยถามคำถามนี้กับตัวเองทั้งนั้นว่า

"เราเกิดมาทำไม?"

ผมเชื่อว่า...คำตอบที่ถูกต้องไม่ได้มีคำตอบเดียว
ไม่ว่าคำตอบของคุณจะเป็นเช่นไร...
ถ้าคุณตอบคำถามนี้...ด้วยแนวทางที่ผมจะแบ่งปันให้ 
ผมว่ายังไงคุณก็สามารถตัด ตัวเลือก ที่ผิดออกไปได้แน่นอน

เฉลยของผมก็คือ:

  1. เริ่มต้นที่การตั้งเป้าหมายชีวิต - ถามตัวเอง(อย่างจริงจัง)ว่าต้องการอะไรในชีวิต ขนาดคุณจะเดินทางไปที่ไหนสักแห่ง คุณก็มีการตั้งเป้าหมายแล้ว ทำไมคุณถึงไม่ตั้งเป้าหมายให้กับชีวิตคุณล่ะ?
  2. ใส่รายละเอียดให้กับเป้าหมาย เช่น บ้าน พร้อมที่ดิน 1 ไร่ ในกรุงเทพฯ
  3. กำหนดเวลาให้กับเป้าหมาย เช่น ก่อนอายุ 35 ปี ฉันจะต้องมี...
  4. เลือกเครื่องมือ/วิธีการ/โค้ช ที่จะทำให้ได้เป้าหมายนั้นภายในระยะเวลาที่กำหนด ถ้ายังไม่รู้ อย่างน้อยๆ ก็หาหนังสือของคนที่ประสบความสำเร็จในชีวิตมาอ่าน เพื่อสร้างความรู้ใหม่ๆ สร้างโอกาส สร้างโชคดีให้กับตนเอง

อย่างไรก็ดี เป้าหมายในชีวิต ควรจะให้ความสุขกับคุณได้จริงๆเมื่อได้มันมา โดยที่ไม่เบียดเบียนคนอื่นและไม่ได้ตั้งอยู่บนความโลภ บางคนอาจบอกว่า เป้าหมายที่เป็น บ้าน รถ เงิน นั้นแสดงถึงความไม่พอเพียงหรือเปล่า 
คำตอบของผมคือ คนเราจะได้ในสิ่งที่ตนเองคู่ควรเท่านั้น ใครที่มีความตั้งใจในการทำเป้าหมายให้สำเร็จ พัฒนาตนเองอยู่เสมอ ก็ควรจะมีชีวิตที่ดีขึ้น มีอะไรๆมากขึ้นในระดับที่เหมาะสมกับสิ่งที่ได้ทำลงไป 

เมื่อทำอะไรจนเพียงพอ(กับเป้าหมายที่ตั้งไว้) เค้าจะมีชีวิตอยู่ได้อย่างพอเพียง

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