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