9health / moviegeek

A django website used in the book Practical Recommender Systems to illustrate how recommender algorithms can be implemented.
MIT License
0 stars 0 forks source link

Try to replace food database - Part 1 #5

Open 9health opened 1 year ago

9health commented 1 year ago

Input

Output

quangvv9Life commented 1 year ago

Hi Hải, @9health

Tớ ssh vào máy ảo ubuntu trên azure thông qua cổng 8081 thì bị lỗi này là sao nhỉ ?

Image

Dưới đây là lệnh tớ dùng

ssh -p 8081 -i .\id_rsa_ninehealth_westus ninehealth@ninehealth.westus.cloudapp.azure.com

BR Quang

quangvv9Life commented 1 year ago

Hi Hải, @9health

Hiện tại task này :

  1. Done :
    • import file csv - 160 dòng chứa các món ăn và thành phần và bảng collector_foodlog trong sqlite3
    • tạo 1 app trong back-end foodgeek với tên gọi ninehealth_logger để check việc log và ghi nhận từ front-end vào back-end thông qua urls và view
  2. Will do :
    • Phần front-end dự kiến sẽ tạo 1 cái view có mấy trường input simple bằng html
    • Thực hiện input thêm đồ ăn và dĩnh dưỡng vào form này để kiểm tra xem hàm log chạy và lưu dữ liệu vào db có giống movie hay không (trong module collectors)
    • Trao đổi thêm để chạy các bước recommend tiếp theo sau khi food đã được log vào hệ thống
  3. Issue :
    • Tuy nhiên task này định là hôm nay là xong tuy nhiên có 1 vài việc gia đình chen ngang nên cố gắng tớ sẽ hoàn thành vào khoảng 14 tức 28/12/2022
    • có khả năng sẽ mất thêm thời gian vào 1 task cũng đang chuẩn bị chạy với anh Công trong tuần này đó là : lấy code của các màn hình chính đã thiết kế + thiết kế thêm màn hình signUp để đăng kí và lấy thông tin về thể trạng của người dùng
    • Khả năng sqlite3 không đủ để tải nên tớ đang muốn chuyển sang postGreSQL

BR Quang

9health commented 1 year ago

Hello @quangvv9Life,

Thanks Quang đã chia sẻ plan các thứ @@.

Cơ mà tớ đọc qua thấy cũng hơi khó hiểu :|

Sorry tớ chưa dành thời gian đọc kỹ =.=

Thực sự tớ cần nhìn tài liệu hay code thôi =.=

Kiểu như code review và design review ý =.=

Quang cứ tạo và share file hay code ý cho tớ là okay!!!

Ở trên OneDrive của M365 ý.

Gửi qua chat tớ cũng sợ, hơi ít vào 😢. Sorry Quang.

Thanks Quang!!!

quangvv9Life commented 1 year ago

Hi Hải @9health ,

Thank Hải đã chia sẻ ngắn gọn và dễ hiểu lại các kiến thức trong cuốn PRS nhé. T thấy đọc lại dạng summary cũng giúp tiếp cận và nắm được công nghệ này nhanh hơn đấy !!!

Sorry Hải hôm qua tớ có chạy task này bằng folder ...work/foodgeek/ và có cài đặt 1 package tên là djangorestframework Rõ ràng là tớ đã activate venv nằm trong folder foodgeek rồi và thực hiện lệnh cài package trên mà không hiểu sao tớ sang screen của moviegeek lại thấy nó update cả version django và cài thêm package này vào của Hải :-? khó hiểu thật

Package djangorestframework là mục đích là :

  1. Cài 1 cái apps mới trong django tên là ninehealth_logger
  2. Apps này sẽ có models.py với class tên là FoodLog sẽ có những trường như : FoodId, name, ingrename, ingreid, totalliked, avgrating, v.v.v . Cái class này sẽ tương ứng vs bảng ninehealth_logger_foodlog trong DB SQLite3
  3. Phần urls.py thì tớ sẽ route nó thông qua URL : .../api/ để xem toàn bộ thông tin theo dạng api json
  4. Phần views.py thì tớ không tạo thêm front-end là 1 template html cho nó nữa mà dùng luôn api để phần tương tác vs DB thông qua phương thức HTTP vs api thôi

Tuy nhiên như tớ có nói ở trên là khi cài ở venv của foodgeek thì không hiểu sao nó lại ăn cả vào moviegeek vì tớ có vào kiểm tra pip freeze thì thấy moviegeek đã thành như sau:

Django==3.2.16 djangorestframework==3.14.0

Đối chiếu lại với requirement.txt của tác giả thì thấy đang chạy version thấp hơn :

Django==2.2.27djangorestframework thì không có

Nên suy ra do tớ chạy cái lệnh cài thêm nên nó ăn sang cả của Hải, dẫn tới hiện tại vào trang 8080 thì nó đang bị lỗi như thế này :

Image

Tớ có tìm hiểu lỗi này ở trên mạng thì ra được bài sau :

Image

Đại loại là do upgrade lên version cao hơn nên nó bị ảnh hưởng gì đó đến đống staticfiles

Vậy solution tớ nghĩ là :

  1. Downgrade django version của moviegeek của Hải về version của tác giả
  2. Sửa đoạn sau trong các file templates html {% load static from staticfiles %} anymore. You should just write {% load static %}

Hải xem và cho ý kiến nhé !!!!

BR Quang

9health commented 1 year ago

Thanks @quangvv9Life đã report nhé @@.

May quá sáng nay tớ chả động gì tới cái MovieGEEKs website hự @@

Chiều nay thì fix xong rồi @@.

Quang dùng package djangorestframework mà thấy tiện thì cứ dùng nhé!!!

Còn không tớ thấy với cái hiện tại của tác giả chắc cũng okay @@.

Nếu mà bị conflict version thì hạ version xuống thấp hơn thui!!!

