Thứ Tư, 26 tháng 2, 2014

Bài học rút ra được khi phạm hai lần cùng một lỗi

1. Hai lần phạm cùng một lỗi, đó là cái tội
2.Dốt cũng là một cái tội
3.Không biết sử dụng cái đầu cũng là một cái tội. Cần phải hiểu thật kĩ những cái mình đang làm
===> đáng để suy ngẫm

Django tut

Install Django
1. Install Git
   $ sudo apt-get install git
2. $ git clone git://github.com/django/django.git django-trunk
   $sudo pip install -e django-trunk/
Thế là đã cài xong Django
Dể kiểm tra chắc chắn Django đã được cài chưa và ở phiên bản nào:
  $ python -c "import django; print(django.get_version())"

Tạo Project mới
Chuyển đến thư mục: /django-trunk/django/bin/ ,là thư mục có chứa file django-admin.py và chạy command line:
$ django-admin.py startproject mysite

"mysite' là tên project mới tạo ra, có thể thay đổi tên project tuy ý
Bước trên có tác dụng: Tạo ra một instace của Django, bao gồm database configuration, Django-specific oftions và application-specific settings

writing a database Web app in Django
Bước đầu tiên là  có bản chất là định nghĩa models, database layout và thêm metadata. Nghĩa là tạo tạo database với models theo app của chúng ta
Một số thuật ngữ:
+ metadata: thông tin mô tả tài nguyên thông tin
+ A database layout: mô hình database (???)

Trong polls app, ta tạo hai models là Question và Choice.Mỗi Choice được liên kết với một Question

# polls/models.py

from django.db import models

class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)


trong ví dụ trên:
+ Mỗi model được biểu diễn bởi một class, là subclasses của django.db.models.Model
=> Django đã xây dựng sẵn các model, mỗi model có một sô subclass có sẵn, mỗi class này biểu diễn một phần của database trong model=> ko phải xây dựng lại db từ đầu mà chỉ cần subclass django model rồi viết thêm thuộc tính vào cho phù hợp với yêu cầu

+ mỗi 'field' được đại biểu diễn bởi một instance của một Field class:
 - CharField biểu diễn character field
 - DateTimeField biểu diễn cho datetimes field
Những instance này báo cho Django biết lạo data lưu trữ trong field tương ứng trong database
+ question_textpub_date... là tên của các field đó
+ ForeignKey: mỗi Choice sẽ được liên kết với một Question riêng

Activating models( kích hoạt các models )
 Code model đó đưa lại cho Django khá nhiều thông tin. VỚi nó, Django có thể:
+ Taọ nên một database schema( CREATE TABLE statements) cho app này
+ Tạo nên một Python database-access API cho quá trình truy cập Choice và Question obj

1. Khai báo cho project là polls app đã được thiết lập
Sửa file mysite/setting.py, thêm vào mục INSTALL_APPS tên models chúng ta vừa lập là 'polls'
sau đó chạy lệnh:
$ python manage.py makemigrations polls

makemigrations:( make-migration) báo cho Django biết có một vài sự thay đổi tới các models, trong trường hợp này là chúng ta thêm một và bạn muốn thấy sự chuyển đổi đó được lưu trữ như là một migration
Migrations: là caí cách mà Django lưu trữ những sự thay đổi các models. Và chúng ta có thể đọc được trong 'pool/migrations/0001_initial.py'

 Có một câu lệnh sẽ chạy migrations cho bạn  và quản lý database schema một cách tự động:
$ python manage.py sqlmigrate polls 0001

Một số câu lệnh để ' chơi với API":
-Question.objects.all(): show tất cả các obj trong Question field
-q = Question(các thông số của Question): tạo một object mới đặt tên là q
-q.id => show số id của q. Số này do Django tự tạo theo thứ tự các obj tăng dần
-q.question_text : show thông số 'question_text' của q
-q.question_text = "What's up?": thay đổi thông số của q
-Question.objects.filter(id=1): shown obj có id =1
-Question.objects.get(id=2): tương tự filter
-q.choice_set.all(): show tất cả các choice_set của q
-q.choice_set.create(choice_text='Not much', votes=0): tạo nên choice_set mới cho q
-c.delete(): delete obj c

...................

Phát triển server :
Chạy server:
~/django-trunk/django/bin/mysite$ python manage.py runserver 0.0.0.0:8000
Chúng ta nhìn thấy hai bảng nội dung: Groups và Uers. Chúng được cung cấp bởi flamework "django.contrib.auth"
+ Đưa polls app của chung ta lên server:
Chúng ta khai báo với django rằng Question object có một interface, dùng để thêm, tạo sửa... Question ...:
Sửa file /polls/admin.py như sau:

