Tham, sân, si

Tham là khi mình ham muốn, mong muốn nhiều quá, khi lòng mình còn nhiều những ước muốn ích kỷ...

Sân là khi mọi chuyện không như mình suy nghĩ, không như mình mong muốn thì sinh ra buồn bã, cáu giận để rồi nảy sinh trong lòng những suy nghĩ viển vông và vô vàn các giả thuyết...

Si là khi mình say mê, đam mê điều gì đó mà lý trí không còn hoàn toàn sáng suốt nữa...

Vì thế nên mình khổ!

Nhưng...

Nếu bớt tham thì trong lòng nguội lạnh, không còn mong muốn, không còn ước muốn cho mình, liệu rồi điều đó có trở nên vô nghĩa không?

Nếu bớt sân thì mình sẽ quên những cảm xúc thành thực, quên những vui buồn, những thăng hoa, rồi có lẽ mình sẽ trở nên vô cảm hay hời hợt?

Nếu bớt si, bớt đi đam mê, bớt đi say mê, bớt đi sự cuồng nhiệt thì mình không cam lòng, thực sự không cam lòng!

Như ngọn lửa đốt tim gan, những cồn cào này... liệu có ai biết được!

Những khắc khoải...

"Nếu em hiểu, tôi đã buồn"...

Mời tham gia nhóm Hanoi WordPress Meetup

Tất cả bắt đầu từ...

WordPress - ai cũng biết đó là 1 open source nổi tiếng, vốn xuất phát dành cho blogging, và giờ đã trở thành 1 CMS hàng đầu. Và hậu thuẫn cho nó là công ty Automatic và cộng đồng người dùng trên toàn thế giới.

Nó mạnh lên là nhờ cộng đồng này, không phải nhờ thứ gì khác! Họ đã tạo ra các chương trình WordCamp để gặp gỡ, giao lưu, chia sẻ và trao đổi những tâm đắc, những kỹ thuật trong quá trình họ sử dụng, làm việc với WordPress. Từ những chia sẻ nhỏ nhất cho người mới dùng đến những kỹ thuật phải là người lâu năm có kinh nghiệm mới nắm bắt được. Họ đều đem ra chia sẻ với nhau, rất vui vẻ và hòa đồng.

Ở Việt Nam chưa có WordCamp như vậy. Thế nhưng không phải vì thế mà chúng ta không có những con người yêu mến và làm việc với WordPress. Chỉ là cộng đồng của chúng ta chưa vững mạnh mà thôi.

Đến một ngày...

Một ngày cách đây đã 4-5 tháng, khi mà tôi nhận được 1 lời mời tham gia nhóm Hanoi WordPress Meetup. Nhóm này được 1 người nước ngoài khởi xướng (kể cũng ngại, mình là người Việt Nam, nhưng lại để 1 người nước ngoài khởi xướng phong trào) - cậu ta tên Phillip, một người làm việc tại Automatic (công ty mẹ đẻ của WordPress) đang sinh sống tại Hà Nội. Các thành viên ban đầu của nhóm có thể kể đến nhóm Joomlart (rất nổi tiếng với các template Joomla), một số bạn từ các công ty hosting có quan tâm đến WordPress và một vài developer như tôi. Các bạn có thể xem danh sách thành viên ở đây: http://www.hnwp.org/members/

Hiện tại...

Nhóm đã gặp mặt được 2 lần, và các thành viên cũng hiểu biết về nhau rất tốt. Chỉ một quán cafe, 1 vài cái laptop, điện thoại và sự cởi mở - đó là tất cả những gì mà nhóm có được trong những lần gặp gỡ đó. Trong lần gặp thứ 2 vừa rồi (thứ 4 tuần trước), có 1 nhóm các bạn trẻ làm WordPress Nhật Bản cũng tham dự - khiến nhóm trao đổi rất hào hứng!

Trao đổi của nhóm xoay quanh WordPress và các vấn đề liên quan, như là kinh nghiệm làm việc, cách tìm kiếm khách hàng, nhận xét về 1 số xu thế mới. Hay là hỏi han kinh nghiệm đi du lịch như với nhóm bạn Nhật Bản vừa rồi...

Tương lai...

Nhóm Hanoi WordPress Meetup đang hướng tới việc tạo dựng 1 cộng đồng những người cùng làm, sử dụng, quan tâm tới WordPress hùng mạnh. Có thể gặp gỡ vui vẻ, chia sẻ hay đơn giản là biết nhau. Nếu bạn đã từng dùng WordPress, hay chỉ đơn thuần là quan tâm hoặc yêu thích nó, hay gia nhập với chúng tôi tại http://www.hnwp.org.

