13/12/2013

Ý nghĩa của chữ Nhan (顔)

Sau đây là một cách giải thích ý nghĩa của chữ Nhan (顔):
Y nghia cua chu nhan
  • Ý nghĩa: Khuôn mặt (dt)
  • Số nét:18
  • Cách đọc:
    • Kun:かお
    • On:ガン


12/12/2013

Ý nghĩa của chữ Hàn (寒)

Sau đây là một cách lý giải ý nghĩa của chữ Hàn ( 寒):
Y nghia cua chu Han
  • Ý nghĩa: Lạnh
  • Số nét: 12
  • Cách đọc:
    • On:さむ(い)
    • Kun:カン
    • Tên:さ、さん


11/12/2013

Ý nghĩa của chữ Hán (漢)

Sau đây là một cách giải nghĩa cho chữ Hán (漢):
Y nghia cua chu Han
  • Ý nghĩa: Người Hán
  • Số nét:13
  • Cách đọc:
    • Kun:
    • On:カン
    • Tên:はん


10/12/2013

Ý nghĩa của chữ Quán (館)

Sau đây là một cách giải nghĩa cho chữ Quán (館):
Y nghia cua chu quan
  • Ý nghĩa: Nhà khách, nhà, biệt thự, cung điện
  • Số nét: 16
  • Cách đọc:
    • Kun:たて、やかた
    • On:カイ
    • Tên:たち


09/12/2013

Ý nghĩa của chữ Nhạc (楽)

Sau đây là một cách giải thích ý nghĩa của chữ Nhạc (楽):
Y nghia cua chu Nhac
  • Ý nghĩa: Nhạc, An nhàn, Thoải mái
  • Số nét: 13
  • Cách đọc:
    • Kun:この.む、たの.しい、たの.しむ
    • On:ガク、ゴウ、ラク
    • Tên:さ、た、やす、ら


08/12/2013

Ý nghĩa của chữ Giới (界)

Sau đây là một cách giải thích ý nghĩa của chữ Giới (界):
Y nghia cua chu gioi
  • Ý nghĩa: Cõi, mốc (dt). Thế giới tức là cõi đời (Phật giáo cho rằng con người sống cùng trong một khoảng trời đất, chỉ khác nhau cái đời, không phân biệt đấy hay đây gọi là thế giới)
  • Số nét: 9
  • Cách đọc:
    • Kun
    • On: カイ


07/12/2013

Ý nghĩa của chữ Khai (開)

Sau đây là một cách để giải thích ý nghĩa của từ Khai (開):
Y nghia tu khai
  • Ý nghĩa: Mở ra, trải ra (đt)
  • Số nét:12
  • Cách đọc:
    • Kun:あ.く、 あ.ける、 ひら.き、 ひら.く、 ひら.ける、 -びら.き
    • On:カイ
    • Tên:か、 はる、 ひらき


02. Background Processing (Android Nâng cao)

06/12/2013

Ý nghĩa của chữ Hồi (回)

Sau đây là một cách lý giải ý nghĩa của chữ Hồi (回):
Y nghia cua chu hoi
  • Ý nghĩa: Hồi, hiệp, lần
  • Số nét:6
  • Cách đọc:
    • Kun:か.える,まわ.しー,ーまわ.し,まわ.す,ーまわ.す,ーまわ.ら,まわ.る,ーまわ.る,もとお.る
    • On:エ,カイ


05/12/2013

Ý nghĩa của chữ Hải (海)

Sau đây là một cách giải thích cho ý nghĩa của chữ Hải (海):
Y nghia cua chu hai
  • Ý nghĩa: Biển (dt)
  • Số nét:9
  • Cách đọc:
    • Kun:うみ
    • On:カイ
    • Tên:あ、あま、うな、うん、え、か、た、ひろ、ひろし、ぶ、まち、まま、み、め、わたる


04/12/2013

Ý nghĩa của chữ Hoạ (画)

Sau đây là một cách giải thích ý nghĩa của chữ Hoạ (画):
Y nghia cua chu hoach
  • Ý nghĩa: Bức tranh, nét vẽ
  • Số nét:8
  • Cách đọc:
    • Kun:えが.く,かぎ.る,かく.する,はからごと,はかる
    • On:イ,カイ,カク,ガ


03/12/2013

Ý nghĩa của chữ Gia (家)

Sau đây là một  cách giải nghĩa của chữ Gia (家):
Y nghia cua chu gia
  • Ý nghĩa: Nhà, gia đình
  • Số nét:10
  • Cách đọc:
    • Kun:いえ,うち,や
    • On:カ,ケ
    • Tên:あり,え,く,つか,べ


02/12/2013

Ý nghĩa của chữ Hạ (夏)

Sau đây là một cách giải thích ý nghĩa của chữ Hạ (夏):
Y nghia cua chu ha
  • Ý nghĩa: Mùa hè
  • Số nét:10
  • Cách đọc:
    • Kun:なつ
    • On:カ,ガ,ゲ


01/12/2013

Ý nghĩa của chữ Ca (歌)

Sau đây là một cách giải thích ý nghĩa của chữ Ca (歌):
Y nghia cua chu ca

  • Ý nghĩa: Hát, ca (đt), bài ca, bài hát (dt)
  • Số nét:14 nét
  • Cách đọc:
    • Kun:うた,うた.う
    • On:カ

30/11/2013

Ý nghĩa của chữ Âm (音)

Sau đây là một cách giải thích ý nghĩa chữ Âm (音):
Y nghia cua chu am
  • Ý nghĩa: Tiếng nói, âm thanh (dt)
  • Số nét: 9
  • Cách đọc:
    • Kun:おと,ね
    • On:イン,オン,-ノン
    • Tên:お,と


29/11/2013

Ý nghĩa của chữ Ốc (屋)

Sau đây là một cách giải thích ý nghĩa của chữ Ốc(屋):

  • Ý nghĩa: Nhà, phòng (dt)
  • Số nét: 9
  • Cách đọc:
    • Kun:や
    • On:オク
    • Tên:た

28/11/2013

Ý nghĩa của chữ Viễn (遠)

Sau đây là một cách giải thích ý nghĩa của chữ Viễn (遠):
Ý nghĩa của chữ Viễn
  • Ý nghĩa: Xa (tt), Xa lìa (đt)
  • Số nét:12
  • Cách đọc:
    • Kun:とお.い
    • On:イン,オン
    • Tên:お,おに,ど,どお

27/11/2013

Ý nghĩa của chữ Ánh (映)

Sau đây là một cách giải thích ý nghĩa của chữ Ánh (映):
Ý nghĩa của chữ Ánh
  • Ý nghĩa: Chiếu, phản xạ (đt)
  • Số nét:9
  • Cách đọc:
    • Kun:うつ.す,うつ.る,は.える,-ば.え
    • On:エイ
    • Tên:あきら,え,てる


26/11/2013

