GIỚI THIỆU CÔNG TY THỰC TẬP
Giới thiệu STYL Solutions Pte Ltd
Hình 1.1 Logo công ty STYL Solutions Pte Ltd
STYL Solutions, được thành lập vào năm 2008 với chỉ 3 thành viên, hiện đã phát triển mạnh mẽ với hơn 80 nhân viên và mở rộng chi nhánh tại Singapore và Việt Nam, cùng với các đại diện và đối tác trên khắp Châu Á.
Tầm nhìn: Simplifying Technologies for Your Lifestyle
Sứ mạng của chúng tôi là ứng dụng công nghệ FINTECH IoT vào cuộc sống hàng ngày, nhằm tạo ra một môi trường thông minh và hiệu quả, từ đó nâng cao chất lượng cuộc sống cho tất cả mọi người.
Mảng tập trung phát triển: Tạo các giải pháp với thanh toán và công nghệ IoT giúp cuộc sống của tất cả mọi người tốt hơn.
Sản phẩm của công ty
Sản phẩm của công ty hiện được chia thành 4 nhóm chính:
Sản phẩm đeo của chúng tôi, bao gồm Maui-Dolphin 4 (MD4) và Maui-Dolphin 2 (MD2), không chỉ hỗ trợ thanh toán không tiếp xúc mà còn đóng vai trò là thiết bị an toàn và sức khỏe cho trẻ em, thanh thiếu niên, người lớn và người già Tất cả các thiết bị này hoạt động kết hợp với ứng dụng di động DELPHINUS do STYL phát triển.
− Máy đọc: o Thiết bị IoT thanh toán chéo thị trường:
STYL thiết kế và phát triển các thiết bị thanh toán IoT một cách tỉ mỉ, bao gồm máy đọc hỗ trợ thanh toán EMV không tiếp xúc Thiết bị này tận dụng tính linh hoạt của mã QR và công nghệ thanh toán Bluetooth để nâng cao trải nghiệm người dùng.
▪ Sản phẩm: BLUEFIN 2 LITE, YELLOWFIN TRANSIT COMBO, TRANSIT READER, ORCA NFC
Hình 1.5 YELLOWFIN TRANSIT o Đầu đọc thẻ linh hoạt:
▪ Đầu đọc máy tính để bàn được hỗ trợ USB với hiệu suất đọc tuyệt vời để phù hợp với các ứng dụng đọc thẻ (NFC / RFID)
▪ Sản phẩm: HMU108, 021 READER with LED
− Self-service: o Thiết bị thanh toán IoT:
▪ Giải pháp thanh toán, giám sát và phân tích cho ứng dụng bán hàng tự động và tự phục vụ
▪ Sản phẩm: Bluefin 2, Swordfish 2 Mini, Bluefin VM
Hình 1.7 Swordfish 2 Mini o Kiosk dịch vụ tự động:
▪ Kiosk tùy chỉnh và với Bộ cấu hình thanh toán phụ trợ thanh toán tùy chọn, có thể được điều chỉnh theo yêu cầu
− IoT Nodes and Sensors: o Các nút và kết hợp cảm biến cho GROW platform o Sản phẩm: Bigeyenode/ Gateway
Lịch làm việc khi thực tập tại công ty
Em bắt đầu thực tập tại công ty từ ngày 02/05/2020, làm việc 3 ngày trong tuần vào thứ 4, thứ 5 và thứ 6 Thời gian làm việc từ 8h30 đến 17h30, với 1 tiếng nghỉ trưa Sau mỗi ngày, em cam kết cập nhật lên git để anh mentor kiểm tra và luôn nhờ anh hỗ trợ khi gặp khó khăn.
NỘI DUNG THỰC TẬP
Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian: 1 ngày Nội dung:
− HR giới thiệu về công ty, lịch sử thành lập và phát triển, bộ máy quản lý phân cấp, cách tổ chức
− HR giới thiệu những thành tựu nổi bật, dự án công ty đã và đang thực hiện, định hướng trong tương lai
HR giới thiệu văn hóa công ty, bao gồm thời gian làm việc, quy định cần tuân thủ, chính sách bảo mật và các ràng buộc Đồng thời, HR cũng nêu rõ cách thức tổ chức và tương tác trong nhóm phát triển dự án.
− Nắm rõ các thông tin cơ bản về công ty
− Học thêm về kỹ năng sử dụng email trong công việc, làm việc có kế hoạch, có kỷ luật, trách nhiệm hơn.
Nghiên cứu kỹ thuật
2.2.1 Các công cụ làm việc
Thời gian: 2 ngày Nội dung: Tìm hiểu các công cụ sẽ được sử dụng khi làm việc:
− Công cụ phát triển phần mềm (IDE): XCode
− Công cụ quản lý mã nguồn: Source Tree
− Công cụ giao tiếp, trao đổi: Skype
− Công cụ thiết kế UX/UI: Zeplin
Kết quả: Biết cách sử dụng các công cụ trên để làm việc Biết cách sử dụng một công cụ quản lý mã nguồn mới
Thời gian: 1 ngày Nội dung: Tìm hiểu về Git và nắm các thông tin:
− Repository: nơi để lưu trữ, là thư mục chứa tất cả mã nguồn, phiên bản
− Head: một con trỏ chỉ vào mã nguồn mới nhất bạn đang làm việc
− Add: giúp Git biết được tập tin này cần được theo dõi
− Commit: yêu cầu Git lưu lại trạng thái của repo hiện tại
− Remote: nơi chứa repositories nhưng không không nằm trên máy của mình mà nằm ở đâu đó khác (như Github, Gitlab )
− Pull: giúp lấy mã nguồn từ remote về
− Push: tải mã nguồn lên remote
− Merge: kết hợp 2 phiên bản khác nhau của mã nguồn lại thành một
− Status: hiển thị thông tin về tình trạng hiện tại của repo
− Git rebase: quá trình gắn một nhánh vào nhánh gốc
− Gitlog: ghi lại những thao tác xảy ra với repo
− Git branch: phân nhánh để làm việc với Git
Kết quả: Nắm được cơ bản về Git Biết cách sử dụng và áp dụng vào công việc
Thời gian: 1 ngày Nội dung: Tìm hiểu về coding convention trong ngôn ngữ Swift:
− Correctness: Cố gắng để khi compile không có bất kì lỗi hay warning
Khi đặt tên biến, hãy chọn những cái tên mô tả và nhất quán Ưu tiên sử dụng những tên rõ ràng thay vì ngắn gọn Áp dụng quy tắc camelCase (tránh sử dụng snake_case) và sử dụng UpperCamelCase cho các loại và giao thức, trong khi lowerCamelCase nên được dùng cho các biến khác.
Khi đặt tên, cần bao gồm tất cả các từ cần thiết và loại bỏ những từ không cần thiết Tên gọi nên dựa trên chức năng thay vì kiểu dáng, và các phương thức cũng nên được đặt tên dựa trên chức năng của chúng.
▪ Verb method cần có –ed, -ing
▪ Noun method tuân theo quy tắc formX
▪ Boolean nên đặt như 1 câu khẳng định
▪ Protocol đặc tả what something is nên đặt theo noun
Protocol nên được mô tả bằng các khả năng kết thúc bằng -able hoặc -ible, sử dụng thuật ngữ dễ hiểu cho cả chuyên gia và người mới bắt đầu Cần tránh viết tắt và đặt tên cơ sở giống nhau cho các phương thức có ý nghĩa tương tự Hạn chế việc overload các hàm trả về và chọn tên có thể hỗ trợ cho việc viết tài liệu Ngoài ra, cần gắn nhãn cho Closure và Tuple parameter, đồng thời tận dụng các tham số mặc định để tăng tính linh hoạt.
− Code Organization: o Protocol Conformance: Khi thêm protocol, hãy thêm từng protocol riêng biệt, tách ra thành extension cho từng protocol method
▪ Not preferred: o Unused Code: Tất cả các code không sử dụng đến và placeholder comment cần xoá đi
▪ Not Preferred: o Minimal Import: Hạn chế import các thư viện không cần thiết hoặc không sử dụng đến
Để tối ưu hóa không gian và ngăn chặn đường bao, hãy thụt lề bằng cách sử dụng 2 khoảng trắng thay vì các tab Đối với các phương thức, cần mở ngoặc trên cùng một dòng và đóng ngoặc ở một dòng mới.
Colons should not have a space on the left side and should have a space on the right side, with exceptions for the ternary operator ? :, empty dictionaries [:], and the syntax #selector addTarget(_: action:).
▪ Not Preferred: o Chỉ nên có tối đa 70 kí tự trên 1 dòng o Không thêm khoảng trống vào cuối hàng Thêm một dòng mới ở cuối mỗi file
Khi cần thiết, hãy sử dụng comment để giải thích mục đích của đoạn code Các comment cần được cập nhật hoặc xóa khi không còn cần thiết, và nên tránh việc để comment trong cùng một dòng với code.
− Function Declarations: o Hàm ngắn: để dấu mở ngoặc cùng một dòng với định nghĩa o Hàm dài: Mỗi parameter để trên 1 dòng mới
− Function Calls: Giống với Function Declarations
− Closure Expressions: Chỉ sử dụng cú pháp Closure nếu có một parameter closure ở cuối danh sách đối số o Preferred: o Not Preferred:
12 o Constant: Sử dụng let để định nghĩa hằng Luôn sử dụng let thay cho var nếu biến có giá trị không đổi
Không nên sử dụng Type Inference cho các trường hợp phức tạp; ưu tiên viết code ngắn gọn và để trình biên dịch tự suy ra kiểu cho các hằng hoặc biến của các instance đơn Type Inference phù hợp cho các mảng và từ điển nhỏ, không rỗng Khi cần thiết, hãy chỉ định loại cụ thể như CGFloat hoặc Int16.
Effective memory management is crucial in coding, both for non-production and demo code, to avoid creating reference cycles Utilizing value types such as structs and enums is recommended to completely prevent these cycles.
Kết quả: Nắm được coding convention Áp dụng vào code để giúp code đẹp và dễ đọc hơn.
Thực hiện dự án
Sau khi nghiên cứu về công ty và quy trình làm việc, anh Trung đã giao cho tôi nhiệm vụ triển khai ứng dụng STYL FOOD để nhân viên trong công ty có thể sử dụng hiệu quả.
Lịch làm việc
Tuần Công việc Người hướng dẫn
1 Tìm hiểu về công ty, cách làm việc
2 Sử dụng storyboard hiện thực thiết kế Login, Home
Mr Trung Áp dụng Hoàn thành
3 Hoàn thiện tất cả thiết kế UI Mr Trung Áp dụng Hoàn thành
4 Chuyển thiết kế từ storyboard sang code, sửa lỗi thiết kế, thêm hiệu ứng
Mr Trung Áp dụng Hoàn thành
5 Chuyển code sang mô hình
MVC, hiện thực các chức năng trang Home, fetching data với JSONDecoder
Mr Trung Áp dụng Hoàn thành
6 Sửa lỗi sau khi anh Mentor review, call API, chuyển sang sử dụng Firebase để lưu dữ liệu
Mr Trung Áp dụng Hoàn thành
7 Sửa lỗi UI, constraint, hiện thực các chức năng của các
Mr Trung Áp dụng Hoàn thành
8 Tối ưu hoá code, thêm animation cho các component
Mr Trung Áp dụng Hoàn thành
9 Lưu dữ liệu vào firebase, chuyển một phần mô hình
MVC thành mô hình MVVM
Mr Trung Áp dụng Hoàn thành
Mr Trung Áp dụng Hoàn thành
11 Hiện thực unit test cho Login và các service
Mr Trung Áp dụng Hoàn thành
12 Sửa lỗi unit test, hiện thực trên máy thật, review lại quá trình thực tập
Mr Trung, Mr Ân Áp dụng Hoàn thành
CHI TIẾT PROJECT
Giới thiệu về ứng dụng
Ứng dụng được thiết kế để hỗ trợ nhân viên trong công ty nắm bắt thông tin về món ăn trưa hàng ngày và trong suốt tuần Các chức năng chính của ứng dụng bao gồm:
− Login: Sử dụng tên của mình để login
− Home: Xem món ăn của trưa ngày hôm nay, chuyển hướng đến các trang khác Thay đổi ảnh profile
− Food List: Xem danh sách các món ăn trong tuần
− Rate Food: Đánh giá món ăn của ngày hôm đó
− Rating View: Xem xếp hạng các món ăn có đáng giá cao nhất từ các nhân viên trong công ty
− Setting: Xem phiên bản của ứng dụng Gửi Mail phản hồi cho nhà phát triển Đánh giá ứng dụng.
Thực hiện
Project đã được thực hiện và có sản phẩm được sử dụng như sau:
− Thêm Scrollview trên nền ViewController, thêm uiview lên nền scrollview
− Thêm imageview để thêm logo app
− Thêm uiview để hiện đề xuất tên khi người dùng login
− Thêm textfield để nhập dữ liệu
− Thêm button để chuyển hướng sang Home
− Hiệu chỉnh UI bằng code, thêm extension gradient để tái sử dụng
− Thêm Scrollview trên nền ViewController, thêm uiview lên nền scrollview
− Thêm 3 component chính: Food List, Ratings, Settings với cùng cấu trúc: 2 uiview, 1 imageview, 1 button, 1 label 3 component được đặt vào 1 stackview
− Thêm imageview để làm khung cho profile picture Thêm button Edit profile
− Thêm uiview hiển thị món ăn hôm nay, đánh giá món ăn
3.2.3 Màn hình Edit Profile Picture
− Thêm 2 component: Take photo, Select photo với cùng cấu trúc: 1 uiview, 1 label, 1 button, 1 imageview
− Flow: o “Take a photo”: Chuyển sang camera của máy, Chụp ảnh, Chọn ảnh o “Select a photo from your phone”: Chuyển sang thư viện, chọn ảnh, xác nhận thay đổi
− Chọn Select a photo from phone, chuyển sang thư viện:
− Chọn ảnh, xác nhận thay đổi Màn hình chính sau khi thay đổi ảnh
− Thêm Scrollview trên nền ViewController, thêm uiview lên nền scrollview
− Thêm tableview lên nền uiview
− Thiết kế style cho từng cell trong bảng
− Thêm uiview trên nền ViewController
− Thiết kế các cell có cấu trúc tương tự: 1 uiview, 3 label
− Thêm uiview trên nền ViewController
− Thêm các label thông tin
− Thêm 3 component có cùng cấu trúc: 1 uiview, 2 imageview, 1 button
− Thêm uiview trên nền ViewController
− Thêm floating view chứa sao đánh giá
− Thêm button xác nhận đánh giá
− Thêm uiview trên nền ViewController
− Thêm 2 button: cancel và sign out
− Màn hình thông báo sau khi rate
− Màn hình thông báo đến giờ ăn trưa:
KẾT QUẢ ĐẠT ĐƯỢC
Sau 3 tháng thực tập tại công ty em đã được làm quen với môi trường làm việc chuyên nghiệp và tích luỹ được nhiều kinh nghiệm quý báu:
− Củng cố kiến thức hướng đối tượng, sử dụng kiến thức hướng đối tượng trong Swift
− Nắm bắt được các nguyên tắc khi làm việc với XCode, các nguyên tắc thiết kế UX/UI
− Phát triển ứng theo mô hình MVC, MVVM
− Biết cách sử dụng CoreData, Firebase với Swift
− Viết Unit test cho service call
− Nắm bắt được cách sử dụng công cụ quản lý mã nguồn
− Trải nghiệm môi trường làm việc thực thụ, biết cách làm việc nhóm, trao đổi, đặt câu hỏi khi gặp vấn đề
− Kĩ năng research được nâng cao
− Chuyển đổi thiết kế từ storyboard sang code