Dual-booting Windows 10/Ubuntu 18

It’s 2019 and dual-booting Windows/Linux is still not an easy feast! Ever since I moved to Apple ecosystem few years ago, I used Mac exclusively for desktops and Linux exclusively for servers and therefore don’t ever feel the need to touch a Windows machine. However recently I found myself occasionally need to have access to a Windows machine to upgrade firmwares, play games and stuffs. So with my Intel NUC, the obvious choice would be to dual-boot between Windows and Linux. My choices are Windows 10 (because I can use it indefinitely without activation) and Ubuntu 18 LTS. But man, dual-booting comes with so many problem. Clock time is off in dual-boot I am on EST timezone. Every time I boot in to Linux the time is correct, but every time I boot into Windows the clock is 5 hours off. Turns out OSes store and retrieve time in hardware clock. However the way they store time is different. Linux uses UTC while Windows use local time. The solution is to switch Linux to use local time, or Windows to use UTC. Full instructions here. Bluetooth keyboard needs to pair again every time When you pair a bluetooth device, the information about the device is stored on the OS, and information about the OS is also stored on the device. When you switch between OSes and pair again, the pairing key on the device is overwritten by the OS. The solution is to use the same pairing key on both systems. It’s not possible to manually change pairing key on Windows, but we can do that on Linux. Full instructions is here, but the basic steps are: Pair all devices on Linux Pair all devices on Windows From Windows, extract pairing keys using Registry Turn off all bluetooth devices, then

DigitalOcean credit expiration policy changed

Yesterday I received a strange email from DigitalOcean: Honestly, I don’t think it’s a good idea at all. Basically they want to change the expiration policy of ALL new and issued credits. You will have a month to use all your remaining credits, or it will be expired. It would be much better if they only add expiration for newly issued credits. As in, older credits will be kept intact. By the way, after a small complain, DigitalOcean gave me $20 credits. That was much better than I could hope for.

Goodbye Dropbox. Hello Google Drive!

Yep, that’s right. I finally made the switch from Dropbox to Google Drive. Dropbox is great. They have awesome and intuitive UI, and still the best UI among competitors so far. Their file sync process is simple but admirable. Instead of syncing the whole changed file, they only sync the difference. Reduce lots of network bandwidth and syncing time. So why the switch? Storage is the biggest issue. Even with edu accounts and lots of extra storage for completing Dropquests, my Dropbox limit is still far less than I need. 27GB is far less than 2PB (yes, 2PB) Google Drive offered. Dropbox used to have edge advantages. Now, not so much. Five years ago, Dropbox is the only choice. Fast and intuitive UI and also the syncing process. Now, Google Drive has almost everything. Camera Upload? Yes. Selective Sync? Yes. Revision? Yes. Sharing? Of course Yes. The only thing that Google Drive does not have is Fast sync. Google Drive still upload the whole modified file instead of only the difference. But my need has changed since five years ago. I used to use Dropbox for my thesis because they have revisions. Whenever I made something wrong, I can easily go to Dropbox and select the right revision to restore. Now I only used cloud storage for “storage”. I no longer need to keep revisions. Therefore, the switch is inevitable. The pace of Dropbox’s innovation. They acquired Mailbox, and killed it. They used to have a great Photo app called Carousel, but also killed it. They introduced a syncing platform for app a few years ago, but it does not directly add any value to end user experience.

What I’ve learned this week: Dropbox, Spark and more

1. Dropbox Dropbox is shutting down its two apps: Mailbox and Carousel. I’ve been using both apps heavily recently. The most important feature of Mailbox is auto-swipe. Other competitors also have similar features, but they require much more effort to setup, while Mailbox only requires tap and hold. Easy like a piece of cake. Auto-swipe saves me from going through 14k+ emails so far. Carousel saved me lots of iPhone space by uploading my photos to Dropbox. I heard that they will integrate important features of Carousel into Dropbox, so I will not miss Carousel too much, compare to Mailbox. Without Mailbox around, I will have to manually setup my filters in a bunch of mailboxes. 2. Spark The different between Spark submission tool and Hadoop is that, by default Hadoop uses all available machines (cores) for a single job, provide that input is big enough to be distributed into all machines. Spark, on the other hand, only use 2 cores for executors and 1 core for driver. In order to run Spark with all available cores, you first need to figure out how many executors there are on your cluster. I wonder what leads to the decision in Spark submission tool design. 3. Miscellaneous It is very hard for me to think about what I’ve leaned by the end of a week. I’d better write and update a draft right after I learned something, when the memory still fresh. Oh yes, I still need to write two meeting summaries for this week, so I’d better get going. Hence the short blog post.

What I’ve learned this week: Let’s Encrypt, Python’s lambda and more

