Showing posts with label rest. Show all posts
Showing posts with label rest. Show all posts

This Week I Learned 2018 - Week 48

Last week post or read the old stuff instead.

What is this console app that always gave me a conflicting experience every time I use it? ImageMagick. Besides the forking of GraphicsMagick, the use of complex XML format (surprising for a 28-years program at the time of writing) as its configuration settings, it always failed when processing large number of files that exceed its default threshold values. Tweaking it with different settings or disabled it did not resolve the crash issue. Switching to GraphicsMagick yielded the same result. The workaround was convert each image file to PDF in parallel manner and merge all PDF files as single large PDF file.
find . -name '*.jpg' | parallel --progress convert {} {.}.pdf
pdfunite *.pdf scanned_doc.pdf

Does Webpack, Docker Machine, through Virtual Box, and Unix-based host OS work well? No, not really when come to watching changes of files and hot reloading. First, Inotify, the Linux kernel subsystem which notify file changes to application is not and will not be supported in Virtual Box. How about we switch to VMWare? Nope, not supported either. Switching Webpack's watch method to polling have its own issue as well, CPU usage and hot reloading depends on frequency of polling. The key is find the acceptable polling interval. Off course, there are workarounds but not to my liking. If you read carefully, optimal solution using Inotify does not work because the limitation of shared folders through Network File System (NFS) and how file changes event is not communicated between Docker's host and container.

What to consider when designing RESTful API for third parties usage? There are four rules: (1) Use API keys for every request endpoint, (2) Regulate usage through rate limiting using HTTP 429 and API key instead of IP address, (3) Revoke API key if there are usage violation but provides API for client to check rate limits, and (4) Use other means to validate authentication and authorization beside API key.

What are the differences between COALESCE and IFNULL in MySQL? There are several but COALESCE is the preferred choice because (1) It's a standard and should works across multiple DBMS (but do we switch DB that often?), (2) COALESCE support multiple arguments until it can find the first non-NULL value but IFNULL only  support two arguments, and lastly (3) IFNULL is slightly faster than COALESCE. Interestingly, undefined value (1/0) is considered as NULL or missing value.
mysql > SELECT IFNULL(1/0,'yes');
mysql > yes

mysql> SELECT COALESCE(1/0,'yes');
mysql > yes

What is the equivalent of `which` in Windows? `where` as shown below.
C:\where notepad
C:\Windows\System32\notepad.exe
C:\Windows\notepad.exe

This Week I Learned 2018 - Week 37

Something from the archive or last week post.

If you want to do a YouTube video on tutorial on photography, how should you do it? So far, nothing can top this video. Well choreographed, interesting topic, and relevant demonstration on applying Morandi (a famous 20th century Italian still life painter) colour style in your photography. What impressed me was the tutorial was not focusing on the post-processing but instead stressed on the importance on scene selection and model's clothing choices. Sometimes, you can't simply post process (photoshop) everything.


How easy to setup development workstation in Ubuntu these days? In seconds, if you exclude the time needed to download all the packages. I've been looking into TypeScript, React, and VS Code these days and it's the right time to setup a new development environment through Ubuntu's Snap.
$ sudo snap install node --channel=10/stable --classic
$ sudo snap install vscode --classic
$ sudo snap install --edge typescript --classic

What is the best approach to read a book? Reading with a pencil  (via HN) or also known as marginalia. The idea is simple, you're basically collaborating with the book author by scribbling down your questions, thoughts, and ideas in the free margin space (limited for some books). In other words, purposeful annotations while reading or active reading (suitable for research papers but not some book genres where you read for leisure).  Also, such reading method is not applicable for ebook reader (yes, reMarkable exists but the steep price does not justify it), which still does not provides a good paper experience for doodling.

Is JQuery dead? Not yet but soon, probably within these few years. Reading through the blog post by Github Engineering on removing JQuery from Github frontend, little have I realized that the frontend (JavaScript) have matured enough to deprecate JQuery. What does this indicates? The web have move beyond the dreadful old incompatible Internet Explorer versions, which the main reason of the existence of JQuery project. What next? TypeScript becomes ES Next (maybe?) and the standardization and popularity of custome web components. One thing for sure, old things will be rediscovered, reimplemented, and rehyped again and again, as usual. Same old same old. (ง'̀-'́)ง

How to teach yourself hard things? (via HN) Alternatively, the Richard Hamming tackled this in his The Art of Doing Science and Engineering: Learning to Learn course and Edward Kmett in his Stop Treading Water: Learning to Learn lecture. Furthermore, comments in HN provides us with a few good gems in area of exercising, programming, or physics. However, this is only applicable for those who are discipline, having intrinsic motivationgood quality sleep, and don't get burn out (you will eventually). In short, learning will come naturally if you interested in tackling the problem itself. Time is limited, pick your battle wisely.

