Asterisk classpath hay wildcard classpath trong Java 6.0

Java 6.0 hỗ trợ * để xác định tất cả các file .jar nằm trong một thư mục, chỉ file .jar mà thôi. Nghĩa là thay vì gõ

java -classpath .;C:\server\activemq5\lib\activemq-core-5.0.0.jar;C:\server\activemq5\lib\geronimo-jms_1.1_spec-1.0.jar;C:\server\activemq5\lib\commons-logging-1.1.jar Quote

thì nay chỉ việc gõ

java -classpath .;C:\server\activemq5\lib\* Quote

Nếu classpath chỉ có 1 thành phần thì phải double quote nó lại để hệ điều hành không hiểu lầm

javac -cp "C:\Sun\AppServer\lib\*" HelloWorld.java

Nếu có 2 thành phần trở lên thì không cần

javac -cp C:\Sun\AppServer\lib\*;D:\abc\ HelloWorld.java

Nếu thư mục đó chỉ có 1 file jar thì không cần quote

Hỗ trợ chuẩn web trên các trình duyệt

http://www.webdevout.net/browser-support

Các câu lệnh hệ thống dùng hằng ngày

Kiểm tra ai đang login vào hệ thống và họ đang làm gì (tiến trình họ đang chạy)

w

hoặc

w -s

để xem danh sách ngắn hơn
Kiểm tra ai đang trong hệ thống mà không quan tâm đến tiến trình

who

hay

who -q

để đếm tổng số người hay

who -q

để xem lần cuối họ boot máy tính là khi nào
Kiểm tra tiến trình

ps -ax | more hay ps -aux hay ps -eaf hay top

Xem các phân vùng của ổ đĩa

fdisk -l

Kiểm tra dung lượng đĩa

df -k

hay

df -h

Kiểm tra thời gian chạy

uptime

Kiểm tra tình hình đăng nhập

last -20

Kiểm tra bộ nhớ

free -m

Kiểm tra tính kết nối của máy chủ với các máy tính khác qua card Ethernet và địa chỉ IP của chúng

arp

Kiểm tra các kết nối đến máy tính hiện thời (active Internet connections …)

netstat |head

Kiểm tra bảng routing

route -v

hoặc

netstat -r

Kiểm tra nhanh dung lượng các file của thư mục hiện tại hoặc 1 thư mục cụ thể (recursively): không dùng cho thư mục / (biết hậu quả rồi đấy)

du -a

sẽ in tất cả các file và dung lượng của chúng

du -s /home/me

sẽ in tổng số bytes của thư mục đó
còn có thể chỉ định được độ sâu của thư mục để giới hạn số file cần tìm kiếm và đo trong thư mục đó

du --max-depth=2 /home/me | sort -n

Tìm kiếm file hay thư mục

find / -name app_name_here -type d -xdev

hay tìm kiếm các file có đuôi cụ thể

find /home/me -name '*.out'

hay tìm kiếm cả theo đuôi file và 1 phần nội dung của file

find . -name '*.html' -exec grep 'mailto:foo@yahoo.com' {} \;

Use DOM to transform HTML table to PHP’s array

PHP5’s DomDocument

$tableArray = array();
$dom  = new DomDocument();
$dom->preserveWhiteSpace = false;
$dom->loadHTML($xmlstr);
// return DOMNodeList
$rows = $dom->getElementsByTagName('tr');

// loop through each row
// to work with DOMNode (nodeName, nodeType, parentNode, nodeValue, getAttribute
for ($rowIndex  = 0, $length = $rows->length; $rowIndex < $length; $rowIndex++) {

    // DOMElement
   $currentRow = $rows->item($rowIndex);
   // the same to while($currentRow->hasChildNodes())
   // or foreach ($rows->item($rowIndex)->childNodes as $child) {

   if (null   !== $currentRow && $currentRow->hasChildNodes()) {
       $cells  = $currentRow->childNodes;
       for ($cellIndex = 0, $length = $cells->length; $cellIndex < $length; $cellIndex++) {
           $tableArray[$rowIndex][$cellIndex] = $cells->item($cellIndex)->nodeValue;
       }
   }
}

Đây là một cách dùng DOM để loop qua một table đơn giản

Chọn các bản ghi từ 2 tháng trở lại đây

Oracle:

Mailing có một vấn đề: các record cũ quá 2 tháng thì không nên dùng lại theo đề nghị của nhóm.

SELECT created_dtime FROM requests
WHERE status = 0 AND created_dtime > LAST_DAY(ADD_MONTHS(SYSDATE, -2))

Trước hết là xóa các record trong tháng cách đây 2 tháng:

DELETE FROM requests
WHERE status = 0
AND created_dtime < LAST_DAY(ADD_MONTHS(SYSDATE, -2))

Backup MySQL

Step 1:

mysqldump --single-transaction -uroot -p --all-databases --master-data=1 > all_databases.sql

Step 2:

mysql -uroot < all_databases.sql

Database server farm and synchronization

Tìm được công cụ này làm việc đồng bộ hóa dữ liệu trên nhiều server. Sau này sẽ cần đến các máy chủ read và một máy chủ master (write/read): http://symmetricds.org/

Việc đồng bộ hóa giữa master và master thì có công cụ này: http://blog.kovyrin.net/2007/04/23/master-master-replication-example-using-mmm/

