12bit

12bit

Aggregate log đơn giản bằng Benthos

Đăng ngày 5/19/2023

Motivation Gần đây, mình có một task đơn giản là tạo sample data để simulate trường hợp nhiều user gửi request lên server. Mình đã viết thành một chương trình khá đơn giản, là loop và tạo record trong database. Cứ mỗi giây sẽ in ra log số record đã...

Đọc trên blog của tác giả

Quản lí nhiều SSH key trên cùng một thiết bị

Đăng ngày 8/23/2022

Hôm nay mình gặp phải một vấn đề khi thêm SSH key cho tài khoản Gitlab mới. Mình thử add key vào những bị báo lỗi Fingerprint has already been taken. Điều này có nghĩa mình đã dùng key này cho một tài khoản khác trên Gitlab. Và Gitlab không...

Đọc trên blog của tác giả

Marquee - The modern way

Đăng ngày 8/18/2022

Trước đây chúng ta biết tới element <marquee> dùng để tạo hiệu ứng di chuyển nội dung qua lại. Tuy nhiên, element này đã bị deprecated và được khuyên là không nên tiếp tục sử dụng. Các bạn có thể xem thêm trên MDN . Vậy ngày nay, nếu chúng...

Đọc trên blog của tác giả

Chuyện gì xảy ra khi bạn require('x') trong Node.js?

Đăng ngày 8/15/2022

Chắc hẳn các bạn đã biết khi muốn import một package trong node thì chúng ta sẽ dùng require. Khi require node sẽ hiểu như sau: const x = require('x') Bạn đang import file x.js Bạn đang import file x/index.js Vậy bạn có biết Node.js sẽ resolve x như thế...

Đọc trên blog của tác giả

Custom domain cho go mod giúp migrate code đơn giản hơn

Đăng ngày 7/25/2022

Trong dự án TrueProfit mình đã từng dịch chuyển giữa hai git server khác nhau, Ban đầu dùng Gitlab, sau đó đổi qua Bitbucket và về sau này đang chuyển đổi một số repo qua Github. Nhưng mình đã không gặp nhiều khó khăn trong quá trình di chuyển này...

Đọc trên blog của tác giả

Sử dụng private repo trong go mod

Đăng ngày 7/25/2022

Setup Private trên máy cần get set -x GOPRIVATE "pkg.trueprofit.goldencloud.dev/*,bitbucket.org/trueprofit/*" git config --global url."git@bitbucket.org:".insteadOf "https://bitbucket.org/"

Đọc trên blog của tác giả

Sử dụng FRP để public localhost hỗ trợ SSL

Đăng ngày 5/30/2022

Có khá nhiều feature, tốt hơn ngrok, localtunnel, nhưng ở đây chỉ bắt đầu với việc sử dụng frp để expose localhost dưới một subdomain bất kỳ, có SSL. Cài đặt bao gồm 3 phần: Cài đặt domain Cài đặt frps trên server Cài đặt frpc trên máy local Cài...

Đọc trên blog của tác giả

Những cách implement microfrontend

Đăng ngày 5/30/2022

Cũng giống như microservice, microfrontend là cách để implement frontend mà ta chia frontend ra thành nhiều phần độc lập với nhau. Các giải pháp cho microfrontend Cũng từ định nghĩa đơn giản đó, ta có thể có nhiều cách để chia một website thành nhiều phần nhỏ khác nhau...

Đọc trên blog của tác giả

Cài đặt FRP

Đăng ngày 5/30/2022

Download file từ Github wget https://github.com/fatedier/frp/releases/download/v0.42.0/frp_0.42.0_linux_amd64.tar.gz Giải nén nó: tar -zxvf frp_0.42.0_linux_amd64.tar.gz Di chuyển vào thứ mục vừa giải nén: cd frp_0.42.0_linux_amd64 Chép file frps vào thư mục bin: cp frps /usr/bin Chép file service: cp systemd/frpc.service /etc/systemd/system/. chmod 754 /etc/systemd/system/frps.service Chép file config: mkdir /etc/frp cp frps.ini /etc/frp/. Config...

Đọc trên blog của tác giả

Cài đặt FRPC

Đăng ngày 5/30/2022

