Makefile + Docker + Go: Why you should still use Makefile in modern application development

 

A lot of developers started recently in software engineering may have not even heard of the make command or maybe at least they used it to compile a c library but never thought about creating Makefile for there modern Go applications that lives in docker environments

To be fare make and Makefile are old technology developed in 1976[1] and may seem to be not very common today but it need your attention if you have not used it before

What do Makefile do?

Make is a build automation tool, wither you use it to build library, compile program, download dependencies or convert one file to different format, it is simply automation tool that have been battle tested for so long and stile valuable till today.

How Does it fit with Docker and Go?

Recently I have been working on multiple dockerized applications and for the latest one we have been using Go and where trying to automate build/test/publish our docker images and came the suggestion from anther team member to use Makefile my reaction was

Hmm, I have not used Makefile for a while now, I wander if it can help/fit within our modern environment

Lets see how Makefile works?

Makefile is simple it consist of (read more about it in the official documentations[2])

1- variables at the top of the file which you can use latter anywhere as $(VAR)

2- Target: which is the output file/folder of that step as in line #5 the target is folder named i18n-nodejs-3.0.0

3-Commands: List of commands that run to achieve the target

4- Pre-requests: as in line #9 after the : this is the name of another target that should run first before this one

Note if the target exists then it will not execute again so if you run make build where the folder i18n-nodejs-3.0.0 exists it will not download it again

This is a simple Makefile that download a tagged version of my i18n node.js module as zip from github and unzipe it, all of this in a target folder that named as in line #5 i18n-nodejs-$(REPO_TAG) which define the target from that step

Then cd into the directory and run npm install

all of that is automated throw the default target all which command make runs by default because it is the first target in the fire

How to use Makefile to automate Dockerized Go application build/test/publish?

First you need to think about the processes that you do on regular bases and need to automate, in our example this would be

1- building the Go binaries inside docker container

2- move the binary to the production container

3- publish the container

Now have a look on next two files Makefile & Dockerfile

You can see how simple the Makefile describing the jobs that it can do, first the default is the push new release of our application, which depend on building the docker image that use the Dockerfile from the same directory, which depend on creating the executable binary of our Go application

and now all what you need to release new version is type make in the terminal, and if we just want to build the executable we can type make build

as simple as this example looks you can imagine now what is the next level of downloading and extracting extra libraries that you need build the binary maybe have the build image published by itself and used in local to run the application.

Conclusion

That command that was created almost 50 years ago now still valuable and simple tool to automate parts of your application development life cycle, and maybe you should consider it in your next project too.

[1] https://en.wikipedia.org/wiki/Make_(software)

[2] https://www.gnu.org/software/make/manual/make.html

الجواب هو لا

السلام عليكم :)

إلى السهر لوقت متأخر من الليل, إلى فترة الراحة الطويلة في منتصف اليوم, للنقاش الجانبي في ممرات الشركة التي تعمل بها.

للمكالمة الهاتفية التي تعلم أنها ستطول لمدة ساعتين, للحفلة بعد الحفل, للاجتماع إن لم يكن هناك أضافه في حضورك.

يجب أن يكون جوابك هو “لا”

إذا كنت ترغب في إنشاء/تنفيذ شيء مهم، شيء مهم حقا، عليك أن تعتاد على هذا القول.

هذا مختلف عن كونك فنان معتزل الناس من اجل الإلهام, هذا مختلف عن كونك رجل اعمل اعتزل علاقاته الاجتماعية بالأهل و الأصدقاء (هذا انتحار), هذا حول رفض أولئك الذين يريدون وجودك المادي بشكل بشكل يؤثر عليك نفسيا و معنويا و يستهلك من قدرتك علي تحقيق أهدافك.

لأن لن يعطيك أي شخص الوقت الضائع.

لن يأتي لك مديرك في العمل و يقول “سمعت انك تريد أن تصبح مصور محترف, لما لا تأخذ ساعتين من وقت العمل واذهب للحصول علي بعض القطات الرائعة” لن يحدث هذا في هذا العالم ربما في عالم موازي.

بدلا من ذلك ستضطر أن تقول لا لبعض المهام التي تقول لها نعم الآن و الزمت نفسك بها, هذا لا يعني انك متعجرف, بل انك واعي لأهميه الوقت و قيمته, هذا يعني انك علي استعداد أن تضحي ببعض المرح الآن تستطيع أن تحقق الكثير علي الأمد الطويل.

