Tuesday, November 10, 2015

(Unit Test) Những luật cần thiết để viết unit test

Trước giờ mình làm những dự án trên iOS ít khi nào khách hàng đòi hỏi mình phải viết unit test cho họ. Hiện tại mình cũng đang tập viết unit test trên iOS nên có vài kinh nghiệm khi nghiên cứu về nó, nếu bạn nào có kinh nghiệm nào khác xin chia sẻ tại đây để chúng ta có thể tìm ra hướng giải quyết tốt nhất.

- Khái niệm unit test: Unit test là một đơn vị kiểm tra tự động nhỏ, được viết bởi người lập trình viên để kiểm tra những dòng code của ứng dụng thực tế, chúng phải được viết một cách độc lập.

- 5 luật đơn giản nên tuân theo trước khi viết unit test là F.I.R.S.T. Chữ này được viết tắt của những chữ như:
  • Fast — nhanh: Unit test phải chạy thường xuyên, do đó cần phải viết sao cho chạy nhanh.
  • Isolated — tách biệt: Unit test không nên phụ thuộc vào các yếu tố bên ngoài, hoặc kết quả của unit test này phụ thuộc vào kết quả của unit test khác.
  • Repeatable — lặp lại: Unit test phải trả ra cùng kết quả mỗi khi chúng được thực thi.
  • Self-verifying — tự kiểm tra: Unit test phải dùng những hàm tự kiểm tra kết quả, không phụ thuộc vào yếu tố con người.
  • Timely — hợp thời: Unit test nên được viết với code chạy thực tế. Viết test trước hay sau khi viết code thực tế? 
- Trước khi bạn viết 1 hàm hay trước khi viết unit test bạn nên suy nghĩ và viết trước những trường hợp test (Todo list) của hàm này, để có cái nhìn bao quát nhất mỗi khi bạn viết test case và để không bị sót trường hợp nào. Luật như sau: T . S . W
  • Test + tên hàm hay chức năng
  • Should return + true (false), giá trị (value)
  • When input + giá trị
- Những test case nào liên quan đến database hay connection thì gọi là integration testing. Vì thế bạn có thể viết tên hàm test có đánh số thứ tự để có thể chạy test theo mức độ ưu tiên. Nếu bạn test database bạn phải đảm bảo dữ liệu phải rollback trở lại. Ví dụ những hàm như sau:
  • test1CreateDatabase
  • test2InsertItem
  • test3UpdateItem
  • test4DeleteItem

Tài liệu tham khảo:

- https://www.objc.io/issues/15-testing/bad-testing-practices/#good-practices-101
- https://pragprog.com/magazines/2012-01/unit-tests-are-first

Friday, November 6, 2015

Giới thiệu StackView trên iOS 9.0

Trước khi iOS 9.0 ra mắt thì những người lập trình viên trên iOS vẫn còn rất khó dùng constraints để làm auto layout trên nhiều thiết bị của Apple. Vì nó tuỳ biến rất nhiều, và người làm phải hiểu cơ chế của nó thì mới tuỳ chỉnh được, và nếu trên giao diện phức tạp thì cũng rất khó tuỳ chỉnh và bảo trì code đó.

Khi Apple ra mắt iPhone 5 (với kích thước màn hình 4 inch) thì mình có 1 cách để làm giao diện dọc theo trục đứng là dùng TableView và những cell trên table để thiết kế giao diện để khi chạy trên màn hình 3.5 inch và 4 inch đều được. Điểm lợi thứ nhất là nó sẽ tự động thêm xuống và có thể scroll được. Lợi thứ hai là có thể dùng chung thành phần của từng cell riêng biệt đó trên những màn hình khác được. Nhược điểm là code không tường minh cho lắm vì những thành phần của 1 màn hình được chia tách từng phần trên 1 cell của table view. Thực ra cách này mình cũng học theo ý tưởng sắp xếp những control trên giao diện Android.

Vì thế khi Apple ra mắt iOS 9 đã giới thiệu thêm control mới là StackView để giải quyết những vấn đề khó khăn khi làm auto layout trên iOS. Thực ra khái niệm này không lạ, nó cũng gần giống như khái niệm sắp xếp những control trên Android.

EXIF Orientation Handling Is a Ghetto

Mình thấy nội dung này hay nên copy qua trang để lưu trữ và share cho các bạn. Có thể xem nội dung gốc tại đây.