Cài đặt client: brew install frp Hoặc tải tại trang Releases · fatedier/frp · GitHub Config client: [common] server_addr = 128.199.148.122 server_port = 7000 protocol = kcp token = 2J6R3xfPBeHyKX admin_addr = 127.0.0.1 admin_port = 7400 admin_user = admin admin_pwd = admin [fireass] type = http local_port = 8080 subdomain...

Đọc trên blog của tác giả

Cài đặt Nginx

Đăng ngày 5/30/2022

sudo apt update sudo apt install nginx

Đọc trên blog của tác giả

Cài SSL cho nginx

Đăng ngày 5/30/2022

Tạo config: touch /etc/nginx/sites-available/frp.duocnguyen.dev.conf Link nó qua bên enabled: sudo ln -s /etc/nginx/sites-available/frp.duocnguyen.dev.conf /etc/nginx/sites-enabled/ Config file: server { server_name *.frp.duocnguyen.dev; listen 80; location / { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } listen 443...

Đọc trên blog của tác giả

Go mod private repo

Đăng ngày 5/30/2022

Go get thực hiện checksum code bằng dịch vụ của go, nhưng private repo thì không được checksum vì vậy sẽ bị lỗi. Nếu bạn server trả về private repo, thì bạn cần phải setup biết môi trường GOPRIVATE và chỉ định git sử dụng ssl thay vì http: Setup...

Đọc trên blog của tác giả

Làm sao để cài certbot trên linux

Đăng ngày 5/30/2022

Certbot là một công cụ nguồn mở và miễn phí được phát triển bởi Electronic Frontier Foundation (EFF) để tự động hóa việc lấy và gia hạn chứng chỉ SSL/TLS. sudo apt install python3 python3-venv libaugeas0 sudo python3 -m venv /opt/certbot/ sudo /opt/certbot/bin/pip install --upgrade pip sudo /opt/certbot/bin/pip install certbot...

Đọc trên blog của tác giả

Microfrontend là gì?

Đăng ngày 5/30/2022

Cũng giống như microservice, microfrontend là cách để implement frontend mà ta chia frontend ra thành nhiều phần độc lập với nhau.

Đọc trên blog của tác giả

Microfrontend sử dụng Federated Module

Đăng ngày 5/30/2022

Cài đặt Sử dụng Webpack để build các module một cách độc lập, rất giống với [[Microfrontend sử dụng package]], nhưng khác biệt ở chỗ các module này được build để có thể được require trong quá trình runtime. Dependency cũng được resolve trong lúc runtime. Ưu điểm Các module...

Đọc trên blog của tác giả

Microfrontend sử dụng iframe

Đăng ngày 5/30/2022

Đây là cách để implement microfrontend đơn giản và sơ khai nhất, cũng như dễ implement. Nhưng cũng có những limit riêng Cách cài đặt Cài đặt không quá phức tạp. Hiện thực các module thành những trang web riêng biệt, thương thì các trang này không có header, footer...

Đọc trên blog của tác giả

Microfrontend sử dụng package

Đăng ngày 5/30/2022

Cài đặt Làm một web app bình thường mà trong đó các micro frontend được implement thành các package khác nhau, giống như cách build, sử dụng những package bên thứ 3. Ưu điểm Các module được phát triển độc lập. Dependency độc lập Nhược điểm Cần phải build lại...

Đọc trên blog của tác giả

Cài đặt MailHog trên Ubuntu

Đăng ngày 10/1/2021

Mình đang dùng Mailtrap để test mail. Nhưng ngặt một nỗi sài free nên chỉ tạo được 1 inbox và bị giới hạn 500 email/tháng. Bình thường ít traffic thì không sao, nhưng tới khi cần test mail nhiều thì bị giới hạn, phải đợi tháng sau hoặc tạo tài...

Đọc trên blog của tác giả

Cài đặt Coding Standards cho dự án WordPress

Đăng ngày 9/28/2021

Trong quá trình sửa lỗi một plugin của mình bị gỡ xuống khỏi WP repository do không tuân thủ best practice của WordPress thì mình cũng xem thử có cách nào cài đặt coding standard của WordPress đơn giản hay không. Với tiêu chí là không cài đặt cho 1...

Đọc trên blog của tác giả

iTerm2: Trigger

Đăng ngày 11/24/2020

Giới thiệu về Trigger Trigger là một action được thực hiện mỗi khi text từ terminal của session hiện tại match với regex tương ứng. Cú pháp regex tuân theo các quy tắc của ICU regular expressions . Cách Trigger hoạt động Trước khi text (bao gồm cả BEL control...

Đọc trên blog của tác giả

Duyệt web với Vimium

Đăng ngày 9/20/2020

Chào các bạn, đã lâu rồi mình không viết gì trên 12bit. Nhân tiện mình đang tìm hiểu Vim nên chia sẻ với các bạn một extension cho Chrome hoặc Firefox tên là Vimium. Vậy Vimium thì có liên quan gì tới Vim? Chúng có liên quan đó! Vì đều...

Đọc trên blog của tác giả

Đồng bộ application settings giữa nhiều máy mac

Đăng ngày 8/6/2020

Mình có MỘTs cái mac Mình có một cái mac thôi, nhưng MỘT ở công ty, MỘT ở phòng ngủ, MỘT ở nhà vệ sinh, MỘT ở phòng khách. Và vấn đề là: Làm sao để config của các ứng dụng trên các máy này đồng bộ với nhau? Việc...

Đọc trên blog của tác giả

Giới thiệu feature flags

Đăng ngày 3/3/2020

Câu chuyện ngày xưa Một buổi sáng thức dậy, những người thợ mỏ họp bàn với nhau rằng hôm nay họ sẽ làm việc trong một căn hầm cũ, bởi chẳng còn nhiều than ở hầm mới nữa. Chuyện chẳng dễ ăn, hầm cũ nhưng có nhiều điều rủi ro...

Đọc trên blog của tác giả

JWT là gì

Đăng ngày 2/25/2020

Khái niệm JWT là viết tắt của “JSON Web Tokens”. Là một phương thức gọn nhẹ nhằm đảm bảo sự bảo mật trong các giao tiếp giữa hai đối tượng. JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. Nói một...

Đọc trên blog của tác giả

Login bằng QR code

Đăng ngày 2/10/2020

Trong trường hợp mà việc login trên điện thoại phức tạp, ví dụ như phải thông qua website của bên thứ ba hoặc trải qua nhiều bước nhưng lại có thể được xác thực bởi một phiên login trước đó ví dụ như phiên login trên website thì chúng ta...

Đọc trên blog của tác giả

Cấu hình .gitignore global

Đăng ngày 2/10/2020

Có những file hoặc folder chúng ta luôn luôn phải ignore hoặc khi làm chung với những dev sử dụng hệ điều hành khác, editor khác thì lại không sinh ra file đó. Vì vậy một cách tốt hơn đó là ignore global. Có nghĩa là bạn sẽ không cần...

Đọc trên blog của tác giả

Workflow khi làm BrSE

Đăng ngày 1/16/2020

Mở đầu Về đặc thù của vị trí BrSE bạn có thể google để biết thêm. Trong các bài viết đó thì bài viết Kỹ Sư Cầu Nối Là Gì giới thiệu mình thấy khá là dễ hiểu. Bằng kinh nghiệm làm BrSE với dự án đầu tiên ăn hành...

Đọc trên blog của tác giả

2019 Recap

Đăng ngày 12/30/2019

Chỉ còn 1 ngày nữa là bước qua năm 2020. Đây cũng là cơ hội để 12bit nhìn lại 1 năm vừa qua. Hello, mình đang test viết bài trong Vim. Phải nói là một trải nghiệm tuyệt vời. Các bạn cũng nên thử 😂 Nhìn lại 2019 Mở đầu...

Đọc trên blog của tác giả

Vài điều thú vị với Fish shell

Đăng ngày 11/17/2019

Gần đây mình mới chuyển qua sử dụng Fish shell thấy tâm trạng cũng vui nên nay chia sẻ một số điều mình làm với Fish Shell xem như cho có bài để viết. Cài đặt Nhưng trước hết cần phải cài đặt nó trước: Cài đặt trên MacOS open...

Đọc trên blog của tác giả

Hãy quên dock đi

Đăng ngày 10/7/2019

Ngày xưa, có một developer nghèo (nghèo lắm), dành dụm rất lâu mới đủ tiền mua một cái Macbook Pro 13", màn hình nhỏ nên làm việc cũng khó, nhưng anh cũng tự nhủ lòng rằng âu thì đây cũng là động lực để bản thân cố gắng hơn nữa...

Đọc trên blog của tác giả

Viết thư viện cho JavaScript với Rollup

Đăng ngày 8/29/2019

TL;DR 1. Giới thiệu Có lẽ chúng ta đã rất quen thuộc với Webpack - một module bundler được dùng rất nhiều trong việc xây dựng JavaScript application. Rollup cũng vậy, nó là một module bundler dành cho JavaScript. Có tác dụng đóng gói những phần code nhỏ thành một...

Đọc trên blog của tác giả

Openlayers là gì?

Đăng ngày 7/2/2019

A high-performance, feature-packed library for all your mapping needs.

Đọc trên blog của tác giả

Console còn gì khác ngoài console.log()

Đăng ngày 6/27/2019

Lập trình javascript có lẽ không ai còn lạ gì console.log. Từ những bài helloWorld đầu tiên bạn đã được làm quen với nó như là những hàm print, log trong các ngôn ngữ khác. Nhưng liệu console chỉ có mỗi phương thức log hay còn gì thú vị nữa...

Đọc trên blog của tác giả

Điều khiển máy tính bằng Google Assistant

Đăng ngày 6/27/2019

Bạn có thể sử dụng Google Assistant để điều khiển các thiết bị điện tử trong nhà, đọc báo và xem dự báo thời tiết thì tại sao lại không thể sử dụng nó để điều khiển máy tính nhỉ. Nay chúng ta sẽ cùng viết một công cụ để...

Đọc trên blog của tác giả

Giới thiệu về Openlayers

Đăng ngày 6/22/2019

Bài viết này mình xin giới thiệu về một thư viện frontend mã nguồn mở dùng để vẽ map. Mở đầu Bài toán: bạn muốn mô tả vị trí của cửa hàng hay cơ sở kinh doanh của mình lên trang web. Giải pháp phổ biến nhất hiện nay là...

Đọc trên blog của tác giả

Viết bash completion với Golang

Đăng ngày 6/17/2019

Khi viết một cli tool cho công ty thì mình gặp một vấn đề: command phức tạp mà người dùng thì lại lười đọc doc, dẫu có đọc thì cũng dễ quên, bỏ qua vấn đề về việc tối ưu lại tên các option, flag này nọ vì số lượng...

Đọc trên blog của tác giả

Task Runner là gì?

Đăng ngày 4/16/2019

Task Runner Đúng như tên gọi của nó, task runner là các chương trình giúp bạn run các task một cách tự động dựa trên một hoặc nhiều điều kiện nào đó hoặc run thủ công do do chính bạn trigger.

Đọc trên blog của tác giả

npx là gì

Đăng ngày 4/15/2019

npx là một công cụ giúp bạn execute các package từ npm registry một cách đơn giản và nhanh chóng. Cài đặt npm install -g npx Ví dụ Run package của riêng project $ npm i -D webpack $ npx webpack ... Run package mà không cần cài $ npm...

Đọc trên blog của tác giả

Built-in Module

Đăng ngày 4/15/2019

Built-in modules are just like regular JavaScript modules, except that they don’t have to be downloaded because they ship with the browser. Like traditional web APIs, built-in modules must go through a standardization process — each will have its own specification that requires a design review and positive signs of...

Đọc trên blog của tác giả

Tìm hiểu Webpack: Cấu hình entry và output

Đăng ngày 4/10/2019

Đây là phần thứ 2 trong series tìm hiểu webpack . Các bạn có thể xem lại bài thứ nhất tại đây . Nếu bạn để ý bài trước, chúng ta có thể chạy lệnh npx webpack mà không cần thêm bất kì config nào. Việc này được hỗ trợ...

Đọc trên blog của tác giả

Tìm hiểu Webpack: Cài đặt cơ bản

Đăng ngày 4/6/2019

Giới thiệu Có lẽ viết về task runner hay bundlers trong front-end development là điều không còn mới mẻ nữa. Mình viết series về webpack lần này sẽ không đề cập quá nhiều đến những khái niệm, nhưng tập trung vào việc cấu hình, giải quyết những tình huống thực...

Đọc trên blog của tác giả

Viết app change wallpaper

Đăng ngày 3/28/2019

Làm gì trong những cơn trầm cảm, lúc mà những nổi buồn-không-lý-do cứ mọc như cỏ-sau-mưa từ khắp hư không mà chẳn có một lý do nào cả. Cả công việc và hưởng thụ đều không đem lại chút cảm giác nào nữa, ngoài sự mệt mỏi. Kể cả những...

Đọc trên blog của tác giả

Chụp hình web với Node.js và Puppeteer

Đăng ngày 3/20/2019

12bit đã có một bài giới thiệu về Puppeteer ứng dụng vào việc scraping dữ liệu. Bài viết hôm nay, chúng ta cùng tìm hiểu một tính năng nữa của Puppeteer đó là screenshot. Đây là một tính răng rất thú vị và hữu ích, bạn có thể thỏa sức...

Đọc trên blog của tác giả

Widget hiển thị số order trên Touchbar với BetterTouchTool

Đăng ngày 3/8/2019

Năm 2016 Apple giới thiệu Touchbar trên các dòng MacBook Pro. Thực ra lúc mới sử dụng nó thì mình cảm thấy nó không có ý nghĩa lắm, vì ít có phần mềm nào tích hợp, các nút có trên nó thì đều có thể dùng chuột được. Sau đó...

Đọc trên blog của tác giả

Lấy dữ liệu web với Node.js và Puppeteer

Đăng ngày 3/4/2019

Một trong những case study mà bạn có thể gặp đó là lấy dữ liệu từ những website khác và lưu vào database của riêng mình dùng để làm những trang như tổng hợp link, tin tức. Mọi thứ sẽ dễ dàng nếu trang nguồn cung cấp API hoặc RSS...

Đọc trên blog của tác giả

Tạo hiệu ứng cho URL bằng JavaScript

Đăng ngày 2/15/2019

Bài viết này tham khảo từ bài Animating URLs with Javascript and Emojis của bạn Matthew Rayfield . Blog của bạn này khá là dị và tất nhiên là ý tưởng trong bài viết này cũng dị không kém. Trong URL có một thành phần là hash, thường dùng để...

Đọc trên blog của tác giả

Tạo HTTPS cho localhost sử dụng mkcert

Đăng ngày 1/7/2019

Ngày nay nhiều tính năng yêu cầu website của bạn phải có HTTPS để có thể hoạt động như Service Workers hoặc một vài payment gateway sẽ không hoạt động nếu website không có HTTPS. Và việc phát triển trên localhost với HTTP có thể gây ra lỗi khi deploy...

Đọc trên blog của tác giả

Các shortcode hay dành cho Hugo

Đăng ngày 1/4/2019

Từ ngày 01/01/2019, 12bit.vn đã chuyển qua blog riêng, xây dựng bằng Hugo thay vì sử dụng Medium như trước. Vì vậy chúng mình cũng có cơ hội để tìm hiểu nhiều về Hugo hơn. Chúng mình từng thử custom lại code của Hugo để hỗ trợ hiển thị danh...

Đọc trên blog của tác giả

Shortcodes

Đăng ngày 12/28/2018

Bên cạnh những shortcode đã được tích hợp sẵn trong Hugo, tụi mình còn build thêm một số shortcode để phục vụ cho việc thể hiện nội dung bài viết được rõ ràng và sinh động hơn. codepen {{<codepen username pen_id height_in_px>}} Nếu không set giá trị height thì height...

Đọc trên blog của tác giả

Lời giới thiệu

Đăng ngày 12/26/2018

Chào các bạn. Đây là blog chia sẻ kiến thức, kinh nghiệm về lập trình. Nội dung chính là về lập trình, phát triển ứng dụng web. Ngoài ra có thể sẽ nói một chút ít về lập trình nhúng, design, .v.v.. Đây không phải là blog đầu tiên chúng...

Đọc trên blog của tác giả

Xử lý khi không load được ảnh bằng cách sử dụng service worker

Đăng ngày 12/26/2018

Có nhiều lý đo dể một website không load được ảnh, ví dụ như file ảnh đã bị xóa, ảnh quá nặng và bị timeout, … Trong những trường hợp đó thì tùy browser mà lỗi sẽ hiển thị khác nhau, có thể xấu có thể đẹp. Bạn có handle...

Đọc trên blog của tác giả

Xây dựng 3D button trong Flutter

Đăng ngày 12/10/2018

2 ngày trước, phiên bản 1.0 của Flutter được chính thức phát hành trong sự kiện Flutter Live. Nhưng cộng đồng đã có thể sử dụng Flutter từ khá lâu thông qua các version beta, thậm chí đã nhiều production application được phát hành, như app Google Ads, Alibaba, NOW...

Đọc trên blog của tác giả

Giới thiệu Go Lambda Functions trên Netlify

Đăng ngày 12/6/2018

Bài viết này mình xin giới thiệu cách deploy một lambda function viết bằng Go lên Netlify. Thật ra chúng ta đang sử dịch vụ AWS Lambda của Amazon, tuy nhiên functions được quản lí thông qua Netlify và bạn không cần phải có tài khoản AWS. Gói miễn phí...

Đọc trên blog của tác giả

4 cách duyệt array mà không cần dùng loop

Đăng ngày 11/28/2018

JavaScript cũng như nhiều ngôn ngữ khác, có rất nhiều cách để giải quyết vấn đề. Có lẽ ai học lập trình cũng đều phải biết rõ những cấu trúc cơ bản như vòng lặp và rẽ nhánh. Và trong hầu hết các trường hợp cần duyệt array thì các...

Đọc trên blog của tác giả

5 application giúp tăng productivity trên macOS

Đăng ngày 11/14/2018

Nếu biết cách sử dụng những công cụ phù hợp và tốt vào công việc thì hiệu suất công việc sẽ tăng lên đáng kể, hoặc ít nhất là có thể làm mình trông ngầu hơn một chút /jk. Trong bài này mình sẽ giới thiệu với các bạn những...

Đọc trên blog của tác giả

Tạo top navigation bar bằng flex box

Đăng ngày 11/12/2018

Nhìn qua nhiều website, chúng ta cũng dễ nhận ra rằng có rất nhiều website chia sẻ một layout giống nhau, trong đo header và footer là giống nhau nhiều nhất:Trong bài viết này mình sẽ cùng nhau hiện thực một menu giống như vậy bằng flex box. Cụ thể...

Đọc trên blog của tác giả

Tự động switch dark mode dựa trên thiết lập hệ thống

Đăng ngày 11/11/2018

Trong phiên bản Mojave, macOS đã hỗ trợ dark mode, khi chuyển sang dark mode, các app có hỗ trợ dark mode đều tự động thay đổi color trong app của mình để chuyển thành dark theme. Liệu chúng ta có thể làm như vậy với web hay không? Trong...

Đọc trên blog của tác giả

Thay đổi giá trị CSS Variable bằng JavaScript

Đăng ngày 10/31/2018

CSS Variable có nhiều ứng dụng thú vị mà bạn có thể đã đọc qua như ứng dụng vào xây dựng theme cho website mà Thiện đã chia sẽ trong bài viết. Bài viết đó chỉ dừng lại ở việc cho phép người dùng thay đổi các theme đã có...

Đọc trên blog của tác giả

Ứng dụng CSS variables để xây dựng tính năng dark theme

Đăng ngày 10/26/2018

Mấy ngày trước mình có xây dựng tính năng dark theme cho trang TIL của 12bit . Ban đầu hướng tiếp cận của mình khá là truyền thống đó là thay đổi class cho body để override lại CSS theo từng theme kiểu như: body.dark { background-color: #222831; } Tuy...

Đọc trên blog của tác giả

Làm việc hiệu quả hơn với Alfred

Đăng ngày 9/30/2018

Ngày hôm nay mình sẽ không nói về những ưu điểm của Mac trong việc lập trình, mà sẽ chỉ giới thiệu về cách mà mình sử dụng ứng dụng Alfred để làm việc hiệu quả hơn, thao tác với máy nhanh hơn mà thôi. Alfred Alfred là ứng dụng...

Đọc trên blog của tác giả

JavaScript: in VS hasOwnProperty

Đăng ngày 8/15/2018

Trong lúc đọc change log của Vuejs thì thấy một commit thay đổi từ dùng in qua hasOwn nên mình cũng tìm hiểu xem nó gây ra lỗi gì và vì sao cần phải thay đổi: https://github.com/vuejs/vue/commit/733c1be7f5983cdd9e8089a8088b235ba21a4dee Hàm hasOwn mà commit sử dụng chính là TypeScript Wrapper của phương thức...

Đọc trên blog của tác giả

Tìm hiểu về Immediately-invoked function expression (IIFE) trong Javascript

Đăng ngày 8/13/2018

Trong bài viết này chúng ta cùng tìm hiểu một cách khai báo function rất quen thuộc trong Javascript. Tuy nó quen thuộc nhưng có thể chúng ta chưa biết tên gọi hoặc cách thức hoạt động của nó nhứ thế nào? Trước khi tìm hiểu về IIFE, chúng ta...

Đọc trên blog của tác giả

Viết Chrome Extension fix lỗi font cho Medium

Đăng ngày 6/24/2018

Font trên web của Medium không hỗ trợ tiếng Việt, nên các bài viết của 12bit.vn khá khó đọc. Bạn cần phải cài extension của tụi mình thì mới có thể đọc được tốt. Nội dung của bài này không có gì nhiều cả. Chỉ là giới thiệu về về...

Đọc trên blog của tác giả

Hiểu sâu về hook trong WordPress

Đăng ngày 6/23/2018

Nếu đã từng code với WordPress thì bạn sẽ ít nhất một lần nghe nói hoặc đã sử dụng hook (add_action(), add_filter()), nó là thứ rất quen thuộc trong WordPress. Chính nó đã đem lại cho theme, plugin và chính WordPress khả năng tùy biến mạnh mẽ mà không phải...

Đọc trên blog của tác giả

Cài đặt WordPress Coding Standards cho PhpStorm

Đăng ngày 6/12/2018

TL;DR Bài viết sẽ hướng dẫn bạn cài đặt PHP Code Sniffer kết hợp với WordPress Coding Standards trên PhpStorm. Tuy nhiên trước khi cài đặt, chúng ta tản mạn xíu. Viết code như làm thơ WordPress có một câu sologan nổi tiếng “Code is Poetry” có thể tạm dịch...

Đọc trên blog của tác giả

Đóng gói toàn bộ website WordPress thành Ebook

Đăng ngày 4/20/2018

Mình thích đọc, nhưng mình lười đọc bằng điện thoại, tuần trước mình có làm một video chia sẻ cách mình sử dụng instapaper và calibre để đóng gói các trang web thành ebook. Hôm rồi mình đăng ký dùng thử trên packtpub. Mình cứ ngỡ là có thể download...

Đọc trên blog của tác giả

Reflect trong ES6

Đăng ngày 3/28/2018

Trước khi tìm hiểu về Proxy thì reflect nghe khá lạ lẫm với mình, nhưng hóa ra thì reflect không phải là API chỉ có trong javascript, sau này mình nghĩ nó chỉ dùng để phối hợp với proxy, nhưng mà mình vẫn sai, hóa ra reflect còn tồn tại...

Đọc trên blog của tác giả

Tìm hiểu về slot và scoped slots trong Vue.js

Đăng ngày 3/26/2018

Trong quá trình phát triển ứng dụng với Vue.js, chắc hẳn các bạn sẽ gặp những trường hợp muốn chèn nội dụng HTML vào bên trong component con giống như cách chúng ta viết HTML thông thường thay vì dùng prop. Ví dụ như: <div class="parent"> <child> <p>Hello from parent</p>...

Đọc trên blog của tác giả

Di chuyển blog từ WordPress.com qua Medium

Đăng ngày 3/24/2018

Mình có một blog bên WordPress.com, đã lâu không viết và cũng quên tài khoản đăng nhập. Dù cũng không còn viết gì nữa nhưng ở trong tình trạng vô chủ đó thì ai biết được nó sẽ đi về đâu. Nên mình muốn di chuyển nó qua một nơi...

Đọc trên blog của tác giả

Reflection trong PHP

Đăng ngày 3/19/2018

Hôm trước mình có thử tìm hiểu về reflection trong ES6, và ngày hôm sau mình gặp một case có thể sử dụng reflection trong php. Nên mình viết bài này để chung ta cùng thảo luận. Trước khi viết bài mình đã tham khảo một vài bài viết dưới...

Đọc trên blog của tác giả

Dùng goo.gl với custom domain

Đăng ngày 3/14/2018

Goo.gl không cho phép sử dụng custom domain như bit.ly và gói free của bit.ly cũng chỉ cho tối đa 500 link mà thôi, nên nếu bạn muốn sử dụng custom domain để rút gọn url mà không muốn tự host thì hãy tiếp tục đọc nhé. Thực ra, chúng...

Đọc trên blog của tác giả

Cài đặt unit test cho WordPress Plugin

Đăng ngày 3/14/2018

Đối với developers thì dường như viết unit test là điều gì đó rất đáng sợ và tốn thời gian. Bạn có thể code một theme hoặc một plugin hoàn chỉnh nhưng bảo bạn viết unit test cho nó thì thật sự là cực hình. Nguôn: Google Tuy nhiên unit...

Đọc trên blog của tác giả

Unit Testing in Vue - The Essentials

Đăng ngày 3/10/2018

Bài thuyết trình của Phan An - Vue.js core team, tại buổi meetup đầu tiên của Vue.js Việt Nam: VueJS Vietnam Meetup #1 . Còn đây là slide http://slides.com/phanan/unit-testing-vue-essentials#/ Và repo của demo phanan/counter-meetup .

Đọc trên blog của tác giả

Công khai localhost lên internet bằng Ngrok

Đăng ngày 3/9/2018

Nguồn: https://www.npmjs.com/package/ngrok Có nhiều lý do để chúng ta cần làm việc này, ví dụ như muốn test app facebook thì bạn cần cung cấp url cho facebook và họ sẽ request tới url đó, hoặc paypal cần một request post về url của bạn để xác nhận thanh toán...

Đọc trên blog của tác giả

Tìm hiểu <polygon> trong SVG

Đăng ngày 3/9/2018

Bài viết này chúng ta cùng tìm hiểu thẻ <polygon> trong SVG. Thật ra bài này cũng rất ngẫu nhiên. Mình chợt nghĩ tới polygon, nên viết một vài điều ra đây. 😂 polygon định nghĩa một hình đóng (closed shape) bao gồm những đoạn thẳng. Điểm cuối sẽ kết...

Đọc trên blog của tác giả

Lấy thông tin app trên Play Store với Javascript

Đăng ngày 3/8/2018

Google không cho phép lấy thông tin của các application trên Play Store vì vậy chúng ta sẽ phải dùng cách rất thông dụng là parse và lấy thông tin từ HTML của nó. Bài viết này sẽ sử dụng Nodejs và một vài thư viện cần thiết mà mình...

Đọc trên blog của tác giả

Tối ưu tốc độ cho site WordPress - Phần 1

Đăng ngày 3/7/2018

Đây là phần tiếp theo trong loạt bài bảo mật và tăng tốc cho site WordPress, dự kiến cũng sẽ là một trong những chủ đề của Saigon WordPress Meetup #23 . Phần 1 hướng tới các bạn đang vận hành những site sử dụng WordPress và không bắt buộc...

Đọc trên blog của tác giả

Thay đổi username trong WordPress

Đăng ngày 3/6/2018

Trong bài Tăng cường bảo mật cho site WordPress chúng ta có đề cập tới việc thay đổi username trong WordPress, bài này nhằm hướng dẫn rõ hơn về cách thực hiện. Nhắc lại lý do nên thay đổi username, việc này cần thiết khi chúng ta vô tình đặt...

Đọc trên blog của tác giả

Viết plugin notification đơn giản cho Vue.js

Đăng ngày 3/5/2018

Bài viết hôm nay chúng ta sẽ cùng tìm hiểu cách viết plugin đơn giản cho Vue có chức năng hiển thị notification thông qua việc sử dụng thư viện notie . Giới thiệu sơ lược Plugins usually add global-level functionality to Vue. Theo như lời giới thiệu trên vuejs.org...

Đọc trên blog của tác giả

Spread operator (…) trong ES6

Đăng ngày 3/5/2018

ES6 có nhiều API mới rất tiện lợi và thú vị. Chúng ta sẽ từ từ tìm hiểu tất cả những API này, nhưng trước hết hãy thử qua một API giúp chúng ta làm việc hiệu quả hơn với các dạng dữ liệu có tính lặp đi lặp lại...

Đọc trên blog của tác giả