Ý nghĩa của chữ Anh (英)

Sau đây là một cách giải thích ý nghĩa chữ Anh (英):
Ý nghĩa chữ Anh
  • Ý nghĩa: Nước Anh, hoa, nhuỵ hoa (dt)
  • Số nét:8
  • Cách đọc:
    • Kun: はなぶち
    • On:エイ
    • Tên:あ,あい,え,すぐる,はな,ひ,ひで,よし,ら


25/11/2013

Ý nghĩa của chữ Vận (運)

Sau đây là một cách giải nghĩa cho chữ Vận (運):
Y nghia cua chu van
  • Ý nghĩa: (đt) Vận chuyển, (dt) may mắn
  • Số nét:12 nét
  • Các đọc:
    • Kun:はこ。ぶ
    • On:ウン


Ý nghĩa của chữ Viên (員)

Sau đây là một cách giải thích ý nghĩa của chữ Viên (員):
Ý nghĩa của chữ Viên
  • Ý nghĩa: Tròn (tính từ), nhân viên, thành viên (danh từ)
  • Số nét: 10
  • Cách đọc:
    • Kun
    • On: イン
    • Tên: いな、かず


24/11/2013

Ý nghĩa của chữ Ám (暗)

Sau đây là một cách giải nghĩa cho chữ Ám (暗):


  • Nghĩa: Tối (Tối ở đây là tối sáng chứ không có nghĩa là ban đêm).
  • Số nét: 13
  • Cách phát âm:
    • On:アン
    • Kun:くら.い,くら.む,くれ.る

Ý nghĩa của chữ Viện (院)

Sau đây là một cách giải nghĩa cho chữ Viện (院):
Ý nghĩa của chữ Viện

  • Ý nghĩa: Viện (Khu nhà có tường thấp bao xung quanh)
  • Số nét:10
  • Cách đọc:
    • Kun:
    • On:イン

23/11/2013

Ý nghĩa của chữ Dẫn (引)

Sau đây là một cách giải nghĩa của chữ Dẫn (引):
Ý nghĩa của chữ Dẫn
  • Ý nghĩa: Kéo, nhận vào, cài đặt.
  • Số nét: 4
  • Các đọc:
    • Kun:ひ.き,ひ.き-,ひく,ひける,-びき
    • On:イン
    • Tên:いな,ひき,ひけ,びき


22/11/2013

Ý nghĩa của chữ Dĩ (以)

Sau đây là một cách giải nghĩa của chữ Dĩ (以):
Ý nghĩa chữ Dĩ

  • Ý nghĩa: Bởi vì, có nghĩa là, so sánh với, với cái nhìn của, ... khi kết hợp với chữ khác. Tiếp tục khi đứng 1 mình.
  • Số nét:5
  • Các đọc:
    • Kun:もつ.て
    • On: イ
    • Tên: もち

21/11/2013

Ý nghĩa của chữ Ý (意)

Sau đây là một cách giải thích ý nghĩa của chữ Ý (意):
Ý nghĩa chữ Ý
  • Ý nghĩa: Ý, ý chí, ý nghĩa
  • Số nét:13
  • Các đọc:
    • On:イ
    • Kun:
    • Tên: もと、よし

19/11/2013

Ý nghĩa của chữ Y (医)

Sau đây là một cách giải thích ý nghĩa của chữ Y (医):



  • Ý nghĩa: Thuốc (Nghĩa cổ: Cái bao đựng tên)
  • Số nét:7.
  • Cách đọc:
    • Kun:い.する,い.やす,くすし
    • On:イ

18/11/2013

Ý nghĩa của chữ Ác (悪)

Một cách giải mghĩa chữ Ác trong hình bên dưới:
  • Số nét: 11 nét
  • Cách đọc:
    • Kun: ああ, あ.し,いずくに,いずくんぞ,にく.い,-にく.い,にく.む,わる-,わる.い
    • On:アク,オ
  • Ý nghĩa: ác,xấu

14/11/2013

Ý nghĩa của chữ Hành (行)

Sau đây là một cách giải nghĩa của chữ Hành (行).
Giải nghĩa chữ hành

  • Số nét: 6
  • Ý nghĩa: Đi, hành trình.
  • Phát âm:
    • Kun: ーい.き、ーいき、ーいく、おこな.う、おこ.なう、ーゆ.き、ーゆ.く
    • On: アン、ギョウ、コウ
    • Tên người: いく、なみ、みち、ゆき、ゆく。

13/11/2013

Ý nghĩa của chữ Chu (週)

Xem giải thích trong hình bên dưới. Bạn nào có cách giải thích khác xin vui lòng comment để cùng nhau học hỏi nha:

11/11/2013

Ý nghĩa của chữ Hiệu (校)

Sau đây là một cách giải nghĩa của từ Hiệu (校):
Nếu bạn có cách giải nghĩa khác thì vui lòng comment để cùng nhau học hỏi.

10/11/2013

Ý nghĩa của chữ Thư (書)

Phần sưu tầm giải nghĩa chữ THƯ (書) trong hình bên dưới. Nếu bạn có cách giải thích khác xin vui lòng comment, chia sẻ để cùng nhau học hỏi.

09/11/2013

Kinh nghiệm đi công tác Nhật Bản

Sau đây là một vài kinh nghiệm nhỏ của Folami khi đi công tác Nhật vì là kinh nghiệm bản thân nên có thể đúng và có thể sai đối với người khác. Chia sẻ kinh nghiệm này mong giúp ích những ai mới qua Nhật lần đầu chưa biết chuẩn bị gì, mang theo gì. Mong là nó có ích cho bạn:

08/11/2013

Build Tizen Emulator on CentOS 6.4

1) Set up development environment
2) Install development tools
3) Sign-in to the Tizen official review Web site.
4) Select Projects > List to view all the available projects.  
5) Click on sdk/emulator/qemu project
6) Select SSH > Copy link to clone project such as
 git clone ssh://teddywcn@review.tizen.org:29418/sdk/emulator/qemu
7) change directory to tizen folder
8) Install the dependency libraries, project:

  • git submodule update --init check-gl
  • yum install glib2.x86_64
  • yum install glib2-devel.x86_64
  • yum install pixman-devel.x86_64
  • yum install flex.x86_64
  • yum install bison.x86_64
  • yum istall alsa-lib.x86_64
  • yum install alsa-lib-devel.x86_64
  • yum install libcap-devel.x86_64
  • yum install libattr-devel.x86_64
  • yum install libv4l-devel.x86_64
  • yum install libX11-devel.x86_64
  • yum install libpng-devel.x86_64
  • yum install SDL-devel.x86_64
  • yum install libXcomposite-devel.x86_64
  • yum install ant.x86_64
  • yum install ant-nodeps.x86_64
  • Copy swt.jar into tizen/src/skin/client/lib
9) Run build.sh
10) The emulator is built into tizen/emulator

