This Week I Learned - 2016 Week 30

Looking back to the last week post or you might want to check out the whole series.

How to sort a hash in Perl. However, that is only for one column or key. How about multiple keys or columns? Similar, just with additional criteria.

Why SSH takes a long time to connect? Just update the SSH daemon configuration file.
$ vi /etc/ssh/sshd_config
GSSAPIAuthentication no
UseDNS no

DebOps. A great showcase on using Ansible. Unfortunately, it still did not solve one of the main issue server provision on multiple distros as this only works on Debian or Debian-based distros. Meanwhile, there exists another tool, Molecule, to help testing Ansible under different environments.

Speeding up APT? Use Apt-fast, which is a wrapper for Apt which use different downloader which support parallel downloads.

Good introduction to Vue.js. Note that this is for version 1.0 but the concept still relevant.

How to implement infinite scrolling. Surprisingly the concept is very simple.

Probably the best REPL for Perl, Reply.

This Week I Learned - 2016 Week 29

Looking back to the last week post or you might want to check out the whole series.

One of the issue when using Perl for beginner is to understand and differentiate the usage of referencing and dereferencing used by different data types, especially array or hash. Inspired by this site, the table below (generated by tablesgenerator) shows different way to initiate, reference, dereference, and accessing these data types.


$scalar @list %hash FILE
Instantiating it $scalar = "a"; @list = ("a", "b"); %list = ("a" => "b"); -
Instantiating a reference to it $ref = \"a"; $ref = ["a", "b"]; $ref = {"a" => "b"}; -
Referencing it $ref = \$scalar $ref = \@list $ref = \%list $ref = \*FILE
Dereferencing it $$ref or ${$ref} @{$ref} %{$ref} {$ref} or <$ref>
Accessing an element - ${$ref}[1] or $ref->[1] $ref{a} or $ref->{a} -

Git, the rebasing workflow. Better still, understand the how Git works and learn some Git branching, visually.
$ git fetch
$ git rebase origin/master
$ git checkout master
$ git merge insert_awesome_topical_branch_name_here
$ git push origen/master
$ git branch -d insert_awesome_topical_branch_name_here

Kimchi, web interface to KVM. Didn't realize this exists.

Good HN discussion on creating productive habits. Some of the interesting notes are:
  • Appreciate and be grateful with what you have and stop caring for things that make you unhappy.
  • Use a chess clock to remind you of the time you've spend on doing something else.
  • Set a expected time on how to do a task as works fill the time you've set to do it.
  • Meditation helps with focus.
  • Just get start, leave no excuses of not to start. You finish a task by starting.
  • Habit formation, though daily small steps (in other words, easy) until it's ingrained in you. Which is obtained through persistence and discipline. Remember habit > inspiration.
  • Complete something early in the morning. Something simple. Apply that mindset to your whole day. Also known as pre-game routine.
  • Eliminating the inessential. Minimized and focus on important things. Less is more.

Similar, another HN discussion on can't concentrate on tasks?

  • Low dopamine perhaps? Sleep and eat well. Take care of your mental healthiness as well.
  • Better dateline management.
  • Morning is the best time to work due to glucose level is high when you start your day.
  • You will need a deep work environment.

This Week I Learned - 2016 Week 28

Looking back to the last week post or you might want to check out the whole series.

Great rule when picking up any technologies for your development stack.
If a project is innovative in a business sense, then choose a boring technology. If it is boring in a business sense, then choose an interesting technology.

Newscombinator's best of bookmarks. Every links is worthy your precious time.

Caching your GitHub password in Git. Seriously, do this if you commit early and commit often to remote repository.

The Golden Age of Autodidacts. Don't be a passive learner but instead a self-directed learner. Knowledge workers like programmer should always improve their learning skills. Don't let the feeling of inadequacy stop you, incorporate purpose or meaning in your learning. Start analyzing your learn and work pattern. Adapt and adjust. It's always never too late to start anything.

This Week I Learned - 2016 Week 27

Looking back to the last week post or you might want to check out the whole series.

What is Modern Perl? (via HN). The transition of Perl development motto from TMTOWTDI (pronounced Tim Toady) to TIMTOWTDIBSCINABTE (Tim Toady Bicarbonate). It took them (the Perl community) quite a long time to realize that consistency is not a bad things. Some approaches are really preferable but at least there should be a consistency way of coding, hence coding convention should and would exists in a project or a team.

REPL for Perl? Well, you will have to install Devel::REPL with some customization and workaround. To get started, just install these modules and run these commands.
# Prevent Data::Dump::Streamer failed to install error.
# See https://rt.cpan.org/Public/Bug/Display.html?id=100488
$ cpanm PadWalker 

# Enable command history
# See http://stackoverflow.com/a/28818133
$ cpanm Term::Readline::Gnu 

# Install the REPL
$ cpanm Devel::REPL

# Run the REPL
$ re.pl

# Find the Perl version through '$]' and '$^V' Perl's variables.
$ $]
5.024000

$ $^V
v5.24.0

# Quit from the REPL.
$ exit

How X11 works. Wonderful guide on underlying structure of X Windows System.

Free Perl programming books. Didn't realize there are still a lot of unknown, although quite old, Perl books.

Do you suffer from compulsive hoarding? Then r/datahoarder is for you. Be warned, you will burn some extra money to collect these data.

Probably the minimum Vim settings (compare to this and this) to have a good usage experiences, especially when administrating a server through the console.

How to write defensive Bash script. There is always one rule that I never follow, whic is to explicitly make all variables 'local'. Not a good habit if you want to be proficient at console.

It's the future. Be aware of over-engineered and complex solutions for your application before you decide to adopt it to your technology stack.

Awesome list of Perl resources. While we're at it, should you still use Perl?

It has been a while since I last follow with any CSS standard. For me, the existence of CSS frameworks means that the CSS is a solved issue for web development. One thing I noticed that the CSS box-model have changed these days till we have International box-sizing awareness day which the default 'box-sizing' should be 'border-box'. It seems that the Internet Explorer was rights about the default box calculation.

This Week I Learned - 2016 Week 26

Last week post or the whole series.

What the difference for the Git config option of 'push.default'? To prevent yourself from committing and overriding local branches to remote branches, stick with 'simple' way of 'git push'.

Why you need to support Perl's PSGI?

One of the dilemma faced by any programmer, what should I program? (via Slashdot) Someone if the forum joked that "I know how to post a comment, but I don't know what to say." Funny indeed but true as well. Yes, you can learn one programming language per year, but in the end, it will be quite a waste if nothing is created.

12 years of web programming (via Reddit). Sad but true. Layer of layer of layer of abstraction which in the end, just to produce HTML.


Another approach of subroutine parameters validation in Perl. This is from REST::Client. "Tim Toady" at work here using Carp module.
croak "REST::Client exception: First argument to request must be one of GET, PUT, POST, DELETE, OPTIONS, HEAD" unless $method =~ /^(get|put|post|delete|options|head)$/i;
croak "REST::Client exception: Must provide a url to $method" unless $url;
croak "REST::Client exception: headers must be presented as a hashref" if $headers && ref $headers ne 'HASH';