Monday, April 13, 2015

When to Use MongoDB Rather than MySQL (or Other RDBMS): The Billing Example

http://java.dzone.com/articles/when-use-mongodb-rather-mysql

NoSQL is a hot buzz in the air for a pretty long time (well, it's not only a buzz anymore).
However, when should we really use it?
Best Practices for MongoDB
NoSQL products (and among them MongoDB) should be used to meet challenges. If you have one of the following challenges, you should consider MongoDB:
You Expect a High Write Load
MongoDB by default prefers high insert rate over transaction safety. If you need to load tons of data lines with a low business value for each one, MongoDB should fit. Don't do that with $1M transactions recording or at least in these cases do it with an extra safety.
You need High Availability in an Unreliable Environment (Cloud and Real Life)
Setting replicaSet (set of servers that act as Master-Slaves) is easy and fast. Moreover, recovery from a node (or a data center) failure is instant, safe and automatic
You need to Grow Big (and Shard Your Data)
Databases scaling is hard (a single MySQL table performance will degrade when crossing the 5-10GB per table). If you need to partition and shard your database, MongoDB has a built in easy solution for that.
Your Data is Location Based
MongoDB has built in spacial functions, so finding relevant data from specific locations is fast and accurate.
Your Data Set is Going to be Big (starting from 1GB) and Schema is Not Stable
Adding new columns to RDBMS can lock the entire database in some database, or create a major load and performance degradation in other. Usually it happens when table size is larger than 1GB (and can be major pain for a system like BillRun that is described bellow and has several TB in a single table). As MongoDB is schema-less, adding a new field, does not effect old rows (or documents) and will be instant. Other plus is that you do not need a DBA to modify your schema when application changes.

You Don't have a DBA
If you don't have a DBA, and you don't want to normalize your data and do joins, you should consider MongoDB. MongoDB is great for class persistence, as classes can be serialized to JSON and stored AS IS in MongoDB. Note: If you are expecting to go big, please notice that you will need to follow some best practices to avoid pitfalls.
Real World Case Study: Billing
In the last ILMUG, Ofer Cohen presented BillRun, a next generation Open Source billing solution that utilizes MongoDB as its data store. This billing system runs in production in the fastest growing cellular operator in Israel, where it processes over 500M CDRs (call data records) each month. In his presentation Ofer presented how this system utilizes MongoDB advantages:
  1. Schema-less design enables rapid introduction of new CDR types to the system. It let BillRun keep the data store generic.
  2. Scale BillRun production site already manages several TB in a single table, w/o being limited by adding new fields or being limited by growth
  3. Rapid replicaSet enables meeting regulation with easy to setup multi data center DRP and HA solution.
  4. Sharding enables linear and scale out growth w/o running out of budget.
  5. With over 2,000/s CDR inserts, MongoDB architecture is great for a system that must support high insert load. Yet you can guarantee transactions with findAndModify (which is slower) and two-phase commit (application wise).
  6. Developer oriented queries, enable developers write a elegant queries.
  7. Location based is being utilized to analyze users usage and determining where to invest in cellular infrastructure.
Bottom Line
MongoDB is great tool, that should be used in the right scenarios to gain unfair advantage in your market. BillRun is a fine example for that.
Keep Performing,
Moshe Kaplan

Friday, April 3, 2015

Lọc nước nhiễm asen (http://khoahoc.tv/doisong/ung-dung/8974_loc-nuoc-nhiem-asen.aspx)

ới định hướng tìm kiếm loại vật liệu từ khoáng chất tự nhiên để xử lý asen (thạch tín) làm ô nhiễm nước, GS.TS Trần Hồng Côn và cộng sự tại khoa hóa Trường ĐH Khoa học tự nhiên (ĐH Quốc gia Hà Nội) tìm ra nguyên liệu đất sét, đá ong, đá son (limônit) đã được biến tính để chế tạo thành công thiết bị xử lý asen trong nước sinh hoạt.
TS Trần Hồng Côn với thiết bị lọc nước nhiễm asen cỡ nhỏ - (Ảnh: T.Hà)
Bình lọc có cấu tạo như các bình lọc thông thường nhưng bộ cột lọc có tính năng oxy hóa và hấp thụ để giữ lại asen.  Thiết bị lọc này có cấu tạo rất đơn giản, gồm một chiếc thùng có hai ngăn bằng inox. Ngăn thứ nhất (đầu vào) chứa một cột lọc với kích cỡ 75m3 hoặc 300m3 nước. Khi nước chảy qua cột lọc, asen trong nước bị oxy hóa, các hạt đất sét, đá ong và đá son biến tính trong đó sẽ giữ lại asen và mangan. Nước sạch sẽ chảy vào thùng thứ hai, có thể sử dụng.
Với thiết bị nói trên, asen thu hồi triệt để có thể sử dụng vào mục đích khác hoặc đem chôn lấp an toàn. Thiết bị này cũng đã được thử nghiệm để lọc nước giếng khoan tại khu tập thể 51 Cảm Hội, phường Đống Mác, quận Hai Bà Trưng, Hà Nội trong mười ngày liên tục. Kết quả cho thấy trước khi lọc nồng độ asen trong nước tại khu vực trên dao động từ 0,186-0,198mg/l vào mùa khô, sau khi xử lý còn nhỏ hơn 0,01mg/l, dưới giới hạn cho phép của Tổ chức Y tế thế giới (WHO) và tiêu chuẩn VN về asen.
Theo tính toán, thiết bị xử lý asen qui mô hộ gia đình bằng inox có dung tích 20 lít, phục vụ nhu cầu nước ăn uống, giá thành không cao, từ 300.000-400.000 đồng/bình. Trung bình một năm phải thay cột hấp thụ một lần với chi phí khoảng 20.000 đồng.
Có thể liên hệ tiến sĩ Trần Hồng Côn, khoa hóa Trường ĐH Khoa học tự nhiên Hà Nội, 19 Lê Thánh Tông, Hà Nội, ĐT: 04.8245527 - 0989092396. 

Monday, December 15, 2014

shred, securely delete files and device

http://en.wikipedia.org/wiki/Shred_%28Unix%29

Thursday, October 16, 2014

Qui tắc nuôi con đáng phục của mẹ Nhật

1. Trẻ em không cần phải quá thông minh. Thông minh, học giỏi không hẳn là một điều tốt, cái chính là cần có nhân cách tốt.
2. Môi trường nuôi dạy con cái là rất quan trọng. Khó có thể dạy dỗ một đứa trẻ nên người trong một gia đình hay xung đột, một trường học nhiều trẻ hư hay một khu phố có tệ nạn.
3. Không bao giờ hình thành cho trẻ một thói quen xấu. Không thỏa hiệp lợi ích ngắn hạn để hình thành thói quen xấu cho con. Ví dụ như: đứa trẻ không ăn, đừng bao giờ bật tivi cho con xem để xúc cơm. Để đạt được mục đích cho con ăn được thêm vài thìa gạo, mẹ sẽ phải đánh đổi bằng một thói quen xấu rất khó bỏ.
4. Tôn trọng trẻ em, biết đồng cảm với trẻ.
5. Luôn nói sự thật với con. Chỉ cần chú ý đến kỹ năng nói và cách nói là được. Không bao giờ tỏ ra “ngoại giao”, nói dối với người khác trước mặt con trẻ.
6. Không bao giờ thỏa hiệp với con dù biết trẻ sẽ mè nheo, phản đối. Thỏa hiệp chỉ khiến kết quả tồi tệ hơn.
7. Chế độ ăn uống cho con phải cân bằng. Con dưới 1 tuổi sữa vẫn là nguồn dinh dưỡng chính. Hơn 1 tuổi nên ăn 3 bữa một ngày, thực phẩm phải cân bằng và phong phú.
8. Trẻ con không bao giờ để mình bị chết đói. Không cần ép con ăn, lo con đói.
9. Bữa ăn phải được diễn ra trong ghế ăn. Không ngồi thì không ăn.
10. Bổ sung canxi cho trẻ nếu không thiếu thì không cần. Chỉ cần cho con chạy nhảy dưới ánh mặt trời, tắm nắng thường xuyên là được.
11. Cho trẻ mặt quần áo nên mặc nhiều lớp. Như vậy khi con nóng có thể cởi bớt, lạnh có thể khoác thêm. Chơi thể thao toát mồ hôi có thể bỏ ra.
12. Xác định con lạnh hay không bằng cách kiểm tra cổ.
13. Cho trẻ ăn trái cây thường xuyên và mỗi ngày.
14. Khi trẻ có triệu chứng cảm lạnh như chảy nước mũi, chỉ cần liên tục nhỏ thuốc muối sinh lý. Không cần uống thuốc. Nếu con có virus cúm mới cần uống thuốc, không uống quá 14 ngày.
15. Con sốt phải đưa đến bệnh viện khám, cố gắng yêu cầu xét nghiệm máu.
16. AI cũng có thể bị bệnh, bị ốm. Do vậy khi một đứa trẻ bị cảm lạnh, bệnh nhẹ, đừng hoảng sợ. Không cần quá hoang mang.
17. Nếu việc con làm không ảnh hưởng đến sự an toàn của con, đến lợi ích của người khác, thì không được quá can thiệp vào hành vi của con.
18. Để trẻ chơi thoái mái, không giục giã.
19. Không phải cứ cái gì nguy hiểm cũng cấm con không được tiếp cận. Nên cho con biết nguy hiểm là như thế nào, xảy ra ở đâu, làm thế nào để tránh. Cho con tiếp cận với nguy hiểm trong phạm vi kiếm soát.
20. Cần để con có cơ hội tư trải nghiệm càng nhiều càng tốt. Không nên nói trước kết quả với con. Hãy để bé tự khám phá, biết hậu quả, biết cách thành công, biết cả thất bại.
21. Dạy trẻ học cách chờ đợi.
22. Dạy trẻ chịu trách nhiệm về hành động của mình.
23. Dạy trẻ cách cho đi và nhận lại là quá trình hai chiều. Người nhận cũng phải biết ơn.
24. Hiện nay trong xã hội có rất nhiều phương pháp giáo dục sớm. Nếu không thực sự hiểu, không biết làm thế nào thì đừng làm và đừng ép con.
25. Phải đảm bảo mỗi ngày đều có thời gian dành cho con, chơi với con.
26. Luôn có cách khiến con cười ít nhất vài lần một ngày để duy trì tâm trạng tốt.
27. Dạy trẻ cách đối mặt với thất bại. Con có thể không hài lòng, có thể bỏ cuộc, có thể cố gắng làm tiếp một lần nữa. Nhưng dứt khoát không khóc, không được suy sụp.
28. Nguyên tắc cơ bản là không bao giờ được đánh bạn trước, tấn công bạn trước. Trong nhà trẻ, có thể thu hút sự chú ý của cô giáo và các bạn khác bằng cách hét lên.
29. Con có quyền quyết định những việc liên quan đến con.
30. Khi con được 4,5 tuổi, hãy dạy con cách tiêu tiền và cho con tiền tiêu vặt hàng tuần.
http://nuoicon.vn/C/A?articleId=2241

Wednesday, October 15, 2014

How to do “mysqladmin flush-hosts” on server?

I got mysql error:

ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

Resolve:

mysql -u root -p -e 'flush hosts'

Sunday, September 7, 2014

While loop with promises

var Q = require("q");

// `condition` is a function that returns a boolean
// `body` is a function that returns a promise
// returns a promise for the completion of the loop
function promiseWhile(condition, body) {
    var done = Q.defer();

    function loop() {
        // When the result of calling `condition` is no longer true, we are
        // done.
        if (!condition()) return done.resolve();
        // Use `when`, in case `body` does not return a promise.
        // When it completes loop again otherwise, if it fails, reject the
        // done promise
        Q.when(body(), loop, done.reject);
    }

    // Start running the loop in the next tick so that this function is
    // completely async. It would be unexpected if `body` was called
    // synchronously the first time.
    Q.nextTick(loop);

    // The promise
    return done.promise;
}


// Usage
var index = 1;
promiseWhile(function () { return index <= 11; }, function () {
    console.log(index);
    index++;
    return Q.delay(500); // arbitrary async
}).then(function () {
    console.log("done");
}).done();
http://stackoverflow.com/questions/17217736/while-loop-with-promises

Monday, June 30, 2014

clear log file


  1. #cat /dev/null >/var/log/error.log (command is "cat")
  2. #>/var/log/error.log (command is ">")