07/11/2013

Change time properties of file in Windows

Sometime we want to change time properties of file (in Windows). The following Perl script is useful for you:
 $|++;  
 use strict;  
 use warnings;  
 use DateTime::Format::Strptime;  
 use Win32API::File::Time qw{:win};  
 my $parser = DateTime::Format::Strptime->new( pattern => '%m/%d/%Y %H:%M');  
 my $filename="Test.txt";  
 my $cdate="12/10/2012 2:00";  
 my $mdate="12/14/2012 9:00";  
 my ($atime, $mtime, $ctime) = GetFileTime ($filename);  
 $mtime = $parser->parse_datetime($mdate)->epoch;  
 $ctime = $parser->parse_datetime($cdate)->epoch;  
 SetFileTime ($filename, $atime, $mtime, $ctime);  

Ý nghĩa của chữ Biệt (別)

Xem giải thích trong hình:

05/11/2013

Con gái của bố (My daughter Seo Young)


  • Nước sản xuất: Hàn Quốc
  • Đơn vị sản xuất: KBS2
  • Số tập: 75 
  • Năm sản xuất:2012
Nổi bật lên trên tất cả và xuyên suốt phim là tình cha như núi Thái Sơn của ông Lee Sam Jae dành cho hai đứa con song sinh của mình là Lee Seo Young và Lee Sang Woo. Tuy nhiên chi tiết làm mình thích nhất là sự chọn lựa đi theo sự đam mê của cuộc đời của nhân vật Choi Min Suk. Ông là bạn thân của chủ tịch tập đoàn Winner, Kang Ki Bum. Sau một lần thất bại trong kinh doanh ông quyết định từ chức và bắt đầu đeo đuổi niềm đam mê thành diễn viên của mình. Theo nhiều người mà đặc biệt là vợ ông, bà Kim Kang Soon là một quyết định điên rồ vì lúc này ông không còn trẻ. Tuy nhiên với sự giúp đỡ của người bạn trẻ cùng niềm đam mê  Kang Sung Jae cuối cùng ông cũng thành công. Do đó biết mình đam mê điều gì, cháy hết mình vì niềm đam mê này thì nhất định sẽ thành công.
Sự kiên trì đeo đuổi đến cùng mục tiêu của mình không thể không kể đến nhân vật Choi Ho Jung. Cô yêu Lee Sang Woo và nhiều lần bị từ chối do Sang Woo đã có người yêu rồi. Cô kiên trì đến cùng và tận dụng cơ hội để kết hôn với Sang Woo. Tình yêu và sự chân thành của cô đã làm trái tim chàng Sang Woo xao động.


Ý nghĩa của chữ 勝 (thắng)

Xem giải thích trong hình:

04/11/2013

Ý nghĩa của chữ 港 (cảng)

Xem hình:

Giải Mã Nhân Tâm II (A Great Way To Care II)


  • Tên Tiếng Trung Quốc: 仁心解碼II.
  • Tên Tiếng Anh: A Great Way To Care II.
  • Số tập: 25.
  • Nước sản xuất: Trung Quốc.
  • Sản xuất: TVB Jade.
  • Phát hành: 18/03/2013.
  • Kênh phát sóng: HTV2.
Một bộ phim khá hay cho ai thích thể loại hình sự, điều tra, phá án. Xem xong phim có một vài điểm sau tâm đắc cần chia sẻ với những ai đã, đang và sẽ xem nó.

  • Cái bất ngờ lớn nhất là đôi khi chúng ta làm những gì ngay cả bản thân chúng ta cũng không biết đó là trường hợp của cô cảnh sát yêu nghề Lâm Tụng Ân (Tưởng Y Lâm), cô gái có tuổi thơ đáng thương. Những vết thương về mặt tinh thần xảy ra đối với con trẻ tưởng chừng vô hại nhưng đôi khi lại để lại cho phần còn lại của cuộc đời con trẻ là bóng tối đêm đen. Đây là bài học đáng quan tâm của những ông bố, bà mẹ trẻ.  Tưởng Đại Quân (cha của Y Lâm) cùng Lục Nhật Cần tham gia vụ cướp ở đại lục và bị truy đuổi nên ông đưa Y Lâm trốn đến Hồng Công nương nhờ gia đình Nhật Cần. Một hôm Nhật Cần vu cho Đại Quân ăn cắp chiếc đồng hồ. Tức nước vỡ bờ nên Đại Quân ra tay giết hại cảgia đình họ Lục trước mắt con gái của mình. Cảnh tượng hải hùng này là vết thương không bao giờ lành trong tinh thần của Y Lâm. Sau khi gây án, Đại Quân giao Y Lâm cho cha sứ nuôi dưỡng và đổi tên thành Tụng Ân. Vết thương kia lớn dần theo năm tháng và biến thành căn bệnh Tâm thần phân liệt, đa nhân cách. Lúc cô là Tụng Ân với khẩu súng chính nghĩa của người đại diện pháp luật và lúc là Đại Quân trừ gian diệt ác ung dung ngoài vòng pháp luật, không tin vào đấng tối cao và sự công bằng của pháp luật.
  • Cái kết có hậu của mối tình Cao Lập Nhân và Trác Tuệ Kiều. Đôi khi đường gần không hiệu quả ta lại phải đi vòng chút. Đường nào cũng về La Mã ý mà. Cũng khá hâm mộ sự chung tình của Cao Lập Nhân với người vợ cũ Mạc Mẫn Nhi và tinh thần trách nhiệm với từng hành động của mình.
  • Phim vẫn thuộc mô típ thiện thắng ác. Đôi khi cái ác có thể tạm thời thắng cái thiện nhưng đó cũng chỉ là nhất thời mà thôi. Quy luật nhân quả thể hiện khá đậm nét trong các trường hợp Đàm Tân, La Vĩnh Khanh, Trịnh Bội Như,...
  • Trong mối tình tay ba giữa Lương Khải Vinh, Lại Dao Châu và Trần Tư Gia. Đôi lúc người đàn ông cũng bị say nắng tuy nhiên tình yêu đích thực bao giờ cũng là mục tiêu anh ta tìm kiếm. Cái sai lầm của anh chàng Vinh hô là không biết ra quyết định và sự chần chừ của anh ta khiến anh ta phải trả giá. 
  • Tình yêu là phương thuốc diệu kỳ làm đâm chồi, ra hoa cho những tâm hồn cằn cỗi, khô hạn như trường hợp của Lại Dao Tinh.Anh trai của Dao Châu bị tự kỷ nhưng khi anh ta tìm được người yêu mình trong căn tiệm bán bánh bao, một cô gái câm khá xinh đẹp đã làm cuộc đời anh thay đổi và tờ lịch để bàn tràn ngập những hình smiley hạnh phúc.

24/10/2013

Cải tiến nhập số thẻ ATM nội địa