It’s never too late to start a tradition. I haven’t been writing blogs lately. 1. Let’s Encrypt In the ideal world, everyone should be able to do anything without the fear of eavesdropping. 10 years ago, it would be very hard to do this. Personal Computers were not very strong and Internet was slow, therefore HTTPS is reasonably slower than HTTP. Things have been changed. Computers are faster now. Internet speed has been increased exponentially. The only thing that hold HTTPS back is the cost to obtain a server SSL certificate. In my opinion, it should be free because once you have an intermediate certificate that is signed by a root certificate, generating a server certificate is just a piece of cake. Honestly it costs money to obtain an intermediate certificate and maintain supporting infrastructure, and companies usually offset the cost to customers who want to purchase a server certificate. Actually server certificates have been issued for free for over two years by StartSSL, but the process is not simple. You need to sign up an account, verify your email address, verify your domain, generate a certificate signing part on your server, create a request with StartSSL and wait for your certificate to be signed. The whole process could take up to a day, YMMV. And once it’s expired, you need to go over the whole thing again, except maybe verify your email address. With the introduction of Let’s Encrypt, things are getting much better. With a simple git clone command, and another command to run the letsencrypt-auto toolkit, once can easily obtain a server certificate in a blink of an eye (no, actually it takes about a minute). And renewing a certificate could be done using the same procedures. Simple and sweet. Instruction to obtain a certificate. 2. Change

Giới thiệu Virtual Environment trong Python