Uhm còn tớ đọc như thế kiểu vừa đọc vừa trải nghiệm, vừa ngẫm nghĩ xem cái thuật toán này hay ho thế nào thui @@.

Chứ cứ đọc ào ào bỏ qua mấy cái hay phí lắm T_T.

Thôi mình không biết ăn ngon thì biết thưởng thức thuật toán vậy T_T

Mặc dù thuật toán tớ cũng dốt đặc hự. Xưa tớ viết được mỗi hàm sort thôi chứ cao cấp hơn như kiểu linked list hay cái gì gì đó tớ chịu thui O__O.

Thanks Quang!!!

quangvv9Life commented 1 year ago

Hi Hải @9health ,

Công nhận là ngồi đọc và cùng thảo luận về các thuật toán này cũng hay thật, mà cái phần hay nhất là khi nó chạy mà trả ra được kết quả mong muốn í

Tớ nghĩ đợt này tớ với Hải cùng quyết tâm làm chủ được mấy cái thuật toán này vì sau này nó có tính ứng dụng rất rộng vào các mảng khác nữa đấy !!!

Vì hiện tại gói nativebase startup+ họ cũng cung cấp cho mình 1 code mà chạy được ở cả 3 môi trường : web, android và ios thì có thể mình sẽ lên 1 kế hoạch build dần 1 cái web front end và cũng dùng chung back end với cái app ios và android Hải ạ

Web này sẽ với mục đích marketing cho app ios và android (SEO) và dùng để unlock level 3 của microsoft nữa

Quan trọng là mình nắm vững các thuật toán và biết ứng dụng thuật toán nào phù hợp nhất vào bài toán hiện tại là giải quyết vấn đề béo phì bằng gợi ý chế độ dinh dưỡng và tập luyện hợp lý cho người dùng là được rồi !!!

Cám ơn Hải đã đọc và hướng dẫn lại tớ, tớ thấy mình cùng đọc và trao đổi và suy ngẫm về kiến trúc này sẽ giúp đẩy nhanh được tiến độ hơn nữa !!! Tớ sẽ tận dụng tối đa thời gian để đọc lại cho kịp với tốc độ của Hải nhé !!!

Ngoài ra còn nên document lại kiến trúc theo hướng nghĩ của mình nữa giống như vẽ lại cái sườn để áp dụng linh hoạt được cho các bài toán cụ thể khác sau này. Có thể tận dụng các buổi trao đổi để ghi chép lại luôn

Cám ơn Hải đã trao đổi và dành thời gian !!! Chúc Hải cuối tuần vui vẻ và năm mới bình an và nhiều may mắn !!! Chúc năm sau 9reatOdin phát hành được một sản phẩm hoàn thiện tốt !!!

BR Quang

9health commented 1 year ago

Hello @quangvv9Life

Thanks Quang đã cùng cùng tớ tạo các bài test nho nhỏ cho model mà Quang đã tạo nhé @@.

Cuối cùng cũng có 1 cái gì đó chạy được và làm được tương đối đúng ý Quang @@@@.

Dưới đây là 1 vài điểm tớ note lại hoặc thêm vào O_O.

Về Network Latency

Cái này tớ thấy có lẽ là cần 1 thử nghiệm dài nên đã tạo 1 issues khác ở đây

Cũng do ban đầu tớ mải setup thất nhanh nên dùng command line từ ví dụ trên Microsoft Learn để tạo máy ảo =.=

Ban đầu tớ nghĩ sẽ không okay lắm vì test thử ping có vẻ cao.

Cơ mà bật lên rồi và vào web app thì thấy cũng ổn =.=

Lúc tớ config, cài packages toàn vào bằng SSH và dùng screen hết =.=

Cơ mà sang Quang gặp vấn đề, haizzz.

Tớ nghĩ thui thì Quang cứ thử từng solution tớ đưa ra trong ý xem cái nào được :|.

Tớ hi vọng khi dùng Cloudflare WARP (1 dạng VPN) sẽ okay. Nếu không Cloudflare Zerotrust đảm bảo sẽ rất okay =.= vì dùng cho industry mà.

Quang cũng có thể mày mò setup vì account hiện tại có quyền root. Dùng sudo là install được cái gọi là client hay là server gì đó lên máy Ubuntu 18.04!!!

Về thời gian làm task này

Lần trước tớ gặp Quang cách đây 2 tuần cũng vào Thứ 4 thì Quang mới nghĩ ra task đấy và tớ cũng ủng hộ.

Sau 1 tuần cũng có 1 cái database model tương đối.

Và tới tuần này thì đã database model hoàn chỉnh hơn và chạy được với QuerySet của Django!!!

Thanks Quang nhé.

Vì Quang còn làm nhiều tasks khác như là UI/UX, setup Microsoft 365, đọc comment của tớ (rất dài...), level của Quang tớ nghĩ cũng là beginner thôi.

Tớ thấy nên update thời gian cho task này là 1 tuần có okay không Quang @@@@@@.

Thực ra thời gian làm có thể vào Linux server và count được thời gian...

ninehealth@LinuxVM15:~$ last | less