Mỗi lần thanh toán trực tuyến bắt nhập cái chuỗi số thẻ và thời gian bắt đầu có giá trị của thẻ là phát mệt vì cái dãy số nó dài ngoằn hà. Có cách nào cải tiến nó không?
  • In QR code trên thẻ
  • In Barcode trên thẻ 
  • Gắn NFC tag (cái này nguy hiểm, phải có cách mã hoá để bảo vệ bị đọc trộm)


18/10/2013

Dịch ngược ứng dụng iOS

Để dịch ngược ứng dụng iOS các công cụ sau đây là rất hữu ích cho bạn:
Ngoài ra thì iOS private API cũng rất cần thiết:

25/09/2013

Remote deploy Tomcat application using Maven

Configure Tomcat servers for Maven:

Open ~/.m2/settings.xml (if it doesn't exist, create it), add the following lines:
  <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
      <!-- Omit the irrelevant information here -->
      <server>
        <id>Tomcat7</id>
        <username>tomcat</username>
       <!-- Change this password -->
        <password>mypassword</password>
      </server>
     <!-- Omit the irrelevant information here -->
  </servers>
</settings>


Configure pom.xml:

Add the plugin for Maven:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>tomcat-maven-plugin</artifactId>
             <version>1.1</version>
            <configuration>
                <server>Tomcat7</server>
                <!-- Change the name of your server -->
                <url>http://example.com:8080/manager/text</url>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
            </configuration>
 </plugin>
                


Configure Tomcat:

Open file /conf/tomcat-users.xml:


   <tomcat-users>
   <role rolename="manager-gui"/>
   <role rolename="manager-script"/>
   <user username="tomcat" password="mypassword" roles="manager-gui,manager-script"/>
</tomcat-users>
   
   


Using:

Run your application with goal tomcat:redeploy the application will be redeployed to remote server.

23/09/2013

Thay đổi hostname của máy Mac OS X

Do nhu cầu quản lý hoặc để chia sẻ dữ liệu giữa các thành viên trong nhóm dễ dàng hơn chúng ta cần thay đổi hostname của máy tính đang sử dụng hệ điều hành Mac OS X của chúng ta. Để xem hostname hiện tại sử dụng câu lệnh sau trong cửa sổ Terminal:
hostname
Để thay đổi hostname chúng ta sử dụng câu lệnh sau trong cửa số Terminal:
sudo scutil –-set HostName new_hostname
Lưu ý rằng phía trước chữ set là dấu dash (--) chứ không phải dấu hyphen (-)
Nếu bạn chỉ muốn thay đổi hostname tạm thời và hostname sẽ bị thiết lập lại sau khi bạn khởi động lại hệ thống thì sử dụng câu lệnh sau đây trong cửa số Terminal:
sudo hostname new_hostname

15/06/2013

Which criteria for a successful software project


Thay đổi kích thước view khi user thay đổi paper orientation

Đôi khi chúng ta gặp tình huống là chúng ta muốn thay đổi thuộc tính của view cho phù hợp với orientation của trang giấy khi user chọn trên print panel.
NSPrintOperation*fPrintOperation = [NSPrintOperation printOperationWithView:viewToPrint];
    [fPrintOperation.printInfo setOrientation:NSLandscapeOrientation];
    [fPrintOperation.printPanel setOptions:NSPrintPanelShowsPreview|NSPrintPanelShowsPaperSize|NSPrintPanelShowsPageRange|NSPrintPanelShowsCopies|NSPrintPanelShowsOrientation];  
    [NSPrintOperation setCurrentOperation:fPrintOperation];
    if(fPrintOperation.printPanel.runModal == NSOKButton){      
        NSPrintInfo*printInfo = [fPrintOperation printInfo];
        if( [printInfo orientation] == NSPortraitOrientation){
           //Do something
        }else{
           //Do something
        }
        [[NSPrintOperation currentOperation] cleanUpOperation];
        NSPrintOperation *rPrintOperation = [NSPrintOperation printOperationWithView:viewToPrint printInfo:printInfo];
        [rPrintOperation setShowsPrintPanel:NO];
        [rPrintOperation runOperation];
    }else{
        [[NSPrintOperation currentOperation] cleanUpOperation];
    }

18/05/2013

Bind edit shortcuts cho chương trình Mac OS X

Lập trình Mac OS X, ai cũng biết rằng để bind các edit shortcuts như Cmd-C, Cmd-V, Cmd-A, ... cho chương trình chúng ta thường sử dụng built-in Edit menu. Tuy nhiên trong vài trường hợp chúng ta cần customize menu bar nên không có built-in Edit menu trên menu bar. Trong trường hợp này chúng ta thực hiện theo phương pháp sau:

  1. Kế thừa NSApplication, tạo lớp CustomApplication:
    • CustomApplication.h:
      @interface CustomApplication:NSApplication
      @end
    • CustomApplication.m
      @implementation CustomApplication
      - (void) sendEvent:(NSEvent *)event {
          if ([event type] == NSKeyDown) {
              if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == NSCommandKeyMask) {
                  if ([[event charactersIgnoringModifiers] isEqualToString:@"x"]) {
                      if ([self sendAction:@selector(cut:) to:nil from:self])
                          return;
                  }
                  else if ([[event charactersIgnoringModifiers] isEqualToString:@"c"]) {
                      if ([self sendAction:@selector(copy:) to:nil from:self])
                          return;
                  }
                  else if ([[event charactersIgnoringModifiers] isEqualToString:@"v"]) {
                      if ([self sendAction:@selector(paste:) to:nil from:self])
                          return;
                  }
                  else if ([[event charactersIgnoringModifiers] isEqualToString:@"z"]) {
                      if ([self sendAction:@selector(undo:) to:nil from:self])
                          return;
                  }
                  else if ([[event charactersIgnoringModifiers] isEqualToString:@"a"]) {
                      if ([self sendAction:@selector(selectAll:) to:nil from:self])
                          return;
                  }
              }
              else if (([event modifierFlags] & NSDeviceIndependentModifierFlagsMask) == (NSCommandKeyMask | NSShiftKeyMask)) {
                  if ([[event charactersIgnoringModifiers] isEqualToString:@"Z"]) {
                      if ([self sendAction:@selector(redo:) to:nil from:self])
                          return;
                  }
              }
          }
          [super sendEvent:event];
      }
      @end
  2. Thay đổi NSApplication thành CustomApplication trong mục Principal Class ở Target properties.
       

11/05/2013

Lưu ý khi dùng NSColor trong MAC OS X programming

