- vừa được xem lúc

[UrCheckin] Chuyện gì đến cũng sẽ tới 🤪 (3/3)

0 0 5

Người đăng: Đông Trần

Theo Viblo Asia

Phần 1: [UrCheckin] Tự động hóa chấm công trên ứng dụng Base 🪲 (1/3)

Phần 2: [UrCheckin] Tích hợp AI để chấm công tự động trên ứng dụng Base 🪲 (2/3)

Phần 3: [UrCheckin] Chuyện gì đến cũng sẽ tới 🤪 (3/3)


Hi anh em dev 👋, chào mừng các bạn quay lại với phần cuối cùng của series UrCheckin!

phần 1 tớ đã kể về việc xây dựng bot tự động chấm công, phần 2 là tích hợp AI để đọc tin nhắn group Timeoff. Giờ đây, đến lúc kể tiếp câu chuyện... về sự kết thúc và khởi đầu mới 😅

Khi "thiên đường" có thêm luật mới 📋

Cuộc sống đang êm đềm với UrCheckin thì bỗng một ngày, công ty tớ ra thông báo mới:

Từ nay trở đi, tất cả nhân viên phải checkin/checkout đúng giờ quy định. Trễ hơn sẽ bị trừ lương. Quên checkin/checkout quá 3 lần trong tháng = mất lương ngày/buổi đó 💀

Nghe đến đây thôi mà tớ đã thấy rùng mình rồi 😃)))

Trước đây do công ty chưa quản lý gắt việc nhân viên đi trễ, nên tớ cài đặt bot checkin lúc 10h15 mà công ty yêu cầu 9h. Giờ với chính sách mới này... chuyện không đơn giản nữa rồi 😰

Nervous Sweating

Tình huống tiến thoái lưỡng nan 🤹‍♂️

Lúc này tớ có vài lựa chọn:

Option 1: Điều chỉnh bot checkin sớm hơn

Về mặt kỹ thuật, việc này hoàn toàn khả thi. Chỉ cần sửa lại thời gian trong cron job từ 10h15 về 9h là xong.

Nhưng... nếu HR phát hiện tớ có tool checkin/checkout tự động như này thì sao? 🤔

Có khi bị kỷ luật không chừng! Dù tool này giúp ích cho cả team, nhưng về mặt chính sách thì vẫn có thể bị coi là gian lận chấm công.

Option 2: Tắt bot và để mọi người tự checkin

Đây là lựa chọn an toàn nhất. Tuy nhiên, nghĩ đến việc phải quay lại thời kỳ "nhớ chấm công" thì... chán quá! 😭

Quyết định khó khăn: Tạm biệt UrCheckin server 👋

Sau một hồi cân nhắc, tớ quyết định tắt bot và thông báo với team:

"Anh em ơi, do chính sách mới của công ty khá gắt gao, để tránh rủi ro, tớ tạm thời tắt UrCheckin. Mọi người tự checkin/checkout nhé!"

Phản ứng của team cũng... khá buồn 🥲

Sad Team

Khi ý tưởng mới bừng sáng 💡

Nhưng tớ không phải là dân chơi lội ngược dòng cho vui đâu! Sau thời gian suy nghĩ, một ý tưởng mới bỗng hiện ra:

Thay vì server tự động chạy cronjob, sao không để server chờ signal từ máy tính cá nhân?

Ý tưởng này hoạt động như sau:

  • Server UrCheckin tắt tất cả cronjob, chỉ mở API để nhận "ping"
  • Tạo npm package cài trên máy cá nhân, chạy nền 24/7
  • Package này mỗi 2 phút kiểm tra IP công khai hiện tại
  • Nếu IP = IP văn phòng công ty (do dùng IP tĩnh) → ping lên server UrCheckin
  • Server nhận ping đầu tiên trong ngày → gọi API checkin Base
  • Nếu > 4 phút không nhận ping → gọi API checkout Base

Ý tưởng này có những ưu điểm vượt trội:

  1. Phát hiện location thật → Chỉ checkin khi thực sự ở văn phòng
  2. Tự nhiên 100% → Checkin khi đến, checkout khi đi
  3. Khó phát hiện → Không có pattern cố định như cronjob
  4. Server vẫn tập trung → Dễ quản lý và update logic

