Wednesday, October 21, 2015

Giới thiệu tổng quan khái niệm về App Thinning

Nếu ứng dụng của bạn hỗ trợ những thiết bị khác nhau như: iPad 1, iPad 2, iPad 3, iPhone 4, iPhone 5, iPhone 6, iPhone 6 plus,... thì dung lượng của nó rất lớn vì bạn phải thêm những hình tuỳ thuộc vào kích thước màn hình của từng thiết bị như @1x, @2x,  @3x.
Ngoài ra nếu ứng dụng của bạn sử dụng những file âm thanh lớn mà phải thêm vào bản build từ đầu, thành ra dung lượng của ứng dụng càng nặng.
Vì thế Apple đã giới thiệu khái niệm App Thinning trong WWDC 2015 nhằm giải quyết vấn đề giảm dung lượng của ứng dụng khi archive bản build.

Bài này mình xin giới thiệu sơ qua những khái niệm trong App Thinning như Slicing, Bitcode, On-Demand resources.

Slicing:

Slicing là một tiến trình tạo và phân phối những gói ứng dụng variant cho những thiết bị khác nhau. Một variant chỉ chứa kiến trúc thực thi và tài nguyên cần thiết cho từng thiết bị. Khi bạn tiếp tục phát triển và tải ứng dụng của bạn với full version lên trên iTunes Connect, thì Store sẽ tạo và phân phối những variant khác nhau dựa trên những thiết bị mà bạn hỗ trợ. Những tài nguyên về hình ảnh hay GPU cũng được chia nhỏ dựa theo độ phân giải, loại thiết bị và dung lượng thiết bị.

XCode giả slicing trong thời gian phát triển ứng dụng, vì thế bạn có thể tạo và kiểm tra những variant ở dưới local. XCode chia nhỏ ứng dụng của bạn khi bạn build và chạy ứng dụng trên một thiết bị. Khi bạn tạo ra một Archive, XCode bao gồm full version ứng dụng của bạn nhưng cho phép bạn export những variant từ archive.

Lưu ý: Sliced App chỉ hỗ trợ những thiết bị chạy từ iOS 9.0 trở về sau. Ứng dụng phải sử dụng Asset Catalog.

NGỮ PHÁP N5

Ghi chú: Danh sách dưới đây chỉ để THAM KHẢO.
Phiên bản tốt hơn sẽ có tại Lớp học Cú Mèo.

Phiên bản Saromalang 2.0

Di chuyển nhanh: Mẫu 01-10 | 11-20 | 21-30 | 31-40 | 41-50 | 51-60

 ♪  BẢNG TRA CỨU NHANH NGỮ PHÁP N5  ♬ 

NGỮ PHÁP N5: MẪU CÂU 01 ~ 10

1 . ~ は~ : thì, là, ở N1は~です là động từ "to be" www.saromalang.com

N1はN2です = N1 là N2
~N1はN2が~[mô tả]
Trợ từ [ は] phát âm là [わ] (phát âm khác cách viết)

私は日本の料理が好きです。
Watashi wa Nihon no ryōri ga sukidesu."
Tôi thích món ăn Nhật

山田さんは日本語が上手です。
Yamada-san wa nihongo ga jōzudesu.
Anh Yamada giỏi tiếng Nhật

この家はドアが大きいです 。
Kono ie wa doa ga ōkii desu
Căn nhà này có cửa lớn

Kanji N5 103

Phiên bản 1.1 gồm có 103 chữ cho hán tự JLPT N5. Hi vọng các bạn sẽ có thể thi tốt kỳ thi năng lực tiếng Nhật N5 sắp tới.
⇒Xem và tải PDF từ Saromalang Slides
⇒Xem và tải PDF từ Saromalang Cloud