nineheal pts/0        116.101.89.XXX   Thu Jan  5 07:47   still logged in
nineheal pts/0        116.101.89.XXX   Thu Jan  5 07:43 - 07:46  (00:02)
nineheal pts/0        116.101.89.XXX   Thu Jan  5 07:13 - 07:28  (00:14)
nineheal pts/0        116.101.89.XXX   Thu Jan  5 06:43 - 06:44  (00:00)
nineheal pts/0        116.101.89.XXX   Thu Jan  5 06:39 - 06:43  (00:03)
nineheal pts/9        :pts/13:S.3      Wed Jan  4 14:35 - 18:20  (03:44)
nineheal pts/6        :pts/13:S.0      Wed Jan  4 14:35 - 18:20  (03:44)
nineheal pts/7        :pts/13:S.1      Wed Jan  4 14:35 - 18:20  (03:44)
nineheal pts/8        :pts/13:S.2      Wed Jan  4 14:35 - 18:20  (03:44)
nineheal pts/13       123.24.150.XXX   Wed Jan  4 14:35 - 18:20  (03:44)
nineheal pts/13       123.24.150.XXX   Wed Jan  4 14:34 - 14:34  (00:00)
nineheal pts/13       123.24.150.XXX   Wed Jan  4 14:33 - 14:33  (00:00)
nineheal pts/13       123.24.150.XXX   Wed Jan  4 14:32 - 14:33  (00:00)
nineheal pts/13       123.24.150.XXX   Wed Jan  4 14:32 - 14:32  (00:00)
nineheal pts/7        :pts/0:S.1       Wed Jan  4 14:30 - 14:35  (00:04)
nineheal pts/8        :pts/0:S.2       Wed Jan  4 14:30 - 14:35  (00:04)
nineheal pts/6        :pts/0:S.0       Wed Jan  4 14:30 - 14:35  (00:04)
nineheal pts/9        :pts/0:S.3       Wed Jan  4 14:30 - 14:35  (00:04)
nineheal pts/0        123.24.150.XXX   Wed Jan  4 14:30 - 14:39  (00:09)
nineheal pts/0        116.101.89.XXX   Wed Jan  4 10:40 - 11:01  (00:20)
nineheal pts/0        116.101.89.XXX   Wed Jan  4 10:15 - 10:17  (00:01)
nineheal pts/7        :pts/0:S.1       Wed Jan  4 07:27 - 07:27  (00:00)
nineheal pts/8        :pts/0:S.2       Wed Jan  4 07:27 - 07:27  (00:00)
nineheal pts/6        :pts/0:S.0       Wed Jan  4 07:27 - 07:27  (00:00)
nineheal pts/9        :pts/0:S.3       Wed Jan  4 07:27 - 07:27  (00:00)
nineheal pts/0        116.101.89.XXX   Wed Jan  4 07:26 - 07:27  (00:00)
nineheal pts/5        :pts/0:S.0       Wed Jan  4 07:26 - 07:26  (00:00)
nineheal pts/10       :pts/0:S.1       Wed Jan  4 07:26 - 07:26  (00:00)
nineheal pts/11       :pts/0:S.2       Wed Jan  4 07:26 - 07:26  (00:00)
nineheal pts/12       :pts/0:S.3       Wed Jan  4 07:26 - 07:26  (00:00)
nineheal pts/16       :pts/0:S.3       Wed Jan  4 07:25 - 07:25  (00:00)
nineheal pts/15       :pts/0:S.2       Wed Jan  4 07:25 - 07:25  (00:00)
nineheal pts/14       :pts/0:S.1       Wed Jan  4 07:25 - 07:25  (00:00)
nineheal pts/13       :pts/0:S.0       Wed Jan  4 07:25 - 07:25  (00:00)
nineheal pts/12       :pts/0:S.3       Wed Jan  4 07:00 - 07:25  (00:24)
nineheal pts/11       :pts/0:S.2       Wed Jan  4 07:00 - 07:25  (00:24)
nineheal pts/10       :pts/0:S.1       Wed Jan  4 07:00 - 07:25  (00:24)
nineheal pts/5        :pts/0:S.0       Wed Jan  4 07:00 - 07:25  (00:24)
nineheal pts/12       :pts/0:S.3       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/11       :pts/0:S.2       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/10       :pts/0:S.1       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/5        :pts/0:S.0       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/12       :pts/0:S.3       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/11       :pts/0:S.2       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/10       :pts/0:S.1       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/5        :pts/0:S.0       Wed Jan  4 07:00 - 07:00  (00:00)
nineheal pts/0        116.101.89.XXX   Wed Jan  4 06:58 - 07:26  (00:28)
webserve pts/2        :pts/0:S.1       Wed Jan  4 05:59 - 06:11  (00:11)
webserve pts/3        :pts/0:S.2       Wed Jan  4 05:59 - 06:11  (00:11)
webserve pts/4        :pts/0:S.3       Wed Jan  4 05:59 - 06:11  (00:11)
webserve pts/1        :pts/0:S.0       Wed Jan  4 05:59 - 06:11  (00:11)
webserve pts/1        :pts/0:S.0       Wed Jan  4 05:58 - 05:59  (00:00)
webserve pts/2        :pts/0:S.1       Wed Jan  4 05:57 - 05:59  (00:01)
webserve pts/4        :pts/0:S.3       Wed Jan  4 05:57 - 05:59  (00:01)
webserve pts/3        :pts/0:S.2       Wed Jan  4 05:57 - 05:59  (00:01)
webserve pts/1        :pts/0:S.0       Wed Jan  4 05:57 - 05:58  (00:01)
webserve pts/4        :pts/0:S.3       Wed Jan  4 05:45 - 05:56  (00:10)
webserve pts/3        :pts/0:S.2       Wed Jan  4 05:45 - 05:56  (00:10)
webserve pts/2        :pts/0:S.1       Wed Jan  4 05:45 - 05:56  (00:10)
webserve pts/1        :pts/0:S.0       Wed Jan  4 05:45 - 05:56  (00:10)
webserve pts/1        :pts/0:S.0       Wed Jan  4 05:39 - 05:39  (00:00)
nineheal pts/2        :pts/0:S.1       Wed Jan  4 05:17 - 05:28  (00:10)
nineheal pts/4        :pts/0:S.3       Wed Jan  4 05:17 - 05:28  (00:10)
nineheal pts/3        :pts/0:S.2       Wed Jan  4 05:17 - 05:28  (00:10)
nineheal pts/5        :pts/0:S.4       Wed Jan  4 05:17 - 05:20  (00:02)
nineheal pts/1        :pts/0:S.0       Wed Jan  4 05:17 - 05:28  (00:10)
nineheal pts/2        :pts/0:S.1       Wed Jan  4 05:17 - 05:17  (00:00)
nineheal pts/4        :pts/0:S.3       Wed Jan  4 05:17 - 05:17  (00:00)
nineheal pts/3        :pts/0:S.2       Wed Jan  4 05:17 - 05:17  (00:00)
nineheal pts/1        :pts/0:S.0       Wed Jan  4 05:17 - 05:17  (00:00)
nineheal pts/5        :pts/0:S.4       Wed Jan  4 05:17 - 05:17  (00:00)
nineheal pts/2        :pts/0:S.1       Wed Jan  4 05:15 - 05:17  (00:02)
nineheal pts/4        :pts/0:S.3       Wed Jan  4 05:15 - 05:17  (00:02)
nineheal pts/3        :pts/0:S.2       Wed Jan  4 05:15 - 05:17  (00:02)
nineheal pts/5        :pts/0:S.4       Wed Jan  4 05:15 - 05:17  (00:02)
nineheal pts/1        :pts/0:S.0       Wed Jan  4 05:15 - 05:17  (00:02)
nineheal pts/0        116.101.89.XXX   Wed Jan  4 05:12 - 06:11  (00:58)
nineheal pts/8        :pts/0:S.2       Wed Jan  4 05:11 - 05:11  (00:00)
nineheal pts/7        :pts/0:S.1       Wed Jan  4 05:11 - 05:11  (00:00)
nineheal pts/9        :pts/0:S.3       Wed Jan  4 05:11 - 05:11  (00:00)
nineheal pts/6        :pts/0:S.0       Wed Jan  4 05:11 - 05:11  (00:00)
nineheal pts/2        :pts/0:S.1       Wed Jan  4 05:10 - 05:10  (00:00)
nineheal pts/4        :pts/0:S.3       Wed Jan  4 05:10 - 05:10  (00:00)
nineheal pts/3        :pts/0:S.2       Wed Jan  4 05:10 - 05:10  (00:00)
nineheal pts/5        :pts/0:S.4       Wed Jan  4 05:10 - 05:10  (00:00)
nineheal pts/1        :pts/0:S.0       Wed Jan  4 05:10 - 05:10  (00:00)
nineheal pts/0        116.101.89.XXX   Wed Jan  4 05:04 - 05:12  (00:08)
nineheal pts/9        :pts/0:S.3       Tue Jan  3 22:01 - 22:32  (00:30)
nineheal pts/6        :pts/0:S.0       Tue Jan  3 22:01 - 22:32  (00:30)
nineheal pts/7        :pts/0:S.1       Tue Jan  3 22:01 - 22:32  (00:30)
nineheal pts/8        :pts/0:S.2       Tue Jan  3 22:01 - 22:32  (00:30)
nineheal pts/0        123.24.150.XXX   Tue Jan  3 22:01 - 22:32  (00:30)
nineheal pts/2        :pts/0:S.1       Tue Jan  3 21:35 - 21:35  (00:00)
nineheal pts/4        :pts/0:S.3       Tue Jan  3 21:35 - 21:35  (00:00)
nineheal pts/3        :pts/0:S.2       Tue Jan  3 21:35 - 21:35  (00:00)
nineheal pts/5        :pts/0:S.4       Tue Jan  3 21:35 - 21:35  (00:00)