Trong thời gian tới, nhóm dự định sẽ làm 1 vài project cho cộng đồng (như việc dịch WordPress sang hoàn toàn tiếng Việt) và sẽ có những buổi chia sẻ kinh nghiệm, hay hướng dẫn các bạn mới dùng WordPress nhiều hơn.

Vì thế nếu bạn là:
theme developer...
plugin developer...
user...
blogger...
host provider...
anyone...

Hãy gia nhập với chúng tôi tại http://www.hnwp.org! Một vòng tay mở rộng luôn chào đón các bạn! Nơi đâu có bạn, nơi đó có chúng tôi!

Cutter.js - Công cụ để tạo Auto Readmore cho Blogger tốt ?

Tôi vừa mới nhận được tin giới thiệu 1 thư viện Javascript mới: Cutter.js. Theo lời giới thiệu thì thư viện này thì nó có thể cắt ngắn đoạn text mà không làm mất đi các thẻ HTML và định dạng của chúng. Thiết nghĩ cái này có ích cho việc làm auto readmore cho Blogger, nên gửi lên đây để mọi người cùng tham khảo.

Ở cách làm auto readmore cũ, chúng ta thường loại bỏ hoàn toàn các thẻ HTML để thu được đoạn text đơn thuần (plain text), từ đó áp dụng các hàm cắt xâu để thu được 1 đoạn trích dẫn ngắn mà không sợ bị lỗi. Nhược điểm kiểu làm này là do ta tước đoạt hết các thẻ HTML và định dạng nên không còn các định dạng chữ đậm, nghiêng, ...

Với cách dùng Cutter.js (mới chỉ là ý tưởng, chưa làm thành sản phẩm) thì có thể khắc phục được điều này. Vừa giữ được định dạng, vừa có đoạn trích dẫn phù hợp.

Hiện tại chưa có ai phát triển theo ý tưởng này, tôi chắc cũng không làm vì không cần dùng mấy :D, nên hy vọng ai đó đọc được bài này và có nhu cầu thì sẽ phát triển ra 1 ý tưởng cho cộng đồng Blogger.

PS: Đối với ai đã dùng Readmore được hỗ trợ sẵn của Blogger thì có lẽ các loại auto readmore này không còn cần thiết nữa.

Mời làm việc với WordPress

Mặc dù Hỗn tạp Blog được tạo dựng và chạy trên nền Blogger, nhưng nền tảng blog chính mà tôi yêu thích lại là WordPress. Hiện tại, tôi đang làm một số việc liên quan tới WordPress, chủ yếu là làm freelance (làm việc cho khách hàng từ xa, nếu bạn chưa biết thuật ngữ này thì hãy Google nhé) và cần tìm người làm cùng do khối lượng công việc đang tăng dần lên mà sức (và thời gian) thì có hạn.

Nội dung công việc cụ thể như sau:

1. Phạm vi công việc:

Công việc chỉ gồm 2 loại: development & design. Tôi thì ngả về bên development. Vì thế các công việc chủ yếu liên quan tới development, đại loại như:
- viết plugin
- modify 1 plugin sẵn có để phù hợp với chức năng được yêu cầu
- viết / tích hợp các script khác để mở rộng chức năng của WordPress

Ngoài ra cũng có 1 số công việc liên quan đến design như sau:
- convert PSD sang theme WordPress
- chỉnh sửa giao diện theme WordPress theo yêu cầu

Vì đây là làm freelance nên các công việc có thể không được cụ thể, rành mạch và phụ thuộc nhiều vào yêu cầu của khách hàng.

2. Yêu cầu khi tham gia:

Vì mong muốn có chất lượng công việc tốt, nên trước khi các bạn có ý định tham gia, hãy trả lời vài câu hỏi sau, nếu tất cả các đáp án là Đúng thì được (chỉ áp dụng cho developer, đối với designer xem phía dưới):

- Bạn làm quen với WordPress được từ 2 năm trở lên không?

Khi tham gia là làm việc luôn, nên thực tế không có thời gian để đào tạo các phần thiếu hụt cho các bạn. Câu hỏi này nhằm nhấn mạnh tầm quan trọng của kinh nghiệm của các bạn.

- Bạn có am hiểu (ở mức độ biết áp dụng đúng) các API của WordPress không? (bao gồm HTTP API, Shortcode API, Widget API, Settings API, WP Query Class, Transient API, ...)

