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
1AKU, Owaru(i)ÁC, Ốác, xấu, ghét
2ANkura(i)ÁMtối tăm, tối
3IYy học
4IÝý tứ
5Ilấy, tính từ ...
6INhi(ku), hi(keru)DẪNkéo
7INVIỆNhọc viện
8INVIÊNnhân viên
9UNhako(bu)VẬNmang, vận tải
10EIANHđẹp, Anh quốc
11EIutsu(su), he(eru)ÁNH (ẢNH)phản chiếu
12ENtoo(i)VIỄNxa
13OKUyaỐCphòng
14ONoto, neÂMâm thanh
15KAuta, uta(u)CAhát
16KAnatsuHẠmùa hè
17KAie, yaGIAnhà
18GA, KAKUHỌA, HOẠCHvẽ, nét, kế hoạch
19KAIumiHẢIbiển
20KAImawa(su)HỒIlần (số lần)
21KAIa(keru), Hira(ku)KHAImở, khai mạc
22KAIGIỚIthế giới
23GAKU, RAKUtano(shii), tano(shimu)NHẠC, LẠCnhạc, vui
24KANQUÁNsảnh đường
25KANHÁNhán tự, nam tử
26KANsamu(i)HÀNlạnh
27GANkaoNHANgương mặt
28KIkae(ru), kae(su)QUYvề nhà
29KIo(kiru), o(kuro)KHỞIdậy
30KYUUkiwa(meru)CỨUtìm tòi, nghiên #
31KYUUiso(gu)CẤPvội
32GYUUushiNGƯUbò (trâu)
33KYO, KOsa(ru)KHỨđi khỏi
34KYOU, GOUtsuyo(i), tsuyo(maru), shi(iru)CƯỜNG, CƯỠNGmạnh, ép buộc
35KYOUoshi(eru), oso(waru)GIÁOdạy
36KYOUKINHkinh đô
37GYOUwazaNGHIỆPnghề, sự #
38KINchika(i)CẬNgần
39GINNGÂNbạc
40KUKHUquận, # vực
41KEIhaka(ru), haka(rau)KẾđo
42KYOUaniHUYNHanh trai
43KEIkaru(i), karo(yaka)KHINHnhẹ
44KENinuKHUYỂNchó
45KENto(gu)NGHIÊNmài, # cứu
46KENHUYỆNtỉnh
47KENta(teru), ta(su)KIẾNxây
48KENNGHIỆMthí nghiệm
49GEN, GANmotoNGUYÊNgốc
50KOU, KUCÔNGlàm, công việc
51KOUhiro(i), hiro(geru)QUẢNGrộng
52KOUkanga(eru)KHẢOnghĩ
53KOUhikari, hika(ru)QUANGánh sáng
54KOUkono(mu), su(ku)HIẾU, HẢOthích, tốt
55GOU, GAa(waseru), a(u)HỢPphù hợp
56KOKUkuro(i), kuroHẮCmàu đen
57SAInaTHÁIrau
58SAKU, SAtsuku(ru)TÁClàm, tạo
59SANu(mu), u(mareru)SẢNsinh
60SHIkamiCHỈgiấy, báo
61SHIomo(u)TƯ, TỨnghĩ
62SHIaneTỶchị gái
63SHIto(maru), to(meru)CHỈdừng lại
64SHIichiTHỊthành phố, chợ
65SHItsuka(eru)SỸlàm việc
66SHIshi(nu)TỬchết
67使SHItsuka(u)SỬdùng, sử dụng
68SHIhaji(meru/maru)THỦYbắt đầu
69SHIkokoro(miru), tame(su)THÍthử
70SHIwatashitôi, riêng
71JIazaTỰchữ
72JImizuka(ra)TỰtự thân
73JIkotoSỰviệc
74JImo(tsu)TRÌmang, cầm
75SHITSUmuroTHẤTmật thất
76SHITSU, SHICHICHẤTchất lượng
77SHAutsu(su), utsu(ru)TẢsao chép
78SHAmonoGIẢthứ, người
79SHAKUka(riru)mượn
80JAKUyowa(i), yowa(ru), yowa(meru)NHƯỢCyếu
81SHUkubiTHỦcổ, đầu
82SHUnushiCHỦchủ nhân
83SHUUakiTHUmùa thu
84SHUUatsu(maru/meru)TẬPtụ tập
85SHUUnara(u)TẬPhọc
86SHUUo(waru), o(eru)CHUNGkết thúc
87JUUsu(mu), su(mau)TRÚ, TRỤsinh sống
88JUU, CHOUomo(i), kasa(naru), -eTRỌNG, TRÙNGnặng, lặp
89SHUNharuXUÂNmùa xuân
90SHOtokoroSỞnơi, chỗ
91SHOatsu(i)THỬtrời nóng
92JOUbaTRƯỜNGnơi chốn
93JOUno(ru), no(seru)THỪAlên xe
94SHOKUiroSẮCmàu, sắc tình
95SHINmoriSÂMrừng rậm
96SHINkokoroTÂMtâm, lòng
97SHINoya, shita(shii), shita(shimu)THÂNcha, mẹ, thân thiết
98SHINma-CHÂNthật
99SHINsusu(mu), susu(meru)TIẾNtiến lên
100ZU, TOhaka(ru)ĐỒhình vẽ
101SEIao(i), aoTHANHxanh
102SEI, SHOUtada(shii), tada(su), masaCHÍNHđúng
103SEIkoeTHANHgiọng
104SEI, SEyoTHẾđời
105SEKI, SHAKUaka(i), aka(maru), aka(rameru)XÍCHđỏ
106SEKIyuuTỊCHchiều tà
107SETSU, SAIki(ru), ki(reru)THIẾTcắt, tất cả
108SETSUto(ku)THUYẾTnói, thuyết giảng
109SENara(u)TIỂN (TẨY)rửa
110SOU, SAhaya(i), haya(meru/maru)TẢOsớm
111SOUhashi(ru)TẨUchạy
112SOUoku(ru)TỐNGgửi đi
113ZOKUTỘCtộc người
114SONmuraTHÔNlàng
115TAI, TEIkaradaTHỂthân thể
116TAI, TAfuto(i), futo(ru)THÁImập, béo
117TAIma(tsu)ĐÃIđợi
118TAIka(su)THẢIcho vay, cho mượn
119DAI, TAIĐÀI, THAIđài, bục, bệ
120DAI, TAIka(waru), ka(eru), yo, shiroĐẠIthay mặt, tiền trả, thế hệ
121DAIĐỀchủ đề, tiêu đề
122TANmijika(i)ĐOẢNngắn
123CHIshi(ru)TRIbiết
124CHI, JIĐỊAmặt đất
125CHIikeTRÌcái ao
126CHA, SATRÀtrà, nước trà
127CHAKUki(ru), tsu(keru), ki(seru), tsu(ku)TRƯỚCmặc áo, tới nơi
128CHUUhiruTRÚbuổi trưa, ban ngày
129CHUUsoso(gu)CHÚđổ, rót
130CHOUmachiĐINHthị trấn, phố xá
131CHOUtoriĐIỂUchim
132CHOUasaTRIỀUbuổi sáng
133TSUUtou(ru), tou(su), kayo(u)THÔNGđi xuyên qua
134TEIotoutoĐỆem trai
135TEIhiku(i), hiku(meru/maru)ĐÊthấp, kém
136TENkoro(bu), koro(garu/geru), koro(gasu)CHUYỂNlăn
137DENtaĐIỀNruộng
138TO, TSUmiyakoĐÔthủ đô
139DOtabiĐỘđộ, lần, dịp
140TOUkota(e), kota(eru)ĐÁPtrả lời, đáp ứng
141TOUfuyuĐÔNGmùa đông
142TOU, ZUatama, kashiraĐẦUcái đầu, đầu óc
143DOUona(ji)ĐỒNGcùng, giống
144DOUugo(ku), ugo(kasu)ĐỘNGchuyển động
145DOUĐƯỜNGsảnh đường
146DOUhatara(ku)ĐỘNGlao động
147TOKUĐẶCđặc biệt
148NIKUNHỤCthịt
149BAIu(ru), u(reru)MẠIbán hàng
150HATSU, HOTSUPHÁTphát ra, xuất phát
151HANmeshiPHẠNbữa ăn, cơm
152BYOUya(mu), yamaiBỆNHốm, bệnh tật
153HINshinaPHẨMchất, phẩm cách
154FU, BUBẤTkhông
155FUUkazePHONGcơn gió
156FUKUPHỤCquần áo
157BUTSU, MOTSUmonoVẬTđồ, thứ
158BUN, MONfumiVĂNvăn chương
159BETSUwaka(reru)BIỆTchia tay; (cái) khác
160BENMIỄNchịu khó, chăm chỉ
161便BEN, BINtayo(ri)TIỆNtiện lợi; thư từ; chuyến hàng
162HO, BUaru(ku), ayu(mu)BỘđi bộ
163HOUkataPHƯƠNGhướng; cách làm; gọi người (tôn kính)
164MAIimoutoMUỘIem gái
165MIaji, aji(waru)VỊmùi vị, thưởng thức
166MINtamiDÂNngười dân, nhân dân
167MEIa(kari), aka(rui)MINHsáng
168MONkadoMÔNcánh cổng
169MONto(i), to(u)VẤNhỏi, câu hỏi
170YAyoro, yo~DẠban đêm
171YAnocánh đồng, lĩnh vực, đảng đối lập
172YAKUkusuriDƯỢCthuốc
173YUU, Ua(ru)HỮU
174YOUDIỆUthứ trong tuần
175YOUmochi(iru)DỤNGdùng, sử dụng
176YOUDƯƠNGđại dương
177RIlý do, quản lý..
178RYOtabiLỮdu lịch
179RYOULIỆUtiền phí, vật liệu
180RYOKU, RIKIchikaraLỰCsức
181RINhayashiLÂMrừng


(C) Saromalang

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