One of my favourite services at the moment is Transloadit, who provide an image processing API that works a treat on top of platforms like Heroku, where there are strict request timeout limits that make large uploads difficult. They handle auto-orientation of images automagically by default, and normally I’m not even aware of it happening during testing since my camera and OSX also handle auto-orientation transparently.
Recently one particular image stuck out on the staging server as un-rotated, while it worked fine locally using ImageMagick/Dragonfly. Not only that, but the width and height seemed to be wrong, warping the image (the app I’m working on uses a tiled layout, and requires the width and height of each image to be explicitly set in CSS).
I put together a few test images, and have been talking it over via email with Transloadit for the last couple of days (who’ve been super-helpful), and just for kicks thought I’d try uploading the test images to a few other sites to see how everyone else handles it. So began a descent into EXIF madness…

Eh? EXIF Orientation?

The EXIF (exchangeable image file format) standard specifies a set of tags that can be embedded in images (among other things). One of these tags specifies the orientation of the photo, and has 8 possible values which cover every possible combination of rotation and mirroring of an image. This enables you to take a picture with your camera sideways or upside-down (or even inside-out), and stand a reasonable chance of having it display properly on your computer.
This diagram from 80sidea explains the 8 orientations pretty succinctly:

Wednesday, November 4, 2015

NGỮ PHÁP N4

Ghi chú: Danh sách dưới đây chỉ để THAM KHẢO, nhiều chỗ sơ sài không chính xác.
Bản đúng và đầy đủ sẽ có tại Lớp học Cú Mèo.

Phiên bản Saromalang 2.0


Điều hướng: Mẫu câu 01-10 | 11-20 | 21-30 | 31-40 | 41-50 | 51-63

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

1. ~(も)~し、~し~:Đã A lại còn B / vừa A vừa Bwww.saromalang.com

お腹がすいたし、のどが渇いたし、何か食べたい。
Onakagasuita shi, nodo ga kawaitashi, nanika tabetai.
Vừa đói vừa khát nên tôi muốn ăn thứ gì đó.

このシャツは色もきれいですし、デザインもいいですね。
Kono shatsu wa iro mo kireidesu shi, dezain mo īdesu ne.
Cái áo này màu đẹp và thiết kế đẹp.


2. ~によると~そうです: Theo ~ thì nghe nói là ~www.saromalang.com

天気予報によると、明日は晴れるそうです。
Tenkeyohō ni yoru to, ashitahahareru-sōdesu.
Theo dự báo thời tiết thì ngày mai trời đẹp.

彼の話によれば、この茶碗は高価な骨董品だそうだ。
Kare no hanashi ni yoreba, kono chawan wa koukana kottōhin da sōda.
Theo lời anh ấy thì cái chén này là thứ đồ cổ rất đắt tiền.

Kanji N4 181

Bảng Kanji N4 dành cho kỳ thi JLPT N4 phiên bản Saromalang 1.1.

⇒Xem và tải PDF từ Saromalang Slides
⇒Xem và tải PDF từ Saromalang Cloud


本表(ほんぴょう) [BẢN BIỂU] BẢNG CHÍNH