Tớ chỉ copy lại trong vòng 2 ngày đổ lại thui @@.

Haizzz sao mà lắm thế nhỉ =.=

Do screen tạo ra nhiều sessions quá haizzz

Làm cho cái last này cũng bị tràn luôn chứ đúng ra là sẽ record từ lúc tớ tạo máy ảo này đấy haizzzz.

Nếu mà Quang muốn chính xác hơn có thể tham khảo issues tớ viết về Linux Administration để tạo 1 account mới cho Quang, permission folder của Quang nữa =.=

Cơ mà Quang làm lại chắc mất 1 ngày đấy =.=

Tùy Quang sắp thôi nhưng mà sau kiểu gì chắc cũng phải gặp hix.

Nếu mà dùng cái trên grep, cut để tạo thành file Excel rồi xử lý chắc sẽ tính ra đúng đấy cơ mà thui vậy =.= Ước lượng gần đúng thui vì thời gian giãn ra cũng là 1 cách để xem mình làm đúng hay không chứ liên tục thì code có khi loằng bà ngoằng =.=

Có lẽ là tớ sẽ tắt bớt đi cái screen session nào không dùng mất =.= Nhiều cái thừa ghê...

Mỗi cái session đấy lại tạo ra 1 Bash shell thread, lại tốn CPU và RAM nữa @@, mà ít thui @@.

Chắc là cứ cuối ngày tắt hết screen session đi ngoại trừ cái MovieGEEKs web app đang chạy thui @@@@@@@.

Còn bình thường thì sẽ tạo screen mới hết.

Cái gì đang code trong ý bằng Vim thì cũng sẽ save lại thành Vim session hết rồi vào và restore sau ...

Về open-source hay không

Cái này thì qua tớ lúc đi trên đường có chat với mấy bạn cũ của tớ để lấy contact của một bạn có nhiều xiền ở Thụy Sĩ ý để giúp bạn có $15K kia bị mất thì tớ mới nghĩ ra là các bạn ý cũng tương đối có thời gian =.=

Biết đâu các bạn ý thích nhảy vào giúp mình hix =.=

Biết đâu thôi.

Vì thế tớ nghĩ ra thêm 1 lý do là cần open-source hết mọi thứ hay là không.

Biết đâu có lẽ có 1 cao thủ nhảy vào giúp...

Dù gì open-source mọi thứ mọi người cũng sẽ hiểu kỹ khả năng của mình đến đâu và giúp được cái gì...

Nói thật với Quang chứ tớ thấy mấy cái máy ảo, docker, K8s và 1 đống thứ linh tinh khác học và làm mãi không hết =.=