Trong khi lập trình MAC OS X bạn sẽ gặp phải vấn đề sau đây:
Khách hàng đưa cho bạn màu sắc của một bản thiết kế nào đó dạng chuỗi HTML RGB ví dụ: 6F5A4E và yêu cầu bạn đưa lên màn hình. Thông thường bạn sẽ làm như sau:
Tạo category cho NSColor để thêm phương thức tạo NSColor từ chuỗi HTMLRGB:
  • Tạo file NSColor+Ext.h:
       @interface NSColor(Ext)
       +(NSColor*) newColorFromRGBString:(NSString*) rgb;
      @end
    
  • Tạo file NSColor+Ext.m
    @implementation NSColor(Ext)
        +(NSColor*) newColorFromRGBString:(NSString*) rgb{
    
            NSColor*result= nil;
    
            unsigned colorValue=0;
    
            unsigned char  r,g, b;
        if (nil != rgb)
        {
             NSScanner* scanner = [NSScanner scannerWithString:rgb];
              // ignore error
             (void) [scanner scanHexInt:&colorValue];
        }
        r = (unsigned char)(colorValue >> 16);
        g = (unsigned char)(colorValue >> 8);
        // masks off high bits
        b = (unsigned char)(colorValue);
        result = [NSColor colorWithCalibratedRed:(CGFloat)r / 0xff green:(CGFloat)g / 0xff blue:(CGFloat)b / 0xff alpha:1.0f];
        return result;
       }
    @end
    
Đoạn code trên có vấn đề ở chỗ là chúng ta sử dụng phương thức colorWithCalibratedRed:green: blue:, màu sắc hiện lên trên màn hình chỉ đúng khi người dùng chọn Generic RGB Profile trong System Preferences > Display > Color. Nếu người dùng chọn color profile khác thì màu sắc hiện lên màn hình không như bạn mong đợi. Bạn có thể sử dụng công cụ đo màu (color picker) để kiểm chứng điều này.
Sau đây mình sẽ trình bày phương pháp để giải quyết vấn đề này bằng ColorSync Manager API (Xem thêm tài liệu Technical Q&A QA1396):
  1. Khai property colorSpace trong AppDelegate.h:
    @interface AppDelegate:NSObject
    @property (strong) NSColorSpace*colorSpace;
    @end
    
  2. Trong AppDelegate.m Private category:
    #import <ApplicationServices/ApplicationServices.h>
    @interface AppDelegate()
    +(CGColorSpaceRef)CreateDisplayColorSpace;
    -(void)updateColorSpace;
    -(void)registerNotifications;
    @end
    @implementation AppDelegate
    //Disable deprecated warning
    #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
    +(CGColorSpaceRef)CreateDisplayColorSpace{
    CMProfileRef sysprof = NULL;
        CGColorSpaceRef dispColorSpace = NULL;
    
        // Get the Systems Profile for the main display
        if (CMGetSystemProfile(&sysprof) == noErr)
        {
            // Create a colorspace with the systems profile
            dispColorSpace = CGColorSpaceCreateWithPlatformColorSpace(sysprof);
    
            // Close the profile
            CMCloseProfile(sysprof);
        }
    
        return dispColorSpace;
    }
    //Enable deprecated warning
    #pragma GCC diagnostic warning "-Wdeprecated-declarations"
    -(void)registerNotifications
    {
        NSDistributedNotificationCenter *center;
    
        center = [NSDistributedNotificationCenter defaultCenter];
    
        [center addObserver:self
                   selector:@selector(updateColorSpace)
                       name:kCMDeviceUnregisteredNotification
                     object:nil];
        [center addObserver:self
                   selector:@selector(updateColorSpace)
                       name:kCMDefaultDeviceNotification
                     object:nil];
        [center addObserver:self
                   selector:@selector(updateColorSpace)
                       name:kCMDeviceProfilesNotification
                     object:nil];
        [center addObserver:self
                   selector:@selector(updateColorSpace)
                       name:kCMDefaultDeviceProfileNotification
                     object:nil];
    }
    -(void)updateColorSpace{
     CGColorSpaceRef csr = [AppDelegate CreateDisplayColorSpace];
     self.colorSpace = [[NSColorSpace alloc] initWithCGColorSpace:csr];
    CGColorSpaceRelease(csr);
    }
    - (void)applicationWillFinishLaunching:(NSNotification *)aNotification{
    [self registerNotifications];
    [self updateColorSpace];
    } @end
  3. Nhiệm vụ cuối cùng là thay đổi cách viết NSColor+Ext ở trên dùng property colorSpace trong lớp AppDelegate:
        @implementation NSColor(Ext)
        +(NSColor*) newColorFromRGBString:(NSString*) rgb{
             NSColor* result = nil;
             unsigned colorValue = 0;
             unsigned char r, g, b;
             if (nil != rgb)
              {
                    NSScanner* scanner = [NSScanner scannerWithString:rgb];
                    // ignore error
                    (void) [scanner scanHexInt:&colorValue];
              }
              r = (unsigned char)(colorValue >> 16);
              g = (unsigned char)(colorValue >> 8);
              // masks off high bits
              b = (unsigned char)(colorValue);
              CGFloat components[4] = {(CGFloat)r / 0xff,(CGFloat)g / 0xff,(CGFloat)b / 0xff,1.0f};
              return [NSColor colorWithColorSpace:(AppDelegate*)([NSApplication shareApplication].delegate).colorSpace components:components count:4];
              }
         @end
            

01/05/2013

NCTDownloader version 1.0.0.0

Hôm nay rãnh rỗi ngồi viết code cho bài viết: Tải nhạc (phim) từ trang nhaccuatui.com.
Chương trình này tạm gọi là NCTDownloader. Phiên bản 1.0.0.0 download về tại đây.
Ở phiên bản này  NCTDownloader chỉ lấy link download trực tiếp bài nhạc hay video clip.

02/04/2013

Cài đặt custom FontAndColorTheme in XCode

Download file FontAndColor miễn phí ở một số trang như sau:

  • http://amychr.wordpress.com/2011/06/05/xcode-color-themes/
  • http://undefinedvalue.com/2012/10/30/havenjark-color-theme-xcode-4
Sau đó chép tập tin này vào thư mục:
~/Library/Developer/Xcode/UserData/FontAndColorThemes

22/03/2013

OpenGL blend function

Trước đây làm việc OpenGL mà không hiểu mấy về cái hàm gl.glBlendFunc(a,b). Hôm qua có thời gian ngồi xem tài liệu kỹ lại thì ra là thế này. Gọi D là màu của destination (màu đang có), S là màu source (màu ta cần pha với màu đang có), ta có công thức tính màu sau khi pha như sau:
R = a*S+b*D
Lấy ví dụ: 
  • Nếu a= GL_ONE, b=GL_ONE, S=(1,0,0) (màu đỏ), D=(0,0,1) (xanh da trời). Ta sẽ có R=(1,0,1) (màu đỏ tươi)
  • Nếu a=GL_SRC_ALPHA, b= GL_ONE_MINUS_SRC_ALPHA, S=(0.5,1,0,0), D=(1,0,0,1). Ta sẽ có: 
    • Ra = 0.5*0.5+(1-0.5)*1=0.25+0.5 = 0.75
    • Rr = 0.5*1+(1-0.5)*0 = 0.5
    • Rg = 0.5*0+(1-0.5)*0 = 0
    • Rb = 0.5*0+(1-05)*1 = 0.5
                R = (0.75,0.5,0,0.5)