Câu hỏi này liên quan đến chất lượng code các bạn sẽ viết. Không yêu cầu phải quá giỏi, nhưng cần phải biết áp dụng chúng ở những chỗ nào.

- Bạn đã tự mình viết được 1 plugin cho WordPress chưa?

Nếu bạn đọc rất nhiều tutorial mà chưa thực sự bắt tay vào làm 1 plugin nào đó, thì những gì bạn đọc đó không được mài dũa, trau dồi, và nó chưa thực sự trở thành của bạn.

- Code bạn viết có theo 1 coding standards nào không?

WordPress có coding standards của nó, nhưng nếu bạn đang viết code theo 1 chuẩn khác (như của Zend hay PHPVietnam) thì không thành vấn đề. Câu này chủ yếu để xem cách bạn tổ chức code như thế nào. Không ai muốn đọc 1 file code không theo quy ước nào cả, phải không?

Bonus: (không bắt buộc)

- Bạn đã từng develop (bao gồm cả design lẫn develop phần admin) chưa?

Những câu trên dành cho những bạn developer, còn nếu bạn muốn làm về design hơn, thì có vài câu hỏi cho các bạn:

- Bạn có thành thạo HTML & CSS không? (Bao gồm viết HTML semantic, CSS2.1 và CSS3)

Ai làm design chắc chắn phải rất rành những thứ này rồi, nên tôi không giải thích nữa.

- Bạn có sử dụng tốt Javascript hoặc 1 thư viện Javascript nào đó không (jQuery thì càng tốt)?

Phần nhiều các theme WordPress có dính đến các slider, dropdown menu nên các kiến thức về Javascript cũng rất cần thiết.

- Bạn có sử dụng được Photoshop hoặc các phần mềm tương đương không?

Design liên quan rất nhiều đến Photoshop. Ngay cả việc convert từ file PSD sang HTML cũng cần các kỹ năng của Photoshop rồi, chưa nói đến việc tự mình design được nữa. Vì thế câu hỏi này nhất thiết phải được đặt ra.

Bonus (cho cả developer và designer):

- Bạn có website riêng trong đó nói về WordPress hoặc những gì bạn đã làm không?


Cách tham gia


Khi các bạn thấy mình đáp ứng được các yêu cầu trên và muốn tham gia thì hãy gửi email cho tôi tại địa chỉ rilwis@gmail.com. Trong email, các bạn hãy ghi các câu trả lời tương ứng với các câu hỏi trên, đồng thời ghi thêm những khả năng khác mà bạn có thể làm được.

Lưu ý:

1) Xin nhắc lại 1 chút về công việc freelance này, do là làm việc theo yêu cầu khách hàng, nên lượng công việc có thể không đều đặn và không nhiều như mong đợi. Hơn nữa, nó còn có đòi hỏi khá khắt khe về thời gian (khách hàng cần gấp là phải làm gấp). Tuy vậy, đây cũng là nguồn thu nhập thêm cho các bạn nếu yêu thích.

2) Vì mới bắt đầu làm việc kiểu nhóm này, nên có lẽ thời gian đầu tôi mong tìm kiếm được 1-2 bạn tham gia (nhiều quá tôi cũng không có việc cho các bạn :D). Tuy vậy, tôi mong rằng những người tham gia là những người nhiệt tình trong công việc và có khả năng đáp ứng tốt yêu cầu về mặt tiến độ thời gian và chất lượng công việc.

3) Cách thức làm việc và tiền trả sẽ thống nhất sau khi các bạn đã đồng ý tham gia.

4) Tôi hiện ở Hà Nội, nên nếu bạn nào ở Hà Nội đều có thể gặp gỡ trực tiếp để trao đổi thêm. Số điện thoại của tôi: 0987 24 8558, tên: Tuấn Anh.

Hy vọng có thể làm việc cùng các bạn.
Hiện tại tôi vẫn đang tìm người làm việc cùng. Nếu bạn cảm thấy có khả năng và mong muốn làm việc, hãy liên hệ với tôi. Khi nào đủ người, thông báo này sẽ được dỡ bỏ!

Tối giản Javascript

Tôi thường hay theo dõi tin từ Javascript Weekly, nơi thường gửi các email thông báo các tin tức về Javascript được cập nhật trong tuần. Chủ yếu xoay quanh các vấn đề: các bài hướng dẫn, các library mới, và 1 số tin tức.

Tuần vừa rồi, họ có gửi cho tôi 1 email (các bạn có thể xem phiên bản on web tại đây), trong đó có 1 topic khá thú vị, chính là tiêu đề của post này.