x-post from kipalog.com Virtual Environments là gì và dùng để làm gì? Virtual Environment dịch nôm na là môi trường ảo :D Cũng giống như máy ảo (Virtual Machine), Virtual Environment thiết lập một môi trường ảo, cho phép bạn nghịch ngợm lung tung với các packages của Python mà không làm ảnh hưởng đến những packages đã được cài đặt sẵn trên Python. Ví dụ bạn muốn thử nghiệm với Django 1.8 trong khi trên hệ thống đang cài đặt Django 1.4 LTS. Cũng giống như việc bạn dùng Virtual Machine để thử nghiệm phiên bản Chrome beta mới nhất mà không muốn làm ảnh hưởng đến phiên bản đang có trên máy. Công cụ tạo ra Virtual Environment trên Python là virtualenv. virtualenv tạo ra một thư mục chứa tất cả những thứ cần thiết (executables, libraries). Sử dụng Virtual Environment như thế nào? Trước hết để sử dụng được Virtual Environment thì bạn phải cài virtualenv cái đã. $ pip install virtualenv Tạo Virtual Environment $ virtualenv [project_name] virtualenv sẽ tạo ra một thư mục có tên là [project_name] chứa tất cả những gì cần thiết. Hãy thử xem nội dung của thư mục này: ./lib ./lib/python2.6 ./lib/python2.6/site-packages ./lib/python2.6/distutils ./include ./bin Nếu trên server có nhiều phiên bản Python (2.x, 3.x) bạn hoàn toàn có thể khởi tạo Virtual Environment với một phiên bản chỉ định: virtualenv -p /usr/bin/python2.7 [project_name] Hoặc bạn có thể tạo một Virtual Environment mà không có các packages đã được cài đặt sẵn (trong trường hợp bạn muốn làm mọi thứ từ đầu: virtualenv –no-site-packages [project_name] Sử dụng Virtual Environment Khởi động Virtual Environment bằng câu lệnh: $ source [project_name]/bin/activate Tên của Virtual Environment sẽ xuất hiện ở phía trước command prompt, cho ta thấy Python đang sử dụng Virtual Environment. Từ

PayPal, reddit, Youtube, … đã lôi kéo người dùng như thế nào

x-post from kipalog.com PayPal, reddit, Youtube hay bất cứ trang nào sống nhờ nội dung do người dùng tạo ra (user-generated contents), dù có nổi tiếng đến đâu thì đều trải qua giai đoạn khó khăn ban đầu: thu hút người dùng. Có nội dung thì mới có người dùng, nhưng có người dùng thì mới có nội dung. Sẽ không có ai đăng video lên Youtube nếu không có ai xem, nhưng để có người xem thì trước hết phải có nội dung cái đã. Những nền tảng trực tuyến, đặc biệt là những nền tảng đòi hỏi sự tương tác giữa người dùng (phía cung cấp nội dung (producers) và phía tiêu thụ nội dung (consumers) thường gặp rất nhiều khó khăn khi bắt đầu hoạt động. Cả producers và consumers đều phải tồn tại và tương tác cùng lúc từ những ngày đầu tiên thì nền tảng đó mới có cơ hội thành công. Vậy những nền tảng đó đã giải quyết bài toán đó như thế nào để lôi kéo người dùng? Dưới đây là 3 phương pháp chính. Seeding and Weeding (nôm na là tự sản tự tiêu) Bản chất của phương pháp này là tạo ra người dùng ảo ở cả 2 phía consumers và producers, đồng thời tạo ra các tương tác ảo giữa 2 bên. Ví dụ điển hình là các trang hẹn hò hoặc bán hàng trực tuyến. Hồ sơ và tương tác (hẹn hò, mua bán) của người dùng được tạo ra tự động, làm cho người dùng mới có cảm giác những trang này đang hoạt động rất sôi nổi. Seeding Demand (tạo cầu ảo) Còn gì thích hơn khi bạn đăng một sản phẩm đấu giá lên eBay và ngay lập tức có hàng chục bid? Khi bạn

Giới thiệu SSH Tunnel và một số ứng dụng

x-post from kipalog.com Liệu đây có phải là động lực để mình viết nhiều hơn không? Hy vọng thế. SSH, viết tắt của Secure Shell, là một giao thức mã hoá thường được sử dụng để truy nhập vào các máy chủ từ xa (đặc biệt là các máy chủ Linux). Hầu hết các máy chủ Linux đều được cài đặt mặc định một chương trình SSH Server như OpenSSH hay Dropbear, sẵn sàng phục vụ các kết nối tới cổng mặc định 22. Ở phía người dùng, có rất nhiều phần mềm để tạo kết nối tới server như PuTTY cho Windows và ssh cho Linux/Mac. 2 phương thức xác thực chủ yếu được sử dụng là mật khẩu và khoá công khai. Sau khi đăng nhập thành công, người sử dụng sẽ có quyền sử dụng shellmặc định hoặc shell được gán cho người dùng đó. Toàn bộ trao đổi qua lại giữa người dùng và máy chủ được mã hoá với giao thức được chỉ định khi kết nối. SSH Tunnel cho phép trao đổi dữ liệu thông qua một kênh mã hoá. SSH Tunnel tuy thiết lập rất đơn giản nhưng lại có rất nhiều ứng dụng. Nếu bạn có quyền truy nhập (không nhất thiết phải là root) tới một máy chủ Linux thì SSH Tunnel sẽ đem lại những lợi ích rất thiết thực. Nếu không thì bạn có thể tham khảo một số server giá rẻ trên trang này: http://lowendbox.com Tôi cũng đang sử dụng một máy chủ dành riêng cho SSH Tunnel với giá chỉ có $15/năm. Dưới đây là một số ứng dụng phổ biến. Trong đó A là máy chủ mà bạn có quyền truy nhập SSH. C là workstation.port_number là một cổng bất kỳ chưa được sử dụng bởi

WordPress Permalink Settings on Windows Hosting

My 2 cents: You should not host WordPress (or any script other than ASP, .NET) on Windows hosting. Try Linux. You will not be disappointed. In case you still want to use Windows hosting for your WordPress, here is a piece of code that will save you lots of time trying to figure out how to update Permalink Settings on WordPress. You will probably got this message: You should update your web.config now. Open FTP and put the following into web.config file (create a new one if you can’t see it) <?xml version=”1.0″ encoding=”UTF-8″?> <configuration> <system.webServer> <rewrite> <rules> <rule name=”wordpress” patternSyntax=”Wildcard”> <match url=”*”/> <conditions> <add input=”{REQUEST_FILENAME}” matchType=”IsFile” negate=”true”/> <add input=”{REQUEST_FILENAME}” matchType=”IsDirectory” negate=”true”/> </conditions> <action type=”Rewrite” url=”index.php”/> </rule></rules> </rewrite> </system.webServer> </configuration> That’s it. You’re welcome.

Interview: Đam mê là chìa khóa thành công cho nghề lập trình viên – Phỏng vấn Hoàng Vũ Tuấn Anh

Mấy hôm trước tôi có trả lời phỏng vấn qua email bạn Hồ Sỹ Hùng ở blog Vinacode. Dưới đây là nội dung đầy đủ (bê nguyên từ đây) “…muốn theo đổi ngành CNTT nói riêng và bất kỳ ngành nào nói chung, điều quan trọng nhất vẫn là đam mê. Không có đam mê mà chỉ làm việc vì cơm áo gạo tiền thì không “sướng”, và khi đã không “sướng” thì đến một lúc nào đó sẽ cảm thấy nhàm chán. Chỉ có theo đuổi đam mê thì công việc mới bền lâu được…” ~ Hoàng Vũ Tuấn Anh Đọc bài phỏng vấn của blog Vinacode với anh Hoàng Vũ Tuấn Anh, nguyên là Kỹ Sư Tài Năng khoa CNTT trường Đại học BKHN, để nghe anh chia sẻ về: Bí quyết để lọp vào top 9 freelancer người Việt tại trang webFreelancer.com Những kinh nghiệm và kỹ năng để bid được nhiều dự án Những thuận lợi và khó khăn khi theo đuổi nghề freelancer Kinh nghiệm xin học bổng Tiến Sĩ tại Hoa Kỳ Anh có thể giới thiệu với độc giả blog Vinacode đôi chút về background IT của mình? Mình là sinh viên khoá K50 lớp KSTN CNTT trường Đại học BKHN. Trước khi vào đại học mình đã từng mày mò làm forum cho lớp cấp 3. Hồi đó chưa có blog và phong trào forum thì vẫn rất sôi nổi. Mình bắt đầu học lập trình web từ trang manguon.com, lúc đó còn chạy ASP. Khi vào đại học thì mình cũng ít làm web hơn mà chuyển sang lập trình hệ thống và mày mò cấu hình server. Năm thứ 4 mình xin làm việc part-time ở công tyCazoodle rồi chuyển thành full-time sau khi ra trường. Được biết ngay trong