Có cao thủ chỉ cho 1 ít cũng tốt hơn hix =.= Giúp 1 ít càng tốt.

Cái GitHub này còn use case về collaborate để viết phần mềm từ IoT thì phải là 1 ông farmer đang đi máy cày trên ruộng chạy phần mềm báo lỗi và 1 người ngồi ở Mỹ hay châu Phi fix lỗi đấy mà =.=

Tớ không nhớ video đấy ở đâu nữa với không search lại được hic =.=

Già quá rồi, hết teen rồi.

Quang thì có nói sẽ có 1 ai đó skill cao cao vào copy phát mình mất đi IP của mình =.=

Cơ mà nói thật phần mềm individual làm tớ thấy cũng không được quá nhiều đâu.

Mà như mình đọc sách, có document rồi mà hiểu code còn vật vã =.=

Tất nhiên bảo là giỏi thì hiểu nhanh hơn cơ mà lúc code lại thì tớ nghĩ vẫn phải qua đủ flow design, code, test mới đưa vào production được chứ bảo 1 ngày copy lại chứ phải 1 tháng tới 3 tháng =.=

Trả xiền cho 1 ông dev copy hay hơn hay là 1 ông dev còn 1 đống feature trong công ty còn chưa dev xong hay hơn =.=

Nên là Microsoft mới open-source Terminal để mọi người vào report hay là cái đống .NET ý =.= Lượng code nhiều quá =.=

Mọi người cùng vào report, cùng check code...

Cái mà lợi thế của mình ở đây là mình hiểu cái mình code thôi =.= Họ hiểu và dùng thì okay cơ mà không hiểu thì quay sang hỏi mình thôi.

Mà nói thật hiểu được cái Quang nói cũng khó lắm =.= Tớ ở Nhật mãi mới tìm được cách nói dễ hiểu đấy...

Vậy nên code Quang viết chắc còn khó hiểu hơn...

Nên là lo bị copy không sao đâu =.=

Copy cũng tốt nhưng mà mình nên ghi license là họ phải đề cập đến việc sử dụng code của mình là được rồi.

Mình biết họ copy rồi thì mình phải improve làm sao cho trở nên tốt hơn ý =.=

Nói chung copy code và ghi rõ license thì okay. Không ghi license mới là có vấn đề.

Còn copy quyển sách hay mua đi bán lại 1 quyển sách thì lại là 1 chuyện khác =.= Tớ cũng chưa hiểu lắm cái đấy =.=

Model của phần mềm là licensing hay gọi là li-xăng =.= Mình cấp phép để họ dùng phần mềm của mình thôi chứ không có bản hẳn kiểu như là thuốc đánh răng hay là laptop hay cái gì cầm được @@@@@@@.

Cái này có lẽ nên học thêm 1 khóa nữa về Copyright...

Và cũng nên tạo ra 1 Wiki page nữa hix. Topic này quá rộng...

Về commit lên Git

Đấy thì mong Quang là consider việc cứ open-source ban đầu nhé @@.

Sau khi okay rùi thì commit lên thôi.

Quang cứ để nguyên code đang chạy được như thế, đừng sửa gì và commit lên 1 branch nhé.

Branch name có lẽ nên theo 1 format nào đấy như là

Lý do YYYYMMDD (YearMonthDate) là để sau này sort cho dễ hix.

Tùy cách Quang chọn cái nào phù hợp thôi =.=

Rồi tớ sẽ làm theo.

Mục đích của việc này là làm sao cho sau này tìm lại branch dễ hơn thôi vì sẽ có rất nhiều feature develop, rất nhiều test cần viết.

Sắp xếp theo thời gian cũng là 1 cách tìm lại dễ hơn =.=

Format này tớ tự nghĩ ra thôi chứ ở công ty tớ remote onsite sang bên Sing họ cũng có 1 kiểu đặt tên hao hao thế vì cả dự án họ là 1 cái git to đùng và khổng lồ, hàng trăm branches ý!!!

Và sau này từ những branch này sẽ merge lại vào master nữa nhé nên phía dưới tớ cũng sẽ có 1 ít comment về code Quang nữa để làm sao merge không bị conflict, chạy được cả MovieGEEKs và FoodGEEKs hay HealthGEEKs

Merge vào master thì để tớ làm nhé =.= Quang làm mà toang chết tớ hự hự.

Và việc này là làm đầu tiên trước khi muốn sửa cái gì tiếp nhé =.=

Ban đầu thì sẽ hơi lâu thôi nhưng sau quen flow rồi sẽ quen dần và nhanh hơn hix.

Ngày đầu tớ commit vào cái git to đùng khổng lồ ở công ty bên Sing kia kìa tớ mất 1 ngày đấy để làm 1 phát là ăn luôn =.=

Chuẩn bị hết comment viết ra 1 file, kiểm tra xem files nào commit lên, có thiếu không.

Chứ sai là toang huhu

Về cấu trúc code, tên API, tên folder

Nói thật mấy cái này có lẽ đối với Quang chắc là hơi bị trừu tượng và chưa thể nắm được ngay @@.

Tớ thì khá hơn một xíu vì tớ cũng ít ra có thời gian kiểu code hay đọc code nhiều hơn Quang thôi, có lẽ thế @@.

Và làm việc trong môi trường nước ngoài và Nhật Bản nữa.

Và được mọi người cho thời gian để đọc/hiểu/ngẫm nữa.

Thành ra là cảm nhận về code, cảm nhận về cấu trúc folder các thứ của tớ cũng khác @@

Tớ thấy hay và tớ cũng về nhà tự code và bắt chước lại ý @@.

Và thấy nó cũng khá là hiệu quả với nhiều dự án khác nhau.

Tớ cũng cảm nhận được y như thế lúc đọc code bác này.

Tuy phần test chưa hoàn hảo như tớ nghĩ cơ mà khả năng là sẽ improve lên được @@.