20/03/2013

ARC in Mac OS X 10.6.8

Một ngày vật lộn với việc build app với ARC chạy trên Mac OS X 10.6.8 bằng XCode 4.6.1 (Lưu ý: XCode 4.6 có bug khi build app với ARC  chạy trên Mac OS X 10.6.8). Nếu tạo một Project mới với ARC được bật thì mọi việc OK. Tuy nhiên khi add mấy file mã nguồn vào thì cứ bị lỗi:
Symbol not found: _objc_retain
Thử đủ cách lượm lặt từ Google như:

  • Add -fobjc-arc vào Other linker flags.
  • Sử dụng -weak_library, -weak_framework.
  • Tắt Implicit link to system library option
Cuối cùng cũng tìm ra lời giải. ARC trên 10.6.8 không hỗ trợ các phương thức + (void) initialize+(void) load.


15/03/2013

Kiểm tra một số có là luỹ thừa của 2 hay không nhanh nhất

Thông thường để muốn kiểm tra một số có là luỹ thừa của 2 hay không thì chúng ta đem số này chia cho 2 như sau:

public boolean isPowerOfTwo(int n){
	if( 0 == n|| 1 == n ) return true;
	int x = n / 2;
	int y = n%2;
	if (1 == y) return false;
	return isPowerOfTwo(x);
}
Hoặc chúng ta không cần viết đệ qui như sau:

  public boolean isPowerOfTwo(int n){
    boolean ret;        
	if( 0 == n|| 1 == n ){
    	     ret = false;       
    }else{
        int x = n / 2;
        int y = n%2;
        while ( x > 0){
        	if (1 == y) {
            ret = false;
            break;
 		};
		x = x / 2;
        y = x%2;
	}
	ret = true;
	}
   return ret;
 } 

Sau đây là cách nhanh hơn sử dụng hàm logarit:

public boolean isPowerOfTwo(int n){
	double logn2 = Math.log(n)/Math.log(2);
	int logn2i = (int) (Math.floor(logn2));
	if(logn2-logn2i==0)
		return true;
	else
	return false;
}

Tuy nhiên nếu chúng ta để ý một chút chúng ta sẽ có cách kiểm tra nhanh nhất. Các số là luỹ thừa của 2 đều có 1 chữ số 1 trong biểu diễn nhị phân của chúng. Ví dụ số
1: 000001
2: 000010
4: 000100
8: 001000
16: 010000
32:     100000
Xét số n = 32 ( 100000) và n -1 = 31 (011111) và rõ ràng n&(n-1) = 0.
Ta có giải thuật như sau:

public boolean isPowerOfTwo(int n){
	return ((n!=0) && (n&(n-1))==0);
}

Thật ngắn gọn, đơn giản phải không các bạn!

16/02/2013

Android 4.2.2 (JDQ39) changelog

Google has release Android 4.2.2 (Jelly Bean). Nexus tablets ( Nexus 7 (non-3G), Nexus 10) and Galaxy Nexus (takju) can be updated the new version OS. Some changes:

  • More secured ADB.
  • Bug fix for bluetooth audio streaming
  • Download notification now shows remaining time
  • Quick Settings:Toggle WiFi and Bluetooth on/off by a long-touch 
  • Performance enhancements
  • New notification sounds (wireless charging and low battery)
Google vừa phát hành bản nân cấp Android 4.2.2. Các smartphone Nexus 4, Galaxy Nexus và máy tính bảng Nexus 7, Nexus 10 đã có thể cập nhật bản Android 4.2.2.
Một vài điểm mới trong bản nâng cấp Android 4.2.2:
  • An toàn hơn cho cầu nối ADB.
  • Vá lỗi âm thanh bị lắp khi dùng Bluetooth và lỗi tự khởi động lại thiết bị.
  • Thông báo (Notification) tải ứng dụng trình bày thông tin về thời gian còn lại cần để tải.
  • Thiết lập nhanh (Quick Settings):Người dùng có thể chạm vào và giữ lâu (long touch) lên biểu tượng Wi-Fi và Bluetooth để thay đổi thiết lập.
  • Âm báo mới cho chức sạc không dây và cảnh báo pin sắp hết.
  • Tốc độ hiển thị và lướt ảnh trong Gallery nhanh hơn.

04/01/2013

Hệ điều hành dành cho Smartphone năm 2013


  • Ubuntu trình làng hệ điều hành dành cho smartphone Ubuntu for phone (UFP). UFP dựa trên bản Ubuntu dành ch o PC. Mẫu điện thoại di động dùng UFP sẽ ra mắt vào CES 2013 ở Las Vegas từ 8/1-11/1. Các ứng dụng chạy trên UFP là các ứng dụng HTML5 hay các ứng dụng Qt/QML.
  • Apple thử nghiệm iOS7 và iPhone thế hệ thứ 6.
  • Smartphone Tizen sẽ ra đời vào năm 2013: Tizen là sự kết hợp giữa MeeGo và LiMo được tài trợ bởi Intel và Samsung. Samsung và NTT Docomo đang hợp tác để năm 2013 này, điện thoại sử dụng Tizen sẽ ra đời. Ngoài ra Vodafone, France Telecom,Panasonic, NEC cũng đang phát triển thiết bị sử dụng Tizen.
  • Jolla trình làng Sailfish OS dự trên Mer tại Phần Lan.
  • Mozilla thử nghiệm Firefox OS.
  • RIM tuyên bố sẽ cho ra lò smartphone sử dụng Blackberry 10 trong năm 2013.

03/01/2013

Khắc phục lỗi trùng ObjectID trong XCode 4.5

Một dự án Mac OS bạn sử dụng các phiên bản cũ (4.3-) để phát triển. Sau một khoảng thời gian bạn đã nâng cấp XCode lên phiên bản 4.5. Lúc này bạn mở lại các dự án cũ, thỉnh thoảng bạn gặp lỗi sau:
The document "name.xib" could not be opened. The operation couldn’t be completed. Two members of the document have the object ID 17. This may have happened through an external edit, such as an SCM merge operation.
Trường hợp của bạn có thể không phải object ID 17 mà là một con số khác.
Để khắc phục lỗi này chúng ta mở nib file bị lỗi trong trường hợp này là name.xib bằng text editor và tìm cụm ">17" (thay số 17 bằng số trong trường hợp của bạn). Thay đổi số này bằng một số lớn lớn rồi lưu lại. 

31/12/2012

Cắt số lẻ trong số double

