Scrappy - Tạo những ứng dụng nhỏ dành riêng cho bạn và bạn bè
(pontus.granstrom.me)- Scrappy là một công cụ làm phần mềm kiểu homemade giúp cả người không chuyên cũng có thể dễ dàng tự tạo các ứng dụng nhỏ
- Khác với các ứng dụng thương mại lớn hay ứng dụng enterprise, nó cho phép tự do giải quyết những vấn đề nhỏ mang tính cá nhân và sáng tạo
- Cung cấp UI dựa trên canvas, chỉnh sửa mã đơn giản, cùng khả năng cộng tác và chia sẻ theo thời gian thực để cả người không biết lập trình cũng có thể sử dụng
- Mọi ứng dụng (Scrapp) về mặc định đều là môi trường nhiều người dùng, có thể dùng và cộng tác ngay mà không cần tạo tài khoản
- Khác với AI sinh mã hay các công cụ hiện có, Scrappy nhấn mạnh vào việc người dùng tự thao tác và quyền sở hữu
Giới thiệu và bối cảnh
- Phần lớn phần mềm hiện nay tập trung vào bán cho thị trường đại chúng hoặc các ứng dụng tùy biến quy mô lớn
- Nhưng những ứng dụng nhỏ, cá nhân hóa để đáp ứng nhu cầu thực tế của từng người lại rất hiếm
- Scrappy là một nguyên mẫu nghiên cứu giúp bất kỳ ai cũng có thể tự tạo những ứng dụng đơn giản và sáng tạo cho bạn bè và gia đình
- Mục tiêu của Scrappy là đưa ra một tầm nhìn cụ thể để nhiều người hơn có thể tạo ra phần mềm sáng tạo và cá nhân hóa, ngay cả khi không có chuyên môn lập trình
Scrappy là gì
- Ứng dụng được tạo bằng Scrappy được gọi là Scrapp
- Một số ví dụ tiêu biểu:
- Ứng dụng luyện số học cho học sinh tiểu học: có thể điều chỉnh độ khó
- Bộ đếm người tham gia sự kiện địa phương: quản lý lượt vào ra ở nhiều cổng
- Đồng hồ tính chi phí cuộc họp: tính chi phí cuộc họp theo thời gian thực
- Quản lý việc nhà theo tuần: có thể linh hoạt sắp xếp lịch cho từng thành viên
Trải nghiệm tạo ứng dụng trong Scrappy
- Scrappy cho phép đặt các đối tượng như nút bấm, ô văn bản trên một canvas vô hạn tương tự Figma, Miro, Google Slides
- Có thể chỉnh trực tiếp thuộc tính trong bảng Inspector, và cũng có thể gắn mã JavaScript vào các thành phần như nút bấm
- Quá trình tạo ứng dụng được hoàn thiện dần bằng cách lặp lại từng bước kéo/thả, sửa thuộc tính và chèn mã
Tính năng chính:
- Thiết lập hành vi cơ bản: đặt trường và nút rồi kết nối hành động ngay lập tức
- Công thức phản ứng: triển khai thay đổi thuộc tính theo thời gian thực để phản hồi các điều kiện cụ thể
- Đồng bộ nhiều người dùng: trạng thái luôn được lưu và đồng bộ theo thời gian thực
- Chỉnh sửa trực tiếp: luôn có thể sửa theo thời gian thực mà không tách biệt giữa chạy và chỉnh sửa
- Chia sẻ chọn lọc: có thể chia sẻ và liên kết riêng chỉ một phần cụ thể của ứng dụng
- Thao tác dữ liệu trực quan: có thể xem dữ liệu như spreadsheet để debug và chỉnh sửa
Vì sao Scrappy được phát triển
- Scrappy gắn với các xu hướng như lập trình do người dùng dẫn dắt, “small computing”, “casual programming”, “home-cooked software”
- Khác với lập trình trực quan truyền thống (khối, node-wire), nó chọn hướng kết hợp thao tác trực quan và scripting
- Lấy cảm hứng từ HyperCard, Visual Basic, các phương tiện trực tuyến đồng thời, đồng thời coi trọng trải nghiệm của các công cụ năng suất dạng canvas và cộng tác thời gian thực (Google Docs, Figma, v.v.)
- Scrappy khác với các ứng dụng thương mại quy mô lớn hay cách tạo ứng dụng tự động bằng AI, ở chỗ người dùng trực tiếp kiểm soát và tối đa hóa tính cá nhân hóa, niềm vui và sự sáng tạo
- Ngay cả khi không tự viết mã, nó vẫn mang lại trải nghiệm tạo ứng dụng dễ hơn và thân thiện với con người hơn.
Người dùng mục tiêu của Scrappy
- Người tối ưu hóa quy trình công việc: những ai muốn cải thiện luồng công việc phức tạp mà không cần nhờ chuyên gia
- Giáo viên và học sinh: có thể tập trung vào bản chất của lập trình mà không bị phân tâm bởi kỹ năng phụ trợ (command line, cấu hình môi trường)
- Nhà phát triển theo sở thích: những ai muốn nhanh chóng khám phá nhiều dự án mà không vướng độ phức tạp của ứng dụng đại chúng
- Người theo tinh thần DIY: người muốn tự tay làm ứng dụng riêng cho ngôi nhà, sở thích hay nhu cầu cá nhân
Hiện tại, để một người hoàn toàn mới tự tạo ứng dụng bằng Scrappy vẫn còn khó khăn (vẫn cần một phần kiến thức JavaScript), nhưng việc chia sẻ và remix thì cả người không biết lập trình cũng có thể làm được.
Những ứng dụng nào phù hợp để tạo bằng Scrappy?
- Chia sẻ với bạn bè/người quen: phần lớn Scrapp phù hợp cho cộng tác thời gian thực giữa nhiều người dùng
- Sửa đổi và cải tiến liên tục: có thể chỉnh ngay cả khi ứng dụng đang chạy, không cần quy trình deploy/build
- Tính toán hoặc thao tác quy mô nhỏ: phù hợp hơn với tài liệu chia sẻ + một chút xử lý tính toán hơn là hệ thống phức tạp
- Giảm ma sát cho người dùng: có thể truy cập và sử dụng chỉ bằng liên kết, không cần các bước thừa như tạo tài khoản
- Nhóm người dùng nhỏ đáng tin cậy: không phù hợp nếu cần kiểm soát quyền hạn hoặc mức độ mission-critical
Ví dụ ý tưởng ứng dụng: flashcard tùy biến, agenda cuộc họp, quản lý workshop trực tuyến, bảng thông báo gia đình, kế hoạch du lịch, v.v.
Scrappy vs ứng dụng đại chúng
Khi không tìm được ứng dụng phổ biến phù hợp, bạn có thể tự làm rồi chia sẻ bằng Scrappy. Lợi ích của Scrappy:
- Chỉ có những tính năng cần thiết: không có yếu tố thừa
- Dấu ấn cá nhân: ứng dụng tự làm có ý nghĩa hơn và tạo cảm giác gắn bó hơn
- Dễ sửa theo cách thú vị: có thể tự do trang trí màu sắc, bố cục và thêm yếu tố hài hước
- Dễ remix/chia sẻ: người khác có thể dễ dàng sửa đổi và tái sử dụng
- Thiết kế lấy cộng tác làm trung tâm: nhiều người có thể cùng thao tác và chỉnh sửa đồng thời
- Dùng ngay lập tức: chỉ cần nhấp liên kết là dùng được ngay, không cần đăng ký tài khoản
- Quyền sở hữu dữ liệu rõ ràng: dữ liệu được lưu cục bộ nên người dùng kiểm soát hoàn toàn
Scrappy vs tạo ứng dụng bằng AI
AI có thể tự động tạo ứng dụng, nhưng điểm mạnh của Scrappy nằm ở khả năng dễ hiểu, cộng tác thời gian thực và cảm giác sở hữu sáng tạo
- Cấu trúc dễ hiểu: dựa trên các đối tượng trực quan thay vì mã phức tạp
- Hỗ trợ hợp tác thời gian thực: nhiều người dùng có thể cùng cộng tác và chỉnh sửa
- Nhiều niềm vui và sáng tạo hơn: mang lại phản hồi tức thì và niềm vui khi chủ động chỉnh sửa
Scrappy vs HyperCard và các công cụ kế nhiệm
- Chia sẻ thân thiện với Internet: ứng dụng Scrappy có thể chia sẻ trực tuyến chỉ bằng liên kết
- Môi trường cộng tác thời gian thực: hỗ trợ chỉnh sửa/chạy đồng thời
- UI và tương tác hiện đại: canvas vô hạn, hỗ trợ nhiều loại đối tượng
- JavaScript scripting: dùng ngôn ngữ hiện đại và phổ biến
- Nhiều đối tượng tương tác đa dạng hơn: hỗ trợ chuỗi, số, ngày tháng, JSON, v.v.
- Công thức phản ứng và liên kết trạng thái: có thể thiết lập quan hệ động tương tự spreadsheet
Kế hoạch sắp tới
- Giảm rào cản tiếp cận cho người dùng không phải lập trình viên
- tự động hoàn thành mã, debug dễ hơn, trực quan hóa quan hệ, thông báo lỗi dễ hiểu, trợ lý dựa trên AI
- chia sẻ nhanh và dễ hơn, gallery công khai, tăng cường hỗ trợ di động
- Tăng cường và mở rộng tính năng
- tăng cường collection và xử lý dữ liệu, quản lý đối tượng lặp lại, đưa vào reusable component
- mở rộng khả năng của Scrappy (hỗ trợ đối tượng mới), cải thiện tính nhất quán về khái niệm, v.v.
1 bình luận
Ý kiến Hacker News
Tôi thích định hướng của dự án này, nhưng muốn chia sẻ trải nghiệm rằng mô hình SaaS được host sẵn không phải thứ tôi muốn. Với các dự án một ngày như bộ đếm nhỏ thì không sao, nhưng nếu là một ứng dụng nhỏ dùng trong nhiều năm thì mức độ phụ thuộc trở thành vấn đề. Dù đường cong học tập có thấp đến đâu thì nó vẫn tồn tại, và tôi lại muốn một lựa chọn có tính tiếp cận lâu dài, ngôn ngữ dễ dùng, và công cụ cho phép tự gắn GUI hơn. Tôi không nghĩ mã nguồn cần phải bị che giấu hoàn toàn; nó nên được làm dễ để mọi người thực sự có thể tự làm theo hướng đó. Chỉ cần nhớ lại đã có bao nhiêu người học CSS nhờ MySpace thì thấy rõ: bắt đầu bằng copy-paste, nhưng rồi cuối cùng họ vẫn tinh chỉnh thành của riêng mình. Cá nhân tôi dạo này chủ yếu dùng HTML/CSS/JS, và nếu thật sự cần backend thì dùng PHP thuần (không framework). Cách này có nhược điểm là bị trói vào trình duyệt, nhưng ở công ty tôi, những dự án nhỏ làm theo kiểu này (bao gồm cả AutoHotKey) đã chạy ổn hơn 10 năm mà hầu như không cần bảo trì. Đặc biệt, tôi đã ngừng đụng đến script AutoHotKey từ 8 năm trước khi chuyển sang macOS, nhưng đồng nghiệp vẫn dùng chúng nhiều lần mỗi ngày. Ngay cả khi AutoHotKey ngừng hoạt động thì mã đã tạo vẫn có thể tiếp tục dùng. Trong khi đó, các giải pháp kiểu SaaS có rủi ro là nếu người sáng lập chuyển mối quan tâm sang thứ khác thì bạn lại phải làm lại từ đầu. Điểm cốt lõi là những người tìm các giải pháp “scrappy” như vậy không muốn phải làm lại mỗi lần như thế.
CardStock không được nhắc trong bài gốc nhưng có vẻ có mục tiêu và cách tiếp cận khá giống Scrappy. Khác với Scrappy, CardStock là mã nguồn mở và chạy được cục bộ. Tham khảo CardStock / kho GitHub. Decker cũng là mã nguồn mở, và đã triển khai sẵn nhiều yêu cầu trong roadmap của Scrappy (ngôn ngữ truy vấn dữ liệu bảng · widget lưới, trừu tượng hóa bộ phận thành “Contraption”, v.v.). Xem Decker.
Dù roadmap có nói sẽ làm cho app tạo trên di động hoạt động tốt, nhưng có vẻ chỉnh sửa ngay trên di động thì không nằm trong kế hoạch (có nhắc rằng “màn hình cảm ứng cỡ lòng bàn tay gây khó chịu khi chỉnh sửa Scrapps”). Nhưng hiện nay nhiều người chỉ dùng di động như thiết bị điện toán duy nhất, thậm chí còn viết code hay tiểu thuyết trên đó. Vì vậy, tôi muốn nhấn mạnh rằng nếu suy nghĩ cả về giao diện chỉnh sửa trên di động, dù hơi bất tiện, thì tác động của công cụ này sẽ lớn hơn rất nhiều.
Một trong những việc tuyệt nhất tôi từng làm là dành một tuần tạo một app đơn giản để đưa dữ liệu đi bộ từ Apple Watch lên một tấm bản đồ lớn duy nhất, rồi đưa lên AppStore và chia sẻ với người quen. Sau một năm, bạn bè và cả những người tình cờ thấy app vẫn đi bộ khắp thành phố rồi nhắn xác nhận cho tôi, khiến tôi rất tự hào. Không có doanh thu nhưng đó thực sự là một trải nghiệm đầy ý nghĩa. Như OP nói, làm những app đơn giản cho bạn bè vì niềm vui là một trong những hạnh phúc lớn nhất.
Tôi chưa từng thấy môi trường lập trình nào thực sự hữu ích cho end-user bằng spreadsheet.
Vibe coding chưa thể thay thế lập trình viên ngay, nhưng với các hệ thống đơn giản kiểu này thì nó sẽ là đối thủ mạnh nhất. Chỉ cần bảo LLM tạo một app đơn giản (HTML+JS nhúng), chỉnh chút là ra bản hoàn thiện, thậm chí còn đẹp hơn về mặt hình ảnh. Xem ví dụ.
Chúng ta đang tiếp cận chủ đề này từ góc nhìn lập trình viên, nhưng tôi nghĩ cơ hội thực sự nằm ở cộng đồng. Ví dụ có thể bắt đầu như một app store cá nhân cho gia đình (kiểu Masterson). Không cần bảo mật vì toàn người quen, và cũng không thể đóng góp nếu không có lời mời. Chỉ là nêu một ý tưởng vậy thôi.
Nếu phải kéo-thả các thành phần UI lên một tờ trống, rồi liên tục vật lộn vì grid snap không khớp với kích thước phần tử UI, và cuối cùng vẫn phải nhập JavaScript thuần mà không có tự động hoàn thành mã, không có lập trình trực quan, không có trợ giúp API, không có hỗ trợ AI, thì tôi tự hỏi đây có thật sự là đích đến cuối cùng không.
Tôi cũng đồng ý 100% với cách tiếp cận “component có thể script” thay vì dạng block cho người mới bắt đầu. Tôi đang ở trên di động nên sẽ thử trên desktop sau. Điểm còn thiếu trong phân tích là mọi người muốn “chia sẻ dễ” và “zero-cost”. Ngay cả trong môi trường tối giản nhất, việc tự làm app vẫn dễ, nhưng phân phối (rào cản App Store)/hosting mới là vấn đề, nên ngay cả gia đình hay người quen cũng ngần ngại bỏ ra 5 USD mỗi tháng. Thực ra lập trình viên chuyên nghiệp cũng vậy thôi.
Khi thấy các định hướng kiểu “máy tính phải làm việc cho con người và nên trở thành hoạt động của mọi người như nấu ăn hay xử lý văn bản”, tôi thấy nó hơi quá chung chung. Các câu kiểu “có live update, hoàn toàn miễn phí. LLM sẽ…” với quá nhiều em-dash (-) khiến tôi nghĩ ngay đến nội dung do AI tạo. Cá nhân tôi là kiểu nếu nhận ra nội dung do AI viết thì hứng thú tụt rất nhanh. Không phải lỗi của người tạo, nhưng bản thân tôi cũng không hứng thú lắm với kiểu copy như vậy.