زملائي في العمل و أصدقائي أيضا يدركون أني لا أشارك في الكثير من النزهات, بسبب الالتزامات ولكن عندما نذهب للاستمتاع بوقتنا تكون المتعة اكبر ;)

يجب أن تتوقف عن ذكر مقدار الوقت الضائع منك او الوقت الذي لا تعلم أين ذهب و تبدأ في معرفة وسيله للحصول عليه مرة أخرى.

ليس بالضرورة في الصباح, ولكن أنا متأكد من أنك تستطيع إيجاد بعض الدقائق هناك مع نشاط الصباح.

ليس بالضرورة في الظهيرة, ولكن أنا متأكد من أنك تستطيع إيجاد بعض الوقت مع أستراحة الغداء.

ليس بالضرورة في منتصف الليل, ولكن أنا متأكد من أنك تستطيع إيجاد بعض الهدوء وسط سكون البيت عند نوم الجميع.

لن يظهر لك الوقت فجاه لتنفذ ما تريد يجب عليك القتال من اجل تلك الدقائق, أتمنى لي و لكم دوام الإنتاجية و النجاح.

تلك التدوينة ترجمة لمقال أعجبني علي موقع Medium

Latest updates

Hello :)

From the beginning of the year I only wrote three posts! And that just after I finished a 30 day blogging challenge I said more than one time I will write more and I want to but sure there is a problem.

The problem is not about the content as I have a lot of thing I want to write about both in Arabic and English also tech related and not but it is all about time management.

A lot happens to me now a days I started to work full time remotely in a very exiting company our product is a productivity app to track remote workers performance and we are tracking 1,000,000 hours per month timedoctor.com also i got the most lovely baby girl “Joudy” and she now have 4 months and she takes a lot of my time along with all her mother’s time.

I have a lot I want to share about working remotely and being a geek father both happened almost in the same time and its a crazy ride ever since.

Working remotely is not new to me as I worked on a full project for year remotely and also full time as transition between jobs and managed other people also, that what motivated me to move to full time remotely I recommend every developer to try it for some time as if you did not like it it will enhance your communication skills.

فودافون و السرقة العلنيه

vodafone

السلام عليكم

تجربة جديدة أثبتت لي مدى سوء الوضع في شركات الاتصالات المصرية, محادثة دولية اجريتها اليوم و انقطع الخط اثناء حديثي لسبب يبدوا من الظاهر طبيعي حيث ان الرصيد نفذ.

عندما تنظر الي الهاتف و تشاهد المكالمة انتهت عند الثانية 59 بالتحديد هذا جيد فقد تم ماحسبتك علي الدقيقه كاملة مقدما و تحدثت انت الدقيقه كاملة, لكن ليس هذا ما حدث قبل انقطاع الخط بثوان بالتحديد الثانية 55 يظهر هذا الصوت الالكتروني ليقاطع حديثك قبل انتهاء دقيقتك ليخبرك ان رصيدك لا يسمح للاستمرار في المكالمة و يروج لعرض او خاصية تكلفك المال طبعا للاستمرار في الحديث! و تنتهي الرسالة المسجلة بدقة بالغة في الثانية 59 لتشعرك انك انهيت المكالمة مع انتهاء الدقيقه ولكن تلك الخمس او اربع ثوان تمثل 7% من المكالمة !!

شكرا لا اريد ان استمر في الحديث اريد ان اتحدث فقط الدقيقه التي تم محاسبتي عليها “مقدما” كاملة لما يتم مقاطعتي و اقطاع من وقتي الذي قمت بدفع ثمنه مقدما للترويج لخدمة لم ولن استخدمها, الان انا استمع للاعلان علي حسابي ايضا.

بحسبة بسيطة تلك ال 7% المقطتعة من مكالمتي كم تساوي اذا كانت الدقيقه في حدود ثلاث جنيهات حوال 20 قرشا فقط ليس بكثير علي الاطلاق لكن بعد مكالمة قصيرة غاضبة و واضحة مع خدمة العميلاء قام ممثل خدمة العملاء بتحويل 5 جنيهات لي!! اي اكثر ب 25 ضعف قيمة الوقت الضائع من المكالمة!!!