Về đặt tên API

Cái này qua tớ với Quang cùng nhìn rồi đấy @@.

ÂPI của họ có đúng 1 từ thôi, của Quang tận 3 từ =.=

Quang thử nghĩ xem có từ tiếng Anh nào 1 từ mà bao hàm hết không @@

Về folder test

Qua tớ với Quang ngồi hì hục debug tại sao lệnh python -m test.food_create không chạy @@.

Hóa ra là do thiếu blank file __init__.py.

Cơ mà lúc về nhà tớ lại nghĩ là tác giả tại sao lại cố tình không để file đấy vào đấy.

Có lẽ tác giả không muốn chạy phải không?

Nếu mình để file đấy vào thì có sao không nếu đọc Chương 9 sau này (Chương 9 Quang có search là dùng các file Python trong folder test đấy).

Tớ nghĩ là mình nên tạo 1 folder khác kiểu như là test_food và move file food_create.py vào đấy =.= Tất nhiên có copy file __init__.py

Và remove __init__.py ở folder test kia đi để cho chắc chắn chạy về sau không sao.

Như tớ nói ở trên là làm sao merge vào master không có vấn đề gì ấy @@.

Về cấu trúc code, database

Tớ thấy Quang có tạo ra 1 app là ninehealth_logger và database model trong ý cũng có user_id, content_id, ...

Tớ cũng chưa hiểu ý của Quang lắm là sau này thế nào nhưng mà hiện tại thì có những rows như thế trong Log app rùi @@.

Vậy thì liệu có cần trong ninehealth_logger không T_T.

Do là Quang với tớ cũng mới vào vào chưa đọc kỹ thành ra chưa hiểu kỹ từng folder 1 để làm gì @@.

Giờ tớ với Quang cũng hiểu hòm hòm rùi thì tớ thấy khả năng là tạo 1 app về food và sau đó dev rồi merge và master mà MovieGEEKs vẫn chạy okay là hoàn toàn có khả năng @@.

Quang cứ thử nghĩ xem hự hự.

Làm sao để merge rồi mà vẫn chạy ý T_T.

Sorry Quang vì tớ nhận xét hơi bị tiểu tiết 1 xíu T_T.

Cơ mà đấy là xuất phát từ cảm nhận của tớ và thấy nó sao sao ý.

Tạm thời thử thì không sao nhưng sau này chưa biết có vấn đề không hự.

