A note about solid Principles (Demo in Symfony2)

  1. Single responsibility ( a class have only one reason to change, do not mix up (mess up) everything in a class)
  2. Open for extend, close for modification( move common behavior to interface, flip injection – Uncle Bob)
  3. Liskov Substitution Principle, eg: same output format (array , json, specify type of Type- signature must match, preconditions cannot be greater, post conditional at least equal to, exception type must match). All of the derived class (sub class) could be substitutable (interchangeable)
  4. A client should not be forced to implement an Interface that it does not use (return null in a override function ) – split fat interface to smaller interface.
  5. The higher level of inheritance should not depend on the low level of code, it should depend on the abstract class (Inversion of control, Dependency inversion not Dependency injection, not opposite, but complementary) – decoupling code

note:
class extends 1 class, implements multiple interfaces (like java)
interface extends interface
class implement an interface must override all methods

Demo link:
https://github.com/nguyentienlong/solid-principles-demo

Reference:
https://laracasts.com/collections/solid-principles

TODO: translate to Vietnamese, add more code and explanation

release kunvertor.com beta version

This private project was started long time ago (since july, 2015).

Today, I decide to public beta version of kunvertor.com or chuyendoipdf.com

In this project, I used:
+ symfony2, mysql as web app
+ nodejs + redis as real-time server
+ gearman as job queue server
+ apache pdfbox to extract text from pdf (http://pdfbox.apache.org/index.html)

I will spend more time to write more detail about how to implement this stuff.

Now, breath deep and go to sleep 😉

ibm db2 grant select privilege to all tables in a schema of database to one user

linux command to create a linux user (db2 authorize base on linux os user)

 

note: remember to chmod grants.sql to 775 or 777

replace matched string in multiple files with find and sed command line

if you guys want to replace matched string in multiple files in linux

you can use find with sed command as below:

explanation

 

java plugin not listed in firefox(37.0.2) fedora 21(64 bit) os

In case you need to run java applet (java plugin) on firefox browser, you need to link the libnpjp2.so to the firefox plugins folder. If you have done that, but it not listed in the plugin list of the firefox. Try to following the below steps:

Check firefox version with command : firefox -v

Mozilla Firefox 37.0.2libnpjp2

Check fedora os information with command uname -a

Linux longnguyen-laptop 3.19.5-200.fc21.x86_64 #1 SMP Mon Apr 20 19:51:56 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

issues: (duplicated from the beginning sentence)

Java plugin is not listed in plugins list (about:plugins) even you have link the libnpjp2.so to /usr/lib64/mozilla/plugins wtih the command

sudo ln -s /usr/java/default/lib/amd64/libnpjp2.so /usr/lib64/mozilla/plugins/

Solutions:  start firefox with this command

firefox -P , delete the old profile, and create a new fresh profile

start firefox with profile selection
start firefox with profile selection

then, check the plugins again (in firefox url typed “about:plugins”)

firefox java plugins
firefox java plugins

Cài đặt citrix ICA client trên linux

Khi tham gia một số course trên mạng, có thể bạn sẽ được cung cấp thông tin để đăng nhập vào một máy ảo đã cài sặt môi trường như giáo trình bạn tham gia.
Nếu khóa học cung cấp Citrix client để bạn truy cập vào máy ảo từ xa bạn có thể download tại đây http://www.citrix.com/downloads/citrix-receiver.html
Nếu dùng window thì việc cài đặt hòan toàn đơn giản.
Nhưng nếu dùng linux (fedora hay ubuntu) có thể tốn rất nhiều thơi gian của bạn cho việc cài đặt này.

Bạn có thể làm như sau:

Vào link sau download http://www.citrix.com/downloads/citrix-receiver/linux/receiver-for-linux-131.html

Giải nến ra thư  mục nào đó, ở đây tôi giải nến ra thư mục /opt/citrix-client/ica

Sau đó bạn phải link thư viện ica (hay plugin) đã cài đến trình duyệt trên máy của bạn có thể là firefox, mozilla hay có thể là IE (trên linux ??? just kidding 😀 )

Nếu chưa biết thư mục chứa plugins của trình duyệt bạn có thể dùng lệnh sau:

find / -name plugins | grep -i “netscape\|firefox\|mozilla”

Sau đó chuyển đường dẫn đến thư mục plugin

cd /usr/lib/mozilla/plugins/

Trong thư mục mới cd,  bạn tạo một npica.so liên kết đến thư mục cài plugin citrix ica

ln -s /opt/Citrix/ICAClient/npica.so npica.so

Xong, các thao tác sau đó khá đơn giản …. 😉

Tham khảo: http://www.agaveblue.org/howtos/Citrix_ICA_How-To.shtml

sử dụng grep và less để tìm kiếm chuỗi ký tự nào đó trong log file cực lớn

Khi phải check log file cực lớn, nếu bạn dùng cat hoặc vi để tìm kiểm chuỗi nào đó quả không hề đơn giản.

Bạn có thể dùng grep kết hợp với less để giải quyết vấn đề này

grep “chuoi can tim” tenfile.log | less

Nếu bạn muốn đếm số lần xuất hiện của chuỗi cần tìm trong file log, bạn có thể dùng “wc -l” để đếm

grep “chuoi can tim” tenfile.log | less| wc -l

Chú thích:

grep là lệnh để tìm kiếm chuỗi trong linux (very powerfull) trong file bất kỳ

less là lệnh cho phép bạn di chuyển tới, lui (forward, backward) như khi bạn dùng vi, có thể nói less là lệnh mở rộng thêm của (vimore)

linux history command with timestamps

Config output format in HISTTIMEFORMAT with below command:

echo ‘export HISTTIMEFORMAT=”%d-%m-%y  %T” ‘  >> ~/.bash_profile; bash

then history to see the different

To make the changes permanent follow the below steps,

you need to add the below line to .bashrc file and then save it,

run the below command to source .bashrc file,

 

Reference:

http://askubuntu.com/questions/391082/how-to-see-time-stamps-in-bash-history