from django.contrib import admin
from polls.models import Question
 #khai báo với admin object Question và tạo cho Question một interface riêng( add thêm #bao nhiêu là tùy ý, nhưng bạn phải định nghĩa obj đó trong 'models.py'
admin.site.register(Question)


Bạn có thể tay đổi vị trí của các field trong Question obj:

from django.contrib import admin
from polls.models import Question

class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)


Bạn cũng có thể thêm các thông tin vào các field với từ khóa 'field':


#polls/admin.py

from django.contrib import admin
from polls.models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Question, QuestionAdmin)


Bạn cũng có thể thiết lập một fieldset được ẩn đi lúc ban đầu với 'collapse' . Cách này có ích khi một thông tin của obj nào đó quá dài hoặc bạn không muốn nó hiện ra trực tiếp trên interface

#polls/admin.py

from django.contrib import admin
from polls.models import Question


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]


Add các obj liên quan:
Ví dụ trong trường hợp này là Question liên quan đến Choice, và một Question có thể chứa nhiều Choice nhưng admin page lại không hiển thị Choice. Có hai cách để giải quyết vấn đề này:
+ đang kí Choice với admin page tương tự với Question obj
+ Cách 2 đưa cho bạn cạc giải quyết hay hơn:
#polls/admin.py

from django.contrib import admin
from polls.models import Choice, Question


class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'],
                              'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Question, QuestionAdmin)


Như thế này sẽ đưa ra các options cho Choice theo hàng dọc

Nếu ta thay ' StackedInline' bẳng 'TabularInline' thì giao diện của Choice có các options hiển thị theo hàng ngang( đẹp hơn :v)

Điều chỉnh giao diện của Question obj:
Với list_display = (các methods của Question ) sẽ hiển thị các thuộc tính của Quesion theo hàng ngang
 vd: list_display = ('question_text', 'pub_date', 'was_published_recently')
Với list_filter = ['methods của Question'] sẽ thêm các lựa chon cho thuộc tính đó hiển thị phía bên tay phải giao diện của Question. Nhưng bận sẽ phải thêm một số thuộc tính cuả method trong file /models.py
vd: list_filter = ['pub_date'] sẽ lựa chon các option như theo ngày , tháng tuần. trong file /models.py thêm :