Trước khi vào nội dung chính, xin nhấn mạnh 1 chút là 'tối giản' khác với tối ưu. Thực ra thì có thể hiểu tối giản là 1 dạng tối ưu về kích thước. VD bạn có 1 file JS cỡ 10KB, sau đó bạn làm cách nào đó để nó còn 8KB mà hoàn toàn giữ nguyên chức năng, thì việc làm đó gọi là tối giản. Tối ưu thông thường được hiểu theo nghĩa về hiệu suất, nghĩa là cùng với file JS đó, bạn thực hiện 1 phương pháp nào đó khiến cho nó chạy nhanh hơn 30%, ngốn CPU ít hơn 10% thì đó gọi là tối ưu. Thông thường thì tối ưu không đồng nghĩa với tối giản, nghĩa là có lúc bạn phải chấp nhận kích thước file lớn để cho nó chạy nhanh hơn (như kiểu xe máy với xe đạp). Nhưng đôi khi các biện pháp tối giản cũng có ý nghĩa về mặt tối ưu hiệu suất.

Các phương pháp tối giản mã Javascript


Tôi điểm qua 2 phương pháp chính:

  • Minifying
  • Compression

Minifying


Minify nghĩa là làm cho nó 'mini' đi. Thông thường quá trình minify sẽ loại bỏ các ký tự xuống dòng, tab, khoảng trắng thừa và các comment. Các khoảng trắng có thể nằm giữa các dấu gán (=) hay cuối câu lệnh. Đôi khi nó cũng loại bỏ 1 số dấu chấm phẩy (;) không cần thiết, VD của câu lệnh cuối trong block if then, while, ...

Công cụ để minify nổi tiếng nhất là của Douglas Crockford, 1 guru hàng đầu về JS hiện nay. Tool online ở đây. (đừng quên Google để biết thêm vài tool nữa nhé)

Vì việc minify thường chỉ đơn thuần là việc xóa bỏ các ký tự thừa, nên nếu code javascript không chuẩn thì sẽ bị lỗi. Lỗi phổ biến nhất là do thiếu dấu chấm phẩy cuối câu lệnh (JS chấp nhận điều này, nhưng khi minify sẽ biến 2 câu lệnh thành 1). Để kiểm tra xem mã JS có chuẩn không, cách tốt nhất là dùng JSLint, một công cụ khác cũng của Douglas Crockford (tất nhiên là không phải quy tắc nào của JSLint bạn cũng nên tuân theo).

Về khả năng tối giản của minifying thì có thể nhận thấy rằng nó không được nhiều lắm.


Compression


Compression nghĩa là nén. Ở đây hiểu nén khác với đóng gói có mã hóa (pack). Pack có thể đem lại kích thước nhỏ hơn nén, nhưng hiệu suất sẽ bị thiệt, vì browser cần thời gian để giải mã (unpack). Hiện nay tôi thấy ít người dùng pack, trừ phi muốn bảo vệ code cho người khác khỏi xem, còn phần lớn đều dùng nén.

Các công cụ nén JS và pack JS có khá nhiều (bạn google nhé), nhưng nối tiếng nhất có lẽ là YUI Compressor của Yahoo (tôi thường dùng cái này nên gọi nó là nổi tiếng nhất, bạn có thể phản đối tôi ở comment). Gần đây Google có nhảy vào lĩnh vực này với Google Closure Compiler, và thực tế thì nó tối giản tốt hơn YUI Compressor, nhưng để lát nữa tôi sẽ nói kỹ hơn về Google Closure Compiler.

Khi nén JS, phần công việc đầu tiên mà các công cụ này làm là minify code (nghĩa là bạn hoàn toàn có thể quên các tool minify đi, chỉ cần nén là đủ, cũng như việc bạn đọc đoạn trước là không có ý nghĩa lắm :D). Nhưng không chỉ vậy, nó còn thay đổi tên các biến, function, methods (nhưng vẫn đảm bảo các biến global được giữ nguyên) thành dạng 1-2 chữ cái như function a(){};.

Quá trình đổi tên này tất nhiên phức tạp hơn nhiều, vì nó phải đảm bảo tất cả mọi liên kết đến các lời gọi hàm, biến vẫn phải được bảo toàn và hoạt động tốt; bất kể lời gọi đó từ nội bộ script hay từ 1 script khác.

Ngoài ra, YUI Compressor còn gán các biến, hàm, constant hay dùng vào 1 biến để tham chiếu nhanh, và thực hiện 1 số biện pháp tối giản khác. Slide này sẽ cho phép bạn có cái nhìn tổng quan về YUI Compressor.