#Hán tựÂm ON (âm)Âm KUN (nghĩa)VIỆTÝ nghĩa
1悪AKU, Owaru(i)ÁC, Ốác, xấu, ghét
2暗ANkura(i)ÁMtối tăm, tối
3医I–Yy học
4意I–Ýý tứ
5以I–DĨlấy, tính từ ...
6引INhi(ku), hi(keru)DẪNkéo
7院IN–VIỆNhọc viện
8員IN–VIÊNnhân viên
9運UNhako(bu)VẬNmang, vận tải
10英EI–ANHđẹp, Anh quốc
11映EIutsu(su), he(eru)ÁNH (ẢNH)phản chiếu
12遠ENtoo(i)VIỄNxa
13屋OKUyaỐCphòng
14音ONoto, neÂMâm thanh
15歌KAuta, uta(u)CAhát
16夏KAnatsuHẠmùa hè
17家KAie, yaGIAnhà
18画GA, KAKU–HỌA, HOẠCHvẽ, nét, kế hoạch
19海KAIumiHẢIbiển
20回KAImawa(su)HỒIlần (số lần)
21開KAIa(keru), Hira(ku)KHAImở, khai mạc
22界KAI–GIỚIthế giới
23楽GAKU, RAKUtano(shii), tano(shimu)NHẠC, LẠCnhạc, vui
24館KAN–QUÁNsảnh đường
25漢KAN–HÁNhán tự, nam tử
26寒KANsamu(i)HÀNlạnh
27顔GANkaoNHANgương mặt
28帰KIkae(ru), kae(su)QUYvề nhà
29起KIo(kiru), o(kuro)KHỞIdậy
30究KYUUkiwa(meru)CỨUtìm tòi, nghiên #
31急KYUUiso(gu)CẤPvội
32牛GYUUushiNGƯUbò (trâu)
33去KYO, KOsa(ru)KHỨđi khỏi
34強KYOU, GOUtsuyo(i), tsuyo(maru), shi(iru)CƯỜNG, CƯỠNGmạnh, ép buộc
35教KYOUoshi(eru), oso(waru)GIÁOdạy
36京KYOU–KINHkinh đô
37業GYOUwazaNGHIỆPnghề, sự #
38近KINchika(i)CẬNgần
39銀GIN–NGÂNbạc
40区KU–KHUquận, # vực
41計KEIhaka(ru), haka(rau)KẾđo
42兄KYOUaniHUYNHanh trai
43軽KEIkaru(i), karo(yaka)KHINHnhẹ
44犬KENinuKHUYỂNchó
45研KENto(gu)NGHIÊNmài, # cứu
46県KEN–HUYỆNtỉnh
47建KENta(teru), ta(su)KIẾNxây
48験KEN–NGHIỆMthí nghiệm
49元GEN, GANmotoNGUYÊNgốc
50工KOU, KU–CÔNGlàm, công việc
51広KOUhiro(i), hiro(geru)QUẢNGrộng
52考KOUkanga(eru)KHẢOnghĩ
53光KOUhikari, hika(ru)QUANGánh sáng
54好KOUkono(mu), su(ku)HIẾU, HẢOthích, tốt
55合GOU, GAa(waseru), a(u)HỢPphù hợp
56黒KOKUkuro(i), kuroHẮCmàu đen
57菜SAInaTHÁIrau
58作SAKU, SAtsuku(ru)TÁClàm, tạo
59産SANu(mu), u(mareru)SẢNsinh
60紙SHIkamiCHỈgiấy, báo
61思SHIomo(u)TƯ, TỨnghĩ
62姉SHIaneTỶchị gái
63止SHIto(maru), to(meru)CHỈdừng lại
64市SHIichiTHỊthành phố, chợ
65仕SHItsuka(eru)SỸlàm việc
66死SHIshi(nu)TỬchết
67使SHItsuka(u)SỬdùng, sử dụng
68始SHIhaji(meru/maru)THỦYbắt đầu
69試SHIkokoro(miru), tame(su)THÍthử
70私SHIwatashiTƯtôi, riêng
71字JIazaTỰchữ
72自JImizuka(ra)TỰtự thân
73事JIkotoSỰviệc
74持JImo(tsu)TRÌmang, cầm
75室SHITSUmuroTHẤTmật thất
76質SHITSU, SHICHI–CHẤTchất lượng
77写SHAutsu(su), utsu(ru)TẢsao chép
78者SHAmonoGIẢthứ, người
79借SHAKUka(riru)TÁmượn
80弱JAKUyowa(i), yowa(ru), yowa(meru)NHƯỢCyếu
81首SHUkubiTHỦcổ, đầu
82主SHUnushiCHỦchủ nhân
83秋SHUUakiTHUmùa thu
84集SHUUatsu(maru/meru)TẬPtụ tập
85習SHUUnara(u)TẬPhọc
86終SHUUo(waru), o(eru)CHUNGkết thúc
87住JUUsu(mu), su(mau)TRÚ, TRỤsinh sống
88重JUU, CHOUomo(i), kasa(naru), -eTRỌNG, TRÙNGnặng, lặp
89春SHUNharuXUÂNmùa xuân
90所SHOtokoroSỞnơi, chỗ
91暑SHOatsu(i)THỬtrời nóng
92場JOUbaTRƯỜNGnơi chốn
93乗JOUno(ru), no(seru)THỪAlên xe
94色SHOKUiroSẮCmàu, sắc tình
95森SHINmoriSÂMrừng rậm
96心SHINkokoroTÂMtâm, lòng
97親SHINoya, shita(shii), shita(shimu)THÂNcha, mẹ, thân thiết
98真SHINma-CHÂNthật
99進SHINsusu(mu), susu(meru)TIẾNtiến lên
100図ZU, TOhaka(ru)ĐỒhình vẽ
101青SEIao(i), aoTHANHxanh
102正SEI, SHOUtada(shii), tada(su), masaCHÍNHđúng
103声SEIkoeTHANHgiọng
104世SEI, SEyoTHẾđời
105赤SEKI, SHAKUaka(i), aka(maru), aka(rameru)XÍCHđỏ
106夕SEKIyuuTỊCHchiều tà
107切SETSU, SAIki(ru), ki(reru)THIẾTcắt, tất cả
108説SETSUto(ku)THUYẾTnói, thuyết giảng
109洗SENara(u)TIỂN (TẨY)rửa
110早SOU, SAhaya(i), haya(meru/maru)TẢOsớm
111走SOUhashi(ru)TẨUchạy
112送SOUoku(ru)TỐNGgửi đi
113族ZOKU–TỘCtộc người
114村SONmuraTHÔNlàng
115体TAI, TEIkaradaTHỂthân thể
116太TAI, TAfuto(i), futo(ru)THÁImập, béo
117待TAIma(tsu)ĐÃIđợi
118貸TAIka(su)THẢIcho vay, cho mượn
119台DAI, TAI–ĐÀI, THAIđài, bục, bệ
120代DAI, TAIka(waru), ka(eru), yo, shiroĐẠIthay mặt, tiền trả, thế hệ
121題DAI–ĐỀchủ đề, tiêu đề
122短TANmijika(i)ĐOẢNngắn
123知CHIshi(ru)TRIbiết
124地CHI, JI–ĐỊAmặt đất
125池CHIikeTRÌcái ao
126茶CHA, SA–TRÀtrà, nước trà
127着CHAKUki(ru), tsu(keru), ki(seru), tsu(ku)TRƯỚCmặc áo, tới nơi
128昼CHUUhiruTRÚbuổi trưa, ban ngày
129注CHUUsoso(gu)CHÚđổ, rót
130町CHOUmachiĐINHthị trấn, phố xá
131鳥CHOUtoriĐIỂUchim
132朝CHOUasaTRIỀUbuổi sáng
133通TSUUtou(ru), tou(su), kayo(u)THÔNGđi xuyên qua
134弟TEIotoutoĐỆem trai
135低TEIhiku(i), hiku(meru/maru)ĐÊthấp, kém
136転TENkoro(bu), koro(garu/geru), koro(gasu)CHUYỂNlăn
137田DENtaĐIỀNruộng
138都TO, TSUmiyakoĐÔthủ đô
139度DOtabiĐỘđộ, lần, dịp
140答TOUkota(e), kota(eru)ĐÁPtrả lời, đáp ứng
141冬TOUfuyuĐÔNGmùa đông
142頭TOU, ZUatama, kashiraĐẦUcái đầu, đầu óc
143同DOUona(ji)ĐỒNGcùng, giống
144動DOUugo(ku), ugo(kasu)ĐỘNGchuyển động
145堂DOU–ĐƯỜNGsảnh đường
146働DOUhatara(ku)ĐỘNGlao động
147特TOKU–ĐẶCđặc biệt
148肉NIKU–NHỤCthịt
149売BAIu(ru), u(reru)MẠIbán hàng
150発HATSU, HOTSU–PHÁTphát ra, xuất phát
151飯HANmeshiPHẠNbữa ăn, cơm
152病BYOUya(mu), yamaiBỆNHốm, bệnh tật
153品HINshinaPHẨMchất, phẩm cách
154不FU, BU–BẤTkhông
155風FUUkazePHONGcơn gió
156服FUKU–PHỤCquần áo
157物BUTSU, MOTSUmonoVẬTđồ, thứ
158文BUN, MONfumiVĂNvăn chương
159別BETSUwaka(reru)BIỆTchia tay; (cái) khác
160勉BEN–MIỄNchịu khó, chăm chỉ
161便BEN, BINtayo(ri)TIỆNtiện lợi; thư từ; chuyến hàng
162歩HO, BUaru(ku), ayu(mu)BỘđi bộ
163方HOUkataPHƯƠNGhướng; cách làm; gọi người (tôn kính)
164妹MAIimoutoMUỘIem gái
165味MIaji, aji(waru)VỊmùi vị, thưởng thức
166民MINtamiDÂNngười dân, nhân dân
167明MEIa(kari), aka(rui)MINHsáng
168門MONkadoMÔNcánh cổng
169問MONto(i), to(u)VẤNhỏi, câu hỏi
170夜YAyoro, yo~DẠban đêm
171野YAnoDÃcánh đồng, lĩnh vực, đảng đối lập
172薬YAKUkusuriDƯỢCthuốc
173有YUU, Ua(ru)HỮUcó
174曜YOU–DIỆUthứ trong tuần
175用YOUmochi(iru)DỤNGdùng, sử dụng
176洋YOU–DƯƠNGđại dương
177理RI–LÝlý do, quản lý..
178旅RYOtabiLỮdu lịch
179料RYOU–LIỆUtiền phí, vật liệu
180力RYOKU, RIKIchikaraLỰCsức
181林RINhayashiLÂMrừng


(C) Saromalang

Nguồn: http://www.saromalang.com/p/kanji-n4-181.html