Showing posts with label 2015.
The year in review 2015

Năm 2015 sắp kết thúc và năm mới đang đến gần, mà đây là thời điểm chúng ta nhìn lại một năm vừa rồi. Có rất nhiều câu hỏi đặt ra, như tôi đang làm việc gì? Tôi làm ra cái gì? Tôi đã gây những lỗi lầm gì? Tôi …

Exploring Python decorators

Decorator trong Python được sử dụng khá nhiều, tuy nhiên nó cũng hơi khó hiểu một chút. Decorator cho chúng ta một cú pháp đơn giản để gọi các hàm bậc cao (higher-order functions). Về mặt lý thuyết, một decorator là một hàm nhận tham số đầu vào là một …

The editor war - the oldest rivalry in computing

Hãy tạm quên đi những cuộc cạnh tranh như Apple vs Samsung, hay Microsoft vs Apple. Trong bài viết này, chúng ta sẽ đề cập đến một cuộc cạnh tranh khác, một cuộc cạnh tranh kéo dài hàng thập kỷ, và kết quả là, nhờ đó, chúng ta có những …

Vim and Python - a match made in heaven

Vài ngày trước, tôi đã viết bài hướng dẫn cấu hình Emacs, trong bài viết này tôi sẽ giới thiệu một môi trường phát triển phát triển Python nữa. Đó chính là Vim. Vim rất phổ biến, nhanh, nhẹ và không bao giờ bị crash. Và nó có thể làm …

Web scraping and crawling with Scrapy and SQLAlchemy

Trong bài viết này, tôi sẽ giới thiệu cách xây dựng một công cụ scraping và crawling Web. Dữ liệu sẽ được thu về từ Stack Overflow và chúng ta sẽ trích xuất những câu hỏi mới nhất (Tiêu đề và URL). Dữ liệu thu được sẽ được lưu vào …

Emacs can be the best editor for Python?

Trong bài viết này, tôi sẽ giới thiệu một editor rất mạnh mẽ cho việc phát triển với Python, đó là Emacs. Thế giới vẫn còn nhiều tranh luận xung quanh việc Emacs hay Vim, đâu là editor tốt nhất. Ở trong bài viết này, tôi sẽ không tham gia …

Test Driven Development

Test-driven development (TDD) là một kỹ thuật tiên tiến sử dụng các unit test tự động để dẫn dắt quá trình design và phát triển phần mềm và tách biệt các phụ thuộc. Kết quản của việc sử dụng kỹ thuật này là một bộ đầy đủ các test có …

Grunt and 5 tasks to improve web performance

Hiệu suất và hoạt động mượt mà là một yếu tố rất quan trọng với 1 trang Web. Trong bài viết này, tôi sẽ hướng dẫn 1 số task của Grunt giúp cải thiệu hiệu suất của trang Web mà cụ thể ở đây là tốc độ tải trang.

Tốc …

Set up DynamoDB on local environment

Would you like to be able to write and test code that uses the Amazon DynamoDB API even if you have no network connection and without incurring any usage charges.

If so, you are in need of DynamoDB local test tool. DynamoDB Local is a client-side database that supports the …

Fix MacBook Pro keyboard backlight

MacBook Pro của mình vừa bị hỏng đèn nền bàn phím. May mà cuối cùng cũng đã sửa được. Mình viết lại bài này, để ai gặp vấn đề không may như mình có thể tham khảo để giải quyết, đỡ tốn tiền thuê người sửa. Tuy nhiên, vấn đề …

Placeholder on IE8

Việc phát triển một trang Web phải support những trình duyệt "cổ lỗ sĩ" như IE8 đúng là bài toán nan giải. Nhưng có những lúc chúng ta không làm không được. Trong bài viết này, tôi sẽ giới thiệu một kỹ thuật có thể làm IE8 hoạt động tính …

Phu Quoc travel

Hihi. Vậy là vừa trở về từ chuyến đi Phú Quốc 4 ngày 3 đêm. Có nhiều việc để nói quá. Thế nên cần phải viết ngay một bài cho nóng, coi như vừa để chia sẻ, vừa để lưu giữ kỷ niệm sau này có cái mà khoe với …

Hash length Extension Attacks

Hash length extension attack - tấn công mở rộng độ dài hash là một kỹ thuật tấn công vào kỹ thuật MAC (Message Authenticate Code). Đây là kỹ thuật tấn công khai thác lỗ hổng của các thuật toán mã hoá một chiều (hash). Sử dụng cách tấn công này, những …

Web development with Cherrypy and Jinja2

Trong bài viết này, tôi sẽ giới thiệu một framework để phát triển Web - CherryPy - một framework được viết cho Python. Tôi sẽ không đi sâu vào phân tích và so sánh với các framework khác và các ngôn ngữ khác và tại sao bạn nên sử dụng framework này …

KSNCTF write up

Cuộc thi CTF lần đầu tiên được tổ chức tại hội thảo bảo mật nổi tiếng DefCon (Mỹ) lần thứ 5 năm 1997. Ngày nay hàng năm có rất nhiều các cuộc thi CTF được tổ chức trên toàn thế giới theo các quy mô khác nhau. Đơn vị tổ …