Trong các phần mềm tài chính, ngân hàng thường có bài toán như sau:
Cho một số double, bạn hãy cắt bỏ các số lẻ sau số lẻ thứ k trong phần thập phân.
Đứng trước bài toán này bạn thường nghĩ đến giải pháp cắt chuỗi. Biến double sang NSString rồi cắt chuỗi.
Tuy nhiên khi bạn chuyển số double sang NSString bằng string format %.*f bạn sẽ gặp phải vấn đề làm tròn số lên. Bạn lại nghĩ ra vậy tôi lấy đến k+1 số lẻ rồi cắt bỏ chữ số cuối cùng.Tuy nhiên giải pháp này lại bị vấn đề làm tròn số lan truyền khi chữ số thứ k+1 là số 9. Để tránh làm tròn số lan truyền một bạn khác lại đề nghị chuyển double sang NSNumber trước khi chuyển sang NSString. Một điều không may cho giải pháp này khi bạn chuyển các số double như 1.05, 0.05 thì bạn sẽ nhận được các số 1.049999..., 0.049999,.. (xem bài viết Vấn đề làm tròn số khi dùng double). Ngoài ra bạn cũng có thể nghĩ đến các hàm C khác khi modf, ... F giới thiệu cách sử dụng hàm floor như sau:
floor(x*pow(10,k)+1E-10)/pow(10,k) 

29/12/2012

Chạy ứng dụng Android trên PC

Đọc các bài báo sau  trên báo Tuổi trẻ:

và đang suy nghĩ miên man về công nghệ mà Blue Stacks sử dụng.Ngoài ra liệu việc làm này sẽ làm cho Android mạnh lên hay sẽ thu hẹp tầm ảnh hưởng của nó?
Về công nghệ thì theo các bài báo có chút thông tin tóm tắt như sau:

  • BlueStacks sử dụng BlueStacks App Player (BAP) 
  • BAP thực hiện giải pháp chuyển đổi ảo hoá Windows/Mac OS nhanh chóng thông qua công nghệ đám mây BlueStack Cloud Connect 
  • Cho phép đồng bộ ứng dụng trên Android smartphone với PC.

VẤN ĐỀ LÀM TRÒN SỐ KHI DÙNG DOUBLE

Có bao giờ bạn gặp rắc rối khi gán 0.05 vào 1 biến double:
double f = 0.05
Rồi sau đó bạn tính
floor(f*100)
Bạn mong đợi nhận được 5. Tuy nhiên kết quả bạn nhận được lại là 4.
Để tìm hiểu nguyên nhân tại sao như vậy chúng ta bắt đầu tìm hiểu từ cách thức lưu số double trong bộ nhớ ra sau.
Số double sử dụng 8 byte hay 64 bit để lưu. Trong đó:

  • 1 bit dùng để lưu dấu của số double (sign bit)
  • 11 bit dùng để lưu độ lớn của số mũ (exponent)
  • 52 bit + 1 bit có giá trị mặc định để lưu phần định trị (mantissa)
value =(-1)sign(1.b-1b-2..b-52)2x 2e-1023=(-1)sign(SUMi=1,52(b-i2-i))x 2e-1023 trong đó e là số mũ
Vậy độ chính xác (machine epsilon) khi làm tròn là 2-53 do khoảng cách giữa hai số 2n và 2n+1 là 2n-52
Phần số mũ e được biểu diễn dạng offset-binary (excess-K) K=2n-1 với n là số bit. Ở đây n = 11.
Giá trị của số = (-1)signx 2exponent - 1023x1.mantissa
Bây giờ ta hãy xem số 0.05 lưu trong bộ nhớ ra sao?
0.05 = 0.00001100110011001100110011001100110011001100110011001100... =  0.1100110011001100110011001100110011001100110011001100... x 2-4
Phần sau dấu phẩy bị cắt 52 bít là:
110011001100110011001100110011001100110011001100110
Bây giờ bạn tính lại sẽ thấy giá trị là:
0.049999999999999988897769753748434595763683319091796875
Rõ ràng số này nhân với 100 và tính floor là 4 chứ không phải là 5.
Để lấy floor chính xác bạn cần cộng thêm một lượng 10-N. Trong đó N là số chữ số bạn quan tâm.

25/12/2012

LƯU Ý KHI RESHOW UIPOPOVERCONTROLLER

Vì một lý do nào đó bạn phải reshow lại UIPopoverController ví dụ như bạn phải canh giữa màn hình, khi đó bạn cần phải đăng ký lại các notification nếu có cho UIPopoverController này. Nếu không sau khi reshow thì  UIPopoverController không nhận notification nữa.
Ví dụ bạn muốn điều chỉnh lại kích thước của UIPopoverController mỗi khi bàn phím hiện ra chúng ta phải đăng ký nhận notification UIKeyboardWillShowNotification như sau:
//MyPopoverViewCtrl.h
@interface MyPopoverViewCtrl:UIPopoverController
-(void) reshow;
@end
//MyPopoverViewCtrl.m
@implementation MyPopoverViewCtrl
-(void) registerKeyboardEvent {
[ [NSNotificationCenter defaultCenter] addObserver:self select:@selector(doSomething:) name:UIKeyboardWillShowNotification object:nil];
}
-(void) unregisterKeyboardEvent{
[ [NSNotificationCenter defaultCenter] removeObserver:self  name:UIKeyboardWillShowNotification object:nil];
}
- (id)initWithContentViewController:(UIViewController *)viewController
self = [super initWithContentViewController:viewController];
if(self){
 [self registerKeyboardEvents];
}
return self;
}
-(void) dealloc{
[self unregisterKeyboardEvent];
[super dealloc];
}
-(void) reshow{
    [self unregisterKeyboardEvent];
   //do reshow
   [self registerKeyboardEvent];
}
-(void) doSomething:(NSNotification*)noti{
//Do what you want.
}
@end

21/12/2012

9 ỨNG DỤNG IN ẤN HÀNG ĐẦU TRÊN ANDROID

Hiện nay ở Việt Nam, điện thoại Android dần phổ biến. Một chiếc điện thoại Android thì không thể thiếu chiếc máy ảnh đi kèm. Khi chụp ảnh xong chúng ta thường tải lên các trang mạng xã hội như Facebook, Google Plus, ... Có bao giờ bạn muốn in những bức ảnh này ra máy in không? Làm cách nào để in?
Hiện nay theo F thì có các ứng dụng sau đây giúp bạn thực hiện được mong muốn này:

  1. StarPrint
    • Nội dung in: PDF, PS, văn bản trơn, nội dung trang Web, hình ảnh trong bộ sưu tập trên thiết bị, hình ảnh trên Instagram, SMS, sổ địa chỉ, thư điện tử.
    • Hỗ trợ in qua Bluetooth, Wi-Fi, USB.
    • Hỗ trợ hơn 3000 thiết bị in khác nhau của các hãng HP, Canon, Brothers, Epson, ...
  2. ePrint
    • Chỉ hỗ trợ các máy in Epson, Canon, HP.
    • Chỉ hỗ trợ Android 3.0 trở đi.
  3. Canon Easy PhotoPrint
    • Chỉ hỗ trợ máy in Canon
    • Hỗ trợ in PDF và hình tạo bởi "Canon equipment" 
  4. Epson iPrint (CyPria)
    • Chỉ hỗ trợ máy in Epson.
    • Hỗ trợ nhiều loại tập tin 
    • Có thể in từ Box, DropBox, Evernote và Google Docs.
  5. KODAK Document Print
    • Yêu cầu tài khoản "Google Cloud Print" và máy in không dây Kodak.
    • Hỗ trợ nhiều loại tập tin.
  6. Breezy-Print and Fax
    • Hỗ trợ cả iOS và Blackberry.
    • Yêu cầu "Breezy subscription".
  7. Office Max Print Center
    • Yêu cầu phải có "Office Max Network".
  8. Brother iPrint & Scan
    • Chỉ hỗ trợ máy in Brothers.
  9. HP ePrint Home & Biz
    • Chỉ hỗ trợ máy in HP. 

