Hacklist: How AMEX Improve Cancelation Rate

They just put 'member since X/XX' on the card that signal the prestige which the user will lost if they cancel the card.

Here are the source:

...

ps: this is the start of #hacklist series which a compilation of smart trick by others that can improve your business

published at 08/10/2020 by Izwan Robotys tagged under: #hacklist, #retention, #amex and #membership

Project Management Tools Chronicles

Rasanya dah lebih 2 bulan saya guna JIRA untuk uruskan projek-projek bawah tanggungjawab saya. Ingat balik, rasa macam tak logik sebab dah 10 tahun kerja dalam bidang programming tapi tak pernah properly pakai project management tools sebagai solo ataupun dalam pasukan.

Skrinshot JIRA. Ni bukan saya punya

Boleh kata ini kali pertama pakai. Lagi aneh sebab tanpa pengalaman, maka agak susah untuk pakai tools yang sedia ada.

Setakat ini dengan JIRA kerja memang bergerak. Ahli pasukan boleh tahu dan uruskan kerja masing-masing dan project manager boleh nampak progress dan kejar item yang due atau pending. Namun ada 2 bab yang buat saya rasa tools ni tak memberi gambaran yang betul.

Bab 1: Mengabaikan "Langgar Deadline".

Saya tak tahulah PM (Project Manager) lain, tapi saya yang first time jadi PM ni memang tak tepat sangat jangkaan siap satu-satu kerja. Terlalu 'optimis' dalam bagi deadline. Akibatnya semua kerja memang akan langgar deadline.

Dalam JIRA (fungsi Roadmap), cara biasa untuk tunjuk yang status sudah lebih deadline adalah dengan menukar warna timeline kepada merah. Tetapi itu tidak menerangkan 'berapa lama sudah lebih deadline'. Apabila kita ubah deadline ke hadapan, kita hilang pula maklumat bilakah deadline yang asal. Sekarang ini, saya akan merahkan timeline yang telah dilanggar dan tambah timeline baru dengan nama yang sama tetapi dengan deadline yang baru. Konfius kan? :-D

Bab 2: Lump Sump semua task dalam satu timeline.

Apabila kita letak satu timeline dalam roadmap, tidak ada cara untuk kita lihat 'history' status setiap task. Task yang pertama mulanya bila, siapnya bila. Task berikutnya apa ceritanya pula. Perkara ini penting sebab sukar untuk kita tangkap isu yang sedang berlaku pada setiap task jika tak nampak pergerakan status task tersebut.

Jadi satu hal pulak nak bukak tools lain untuk tahu exact update. Dalam kes aku, satu hal nak kena roll call tiap pagi-petang untuk kutip update dan maintain satu excel untuk keep track updates tersebut. Kenapa tak boleh buat benda ni dalam Jira tu je?

...

Dua benda ni membuatkan saya tercari-cari tools lain tetapi semuanya lebih kurang sahaja. Kenapa jadi begitu? Kerana semua tools tersebut menggunakan konsep pengurusan project yang sama: Agile Dev. Dah satu kerja pulak saya nak kena belajar Agile dan ajar pulak team konsep tersebut untuk guna tools yang sedia ada.

Dengan pengetahuan saya yang terhad (hasil google ja ni) nampak macam Agile ni berat kepada planning dan 'go with the flow'. Macamana ia uruskan 2 bab di atas? Kurang jelas di situ.

Itu yang membuatkan saya cuba cari konsep lain untuk uruskan projek. Konsep yang nampak macam 'boleh pergi' adalah konsep 'Timeline' itu sendiri. Jika setiap feature ada 'timeline', maka setiap task untuk features itu ada 'updates' pula. Updates ini adalah maklumat perubahan status task tersebut beserta timestamp status tersebut berubah. Dari segi visual, kita boleh overlay update ini dalam bentuk 'dot' atas 'line' timeline. Jelas boleh nampak di situ. Kita boleh kata yang 'line' adalah timeline yang kita budget manakala 'dot' adalah aktiviti sebenar. Maka kita boleh nampak dengan jelas jika berlaku 'langgar deadline' di situ nanti.

Lain-lain idea tambahan:

Idea #1: Ada view khas seperti To Do / Backlog list untuk setiap ahli pasukan. Jadi mereka hanya fokus pada kerja mereka sahaja semasa 'in the zone'. Tak daklah distracted dengan segala macam 'big picture' pada paparan Roadmap.