Các công cụ nén JS khác cũng làm các công việc tương tự. Vấn đề là cái nào làm tốt hơn thôi. Không như minify, vốn gần như chỉ có 1 cách làm duy nhất, việc nén JS khá đa dạng và phụ thuộc nhiều vào thuật toán nén. Để so sánh phương pháp nào tốt hơn đối với mã JS của bạn, công cụ này sẽ hữu ích.

Một vài kỹ thuật tối giản mã JS


Đọc qua phần trên, bạn có thể nắm được phần nào các kỹ thuật tối giản mã JS (nếu không nắm được, bạn rất nên đọc lại). Tuy vậy, các kỹ thuật ấy thường do các tool tự thực hiện và bạn ít phải bận tâm. Nhưng có những thứ mà tool không làm giúp bạn được, và bạn cần phải tự làm bằng tay.

(Bạn rất không nên thực hiện các công việc tối giản ở trên bằng tay, như việc xóa các ký tự thừa, đổi tên, ... vì nó sẽ làm cho đoạn mã của bạn trở nên khó hiểu, rối rắm và sau 1 thời gian nữa, bạn có thể tự hỏi là ai đã viết ra đoạn mã khó chịu như vậy. Hãy để các công cụ tự động làm việc đó thay bạn)

Bây giờ tôi xin quay trở lại với Javascript Weekly đã nói lúc đầu. Newsletter kỳ này có giới thiệu đến trang web 140byt.es, vốn lấy ý tưởng từ Twitter. Website này (hiện đang trong trứng, chưa chính thức hoạt động) nhằm thu thập các đoạn mã JS cực nhỏ, không quá 140 ký tự (là số ký tự tối đa Twitter hạn chế, cũng là số ký tự tối đa mà bạn nhắn tin SMS) nhằm thực hiện 1 việc gì đó.

Do chưa chính thức hoạt động nên tất nhiên chưa có script nào cho chúng ta chiêm ngưỡng. Thế nhưng những người làm ra site này đã viết khá kỳ công 1 trang wiki hướng dẫn những kỹ thuật phổ biến cho việc tối giản mã JS cho những người chuẩn bị submit. Đây là hướng dẫn tốt nhất mà tôi có về lĩnh vực tối giản mã JS này (nếu bạn có 1 hướng dẫn khác hãy cho tôi biết ở comment).

Để tham khảo các kỹ thuật khác có giá trị, hãy xem thêm phần 'Other resources' ở cuối trang wiki đó nhé.

Google Closure Compiler


Nói thêm 1 chút về Google Closure Compiler. Sở dĩ đặt nó ở đây vì Google Closure Compiler có kết hợp 1 số kỹ thuật tối giản mã JS trong phần này. Bạn có thể chạy công cụ này online tại đây.

Cá nhân tôi nhận thấy Google Closure Compiler cho ra kết quả nhỏ gọn hơn YUI Compressor. Có thể do Google Closure Compiler đã làm luôn cả công việc tối giản chính nội dung đoạn mã JS mà chúng ta phải làm bằng tay. Tuy vậy, khó mà khẳng định được nó hơn YUI ở mọi mặt. Tốt nhất mỗi khi có ý định tối giản mã JS, chúng ta cứ thử cả 2 công cụ, cái nào cho kết quả tốt hơn (kích thước nhỏ hơn) thì ta lấy kết quả đó.

Lưu ý nhỏ là Google cũng có những hướng dẫn của riêng mình về việc viết code JS, rất đáng tham khảo.

Showcase những tiny script


Mặc dù chúng ta chưa được xem các script tại 140by.es, nhưng có 1 trang khác cho phép chúng ta coi các demo bằng javascript chỉ với 1KB. Ở đây có rất nhiều (tôi cũng không biết là bao nhiêu, chưa xem được hết) các demo thú vị như hiệu ứng đồ họa, chơi cờ vua, xếp hình, ... chỉ với 1KB JS! Có cả source code cho bạn xem nữa.

Nếu chưa đã mắt, bạn có thể xem thêm các demo với kích thước file tối đa 10KB tại trang web này.

Kết luận


Bài viết này không nhằm trình bày 1 cách chi tiết hay đưa ra các giải pháp copy & paste hoặc step-by-step guide. Nó chỉ là 1 bài tổng hợp các thứ liên quan đến tối giản JS mà thôi. Nếu bạn thực sự quan tâm tới vấn đề này thì việc đơn giản nhất mà bạn có thể làm là follow các link trong bài viết và ngâm cứu chúng. Không dễ dàng lắm đâu ;)