Why Microsoft Word is a better writing tool than LaTeX? Reading through the post by Thorsten Bell on the tools he used to write his book (via HN) reaffirms the mistake I've made when typesetting documents, books, and thesis using LaTeX, ConTeXt, and pandoc. Fancy tools may distract you from doing what matter most, writing itself. If the writing is difficult, we can be sidetracked through fiddling with these tools under the pretense of productive procrastination.That's why, a slow and noisy typewriter (surprise that it's still expensive these days) was such an efficient tool for writing. You can't do nothing else but type or write. Which is why so many distraction-free editors exists in these Interweb days.

Why I still love PostgreSQL after all these years? 100-plus of custome data types (even table and view can be as well) supported in the database itself (via HN). Programming languages can change numerous times for a long maintained systems. Not sure for the database system. Some developers prefer strongly typed programming languages, but they seldom look into database systems with custome data types support.

How do we test web service API through console or command line? (via HN) There are so many choices like Strest, Newman (console version of Postman), shakedown (Bash script), karateDSL, UnRAVL, Artillery, and Tavern (Python-based). Coming from console background, I have preference for shakedown and Tavern due to its simplicity.

To rent or buy a house? HN user isostatic gave a practical answer to this question. Buy if you're investing, having kids, or don't want to be forced to move. Rent if you don't want to maintenance the house.

What is the symptom of midlife crisis in a good way? Extreme athleticism. (via HN) One key point I agree with the writer is that we're preparing for the coming old ages as highlighted in this quote. Interesting days ahead.
...... extreme fitness is less about being young again and more about building yourself up for the years ahead. In other words, getting better at getting older.

This Week I Learned 2018 - Week 22

Last week post or something else instead.

为什么同级相斥,异级相吸呢?这不是指磁铁的原理,而是可以用来形容两个同样作风的领袖都会同样排斥。客观的见解来看待各国领袖的作风。

It actually dawned to me that `eval` is quite similar to try-catch block. If your language did not have the support of try-catch exception handling, `eval` (yes it's evil) is your friend. Even Try::Tiny have its own issues. Perl is really a f-up programming language.

VS Code can do that? (via HN) I still haven't have time to install VS Code in my lappy and set up all the necessary configuration and settings.

What's the point of Perl's map? To transform list without using for (each) loop. Is as simple as that and yet we still having hard time understand that? Another good discussion on different between `map` and `grep`, the former is to process a list, the later is to filtering a list.

Containers according to xkcd. Sometimes the simplest solution is the best solution.

30 is too old for tech job in China. (via HN)

REST API tutorial. Yes, I've done a few wrapper for third parties API and two common issues are not up-to-date documentation and inconsistency, especially when handling different HTTP responses.

Block EU users from accessing your site due to complication of implementing GDPR. Brilliant or just simply crazy. And then you have the GDPR compliance checklist or search through the whole GDPR legislation document instead from the original source or community curated info. GDPR is probably the best things that happened to protect user privacy and reduce the abuse of any organizations on handling our personal data.

"Just write. You'll find your own voice". Probably the best common advice given to anyone who wish to become better at writing. For something related to writing, Janki Method, an approach to learning. When you learn something new, write it down but in an approach of question and answer. Maybe you can use a flash card or something.

Stack Overflow for Team. Interesting, very interesting indeed. I chuckled when I saw this feature was released. Wonder how it likes to re-implemented someone else features. Yeah, we should see things from both ends. DRY can be violated if necessary, only if necessary.

Yeah, making money is nothing but how much you care about making money (emphasis added).
Caring a lot about specifically making money is, in my opinion, absolutely key to making money, because otherwise you just end up focusing on other things (family, pleasures, ideals, etc.). If I wanted to make money, I'd design a very different thing in a very different way compared to if I wanted to make something me and my circle of friends would find useful. These things are practically disjoint.

This Week I Learned 2017 - Week 51

Last week post and something from the past.

One more week to go before the end of 2017.

The breeding process ended up with failure and our beloved one ended up in casualty due to stress and infection. Nevertheless, hard lesson learned and time to wipe out the whole population and try again.

Fender or Squier? Made in America (MIA), Mexico (MIM), China (MIC), or Indonesia (MII)? Is the year end now and there are plenty of sales going on at the local music store to clear the old stock. Found a Fender Standard Stratocaster Satin MIM with a good bargain price but how does it compare to Squier Vintage or Squier Classic Vibe? The price differences is negligible but the MIM Strat is pretty much the closest you can get to a MIA Strat although there are still quite a few differences.

When comes to Squier Strat, the rank of all Squier models according to the quality (worse to best) as follows: Bullet, Affinity, Standard, Vintage Modified, Deluxe, and Classic Vibe. If you've a budget constraint and still want to get something worthwhile, get the Standard Strat. If not, go for Classic Vibe Strat, especially the '60s if you like the classic rock. The build quality definitely worth it.

During my travel, pleasant surprise to find a Squier Vintage Modified Surf Stratocaster. While I'm not a fan of the looks of the pickups, the Duncan Designed LS-102 lipstick seems unique and new to me. Unfortunately, my tight schedule prevented me to taking her for a drive. Clearly, one of the six unique Squiers you need in your collection.

You have to have a system. The more you read, the darker it gets.

When integrating with different systems, the unit test have save my arse for so many times. Changes in the web service API and lack of support of Unicode. Encountered this error message while checking the log, "HTTP::Message content must be bytes ......", it seems that the web service API calls were having issue sending and receiving HTTP request and response in UTF8. A simple Unicode conversion when making HTTP request (encoding) and receiving HTTP response (decoding) should fix the issue. Surprised that REST::Client does not have handler to handle the HTTP request and HTTP response body content.

$req = HTTP::Request->new(POST => $endpoint);
$req->content_type("text/plain; charset='utf8'");
$req->content(Encode::encode_utf8($utf8));

Judge Archer, ironically, the commentary is far more interesting than the movie itself.

It just dawned to me that this is so true. The lack of fundamental music theory is going lead you to great misunderstanding.
Most lead guitar parts are not chords. Typically playing in a band context will create a chord from multiple instruments, but that isn't always the case.

This Week I Learned - 2017 Week 18

Last week post or you want to read through the whole series.

Since the prevalent of Internet these days, we're more connected that ever. And yet, we're even more isolated. More and more shopping malls and residential areas are being built especially around the transit stations. Basically all looks the same and people are discourage to travel to another town anymore because everything is available either online or at your nearest malls.

Sick. Down with fever. It has been a while since last time. No one but myself to blame. For people around my age, good rest and food is a way to healthy life. We're not seeking prolonged life but prolonged health.

#1 So, what's your Plan B? Good discussion from the comments. While there is some sort of discrimination against older programmers, but the reality is older programmers may just burn out or bore doing the same mind-numbling stuff over and over again. Yes, the same sh*t but different day. Not everyone have the opportunity to work meaningful projects (yes, subjective view), but most of us just work on some glorified spreadsheet or database skin. You see the same mistakes repeated over and over again from different systems and it's just pointless or bother to raise it up again.

#2 On becoming a low-level programmer. There is a curated list of information especially on the hardware part.. There is also another list of learning the fundamental of computer science. So many things to learn and explore and yet, so little time. Sometimes the reality of life commitments limit our choice on the thing we want to pursuit. I need to finish everything by July before I can start to clear the list from my bucket list. One step at a time. Follow the system.

#3 First, make it work, then make it right, and finally, make it fast. Get the thing to work first before you're thinking about making it right (giving the right name) and optimize it. Fulfill the requirements of the stakeholders first (prototyping) before you're looking into doing it right and fast. Something I need to remind myself constantly as we're often obsess with perfection. What's the point if your build it the right way and fast but does not meet the stakeholder needs?

#4 How to write a REST client in Perl. Most Perl modules have limited documentation, for example, little example on how to use the APIs. This is where PHP (it has been so long since I mentioned something about PHP) really shines. As the language is slowing dying, there are little or no good example on how to start something up fast.

Meanwhile, something rather interesting about Perl. I've seen quite a few Perl codes with subroutines that prepended with ampersand (&) operator. Basically, the ampersand is needed if you're calling a subroutine before its declaration. Off course, there are many other reasons and usages to use the ampersand, but commonly as reference to a subroutine.
&hello;

sub hello {
    print "hello";
}

When using OO with Perl, you will need to instantiate the constructor or method invocation through the arrow (->) operator (a reference). Good examples given below.

Using the arrow notation or virtual method.
my $apple = Fruit->new("apple");
$apple->get_price('usd');

Using the double colons notation or static method.
my $apple = Fruit::new("apple");
Fruit::get_price($apple, "usd");

However, to invoke the method either statically or virtually, you'll need to write the constructor as follow.
sub new {
    my $self  = shift;
    my $class = ref($self) || $self;
    return bless {}, $class;
}

#5 "error: src refspec master does not match any." Silly me. You need to commit something locally before pushing to remote Git server.

#6 Tiny Python Notebook. Definitely not tiny but quite comprehensive guide to Python 3.6.

#7 How to unstage all staged files in Git? It's so easy that the best answer is not upvoted enough.
$ git reset

#8 Postgres Weekly. When come to FOSS database choices for web application for Intranet application, I'm strong opinion that PostgreSQL should be the default choice. Feature like Range Types and others solves quite a lot of issues and save lots of developer-hours. Yes, MySQL has its own usage, but for any business application which involves monetary and strong ACID compliance, it's not a right choice.

PayPal's REST API

Welcoming changes from PayPal. Looking forward to the new REST API which is unfortunately only for US-developers only. Also the new simplified looks of the developer documentation (inspired by Stripe, read this if you want to know what the fuss about Stripe). They should have bought the Stripe instead. Going to try this out in coming weeks.