Cách hoạt động của ý tưởng mới:

Cách sử dụng siêu đơn giản:

# Cài đặt global
npm install -g urcheckin # Cấu hình email và key
urcheckin-cli config --email="thiendong.iuh@gmail.com" --key="" # Cấu hình chạy nền
launchctl load ~/Library/LaunchAgents/com.urcheckin.plist

Bài học từ hành trình UrCheckin 🎓

Nhìn lại hành trình từ server bot đến npm package, tớ rút ra được vài bài học:

1. Adaptation is key

Khi môi trường thay đổi, solution cũng phải thay đổi theo. Cứng nhắc bám vào giải pháp cũ sẽ dẫn đến thất bại.

2. User-centric thinking

Solution tốt nhất không phải là solution phức tạp nhất, mà là solution phù hợp nhất với user và context.

3. Security by design

Từ đầu nên nghĩ về security implications, thay vì retrofit sau.

4. Simplicity wins

NPM package đơn giản nhưng hiệu quả hơn server phức tạp trong trường hợp này.


Kết thúc một hành trình, bắt đầu hành trình mới 🏁

UrCheckin đã trải qua 3 giai đoạn tiến hóa:

  1. Bot server với cronjob - Giải quyết vấn đề cơ bản
  2. AI-powered system - Tự động hóa hoàn toàn dựa vào tin nhắn
  3. Location-based ping system - Thích ứng với chính sách mới, tự nhiên 100%

Mỗi giai đoạn đều có ý nghĩa và giá trị riêng. Quan trọng là luôn sẵn sàng thay đổi khi cần thiết!

Câu chuyện UrCheckin có lẽ chưa kết thúc ở đây. Biết đâu trong tương lai sẽ có UrCheckin 4.0, 5.0... với những ý tưởng điên rồ khác 🤪

"Chuyện gì đến cũng sẽ tới" - đôi khi là thử thách, đôi khi là cơ hội. Quan trọng là mình đón nhận và thích ứng như thế nào!

Bạn nghĩ sao về hành trình tiến hóa của UrCheckin? Có ý tưởng nào hay ho cho version npm package không? Hãy chia sẻ trong phần bình luận nhé! 🚀

GitHub Repository: dongitran/urcheckin-cli

Bình luận

Bài viết tương tự

- vừa được xem lúc

Giới thiệu Typescript - Sự khác nhau giữa Typescript và Javascript

Typescript là gì. TypeScript là một ngôn ngữ giúp cung cấp quy mô lớn hơn so với JavaScript.

0 0 562

- vừa được xem lúc

Bạn đã biết các tips này khi làm việc với chuỗi trong JavaScript chưa ?

Hi xin chào các bạn, tiếp tục chuỗi chủ đề về cái thằng JavaScript này, hôm nay mình sẽ giới thiệu cho các bạn một số thủ thuật hay ho khi làm việc với chuỗi trong JavaScript có thể bạn đã hoặc chưa từng dùng. Cụ thể như nào thì hãy cùng mình tìm hiểu trong bài viết này nhé (go).

0 0 471

- vừa được xem lúc

Một số phương thức với object trong Javascript

Trong Javascript có hỗ trợ các loại dữ liệu cơ bản là giống với hầu hết những ngôn ngữ lập trình khác. Bài viết này mình sẽ giới thiệu về Object và một số phương thức thường dùng với nó.

0 0 177

- vừa được xem lúc

Tìm hiểu về thư viện axios

Giới thiệu. Axios là gì? Axios là một thư viện HTTP Client dựa trên Promise.

0 0 165

- vừa được xem lúc

Imports và Exports trong JavaScript ES6

. Giới thiệu. ES6 cung cấp cho chúng ta import (nhập), export (xuất) các functions, biến từ module này sang module khác và sử dụng nó trong các file khác.

0 0 126

- vừa được xem lúc

Bài toán đọc số thành chữ (phần 2) - Hoàn chỉnh chương trình dưới 100 dòng code

Tiếp tục bài viết còn dang dở ở phần trước Phân tích bài toán đọc số thành chữ (phần 1) - Phân tích đề và những mảnh ghép đầu tiên. Bạn nào chưa đọc thì có thể xem ở link trên trước nhé.

0 0 269