لان العملية الحسابية اكبر قليلا من 20 قرش من مكالمتي, لنحسبها سويا يقدر عدد مشتركي شبكة فودافون بـ 20,000,000 عشرين مليون فرد لنقل ان نسبة 10% فقط منهم يقوم باجراء مكالمة دولية واحدة في الشهر و مدتها دقيقه واحدة تكلفتها ثلاث جنيهات اذا دخل تلك المكالمات 20,000,000*0.1*1*3=6,000,000

النسبة المقتطعة 7% من هذا الدخل تساوي 420,000 اذا شركة فودافون تقوم بحمله اعلانيه قيمتها تقارب النصف مليون جنية شهريا و نحن من يدفع تلك القيمة.

بالمناسبة تقرير جودة خدمة الشبكات المحمولة عن نهاية عام 2014 من الجهاز القومي لتنظيم التصالات اوضح ان فودافون هي الاسواء من حيث معدلات الانقطاع بين الشبكات الثلاث! ايضا فودافون هي الشركة التي قدمت طلب لهيئه تنظيم الاتصالات لحجب خدمة WhatsApp voice

بالنسبه لي الموقف ساخر جدا نحن من يستمع للاعلان و نحن من يدفع ثمنة, اذا ما العمل, لحين انتهاء المهزله نهائيا لكل من يتعرض لمثل هذا الموقف رجاء قف وطالب بحقك بمكالمة لخدمة العملاء لا تتعدي الدقيقه من وقتك.

سؤال مهم هل هذا هوا وضع و قرار فودافون العالمية ام سرقة و استغلال من مسؤلين محلين.

My first plugin on wordpress.org: Redirect to welcome or landing page

WordPress Plugins

WordPress is a great, flexible and powerful  CMS from my point of view it is the best and i see it is not only me as wordpress powers 23% of the internet, Plugins have a big hand of that powerfulness that wordpress have.

I have used and created plugins for many years now but the strange thing i have not try to publish any of them on the official store of wordpress.org ! not even my latest plugins WordPress static social sharing icons that i developed and use also in this site to speed up the page loading time !!

Today after two days in review i have got the “Request Approved” Email form wordpress.org on my plugin “Redirect to welcome or landing page“, its now live on wordpress.org and you can find it if you searched for “Redirect to welcome or landing page” in your plugins section in your website.

The plugin is easy, simple to the point plugin allow you to set page so users get redirected to it if they landed on your home page or any page or post. It is as simple as that whenever you get new visitor to your home page you may like to redirect him to a welcome o landing page that you promote your work in or give him some offer or ask for his email to join your newsletter.

The plugin have many use cases and a lot great bloggers have used the same concept to get more leads to there news letter of to spotlight there latest work and you to can get the advantage of it by going now to your plugins section in your wordpress site and searched for “Redirect to welcome or landing page”.

The plugin use temp redirection code so search engine will not lose track of your home page content.

Waiting all your feedback, one last time the link is “Redirect to welcome or landing page“.

How to force the client’s browser to clear cache files

keep calm and clear cache

I will write more technical posts on this blog but it will be in English, today’s post will be about common problem when you develop web application depend a lot on JavaScript or changes in design when you release its.

The problem:
You released new version from your site with changes in JavaScript and CSS but the users did not got that changes because the browser cached those files.

The solution:
Add suffix to all JavaScript and CSS files with release date in time stamp format like

<link href="css/main.css?1422439996" rel="stylesheet">

With the considerations that most if not all modern frameworks loads the JavaScript and CSS automatically from single function that you can alter to append the release date time stamp and recommended to read it from config file as it may be part from installation steps.

Explanation:
You have the file main.CSS in your web page and have been cached before when the user visited your web page so when you update the file content the browser will check only on the file name and it not be changed so will use the old cached file.
But when you add the release date as suffix when the user visit your page after the release date the browser will detect new file name so will load it and then cache it till the next release.

Whats next?
The next this is to go and talk with your team on how can you deploy this, if you needed farther details you can contact me directly or in the comments section. Don’t forget the most important thing subscribe to my news letter to get the upcoming posts directly in your mailbox and share this article to help others.