2019-12-24

Sự thật về analytics trong ngành truyền hình (video streaming industry)

Chỉ là một số nhận xét của cá nhân trong mảng này.

Analytics (video streaming industry)

Đơn giản có thể hiểu là dùng một tập hợp các công cụ để có thể hình dung hóa, khả thị hóa hay còn gọi là trực quan hóa (visualization) dữ liệu dưới nhiều dạng khác nhau, từ đó là cơ sở cho các phân tích tiếp theo.

Thông thường hay thấy analytics được trình bày dưới dạng dashboard bao gồm nhiều biểu đồ (charts) nói chung hay bảng biểu (tables), đồ thị (graphs), sơ đồ (diagrams)… là các dạng diễn giải đồ họa (graphical interpretation) của dữ liệu. Tuy nhiên cũng phần lớn các dashboard này chả có một sự liên kết nào giữa cái đang gọi là analytics với insight.

Hay nó cụ thể hơn, analytics đang có chỉ là phần đầu của những gì nên thực hiện. Một “cái nhìn đúng đắn” (true insight) phải được rút ra, suy luận ra (infer) từ rất nhiều công cụ, sử dụng nhiều kỹ thuật và cũng không dễ dàng gì để có thể thể hiện hết trên một dashboard. Và việc đào sâu phân tích không chỉ làm tăng độ phức tạp mà còn tốn một lượng thời gian không hề nhỏ.

Nói chung đó là hiện trạng xảy ra rất phổ biến trong ngành công nghiệp phát video (video streaming industry) chứ không của riêng một công ty đơn lẻ nào.

Notes: chart, diagram thường cùng được dịch ra tiếng Việt là biểu đồ, sơ đồ. Do đó, việc dịch ra tiếng Việt của các từ này chỉ mang tính chất tham khảo và nên sử dụng hợp lý theo ngữ cảnh và thông lệ/thực tiễn (best practices/實践).

Hiện trạng như đã nó xảy ra vì không có người phát hiện hay muốn sửa nó. Có thể lý do là các công ty đang quá “đua đòi” về mặt hình thức, chạy theo “hào nhoáng” ảo tưởng mà chính họ tạo ra cho nhau. Cũng có thể là các công ty thực tế không có đủ thời gian hay nhân lực đủ năng lực và kiến thức để thực hiện việc này đàng hoàng nhưng họ vẫn muốn có nó. Ngoài ra, còn các lý do khách quan về mặt kỹ thuật công nghệ thực hiện để làm “cho tới” thì không hề dễ dàng, tốn chi phí và data thì lại thường bị “chia nhỏ” (siloed data).

A data silo is a collection of data held by one group that is not easily or fully accessible by other groups in the same organization. … Data silos may seem harmless, but siloed data creates barriers to information sharing and collaboration across departments.

https://www.talend.com/resources/what-are-data-silos/

Data silo không chỉ hạn chế ở phạm vi các nhóm trong công ty mà còn do các rào cản (barrier) ở nhiều bước, nhiều platform trong flow của chính quá trình streaming video.

2019-10-21

Sự thật về big data (với data scientists)

Chém thì chém ... nhưng sự thật vẫn sẽ rất khác
When asked what is the largest dataset analyzed, data scientists (the people working on analyzing data) respond that a laptop is usually enough for their needs.

2019-07-17

Remove PDF password (security) with qpdf


Đôi khi nhận file PDF nhưng bị đóng đấu "SECURED". Mình không thể clear password hay edit được mặc dù biết password. Cũng không thể print thành PDF khác được. Chưa kể trong Foxit không có enable mấy functions cần dùng.