Idea #2: Ada sistem untuk uruskan 'kerja yang bukan roadmap' seperti hotfix (bug) atau incident (firefighting) sebagai satu task yang berasingan. Ini kerana daripada pengalaman memang selalu sangat benda-benda terkejut ni mengganggu timeline yang telah dirancang. Semua itu adalah perkara yang tidak boleh dielak maka kenapa ia tidak jelas pada paparan roadmap? Kemudian hari kita boleh overlay dot untuk hotfix atas timeline dan kita akan nampak bahawasanya lompong pada roadmap itu sebenarnya diisi dengan hotfix.

Idea #3: Sistem 'watch' yang akan alert mereka yang watch dengan update untuk roadmap atau task tersebut. Ini mudah untuk PM monitor progress kerja.

Idea #4: Fungsi 'Remind' yang membolehkan PM alert programmer pada roadmap atau task khusus. Ini akan buatkan programmer lebih alert dengan kerja-kerja yang pending.

Idea #5: Kanban boleh di KIV. Ia nampak cantik tapi in reality tidak cukup 'condensed' untuk paparan laptop. Boleh ganti tukar dengan paparan To Do list yang compact tetapi fleksibel jika perlu maklumat yang lebih detail.

Idea #6: Status yang menunjukkan progress

  • backlog (ready and not due this week)
  • due (due this week)
  • in progress
  • kiv (will continue later)
  • done
  • canceled

Idea #7: Perkenalkan konsep Squeeze yang akan berlaku apabila due date dah dekat atau deadline dah dilanggar. Maksudnya team akan stop buat lain dan rush siapkan banyak pending task dalam masa yang pendek. Nama squeeze tu sesuai sebab ia buat kita sedar yang itu adalah perkara yang kita tidak suka. Jadi manager dan team akan lebih ambil berat apabila due date dah lekat. Lesson learned.

Idea bagus. Nak buatnya bila?

Satu soalan yang tiada jawapan.

Bertabahlah.

published at 07/10/2020 by Izwan Robotys tagged under: #project management, #jira, #git and #timeline

DIY Wordpress in DigitalOcean

Once upon a time, you need to do your wordpress installation with a dirty hands.

SSHing to the VPS and install everything.

Nowadays, we've got One-Click-Install equivalent in Digital Ocean.

But i never find the install is satisfactory to the way that i use wordpress.

For a dev who hates to manage wordpress, somehow someway it will come back and bite you.

So this is my checklist after successfully installed Wordpress to my liking in a new instance of DigitalOcean.

The Checklist:

  • Buy the domain name. I've used namecheap for so long, it was not checap anymore.
  • Initiate DO with Ubuntu 18.04 LTS. Why not 19.04? well, no specific reasons. Please try and let me know.
  • Make sure to include your public ssh key in the initiation.
  • SSH as root into Ubuntu. Password should be emailed to the current DO user account.
  • create new sudo user for next operation. Never lose the password! This user will also be the FTP user account
  • Install apache2 from apt-get if necessary
  • Check the apache installation. Go to the ubuntu ip over the net. Should see Apache default page. Ip was shown in DO Instance list, or you can just ifconfig in the terminal.
  • Go to DNS (mine was namecheap) and add the ip address to your domain of choice. In 1-24 hour, the domain name will resolved to ip address and you should see the apache default page too if the wordpress installation was not done yet.
  • Install PHP from apt-get
  • Install MySQL from apt-get
  • Run MySQL secure install. Remove all test data and change root password
  • Enter MySQL, create table for wordpress and its corresponding user-password. Don't forget to FLUSH PRIVILEGES
  • Go to sudo user home (~), mkdir html and cd into it
  • Now inside /html wget latest wordpress installer from wordpress.org
  • Unzip the installer, you will have /home/sudouser/html/wordpress now.
  • Copy /etc/apache2/sites-available/000-default.conf to /etc/apache2/sites-avalable/domain.com.conf with your domain accordingly
  • Nano /etc/apache2/sites-avalable/domain.com.conf
  • Change the root directory to /var/www/html/wordpress and put your domain name as ServerName
  • Save and exit Nano. a2ensite the vhost config to enable it. Reload apache to make it in effect
  • soft link (ln -s) the /home/sudouser/html/wordpress to /var/www/html
  • Open the domain in browser and wordpress installation will start. Change username admin to something else.
  • Proceed with wp-config. Use MySQL db user details. Please change wp prefix to something else
  • Change file permissions accordingly (644-600-755). Wp-contents to 775
  • Change file ownership accordingly (www-data!)
  • Add .htaccess file to allow beautiful permalinks to take effect
  • Install vsftpd
  • Test login FTP
  • Test wordpress install plugin with FTP login. Debug accordingly (cannot create dir => dir permission)
  • Try Install security plugins (Sucuri)
  • Try install themes
  • Try upload file in wordpress media
  • Make sure all wordpress upload and install is good to go
  • Install SSL with letsencrypt/certbot. Make sure it crons renew every week
  • Done!