19/12/2012

nlctim version 2.0 release

Phiên bản 2.0 của nlctim được release vào 19/12/2012.
Phiên bản này tương thích với Yahoo! Messenger 11.5
Tải nlctim về tại http://nlctim.sf.net

09/12/2012

Student Visit Tour Document

Thời gian vừa qua Folami có cơ hội được trò chuyện với các bạn sinh viên HCMUT (cũng là các bạn đồng môn F). Nội dung chính là các bạn chuẩn bị gì để trở thành một nhà phát triển phần mềm C/C++ và một vài kinh nghiệm cho buổi phỏng vấn xin việc. Tất cả những vấn đề nêu ra đều xuất phát từ ý kiến cá nhân của F trong quá trình phỏng vấn các bạn sinh viên mới ra trường xin việc làm. Nếu có thông tin gì không đúng hay có gì muốn trao đổi với F thì đừng ngần ngại gửi email cho F.

06/12/2012

Hiển thị tập tin Freemind trong Blogger


  •  Tải visorFreemind.swf từ trang nhà của Freemind
  • Upload visorFreemind.swf lên một host miễn phí nào đó ví dụ http://www.000webhost.com. Giả sử URL của file visorFreemind.swf là http://www.example.com/visorFreemind.swf
  • Upload file Mindmap example.mm lên host tương tự như tập tin visorFreemind.swf. Giả sử URL của file này là  http://www.example.com/example.mm
  • Tạo bài viết mới trong blog của bạn chọn tab "HTML" và post nội dung bên dưới vào:
<div style="width: 100%;height:500px;">
<object data="http://www.example.com/visorFreemind.swf" height="100%" type="application/x-shockwave-flash" width="100%">
<param name="movie" value="http://www.example.com/visorFreemind.swf" />
<param name="quality" value="high" />
<param name="flashvars" value="initLoadFile=http://www.example.com/example.mm&amp;openUrl=_self&amp;startCollapsedToLevel=3&amp;maxNodeWidth=200&amp;mainNodeShape=elipse&amp;justMap=false&amp;defaultToolTipWordWrap=200&amp;offsetX=middle&amp;offsetY=middle&amp;buttonsPos=top&amp;min_alpha_buttons=20&amp;max_alpha_buttons=100&amp;scaleTooltips=false&amp;bgcolor=0xF8FBFC" />
</object>
</div>
Sau đây là một ví dụ:

05/12/2012

Những điểm mới trong XCode 4.5

Hiện nay XCode có phiên bản mới nhất là 4.5.2. So với phiên bản 4.5 thì các phiên bản 4.5.1 và 4.5.2 chủ yếu là để sửa các lỗi trong phiên bản 4.5. So với các phiên bản trước đó thì XCode 4.5 có những điểm nổi bật như sau:

  1. LLDB là trình gỡ rối mặc định thay cho GDB.
  2. Hỗ trợ OpenGL debugging & performance analysis.
  3. Auto layout.
  4. Object-C literal trong NSArray và NSDictionary.
  5. Hỗ trợ truy xuất bằng toán tử [].
  6. Hỗ trợ chuẩn C++11.
Trong các điểm này thì 4 và 5 là hai điểm hấp dẫn nhất:

  • NSNumber literals:
  // character literals.
  NSNumber *theLetterZ = @'Z';          // equivalent to [NSNumber numberWithChar:'Z']

  // integral literals.
  NSNumber *fortyTwo = @42;             // equivalent to [NSNumber numberWithInt:42]
  NSNumber *fortyTwoUnsigned = @42U;    // equivalent to [NSNumber numberWithUnsignedInt:42U]
  NSNumber *fortyTwoLong = @42L;        // equivalent to [NSNumber numberWithLong:42L]
  NSNumber *fortyTwoLongLong = @42LL;   // equivalent to [NSNumber numberWithLongLong:42LL]

  // floating point literals.
  NSNumber *piFloat = @3.141592654F;    // equivalent to [NSNumber numberWithFloat:3.141592654F]
  NSNumber *piDouble = @3.1415926535;   // equivalent to [NSNumber numberWithDouble:3.1415926535]
  // BOOL literals.
  NSNumber *yesNumber = @YES;           // equivalent to [NSNumber numberWithBool:YES]
  NSNumber *noNumber = @NO;             // equivalent to [NSNumber numberWithBool:NO]
 #ifdef __cplusplus
  NSNumber *trueNumber = @true;         // equivalent to [NSNumber numberWithBool:(BOOL)true]
  NSNumber *falseNumber = @false;       // equivalent to [NSNumber numberWithBool:(BOOL)false]
 #endif
Lưu ý:
    • Giá trị sau @ là một giá trị đơn, không chấp nhận biểu thức. Trong trường hợp cần đóng gói
      (boxing) cho một biểu thức thì sử dụng cú pháp:@(expression)
    • Đóng gói giá trị enum thì giá trị này chuyển sang kiểu của enum, nếu enum không khai báo kiểu
      thì kiều mặc định là số nguyên.
    • Đóng gói C string chuyển thành NSString với UTF8 encoding.
  • Container literals:
    • Array: NSArray*a = @[Danh sách các đối tượng ngăn cách nhau bằng dấu phẩy];
    • Dictionary: NSDictionary*b = @{ 1 danh sách các cặp @"key":object cách nhau bằng dấu phẩy}.
  • Object subscripting:
NSMutableArray *array = ...;
NSUInteger idx = ...;
id newObject = ...;
id oldObject = array[idx];
array[idx] = newObject;      // replace oldObject with newObject

NSMutableDictionary *dictionary = ...;
NSString *key = ...;
oldObject = dictionary[key];
dictionary[key] = newObject; // replace oldObject with newObject
  • Sử dụng #if __has_feature(objc_array_literals|objc_dictionary_literals|objc_subscripting) để kiểm tra chức năng này có hay không.