Thực hiện như hướng dẫn ở đây


  1. Grab https://github.com/qpdf/qpdf/releases
  2. Unzip/Install and navigate to the bin folder that holds qpdf.exe (or similar for your platform)
  3. Place the PDF you wish to work on in the same folder
  4. Run: qpdf --decrypt InputFile.pdf OutputFile.pdf (use "s if the file name has spaces).
  5. Do what you like with the OutputFile.
If your PDF file is user password protected, change step 4 to qpdf --decrypt --password=yourpassword InputFile OutputFile
This won't work for Adobe Digital Editions and may have issues with digitally-signed files.
Some discussion on the background of these owner password restrictions at https://lwn.net/Articles/335415/ .

2019-04-30

青春有你 (Qing chun you ni)/To youth/Gửi thanh xuân - 蔡佩軒/Ariel Tsai/Thái Bội Hiên

青春有你 (Qing chun you ni)/To youth/Gửi thanh xuân
藝人/Singer: 蔡佩軒/Ariel Tsai/Thái Bội Hiên
专辑/Album: 《青春有你》
發行月份/Release date: 2018年05月






Zàicì
再次
jiànmiàn
见面
wǒmen
我们
yòu
又
huì
会
zài
在
nǎlǐ
哪里

Lần tới không biết chúng ta sẽ gặp nhau nơi nào?
Where we are when we will meet again?
shìfǒu
是否
huì
會
réng
仍
yǒu
有
xiāngtóng
相同
de
的
mòqì
默契

Liệu có còn có thể ngầm hiểu ý nhau?
Will us still have same tacit understanding?
jiàoshì
教室
lǐ
裡
yǒu
有
wǒmen
我們
qīngchūn
青春
de
的
shēnyǐng
身影

Là hình ảnh của thời thanh xuân của chúng ta trong lớp học ngày ấy
There is our youth shadow in the classroom
tà
踏
chū
出
cāochǎng
操場
zǒu
走
jìnle
進了
huíyì
回憶

Cùng bước ra sân trường, và bước vào ký ức
Step out to the field, step in to the memories

shíguāng
時光
fēishì
飛逝
zǒng
總
ràng
讓
rén
人
cuòshǒubùjí
措手不及

Thời gian trôi quá nhanh khiến ta không kịp chuẩn bị
Times flies fast, always makes people unprepared
xiǎng
想
qián
前
xíng
行
xīn
心
què
卻
hái
還
liú
留
zàiyuán
在原
dì
地

Muốn tiến về phía trước nhưng trong lòng vẫn lưu luyến nơi đây
Step forward but heart still stay there
yīnwèi
因為
yǒu
有
nǐ
你
qīngchūn
青春
jiù
就
yǒule
有了
yìyì
意義

Bởi vì em nên thanh xuân mới trở nên ý nghĩa
My youth become meaningful because of you
bù
不
huì
會
wàngjì
忘記
zhǐ
只
huì
會
gèng
更
zhēnxī
珍惜

Sẽ không quên chỉ là thêm trân trọng
Never forget but only will cherish more

zhōng
鐘
shēng
聲
xiǎngqǐ
響起
shuí
誰
shuō
說
líbié
離別
shì
是
jiéjú
結局

Ai nói chuông reo lên, ly biệt là kết thúc
The bell clock is rang, who said parting is the end
hái
還
yǒu
有
hǎoduō
好多
gùshì
故事
děngzhe
等著
wǒmen
我們
jìxù
繼續

Vẫn còn nhiều câu chuyện chờ chúng ta tiếp tục
There’s still more story waiting for us to continue
nǐ
你
huítóu
回頭
kàn
看
huì
會
fāxiàn
發現
wǒ
我
yīzhí
一直
zài
在
zhèlǐ
這裡

Khi ngoảnh lại em sẽ thấy tôi luôn ở nơi đây
When you look back, you'll realize that I still here
wèi
為
mèngxiǎng
夢想
wǒmen
我們
yīqǐ
一起
nǔlì
努力

Vì ước mơ chúng ta sẽ cùng nỗ lực
We keep fighting for dream

shíguāng
時光
fēishì
飛逝
zǒng
總
ràng
讓
rén
人
cuòshǒubùjí
措手不及

Thời gian trôi quá nhanh khiến ta không kịp chuẩn bị
Times flies fast, always makes people unprepared
xiǎng
想
qián
前
xíng
行
xīn
心
què
卻
hái
還
liú
留
zàiyuán
在原
dì
地

Muốn tiến về phía trước nhưng trong lòng vẫn lưu luyến nơi đây
Step forward but heart still stay there
yīnwèi
因為
yǒu
有
nǐ
你
qīngchūn
青春
jiù
就
yǒule
有了
yìyì
意義

Bởi vì em nên thanh xuân mới trở nên ý nghĩa
My youth become meaningful because of you
bù
不
huì
會
wàngjì
忘記
zhǐ
只
huì
會
gèng
更
zhēnxī
珍惜

Sẽ không quên chỉ là thêm trân trọng
Never forget but only will cherish more

zhōng
鐘
shēng
聲
xiǎngqǐ
響起
shuí
誰
shuō
說
líbié
離別
shì
是
jiéjú
結局

Ai nói chuông reo lên, ly biệt là kết thúc
The bell clock is rang, who said parting is the end
hái
還
yǒu
有
hǎoduō
好多
gùshì
故事
děngzhe
等著
wǒmen
我們
jìxù
繼續

Vẫn còn nhiều câu chuyện chờ chúng ta tiếp tục
There’s still more story waiting for us to continue
nǐ
你
huítóu
回頭
kàn
看
huì
會
fāxiàn
發現
wǒ
我
yīzhí
一直
zài
在
zhèlǐ
這裡

Khi ngoảnh lại em sẽ thấy tôi luôn ở nơi đây
When you look back, you'll realize that I still here
wèi
為
mèngxiǎng
夢想
wǒmen
我們
yīqǐ
一起
nǔlì
努力

Vì ước mơ chúng ta sẽ cùng nỗ lực
We keep fighting for dream

zhōng
鐘
shēng
聲
xiǎngqǐ
響起
shuí
誰
shuō
說
líbié
離別
shì
是
jiéjú
結局

Ai nói chuông reo lên, ly biệt là kết thúc
The bell clock is rang, who said parting is the end
hái
還
yǒu
有
hǎoduō
好多
gùshì
故事
děngzhe
等著
wǒmen
我們
jìxù
繼續

Vẫn còn nhiều câu chuyện chờ chúng ta tiếp tục
There’s still more story waiting for us to continue
nǐ
你
huítóu
回頭
kàn
看
huì
會
fāxiàn
發現
wǒ
我
yīzhí
一直
zài
在
zhèlǐ
這裡

Khi ngoảnh lại em sẽ thấy tôi luôn ở nơi đây
When you look back, you'll realize that I still here
wèi
為
mèngxiǎng
夢想
wǒmen
我們
yīqǐ
一起
nǔlì
努力

Vì ước mơ chúng ta sẽ cùng nỗ lực
We keep fighting for dream

xièxiè
謝謝
qīngchūn
青春
yǒule
有了
nǐ
你

Cảm ơn vì thanh xuân có em
Thanks my youth has you

2018-07-23

What is MVI? Model-View-Intent


Thế là gần 2 năm trôi qua từ lần gần đây nhất mình nói về Android architecture từ tháng 11/2016 Android evolution ... the right architecture?

OK lúc đó Hannes Dorfmann chỉ mới đề cập đến ý tưởng MVI (04 Mar 2016) và muốn chuyển ý tưởng này từ Javascript sang Android. Lúc đó Google còn chưa chính thức ra Android Architecture Components.

Bài viết đầu tiên trong series về MVI của Hannes Dorfmann là vào tháng 01/2017, còn bài viết cuối là vào tháng 05/2018. Nói chung cũng vừa mới đây thôi.

Series của Hannes Dorfmann, tất nhiên là bạn nên đọc hết, đọc một cách kỹ càng
Gần đây công ty lại chuẩn bị một số project mới về mobile nên mình lại cảm thấy ngứa nghề developer. Mặc dù focus vào phát triển sản phẩm như tính năng và không đi sâu vào implement nhưng nhiều khi dạo quanh và đọc các thông tin về architecture cũng có cái thú vị của nó. Càng về sau mình thấy cần thiết phải có một triết lý và các giá trị rõ ràng khi xây dựng sản phẩm từ cả thiết kế đến implementation.

Đầu tiên nói về MVI. Nó là viết tắt của Model-View-Intent. Intent ở đây không phải là Intent của Android (đừng mắc bệnh nghề nghiệp). Phải nói mình rất ấn tượng với lập luận đơn giản của MVI, về unidirectional flow. Muốn tìm về cuội nguồn của MVI thì phải đi từ Cycle.js của André Staltz một framework hướng functional và reactive – A functional and reactive JavaScript framework for predictable code. Một lưu ý thêm ở đây là mục đích framework này nhằm tổ chức code một cách predictable.

Quay lại một chút về trending năm 2017 (development thôi nhé). Đầu năm bên cạnh những thứ liên quan nhiều đến thiết kế như Lottie, motion, onboarding ... sẽ có MVP, MVVM, RxJava (từ v1 sang v2), Dagger2. Chốt lại cuối năm 2017 thì vẫn là sử dụng MVP và MVVM (Google recommended), thêm Kotlin, Android Architecture Components và có thể là Flutter.

Như vậy cả năm 2017 architecture vẫn xoay quanh MVP và MVVM. Tuy nhiên, mình cũng như nhiều developer khác nhận xét thì MVP và MVVM vẫn gây một chút cảm giác thiếu khi không giới thiệu một data flow nào như kiểu Redux. Cái này là điểm mấu chốt để tổ chức predictable code. Dĩ nhiên đó là lý do khi dùng reactive với 2 architecture này, reactive sẽ không phát huy hết khả năng của mình.

Bạn có thể chọn MVP hay MVVM như khuyến khích của Google. Tuy nhiên cá nhân mình thích MVI vì triết lý đơn giản của nó hơn. Ý tưởng của MVI là giao tiếp Human-Computer thể hiển như một vòng tròn, một vòng lặp thì chính xác hơn (cycle).


Khi thể hiện dưới dạng chuỗi các function thì như sau:


Đầu tiên hệ thống (computer/app) lấy input có thể từ DB, Restful API để hiển thị theo cách nào đó. Nó là view(model). Sau khi hiển thị xong thì nó là input của người dùng user. User sẽ thao tác trên ứng dụng ví dụ click chẳng hạn. 

Function intent() sẽ nhận các input từ user, chuyển nó sang model và function model() nhận các input này để thay đổi trạng thái. Cuối cùng function view() sẽ nhận tham số từ output của model() để cập nhật lại UI, hoàn tất một cycle.

Tới đây có lẽ khá đủ cho một bài giới thiệu. Việc còn lại là bắt tay vào làm thử cái gì đó. Re-factor lại một project đã làm cũng có thể, đọc thêm trên GitHub hay Medium... À nhớ là Mosby đã có implement MVI rồi.

Mosby library https://github.com/sockeqwe/mosby

G9

2018-01-25

Excel: last character/string match in a string

Đôi khi có nhu cầu phải tìm ký tự hay sub-string cuối cùng xuất hiện trong Excel.
Search thì cũng ra nhanh nhưng mình note lại đây tập trung 1 chỗ.

Ví dụ
https://stackoverflow.com/questions/18617349/excel-last-character-string-match-in-a-string
https://www.excel-university.com/find-the-last-occurrence-of-a-delimiter-to-retrieve-the-lowest-sub-account-from-quickbooks-in-excel/

=FIND("@",SUBSTITUTE(A1,"\","@",(LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))/LEN("\")))

Mình dùng công thức này, ví dụ tìm "\" cuối cùng của cell A1

=SEARCH("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))

2017-12-30

How to register a Baibu account without a mainland Chinese mobile number

Đăng ký tài khoản Baidu để làm gì

  1. Để dùng Baidu Wangpan 百度网盘 tức Baidu Web Disk hay Baidu Web Drive, tên trước đó của nó là Baidu Cloud 百度云 https://pan.baidu.com/. Baidu đầu tư cả chục tỷ CNY cho cái đám này :D là ít. Nó cho phép lưu trữ tới 2TB (khởi đầu là 1TB) miễn phí, 2TB nhé quên Dropbox, OneDrive hay Google Drive đi, upload file đến 4GB, tool download/upload, sync. Có tính năng de-duplicate file torrent, có nghĩa là chỉ cần up file torrent lên Wangpan, nếu file torrent này được ghi nhận là đã có trên Wangpan, bạn có thể save về account của mình (resources sharing). Cho phép leech file torrents tức là download torrents online. Có tính năng phân tách "thư mục riêng tư" hay "thư mục ẩn" private zone hay hidden zone "ẩn tàng không gian" 隐藏空间. Nói chung rất rất là TQ và châu Á. Client app thì ngoại trừ tiếng Trung (mình cũng biết đôi chút) là trở ngại còn lại không có gì quá khó khăn để sử dụng. 



  2. Phần thứ 2 là các thứ liên quan đến development http://developer.baidu.com/ không đề cập nhiều ở đây. Baidu có nhiều thứ những cái mình có dùng như Echart https://ecomfe.github.io/echarts-doc/public/en/index.html, http://echarts.baidu.com/ hay push notification ... Gần đây là Baidu AI, mình chưa đụng qua nhưng chắc cũng nên xem. Nó từng mời cả Andrew Ng về làm chief scientist của AI group cơ mà.
  3. Để TQ nó tốn resource chơi :D, để biết người ta ntn...

Đăng ký như thế nào

Nếu không phải từ TQ thì thực hiện đăng ký từ link sau:
https://passport.baidu.com/v2/?reg&overseas=1

Lưu ý là chỉ định từ "hải ngoại" :D overseas=1

Nếu không có chỉ định này tức ngầm định đăng ký từ Trung Quốc đại lục (中国大陆|Mainland China)

Đăng ký phải dùng dùng số di động từ Trung Quốc đại lục. Không có option để chọn nước


Đăng ký từ hải ngoại, có option để chọn nước ví dụ Việt Nam là +84 (+84 越南). Chỉ được đăng ký tài khoản với số di động chưa được đăng ký trước đó.