Bonus: there is always a need to have an email account behind the domain to make it more legit.

NEVER EVER install mailbox in the web server.

The best is use a paid email services such as Gmail or Zoho mail.

But as i am that cheap, i use free alternative to them. We got Yandex and Migudo. Both are straight forward to use.

One glitch with Yandex: the verification need to be done BEFORE doing https, as it defaulted to look for http only.

With migudo, it is rather straight forward affair. Done setting up in 15 minutes and waiting for about 3 hour before the MX record was recognized and fully functioned.

Migudo guides is simple and clear enough to follow effectively.

Migudo also provide IMAP and SMTP configuration to be used accordingly. How nice!

And after all that, the domain is now ready to roll for the next phase: Design and UI/UX

Maybe another checklist for UI/UX for the next time.

Cheers~

published at 23/07/2019 by Izwan Robotys tagged under: #wordpress, #digital ocean, #vps, #ubuntu and #ubuntu 18.04

List of Viable Alternatives to CPanel

Recently got an interesting problem to look for by a friend: as a non-linux user, what is a viable alternatives to CPanel as GUI based server management system?

Surprisingly it can not be answer shotly and sweetly. It seems so convoluted and complex.

This write up are my raw thought process on the topic.

Firstly, we need to have a checklist of what we want to do in the server.

And best we have and ideal workflow on how to achieve it.

As an overview, we need to be able to:

  1. Account management to create user and its corresponding access
  2. Manage domain with its corresponding root directory
  3. Run a PHP script, latest version is the best with standard basic module enabled
  4. Run Wordpress, Codeigniter and Laravel as prerequisite
  5. Have a MySQL database in stock configuration with basic security
  6. MySQL editor to manage data in the database
  7. FTP to manage files upload and etc.
  8. Email account that tied to the domain
  9. Email interface with basic email management features
  10. SMTP to allow system to send email out
  11. SSH keys management so root user can access the bare metal
  12. Git and Composer installed to enable continuous integration
  13. Update and upgrade OS patch, PHP patch, MySQL and Web server of choice

Well, thats a handfull.

Now, lets get a list of all available CPanel alternatives:

  • Webmin
  • Virtualmin
  • ISPconfig
  • Directadmin
  • Plesk
  • CentOS Web Panel
  • VestaCP

Aaaaannnd after found VestaCP in the list, i think i gonna start trying it.

Reason: nice UI and seems like ticking all the 12 checklist above.

Lets go VestaCP!

UPDATE (2019-07-23)

Not using VestaCP anymore due to Need to purchase premium plugin for File Manager and FTP.

So, right now back to rambo mode: SSH into ubuntu and install and config whatever i want.

Stay tuned for checklist and pointers on that.

published at 18/07/2019 by Izwan Robotys tagged under: #cpanel, #server management, #vps and #vestacp

Use Different SSH key For Specific Git Repo

Podcast Time!

This been haunting me for a long time.

To have a multiple account in the same git repo provider, say Bitbucket, you will encounter an issue where you cannot upload the same ssh key (id_rsa) to both account.

Bitbucket will reject it. And it is reasonable to do so.

All this while my solution was to generate new key (new_rsa) and use ssh config to specify that key.

The problem was it needs a modification in the origin url. Which means it needs quite a time to understand it (by noob like me) and even more time to setup with trial and error (again by noob like me).

There are an easy solution.

We can just specify in the git config which key file we want it to use for the current git repo we are in.

The command are as simple as:

git config core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F /dev/null"

Tested in windows git-bash version 2.16.*

So, i suppose it will work for others too.

Cheers~

published at 30/04/2019 by Izwan Robotys tagged under: #web design, #git, #ssh, #bitbucket and #programmer