Tớ thấy 2 ý đầu sửa được nhưng ý thứ 3 thì chắc cần sửa nhiều, migrate nhiều các thứ :(.

Tùy xem là Quang chọn cái nào trước cái nào sau, cái nào commit trước, cái nào commit sau :(.

Cơ mà nếu được thì cứ commit tất lên rồi thực hiện mấy cái sửa đó sau, mặc dù hơi khó chịu :( Hix

Sau này nếu chỉ để chạy API liên quan đến food thì mình vẫn có thể comment (hay xóa) hết đống MovieGEEKs mà không có vấn đề gì ý Quang!!! Tớ nghĩ có thể làm được O_O.

Về test API

Cái này thì có lẽ là chuyên môn của tớ rồi vì tớ đã làm và thử nhiều môi trường =.=

Cơ mà tất nhiên cũng bị conflict với 1 số người khác và cũng phải theo họ.

Do là môi trường các anh ý architect và làm hay các bạn ý architect và làm nên mình theo thôi hix.

Thực sự tớ vẫn thích môi trường test các bác Nhật hơn vì nó đơn giản, dễ hiểu, dễ mở rộng ra với những use case khác, số dòng code ngắn.

Còn môi trường các anh hay các bạn làm loằng ngoằng lắm, regular expression loạn cả lên :(

Mặc dù đúng là ở công ty cũ tớ có dậy về Unit Test các thứ thật nhưng mà áp dụng vào chạy nó cứ sao sao ý :( Lý thuyết mà. Áp dụng rồi là không thay đổi được :(.

Đấy thì như hôm qua tớ có demo với Quang là làm sao để test 1 database model chẳng hạn.

Tại sao test cái đấy trước khi test API vì là mình test từ cái nhỏ tới cái to hay là từ vòng tròn bé ra vòng tròn to thì có gì sai ở vòng tròn to hay cái to mình sẽ debug dễ hơn =.=

Chứ cứ đùng đùng chạy test API liên quan tới HTTP các thứ hay một vài thứ khác lúc lỗi là không biết do đâu :(

Do là ông design cái app đấy hay là do ông integrate cái đấy vào cả cái MovieGEEKs web app huhu :(

Bên tớ gọi đấy là Chiến lượt verifiy (Verification Strategy). Cái này có lẽ tớ chắc cũng phải viết riêng 1 bài ở Wiki hix.

Thì tạm thời nhìn thấy code là như thế. Câu hỏi How trả lời được rồi. Câu hỏi What sẽ là test cái gì đây.

Bên bọn tớ có 1 cái gọi là Verification Plan hay Test plan cũng được sẽ liệt kê hết các test case ra trong ý, tên là gì, miêu tả thế nào, kết quả OK hay NG dựa vào report lúc chạy test.

Cái đấy thì viết bằng Excel cơ mà tớ nói thật mình làm với nhau trên GitHub rồi thì Quang cứ viết bằng file .md hay Markdown cũng được. Có gì tớ vào review và sửa cùng O_O.

Như hôm qua mình có thể gọi là Design Review cũng okay. Cũng là 1 milestone quan trọng hix T_T.

Làm xong verification list và Review cũng là 1 milestone quan trọng.

Code hết đống test case đấy trong verification list là 1 milestone quan trọng.

Chạy hết và tất cả test PASSED hay OK cũng là 1 milestone quan trọng.

Cơ mà Quang mới thì có thế cứ viết code trước đi. Viết tầm 3-4 cái tests rùi quay lại làm tài liệu cũng không sao =.=

Để riêng 1 folder kiểu như docs/test/food_unit_test_plan.md chẳng hạn ý =.= Kiểu kiểu vậy. Tên Quang cứ tự đặt nhé.

1 cái nữa về test như tớ nói hôm qua là giả sử sau này Quang update database model hay 1 function nào đó liệu có làm break đi các function cũ không hay các function khác =.=

Để trả lời được câu hỏi đấy chỉ có thể chạy lại test case và so sánh lại với golden result, expected result =.=

Như tớ nói với Quang ở bên hardware tớ thì thường sẽ có 1 C-model đi kèm và generate ra expected result đấy. Code design bọn tớ viết bằng Verilog. Cho input là register setting và data vào cùng model đấy và so sánh kết quả. Nếu khác chứng tỏ là có vấn đề ở đâu rồi =.= Thường là ở Verilog thui vì Verilog code nói chung là khó, dễ sai hơn.

Vậy thì không có C-model thì làm sao, test kiểu gì. Có 1 cách là mình sẽ output ra 1 file .txt nào đó và kiểm tra bằng mắt xem là kết quả như thế có okay không, có đúng với cái mình mong muốn (expected) không. Nếu đúng thì sẽ coi cái dấy là expected result và copy vào folder EXP

Sẽ có 1 script để so sánh kết quả log file từ RESULT folder chạy với code mới và EXP log file đã được kiểm tra bằng mắt.

Tớ chỉ miêu tả lại như vậy thôi. Có gì sẽ demo dần cho Quang xem =.=

Nhìn đống phần mềm tớ thấy nói thật là quá nhiều test cases =.=

Chắc là đống CRUD Quang có khi chỉ chọn ra vài cái test chạy đúng là được chứ test kỹ corner case như bọn tớ vất vả lắm hự.

Thường hay có bug nhất là ở các giá trị max và min ấy T_T.

Mỗi 1 bạn verification engineer tự có plan riêng, có các viết test case riêng miễn sao cuối cùng verify rằng cái module đấy không còn bug ý O_O.

Thui tớ cứ nói trước vậy thôi :((( Hi vọng là Quang cứ đọc đã rồi áp dụng sau hix.

Về chiến lược test

Cái này thì nói thật mỗi người có một kiểu làm khác nhau cơ mà tớ thấy mình cũng nên lượng sức T_T.

Có 1 ví dụ là xưa các bác có 2 chiến thuật là đánh nhanh, thắng nhanh và đánh chắc, thắng chắc trong chiến dịch Điện Biên Phủ năm 1954 ấy.

Nói thật hồi đấy lực lượng quân mình cũng mạnh hơn so với năm 1945 rồi và còn được nước bạn giúp đỡ.

Cơ mà hồi năm 1945, 1946 lực lượng mỏng, chiến thuật các bác là gì. Đánh chắc, thắng chắc để bảo toàn lực lượng.

Vì ít vũ khí, đạn dược nên là mình chọn những chỗ điểm yếu của địch thôi để đánh vào O_O.

Chứ nếu mà cứ chọn chỗ bốt địch nào to và lao vào đánh thì chỉ có toang lực lượng, chả còn người nữa =.=

Đấy là hồi đầu mới thành lập Quân đội.

Còn tới chiến dịch ĐBP thì lúc ý cũng ở đẳng cấp khác nhưng mà quân Pháp cũng ở đẳng cấp khác =.=

Công sự như ở đấy là theo kiểu rất là kiên có hơn nhiều. Chiến tranh Thế giới Thứ 2 Đức có áp dụng để chống quân Liên Xô bằng kiểu đấy.

Cơ mà sau 10 năm thì nói chung vũ khí xịn hơn, có máy bay các thứ nữa, địa hình ở ĐBP cũng khác nữa nên nói thật là cách đánh cũng khác mặc dù lực lượng mình mạnh hơn rồi.

ĐBP thì có sân bay Mường Thanh là thả đồ tiếp tế xuống nhưng mà quân Pháp lại không bảo vệ kỹ nhất sân bay đấy mà lại bảo vệ trụ sở của tướng Đờ-cát.

Quân mình thì tổng cộng có 3 chiến dịch tấn công và cũng đưa pháo các thứ vào.

Nói thật pháo hồi ý chỉ là tính toán trên giấy thôi chứ cũng chưa thử bắn đâu =.=

Vậy mà chiến dịch thứ nhất đánh vào 1 phía gần sân bay Mường Thanh và thắng hồi giữa tháng 3 =.= Công nhận các bác plan khiếp thật =.= Quá là chuẩn.

Bác Giáp còn quan tâm cho bộ đội có nước nóng, được viết thư cho gia đình, còn cho cả giải trí văn công các thứ nữa ý =.= Nên là ai cũng máu chiến đấu.

Và nói thật thì cũng nhiều gương hi sinh thật nhưng mà không quá nhiều như chống Mỹ sau này =.= Tớ nghĩ thế. Lúc nào các bác ý cũng đặt ra là chiến thắng và với con số thương vong ít nhất.

Đấy là theo chiến thuật đánh chắc, thắng chắc đấy =.=

Chứ đánh nhanh, thắng nhanh chắc là toang với giờ Việt Nam chắc là chia đôi rùi =.=

Đấy thì tớ lấy ví dụ đấy có lẽ cũng không giống lắm tình trạng của mình bây giờ.

Cơ mà nói thật là tớ nghĩ mình cũng nên như thế Quang à =.=

Cứ bình tĩnh đi dần từng bước 1, từ level cao đến thấp thôi

Có nghĩa là mình sẽ đi theo hướng là

Tớ hi vọng là mình sẽ có nhiều công thức, nhiều cách tính điểm, nhiều cách implementation để không chỉ mình có thể dùng mà nhiều người khác như là bác sỹ có thể vào dùng chẳng hạn =.=

Mọi người chỉ cần biết 1 chút code là customize được (nghe khó nhỉ haizzz)

Nó giống như là Microsoft Lists có thể làm được vô vàn thứ chỉ bằng cách sửa file JSON =.=

https://pnp.github.io/List-Formatting/viewsamples/

Về 1 vài thứ khác

Hix sáng nay tớ dậy đầu tớ cứ bị kiểu cuốn vào mấy cái troubleshootings nên chả ngồi code hay đọc thêm được gì cả =.=

File này tớ viết độ trong khoảng 1 tiếng hay 1.5 tiếng gì đó hix.

Về quyển sách IQ hôm qua tớ kể với Quang thì ở đây @@

https://www.amazon.com/Test-Your-IQ-Explanation-Including/dp/0140249621

Sách của Nhà xuất bản Penguin (con chim cánh cụt)

Tớ không nhớ tên sách tiếng Việt luôn hix =.= May mà nhớ keyword là Penguin nên mới search lại ra được...

Có cái Trí tuệ lỏng và Trí tuệ rắn xưa chị Chuyên gia Tâm lý có nói 1 lần rồi mà chưa giải thích rõ. Trong ý có hết...

Với cả hóa ra IQ test cũng liên quan tới cả tâm lý học nữa, là 1 thước đo tâm lý psychometrics hix. Bất ngờ thật T_T.

Lúc mà test IQ cũng sẽ có kiểu test strength (sức mạnh) và speed (tốc độ). Cơ mà hướng speed thì họ hay theo hơn vì bài dễ và cho thật nhiều câu =.=

Thực ra ai làm mà nhanh thì cũng chứng tỏ rằng strength cao mà =.=

Còn IQ cũng hơi bị khác với cả sáng tạo =.=

Câu hỏi IQ là chỉ có các đáp án.

Câu hỏi sáng tạo thì mỗi người trả lời 1 kiểu, rất nhiều câu trả lời @@. Cơ mà nếu dùng xác suất thống kê thì có thể đưa ra là câu trả lời nào nhiều nhất, ít nhất @@.

Có lẽ những người mà trả lời ít nhất thì đầu óc cũng là có 1 cái sáng tạo gì đó đặc biệt @@

Và IQ thì cũng liên quan tới sóng não nữa (EEG) @@. Đoạn đấy dịch tiếng Việt cũng cứ hơi sao sao nên tớ cũng thấy nó hơi bị ngược. Nghĩa là sóng não người IQ cao và IQ thấp sẽ khác nhau ở cái số điểm lồi lõm ý @@. Theo như sách họ bảo thì là sóng não người IQ cao sẽ lồi lõm nhiều hơn vì họ nghĩ nhiều hơn khi làm 1 bài test chẳng hạn, người IQ thấp ngược lại =.= Họ giải thích thêm trong não nối với nhau thế nào nào, người nào mà kiểu tín hiệu bị gặp trắc trở suy nghĩ cũng sẽ khó khăn ý, nghĩ mãi không thông chẳng hạn @@. Còn nếu tín hiệu tốt thì suy nghĩ phát ra luôn ^_^. Vậy đó.

IQ thì chỉ tăng tới 16 tuổi thôi rồi chững lại.

IQ cao không đồng nghĩa với sống hạnh phúc hoặc là thành công :( Cái ý là tiền đề cho social intelligence thui huhu.

Ngoài ra thì còn 1 cái nữa là Quang có nói với tớ thử trên máy ở nhà (máy Windows hay Ubuntu???) mà không được ý @@.

Quang có thể commit hết cái đống Quang sửa lên 1 branch và đặt tên được không @@.

Nếu có thêm log file càng tốt.

Vì sau này kiểu gì mình cũng phải migrate lên Django phiên bản mới hơn để cập nhật hơn và tránh lỗi security ý @@@@@@@.

Bài viết này có 5K từ, 27K ký tự, dự là đọc trong vòng 20 phút!!!

Cảm ơn Quang rất là nhiều @__@

Tớ nghĩ task này sau khi Quang commit xong là đóng lại (closed) được rồi ^_^

Và Quang có thể tự mở ra 1 task mới ^_^ tùy theo ý Quang như các hướng tớ viết ở trên...

Lúc commit có thêm dấu #[issue_number] là nó tự động reference vào đây đấy, hay phết.

Cảm ơn Quang rất nhiều!!!!!!!!!!

À còn 1 cái về ý nữa là data mình lấy trên mạng về. Cái này tớ cũng chưa tìm hiểu kỹ. Có lẽ cần tạo 1 task mới hay 1 Wiki mới hix.

Đại ý là tác giả lúc distribute cái MovieGEEKs này trên GitHub thì không cho luôn database của TMDB mà kiểu lại còn viết 1 đoạn script để lấy dữ liệu về chạy tổng cộng hết 5 tiếng.

Có lẽ để dữ liệu đi kèm repo là vi phạm cái gì đó @@.

Tớ nghĩ là dữ liệu Cooky hay là Cookpad sau này mình cũng sẽ có script đi kèm để ai muốn download về và tự nghịch database thì nghịch!!!

Biết đâu có cao thủ nào đó thích nghịch thì sao!!!

Như vậy cũng giống MovieGEEKs tránh bị nói là để dữ liệu có copyright hay gì đó ở repo!!!

Thực ra script của em gì tớ quên tên mất rồi mà giúp Quang lấy dữ liệu Cooky về ý cũng giống như bác ý lấy dữ liệu TMDB về và để trong SQLite3 hay PostGreSQL!!!

Thanks Quang nhiều!!!!!!

À có thêm 1 cái nữa nếu Quang login vào trang GitHub và để ý góc dưới cùng bên phải thấy GitHub cũng recommend các repository liên quan tới ngôn ngữ của mình!!!

Tớ thấy và cũng đánh sao (starred) luôn :D.

Quang thích thử vào phần repository được đánh ưa thích của 9Health nhé ^^