http://datacharmer.org/

MySQL and JSON

SELECT
CONCAT("[",
GROUP_CONCAT(
CONCAT("{username:'",username,"'"),
CONCAT(",email:'",email),"'}")
)
,"]")
AS json FROM users;

To

[
{username:'mike',email:'mike@mikesplace.com'},
{username:'jane',email:'jane@bigcompany.com'},
{username:'stan',email:'stan@stanford.com'}
]

Thanks to http://www.thomasfrank.se/mysql_to_json.html

Oracle: Đếm số hàng trên từng cột

Tracking tình hình hợp đồng là một phần trong hệ RBAC. Nhiệm vụ là tổng hợp được số hàng theo từng cột theo từng tiêu chí. Có một bảng theo dõi contract của các user và một bảng theo dõi từng số lần access vào các tài nguyên hợp đồng.

Cách 1: Thuần túy ASCII

$sql = "SELECT c.contract_id FROM

(SELECT

c.contract_id, c.contract_end_date, c.contract_priority,

ct.max_company_count, ct.max_report_count

FROM contracts c, contract_types ct

WHERE c.contract_type_id = ct.contract_type_id

AND c.contract_id IN ($validContracts)

AND c.user_id    = :user_id) c,

(SELECT

c.contract_id,

COUNT(DISTINCT tr.company_id) company_count

FROM contracts c, contract_trackers tr

WHERE c.contract_id = tr.contract_id

AND c.contract_id IN ($validContracts)

GROUP BY c.contract_id) cc1,

(SELECT

c.contract_id,

COUNT(DISTINCT tr.number) company_count

FROM contracts c, contract_trackers tr

WHERE c.contract_id = tr.contract_id

AND c.contract_id IN ($validContracts)

GROUP BY c.contract_id) cc2,

(SELECT

c.contract_id,

COUNT(DISTINCT tr.report_file) report_count

FROM contracts c, contract_trackers tr

WHERE c.contract_id = tr.contract_id

AND c.contract_id IN ($validContracts)

GROUP BY c.contract_id) cc3

WHERE c.contract_id     = cc1.contract_id

AND cc1.contract_id     = cc2.contract_id

AND cc2.contract_id     = c.contract_id

AND (c.max_company_count IS NOT NULL AND

c.max_company_count > (CASE

WHEN cc1.company_count > cc2.company_count THEN cc1.company_count

ELSE cc2.company_count

END))

AND (c.max_report_count IS NOT NULL AND

c.max_report_count > cc3.report_count)

ORDER BY c.contract_priority DESC";

Cách 2: Lợi dụng đặc điểm của COUNT DISTINCT của Oracle

SELECT c.contract_id

FROM contracts c,

contract_types ct,

(SELECT

c1.contract_id,

COUNT(DISTINCT tr.company_id) company_count,

COUNT(DISTINCT tr.number) company_count2,

COUNT(DISTINCT tr.report_file) report_count

FROM contracts c1,

contract_trackers tr

WHERE c1.contract_id = tr.contract_id

AND c1.contract_id IN (4)

GROUP BY c1.contract_id) tr

WHERE c.contract_type_id = ct.contract_type_id

AND tr.contract_id = c.contract_id

AND c.contract_id IN (4)

AND c.user_id    = 8

AND (ct.max_company_count IS NOT NULL AND

ct.max_company_count > (CASE

WHEN tr.company_count > tr.company_count2 THEN tr.company_count

ELSE tr.company_count2

END))

AND (ct.max_report_count IS NOT NULL AND

ct.max_report_count > tr.report_count)

ORDER BY c.contract_priority DESC

How to decrease length of fixed width column in Oracle

Lọ mọ cả ngày tìm ra lý do tại sao module reset password lại không hoạt động. Hóa ra cột chứa password có kiểu CHAR(42) trong khi password chỉ dài có 40 kí tự. Công việc giảm độ dài của field này cũng lắm nhiêu khê vì không thể làm đơn giản kiểu

ALTER TABLE users MODIFY password CHAR(40);

vì sẽ có lỗi 01441 ngay lập tức khi mà bảng đã có dữ liệu.

Vậy phải làm thế nào:

+ Thêm cột mới vào ngay sau cột cũ

+ Trao đổi dữ liệu 2 cột

+ Drop cột cũ

Tuy nhiên MySQL is more advanced than Oracle trong cái vụ ADD BEFORE/AFTER này nhiều. Oracle thì phải làm như sau:

/** Add a new column with desired width */
ALTER TABLE users ADD (password2 char(40));
/** Trimming trailing whitespace and swap */
UPDATE users SET password2 = TRIM(TRAILING ' ' FROM 'password');

COMMIT;
/** Drop old column */
ALTER TABLE users DROP COLUMN user_password;
/** Change to old name */
ALTER TABLE users RENAME COLUMN password2 TO password;
/** Prepare for the temporary table */
ALTER TABLE users RENAME TO users2;

/** Reserve the order of the field so not insert/update query will be affected */
CREATE TABLE users NOLOGGING /* unrecoverable */
AS
SELECT user_id, username, password,
email, lastname, firstname, company, reg_dtime,
user_act_code, status, news_subscriber, duration_type_id,
salutation_id, referrer_id, another_referrer, language_id, gender_id
FROM users2;

/** GC */
DROP TABLE users2;

Trang sau »