本表(ほんぴょう) BẢNG CHÍNH
#Hán tựÂm ON (âm)Âm KUN (nghĩa)VIỆTÝ nghĩa
1安ANyasu(i)ANyên ổn, an toàn, rẻ
2一ICHI, ITSUhito(tsu), hito-NHẤTmột, số một
3飲INno(mu)ẨMuống
4右U, YUUmigiHỮUbên phải
5雨UameVŨmưa
6駅EKI–DỊCHtrạm, ga tàu
7円ENmaru(i)VIÊNtròn, vòng tròn, tiền Yen
8火KAhiHỎAlửa
9花KAhanaHOAbông hoa
10下KA, GEshimo, sa(geru), o(rosu), ku(daru)HẠbên dưới
11何KAnaniHÀcái gì
12会KAIa(u)HỘIgặp gỡ, hội họp
13外GAI, GEsoto, hoka, hazu(reru), hazu(su)NGOẠIbên ngoài, tháo ra
14学GAKUmana(bu)HỌChọc tập, môn học
15間KAN, KENaidaGIANtrong khoảng, ở giữa
16気KI, KE–KHÍtinh thần, yêu thích
17九KYUU, KUkokono(tsu), kokono-CỬUchín, số chín
18休KYUUyasu(mu)HƯUnghỉ ngơi
19魚GYOsakana, uoNGƯcon cá
20金KINkaneKIMvàng, tiền, kim loại
21空KUUsora, a(keru), karaKHÔNGkhông khí, bầu trời, rỗng
22月GETSU, GATSUtsukiNGUYỆTtháng, mặt trăng
23見KENmi(ru), mi(eru), mi(seru)KIẾNnhìn, xem
24言GEN, GONi(u)NGÔNnói, ngôn ngữ
25古KOfuru(i)CỔcũ, cổ, xưa
26五GOitsu(tsu), itsu-NGŨnăm, số năm
27後GO, KOUato, oku(reru), nochiHẬUsau, lúc sau, phía sau
28午GO–NGỌtrưa, 12 giờ trưa
29語GOkata(ru), kata(rau)NGỮtừ ngữ, kể chuyện
30校KOU–HIỆUtrường học
31口KOU, KUkuchiKHẨUmiệng, cổng
32行KOUi(ku), yu(ku), okona(u)HÀNH / HÀNGđi, thực hiện, dòng, ngân hàng
33高KOUtaka(i), taka(maru), taka(meru)CAOcao, mắc, tăng, mức
34国KOKUkuniQUỐCnước
35今KONimaKIMbây giờ, nay
36左SAhidariTẢbên trái
37三SANmit(tsu), mi-TAMba, số ba
38山SANyamaSƠNnúi, đống, gò
39四SHIyo(ttsu), yu(tsu), yo-, yon-TỨbốn, số bốn
40子SHIkoTỬđứa bé
41耳JImimiNHĨtai
42時JItokiTHỜI (THÌ)thời gian, giờ
43七SHICHInana(tsu), nana-, nano-THẤTbảy, số bảy
44車SHAkurumaXAxe, xe hơi
45社SHA–XÃcông ty, đền, xã hội
46手SHUteTHỦtay, người
47週SHUU–CHUtuần (7 ngày)
48十JUU, JItoo, to-THẬPmười, đủ
49出SHUTSUda(su), de(ru)XUẤTđi ra, cho ra, tham dự
50書SHOka(ku)THƯviết, giấy tờ
51女JO, NYOonna, meNỮphụ nữ
52小SHOUchii(sai), ko-, o-TIỂUnhỏ
53少SHOUsuko(shi), suku(nai)THIỂU / THIẾUít, nhỏ tuổi
54上JOUue, kami, a(geru), a(garu)THƯỢNGphía trên
55食SHOKUta(beru), ku(ru), ku(rau)THỰCăn
56新SHINatara(shii), ara(ta), nii-TÂNmới
57人JIN, NINhitoNHÂNngười
58水SUImizuTHỦYnước
59生SEI, SHOUi(kiru), u(mu), ha(yasu), nama, kiSINHsống, sinh ra, tươi sống
60西SEI, SAInishiTÂYphía tây
61川SENkawaXUYÊNsông
62千SENchiTHIÊNmột ngàn, nhiều
63先SENsakiTIÊNlúc trước, tương lai
64前ZENmaeTIỀNphía trước
65足SOKUashi, ta(riru), ta(su)TÚCchân, đầy đủ, cộng vào
66多TAoo(i)ĐAnhiều
67大DAI, TAIou(kii), oo(i)ĐẠIto, lớn
68男DAN, NANotokoNAMnam, đàn ông
69中CHUU, JUUnakaTRUNGbên trong
70長CHOUnaga(i)TRƯỜNG / TRƯỞNGdài / người đứng đầu
71天TEName, amaTHIÊNtrời, thời tiết
72店TENmiseĐIẾMcửa hàng
73電DEN–ĐIỆNđiện
74土DO, TOtsuchiTHỔđất
75東TOUhigashiĐÔNGphía đông
76道DOUmichiĐẠOcon đường
77読DOKUyo(mu)ĐỘCđọc
78南NANminamiNAMphía nam
79ニNIfuta(tsu), futa-NHỊhai, số hai
80日NICHI, JITSUhi, -kaNHẬTngày, mặt trời, Nhật Bản
81入NYUUhai(ru), i(ru), i(reru)NHẬPđi vào, cho vào
82年NENtoshiNIÊNnăm
83買BAIka(u)MÃImua
84白HAKU, BYAKUshiro(i), shiroBẠCHmàu trắng
85八HACHIyat(tsu), ya(tsu), ya-, you-BÁTtám, số tám
86半HANnaka(ba)BÁNmột nửa
87百HYAKU–BÁCHmột trăm, nhiều
88父FUchichiPHỤcha
89分BUN, BU, FUNwa(keru), wa(kareru), wa(karu)PHÂN / PHẬNhiểu, phân chia, phút, phần
90聞BUN, MONki(ku), ki(koeru)VĂNnghe, nghe thấy, hỏi
91母BOhahaMẪUmẹ
92北HOKUkitaBẮCphía bắc
93木BOKU, MOKUki, koMỘCcây, gỗ
94本HONmotoBẢNsách, bản chất, đếm cây
95毎MAI–MỖImỗi thứ, mỗi cái, ...
96万MAN, BAN–VẠNvạn, mười ngàn, nhiều
97名MEI, MYOUnaDANHtên tuổi
98目MOKUmeMỤCmắt, mục kích
99友YUUtomoHỮUbạn bè
100来RAIku(ru), kita(ru), kita(su)LAItới, tới đây
101立RITSUta(tsu), ta(teru)LẬPđứng, thành lập
102六ROKUmutt(su), mu(tsu), mu, muiLỤCsáu, số sáu
103話WAhanashi, hana(su)THOẠInói chuyện, câu chuyện