class Question(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'


Với search_fields = ['question_text'] bạn sẽ thêm tính năng search cho method 'question_text'

Thứ Hai, 24 tháng 2, 2014

Thủ thuật hữu dụng trên YouTube

Đặt thời điểm phát
Ta có đường link:
http://www.youtube.com/watch?v=X8mhF6HgzVA
Hãy thêm đoạn mã này #t=01m08s vào đằng sau đường link đó và bất kỳ ai khi nhấn vào đường link đó, đoạn video sẽ bắt đầu phát từ 1 phút 8 giây. Thời gian ở đây hoàn toàn có thể thay đổi, tuỳ thuộc vào dụng ý của bạn.

Tự động xem lại một video
Đơn giản, nếu muốn xem đi xem lại một video nào đó trên YouTube, chúng ta chỉ cần thay cụm từ Youtube trên đường dẫn bằng infinitelooper rồi sau đó ấn Enter, trình duyệt sẽ chuyển sang giao diện của một đối tác YouTube - Nơi chúng ta có thể phát không ngừng nghỉ 1 video.

Tìm chính xác từ khoá
Dấu ngoặc kép trong trường hợp này không thể giúp bạn tìm ra chính xác cụm từ khoá mà bạn nhập vào. YouTube vẫn sẽ hiển thị cả một số kết quả từ vài thành phần trong cụm từ khoá.
Để giải quyết vấn đề, hãy thêm từ allintitle: vào đằng trước từ khoá mà bạn tìm kiếm
vd: allintitle: chan doi

Xem video với mạng “lởm”
YouTube đã ra mắt một tính năng mới với tên gọi “Feather” Beta, cho phép bạn xem video trên YouTube được toại nguyện dù cho mạng Internet của bạn có tốc độ đường truyền siêu chậm. Về cơ bản, hệ thống này sẽ cắt giảm bớt dữ liệu để giới hạn đường truyền trong trình duyệt của người đó.

Hướng dẫn tạo public key trên ubuntu 12.04

SSH có thể được cài đặt bằng cặp khóa public/private key để giúp người dùng không phải nhập mật khẩu mỗi lần muốn đăng nhập một remote server

1 - Sử dụng dsa
Trên máy local:
$ ssh-keygen -t dsa
Copy nội dung file id_dsa.pub vào file  trên remote server:
$ scp ~/.ssh.id_dsa.pub clouduser@x.x.x.x:~/.ssh/authorized_keys

2 - Sử dụng rsa
Trên máy local:
$ ssh-keygen -t rsa -b 4096
Chọn tên id_rsa và id_rsa.pub thay vì id_dsa và id_dsa.pub
$ scp ~/.ssh.id_rsa.pub clouduser@x.x.x.x:~/.ssh/authorized_keys

Bonus
Nếu có nhiều remote server làm việc với nhau thì:
Đưa nội dung các public key vào chung một file authorized_keys bằng lệnh:
$ cat file1 >> authorized_keys
Lưu ý, mỗi pub key phải trên một dòng

Thứ Hai, 17 tháng 2, 2014

Install Icinga on ubuntu 12.04

1. Cài đặt icinga
Làm theo tut này:
http://www.unixmen.com/install-icinga-monitoring-tool-on-ubuntu/

2. Cài đặt và config Postfix - MTA
www.server-world.info/en/note?os=Ubuntu_12.04&p=mailan

Thứ Năm, 13 tháng 2, 2014

SSL/TLS

SSL là gì?

SSL (secure sockets layer - công nghệ bảo mật tiêu chuẩn) là protocol cung cấp khả năng bảo mật dữ liệu trong việc thiết lập các kết nối giữa máy chủ và máy khách (vd: kết nối giữa máy chủ mail và máy khách trong việc nhận/ chuyển mail)
ví dụ như ở một số trang:
ssl
ev ssl
Hình tượng chiếc khóa  hoặc kí hiệu 'https' thay vì 'http' thể hiện  trang web được bảo mật bằng  SSL

Certificate Authority-CA đóng vai trò gì trong giao thức SSL?
 
CA là tổ chức phát hành các loại chứng thực số cho người dùng, doanh nghiệp, server...
Tất cả các trình duyệt đều có thể kết nối với máy chủ bảo mật với SSL qua giao thức SSL. Tuy nhiên, trình duyệt và máy chủ cần một thứ gọi là “Certificate Authority SSL” , như là bên thứ 3( được cả hai bên tin tưởng) để hỗ trợ cho quá trình trao đổi thông tin diễn ra an toàn.


TLS là gì?

TLS- transport layer secure: là một protocol được dùng với mục đích bảo mật dữ liệu trong quá trình truyền.

TSL thực hiện các nhiệm vụ chính:
1. Confidentiality: không hiển thị nội dung dữ liệu.
2. Integrity: Phát hiện nguy cơ và ngăn chặn sự tấn công, phá rối dữ liệu truyền.
3. Authentication: Đảm bảo dữ liệu được truyền đên đúng địa chỉ cho phép.
4. Phát hiện dữ liệu bị missing hoặc duplicated.


TLS và SSL đều là giao thức cung cấp khả năng chứng thực và bảo mật cho các kết nối giữa máy chủ và  các ứng dụng.

Thực ra SSL là phiên bản trước của TLS. Cụ thể hơn SSL 3.0 là cơ sở cho TLS 1.0, và do đó, thình thoảng được gọi là SSL 3.1 hoặc viết dưới dạng SSL/TLS

Thứ Ba, 11 tháng 2, 2014

Metric monitoring with Graphite

Metric monitoring

Là một hệ thống các monitor dựa trên các metric được gửi từ về các máy đã cài đặt collector
vd: Để quản lý Rảm free của một máy, trên máy đó ta cài đặt collector, collector này sẽ kiểm tra và thu thập thông tin về lượng ram trống của máy đó và gửi về server tập trung theo một chu kì nào đó do ta cài đặt. Từ các metric thu được đó, sau một khoảng thời gian ta sẽ thu được các điểm, từ các điểm này ta sẽ xây dựng được các biêu đồ hiển thị thông tin về lượng ram trống của máy đó trong khoảng thời gian đó.
+ Graphite: hệ thống đồ họa thời gian thực, có khả năng mở rộng cao và cấu trúc gồm 3 phần( bên dưới)
+ monitor:( màn hình) có chức năng hiển thị các thông tin do collector gửi về
+ Collector: có chức năng thu thập lại dữ liệu theo yêu cầu và gửi tới server tập trung
+ Server tập trung(ví dụ như một máy server)  nơi nhận , lưu trữ và hiển thị dữ liệu
+Metric: Là thông tin do collector thu thập được và gửi về server trung tâm trong một điểm thời gian xác định

Graphite

http://graphite.readthedocs.org/en/latest/org
Kiến trúc của graphite gồm 3 thành phần là graphite-web, carbon và whisper

Graphite Web

Là Graphite interfaces,hiển thị các metric đã được lưu trên Whisper dưới dạng biểu đồ

Carbon

Tiếp nhận các metric do collector gửi về và gửi tới Whisper

Whisper

Tiếp nhận các Metric từ Cacbon gửi về, lưu trữ chúng lại trên đĩa cứng

Sơ đồ sự di chuyển của metric

Collector trên máy X    ===(gửi tới)====>  Carbon  =====(gửi tới)====> whisper ====(lưu vào đĩa cứng).  <(đọc) Graphite-web <- người dùng


Vài điều chú ý khi cài đặt

  • Data về các metric được lưu trữ trên /var/lib/graphite
  • Data về thay đổi của người dùng lưu trên một SQL database.
  • Khi triển khai trên hệ thống của Backbone Team, cần mount các volume vào các thư mục chứa data để đảm bảo tính toàn vẹn dữ liệu khi có sự cố xảy ra, đồng thời đảm bảo về dung lượng lưu trữ do rootdisk của cloud instance chỉ  20GB. Trong khi lượng metric có thể lên tới vài trăm GB hoặc hơn nếu sử dụng lâu dài (và nhiều).
  • Hệ thống graphite của Backbone team hiện tại sử dụng postgresql, vì vậy cần mount một volume vào thư mục /var/lib/postgres
  • Để các thay đổi về mount ổ cứng trở nên cố định, cần sửa nội dung file /etc/fstab
  • Sử dụng salt formula ở đây để cài đặt    https://git.vccloud.vn/lamdt/saltstate/tree/master/graphite
  • Để giảm nguy cơ về bảo mật do graphite không hỗ trợ authenticate, sử dụng iptables để lọc các metric được gửi từ các địa chỉ cố định.
  • Để đảm bảo không sử dụng quá nhiều dung lượng lưu trữ, có thể dùng cron để tìm và xóa các file tồn tại trong
    /var/lib/graphite/whisper hơn 30 ngày.
  • Cấu hình nginx đã được thay đổi để Graphite Explorer có thể đọc data từ graphite. (xem trong document của Graphite Explorer)
  • Cần theo dõi hàng ngày dung lượng còn trống của rootdisk, do carbon hiện có 1 lỗi khiến cho nó ghi liên tục vào file log lúc không kết nối được. Khi hiện tượng rootdisk giảm mảnh, cần kiểm tra /var/log/graphite và xóa đi file log có dung lượng lớn. 

Vài điều chú ý khi sử dụng


  • Hệ thống graphite hiện tại không hỗ trợ phân quyền người dùng. Chú ý không sửa/xóa dashboard của nhau.
  • Màu của các line trên graph phụ thuộc vào thứ tự thêm nó vào.
  • Chuột phải vào graph và chọn  "copy link to image" để chia sẻ graph đó cho người khác.
  • Khi graphite nhận được metric mới hoàn toàn, nó sẽ sử dụng khá nhiều đĩa cứng (để "nhận chỗ" trước).
  • Cần theo dõi thường xuyên lượng metric nhận được hàng ngày, % CPU sử dụng trên máy cài graphite, rootdisk còn trống trên graphite 

Một số thông tin hữu ích


  • Graphite cung cấp API để các chương trình bên ngoài có thể truy cập và render 
  • Graphite được viết bằng Python

Các thành phần bổ sung


Graphite explorer

Giúp nâng cao khả năng truy vấn, đưa ra các kết quả mong muốn dựa trên data của graphite
https://github.com/vimeo/graph-explorer/wiki/Tutorial

Cabot

Hệ thống cảnh báo dựa trên các metric của graphite (khi vượt hay dưới 1 ngưỡng nhất định)
http://cabotapp.com/

Các thuật ngữ

http://graphite.readthedocs.org/en/latest/terminology.html#term-series

+ Functions: 
Là các  time-series function, được apply lên graph,giúp chúng ta tùy tùy chỉnh graph theo yêu cầu
+ Targets:
Nguồn dữ liệu input của graph
+Metric series : tập hợp của các metrics
+ timetamps
+Bucket
+Timetamps bucket:






Thứ Hai, 10 tháng 2, 2014

something about computer network

Mạng máy tính là tập hợp các máy vật lý được kết nối với nhau bằng các đường truyên vật lý( transmission media) theo một cấu trúc mạng (network architecture)

Hai đặc trưng của mạng máy tính

+ Cấu trúc mạng( Topology ) thực chất là vị trí vật lý các node trong mạng và cách thức kết nối chúng lại với nhau
+ Giao thức mạng( protocol) : là tập hợp các quy tăc mà tất cả các hoạt động diễn ra trong mạng đó phải tuân theo

Có hai loại cấu trúc mạng chính

+point-to-point: một kênh truyền vật lý kết nối hai node cần trao đổi thông tin
  các node có chức năng tiếp nhận data, lưu trữ tạm thời data và gửi data tới
 node tiếp theo. cấu trúc này được gọi là mạng store-and-forword ( lưu trữ và
 chuyển tiếp)
ưu điểm: ít xảy ra collision, là hiện tượng đụng đọ và xung đột thông tin
nhược điểm: chiếm dụng nhiều tài nguyên, mức độ truyền tải chậm
+ multi-point: tất cả các node cùng truy cập chung trên một đường truyền vật lý, dùng chung và cùng chia sẻ tài nguyên
Ưu điểm: tốn ít tài nguyên, mức độ truyền tải thấp
Nhược điểm: dễ xảy ra collision

Network medium


Là phương tiện truyền tải mạng. Bao gồm các loại cáp mạng và các phương tiện vô tuyến ( ví dụ như sóng wifi)

Các thông số đặc trưng của transmission network( đường truyền mạng)
+ Bandwidth-Băng thông: là khoảng giới hạn tần số của tín hiệu truyền
ví dụ: băng thông của mạng cáp điện thoại là 400-4000 hz, nghĩa là nó có thể truyền được các tín hiệu có tần số từ 400 đến 4000 hz.
 Bandwidth tỉ lệ nghịch với độ dài đườn truyền
+ Throughput- Thông lượng: là đại lượng vật lý đặc trưng cho tấc độ truyền tín hiệu của mạng 
+ Attenuation: là đại lượng đặc trưng cho đọ suy yếu của các tín hiệu trên đường truyền

Phân loại mạng 

1. Theo khoảng cách 

1.1. Mạng cục bộ LAN:
+  Kết nối các máy riêng lẻ lại với nhau, có quy mô trong nhà máy hoặc trong xí nghiệp
+Phân loại: 2 loại
  - LAN không dây: sử dụng sóng cao tần hay tia hồng ngoại truyền data
  - LAN có dây: sử dụng các loại cáp
1.2. Mạng MAN- Metropolitan Area Network 
 Mạng hoạt động theo kiểu mutil-point, LAN to LAN
1.3. Mạng WAN - Wide Area Network
+ Là mạng máy tính hoạt động trên phạm vi quốc gia hoặc toàn cầu
+ Tấc độ truyền data thấp hơn so với các mạng cụng bộ
+ Lỗi đường truyền cao
1.4. Mạng Internet 
 + Là tập hợp của các mạng con LAN, WAN , MAN kết nối lại với nhau=> bự nhất

Các mô hình sử lý dữ liệu   

1. Mô hình Client/ server

Chia làm hai giai đoạn:
+  Client cung cấp một giao diện để người dùng gửi các yêu cầu thông qua Client đến server
+ Server tiếp nhận các yêu cầu từ Client và cung cấp các dịch vụ, data cho ngươì dùng thông qua Client
2. Mô hình Peer - to- peer
là một mô hình mà tất cả các node trong mô hình đều có thể làm máy chủ và đồng thời cũng là máy khách. Các máy chia sẻ tài nguyên không phụ thuộc vào nhau
3. Mô hình Hybrid
Hầu hết các mạng máy tính trong thực tế đều sử dụng mô hình này. Nó là mô hình kết hợp hai kiểu mô hình sử lý trên


Mạng Internet và Giao thức TCP/IPv4

1. Mô hình TCP/IP

TCP/IP: transmission Control Protocol/Internet Protocol
+Đ/n: là chồng giao thức trong hoạt động cung cấp các phương tiện truyền thông liên lạc
+IPv4 là TCP/IP phiên bản 4(1981)
+IPv6 là phiên bản cải tiến của IPv4 ( 1994)

1.1. Các Layer trong mô hình TCP/IP

1.1.1 Process/Application Layer: hỗ trợ các ứng dụng cho các giao thức tầng Host to Host, cung cấp giao diện cho người sử dụng mô hình TCP/IP
Các giao thức ứng dụng:
+TELNET: truy nhập từ xa
+FTP: truyền file
+SMTP: truyền thư điện tử

1.1.2. Host to host
Thực hiện các kết nối giữa hai server bằng hai giao thức:
+ TCP-Transmission Control Protocol: Giao thức điều khiển trao đổi dữ liêu
+ UDP- User Datagram Protocol