(C) Saromalang

Nguồn: Saroma Lang

Link: http://www.saromalang.com/p/kanji-n5-103.html

Học chữ kanji: Suy luận âm Hán Nhật On'yomi

SAROMA JCLASS xin chào các bạn!
Tiếng Việt của chúng ta có âm Hán Việt và âm thuần Việt, ví dụ:
"Thủy" là âm Hán Việt (nghĩa: nước)
"Nước" là âm thuần Việt
Tiếng Nhật cũng tương tự, có âm Hán Nhật (On'yomi 音読み) và âm thuần Nhật (Kun'yomi 訓読み), ví dụ:
水 すい "sui" là âm Hán Nhật, dùng trong từ ghép như 温水 (onsui, ôn thủy = nước nóng)
水 みず "mizu" là âm Nhật (kun'yomi)
Thực chất "mizu" là một từ thuần Nhật nhưng được viết bằng kanji cho dễ đọc.
Trong bài này SAROMA JCLASS sẽ chỉ cho các bạn cách suy luận từ âm Hán Việt ra âm Hán Nhật.
Các bạn thử suy luận âm Hán Nhật của các từ sau nhé:
Âm Hán Việt: Phát triển, Triển vọng, Quốc gia, Đào tẩu, Tổn thất, Phẩm chất
Âm Hán Nhật: ??
Ô đỏ:  東海道 五 = Tou Kai Dou  Go (Đông Hải Đạo - Ngũ)

Tuesday, October 20, 2015

Hướng dẫn thiết lập XCode để tự tăng số lần build cho ứng dụng trên iOS

Để tiện quản lý những bản build mình đã build ra để đưa cho khách hàng, bạn cần phải đánh số cho những bản build đó ngoài số version.

Thursday, October 15, 2015

(CI) Giới thiệu tổng quan về XCode server

Hiện tại mình dùng XCode 7 không để nào dùng tool Frankencover để generate ra code coverage được. Vì thế giải pháp hiện tại mình chuyển sang dùng XCode server để có thể thay thế Jenkins.
- Điểm mạnh của XCode server: là bạn có thể chạy test trên nhiều thiết bị và hệ điều hành khác nhau. Có thể analyze, code coverage, archive build. Có thể cài ứng dụng thông qua xcode server và OTA. Vừa build và chạy code ở local và cả trên server cùng thời điểm được.
- Điểm yếu: là vẫn chưa hỗ trợ những tool kiểm tra chất lượng code (code metric, duplicate code, checkstyle ...).

Để sử dụng được XCode Server bạn phải cài OS server để tạo máy chủ. Bạn có thể cài đặt OS server và XCode Server tại đây. Hướng dẫn cài của Apple rất chi tiết và dễ, các bạn hãy đọc và làm theo.
Hiện tại mình đang dùng bản Beta để sử dụng thử, bạn có thể mua ứng dụng này với giá 19.9$ tại app store.
Sau khi cài xong sẽ xuất hiện như những màn hình sau:

(CI) Quản lý chất lượng code của iOS trên Jenkins (CPD, PMD, CheckStyle, Code Coverage)

Jenkins có hỗ trợ những công cụ để kiểm tra chất lượng code của bạn như kiểm tra duplicated code, checkstyle, code coverage...


Wednesday, October 14, 2015

(Kinh nghiệm) Về static library và static framework trên iOS

Trước XCode 6 ra đời thì đa số mọi người muốn viết những code chung trong static library để có thể dùng cho nhiều project. Có những người tạo project là static library nhưng khi build thì tạo folder có đuôi là .framework để add những file header và static library vào. Nhưng thực chất nó cũng chỉ là static library. Vì khi bạn muốn tích hợp những static library khác vào project static library mà bạn đang làm thì sẽ gặp nhiều vấn đề xảy ra. Vì thế khi bạn làm project framework mà có tích hợp những static library khác vào thì nên khởi tạo project theo dạng framework (Cocoa Touch Framework) như sau:

Wednesday, October 7, 2015

(Code Coverage) Hướng dẫn bật tính năng Code Coverage trên XCode 7

Nếu bạn dùng XCode 7 bạn có thể sử dụng chức năng Code Coverage trên XCode 7. Mình cũng có bài hướng dẫn generate code coverage bằng XCode 6 tại đây. Hiện tại mình chạy code cũ từ XCode 6 qua XCode 7 có problem khi project của mình dùng static library mình có nêu vấn đề tại đây. 

Sau đây mình xin hướng dẫn cách bật chức năng code coverage trên XCode 7.

Bước 1: Kiểm tra thuộc tính Build Active Architecture Only trong Build Settings là YES:

(Code Coverage) Không thể chạy code coverage trên XCode 7 cho Static Library.

Hiện tại nếu project của bạn đang dùng static library (có thiết lập thuộc tính "Build Active Architecture Only" là YES) thì bạn chắc chắn sẽ không dùng được cơ chế generate code coverage của XCode 7.
Những thuộc tính (Generate Legacy Test Coverage Files, Instrument Program Flow) để là YES hay NO không ảnh hưởng đến việc generate code coverage trên XCode 7: 

Hiện tại mình đang thử tìm cách hướng giải quyết. Khi nào có mình sẽ update tài liệu này sau.

Nguồn tham khảo:
- https://forums.developer.apple.com/thread/5925
- https://github.com/CocoaPods/CocoaPods/issues/3706