Nikola Brežnjak blog - Tackling software development with a dose of humor
  • Home
  • Daily Thoughts
  • Ionic
  • Stack Overflow
  • Books
  • About me
Home
Daily Thoughts
Ionic
Stack Overflow
Books
About me
  • Home
  • Daily Thoughts
  • Ionic
  • Stack Overflow
  • Books
  • About me
Nikola Brežnjak blog - Tackling software development with a dose of humor
Miscellaneou$

Self-Hosted Image Upload and Resize Script in Go

Recently I researched solutions for image upload and resizing, and I’ve looked at a few open source solutions and settled for this one: picfit.

It’s written in Go, it’s simple to set up and use, and it has S3 support out of the box.

The official introduction tutorial is here. However, I’m going to outline my steps here as well since I installed it on my Digital Ocean droplet differently than it’s written in the tutorial.

Installation

I’m using DigitalOcean for all my testing. If you signup using this link you’ll get 10$ which will be enough to run a test ‘droplet’ for two months.

My Droplet runs on Ubuntu, so I installed it by following the official Digital Ocean tutorial:

Install Go

sudo apt-get update
sudo apt-get -y upgrade
sudo curl -O https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz
sudo tar -xvf go1.8.linux-amd64.tar.gz
sudo mv go /usr/local

Add Go to the PATH variable

Aappend this line to the ~/.profile file:

export PATH=$PATH:/usr/local/go/bin

Enable terminal to pull new settings

source ~/.profile

Download picfit

  • Create new folder for Go programs: mkdir $HOME/work
  • Set the path to it in the GOPATH variable: export GOPATH=$HOME/work
  • Get picfit via go: go get github.com/thoas/picfit
  • Make a build:
cd ~/work/src/github.com/thoas/picfit
make build
cd bin

Set the configuration

Create the config.json file inside the bin folder:

{
  "port": 3117,
  "storage": {
    "src": {
      "type": "fs",
      "location": "/home/nikola/work/src/github.com/thoas/picfit/bin"
    }
  },
  "kvstore": {
    "type": "cache"
  }
}

Run it

Finally, run picfit with: ./picfit -c config.json

If everything goes fine you should see an output like this:

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:    export GIN_MODE=release
 - using code:    gin.SetMode(gin.ReleaseMode)

[GIN-debug] GET    /stats                    --> github.com/thoas/picfit/server.Router.func2 (10 handlers)
[GIN-debug] GET    /redirect                 --> github.com/thoas/picfit/views.RedirectView (16 handlers)
[GIN-debug] GET    /redirect/*parameters     --> github.com/thoas/picfit/views.RedirectView (16 handlers)
[GIN-debug] GET    /display                  --> github.com/thoas/picfit/views.DisplayView (16 handlers)
[GIN-debug] GET    /display/*parameters      --> github.com/thoas/picfit/views.DisplayView (16 handlers)
[GIN-debug] GET    /get                      --> github.com/thoas/picfit/views.GetView (16 handlers)
[GIN-debug] GET    /get/*parameters          --> github.com/thoas/picfit/views.GetView (16 handlers)
[GIN-debug] Listening and serving HTTP on :3117

Usage

Copied from the official tutorial:

http://localhost:3117/{method}?url={url}&path={path}&w={width}&h={height}&upscale={upscale}&sig={sig}&op={operation}&fmt={format}

  • path – file path to load the image using your source storage (optional, if you haven’t configured a source storage)
  • method – operation to perform: display, redirect or get
  • sig – signature key which is the representation of your query string and your secret key (optional, if you haven’t configured a secret key)
  • url – url of the image which will be retrieved by HTTP (optional, if path is provided)
  • width – desired width of the image, if 0 is provided the service will calculate the ratio with height
  • height – desired height of the image, if 0 is provided the service will calculate the ratio with width
    upscale — If your image is smaller than your desired dimensions, the service will upscale it by default to fit your dimensions, you can disable this behavior by providing 0 (optional)
  • format – output format to save the image, by default the format will be the source format, for example, a GIF image source will be saved as GIF (optional)

Examples

The links are for your localhost (change to your IP if you’ll be testing this somewhere else):

  • Create smaller image
  • Upscale
  • Don’t upscale

Conclusion

Sure, this solution doesn’t have all the bells and whistles that you may want. But, the awesome thing is that it can extend to your liking.

For example, if you want to add some watermark to a particular image, you could do that (of course, given that you know Go. If not, there are some other solutions for other languages like for example this one for PHP.

If you don’t like messing with your solution, I would recommend you check out Cloudinary (cloudinary.com). It’s a paid solution, but it even has a free tier which you can use for testing, and it has some really advanced image manipulation features.

Do you maybe have some other to recommend?

Self-Hosted #Image Upload and #Resize Script in #Go – https://t.co/Wxh5FMMhHk

— Nikola Brežnjak (@HitmanHR) March 10, 2017

Meetups

Getting started with Fuse – 7th MeCoDe meetup

Meetup notes

Last Thursday (02.03.2017) we had our 7th MeCoDe meetup, and this time it was all about Fuse.

The presenter was our Goran Levačić, the leader of incubation and education in TICM, who did a great job in showing us first hand how to work with Fuse on few practical examples that we were able to code and run on our laptops as well!

I’d like to thank the team from Fuse that sent us their awesome stickers and badges (check them out in the pics section)!

For those who just want to take a peak at the code, here’s the Github project.

Few pics from the meetup

[ngg_images source=”galleries” container_ids=”18″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

Short how-to tutorial

Here I’ll outline few steps on how to get started with Fuse and get one simple example application working.

  • Download Fuse from their download page and install it – it works on both Windows and Mac
  • When you run Fuse you’ll see this screen
  • Select New, name your project and click OK:
  • Click on Open in Sublime (I’m guessing that if you don’t have Sublime Text, some other editor will be shown as default here): and you should see something like this:
  • In your Fuse dashboard click on Start app preview and then just confirm the Local option and click OK: you should get this screen open up:
  • If you tap and hold the rectangle this is what should happen:
  • Now, few examples with code and expected output:
  • This last example may have a bit more value since it’s showing how to fetch some data from an API (JSON response) that holds an array of presenters on our meetups so far. The full source code can be checked out on this Github repo.

Conclusion

Fuse looks really promising and I wish they keep getting this tool better and get out of beta as soon as possible 🙂

If you want to learn more about this tool, then be sure to check out their video tutorial series on YouTube. They also have examples, documentation, forum and Slack channel where you can find even more information.

As always, I encourage you to send us your wishes for next meetup topics, as well as speaking proposals. Thanks, and see you on the next meetup (early April).

Getting started with @fusetools – 7th MeCoDe meetup https://t.co/QNOpFKlEth Thanks for the stickers and badges!!

— Nikola Brežnjak (@HitmanHR) March 5, 2017

Books

The War of Art

My notes from the great book The War of Art: Break Through the Blocks & Win Your Inner Creative Battles by Steven Pressfield which I rated 5/5 on my Goodreads account.

How many pages have I produced? I don’t care. All that matters is I put in my time and hit it with all I’ve got. All that counts is that, for this day, for this session, I have overcome Resistance.

Is that what it takes? Do we have to stare death in the face to make a stand up and confront Resistance?

It’s not the writing part that’s hard. What’s hard is sitting down to write. What keeps us from sitting down is Resistance.

In other words, any act that rejects immediate gratification in favor of long-term growth, health, or integrity will elicit resistance.

Resistance is the enemy within.

Resistance has no conscience. It will pledge anything to get the deal, then double-cross you as soon as your back is turned. Resistance is always lying and always full of shit.

The more important a call or action is to our soul’s evolution, the more Resistance will feel toward pursuing it.

When we fight it, we are in the war to the death.

Resistance is fueled by fear.

The danger is greatest when the finish line is in sight.

Resistance by definition is self-sabotage.

The highest treason a crab can commit is to make a leap for the rim of the bucket.

The best and only thing that one artist can do for another is to serve as an example and an inspiration.

Never forget: this very moment, we can change our lives.

We’re doing exactly what the commercials and pop materialist culture have been brainwashing us to do from birth. Instead of a applying self-knowledge, self-discipline, delayed gratification, and hard work, we simply consume a product.

The paradox seems to be, as Socrates demonstrated long ago, that the truly free individual is free only to the extent of his own self-mastery.

Individuals who are realized in their own lives almost never criticize others.

If you find yourself asking you (and your friends), “Am I really a writer? Am I really an artist?” chances are you are.

The more scared we are of a work or calling, the more sure we can be that we have to do it.

The athlete knows the day will never come when he wakes up pain-free. He has the play hurt.

Seeking support from friends and family is like having your people gathered around at your deathbed.

Rationalization is Resistance’s right-hand man. It’s job is to keep us from feeling the shame we would feel if we truly faced what cowards we are for not doing our work.

You’re where you wanted to be, aren’t you? So you’re taking a few blows. That’s the price for being in the arena and not on the sidelines. Stop complaining and be grateful.

The professional, though he accepts money, does his work out of love.

The professional shuts up. She doesn’t talk about it. She does her work.

He is prepared, each day, to confront his own self-sabotage.

It would never occur to him, as it would to an amateur, that he knows everything, or can figure everything out on his own. On the contrary, he seeks out the most knowledgeable teacher and listens with both ears.

He reminds himself it’s better to be in the arena, getting stompped by the bull, than to be up in the stands or out in the parking lot.

An amateur lets the negative opinion of others unman him. He takes external criticism to heart, allowing it to trump his own belief in himself and his work. Resistance loves this.

The professional learns to recognize envy-driven criticism and to take it for what it is: supreme compliment. The critic hates most that which he would have done himself if he had had the guts.

There’s no mystery to turning pro. It’s a decision brought about by an act of will. We make up our own mind to view ourselves as pros, and we do it. Simple as that.

The last thing I do before I sit down to work is say say my prayer to the Muse. I say I it out loud, in absolute earnest. Only then do I get down to business.

Whatever you can do, or dream you can, begin it. Boldness has genius, magic, and power in it. Begin it now.

Miraculously, cancers go into remission. People recover. It is possible, Tom Laughlin asks, that the disease itself evolved as a consequence of actions taken (or not taken) in our lives?

These are serious fears. But they’re not the real fear. Fear that we will succeed. That we can access the powers we secretly know we possess. That we can become the person we sense in our hearts we truly are.

Our job in this lifetime is not the shape ourselves into some ideal we imagine we ought to be, but the find out who we already are and become it.

The artist must operate teritorially. He must do his work for its own sake. To labor in the arts for any reason other than love is prostitution.

Of any activity you do, ask yourself: if I were the last person on earth, would I still do it?

We must do our work for its own sake, not for the fortune or attention or applause.

Creative work is not a selfish act or a bid for attention on the part of the actor. It’s a gift to the world and every being in it. Don’t cheat us of your contribution. Give us what you’ve got.

My notes from the ever so slightly awesome book The War of Art https://t.co/4FvmXFxlDY

— Nikola Brežnjak (@HitmanHR) February 28, 2017

Meetups

64th SQL/DEV user group meeting about Xamarin

Yesterday I attended our local Microsoft community user group meeting which was the 64th meeting in a row, and the presenter Andrej Radinger, CEO of Mobendo and Mogy, talked about two topics:

  • Transfering the existing native iOS/Android app to Xamarin
  • How to start a start-up

I took extensive notes and screenshots of the presentation about Xamarin, and this is what I’m going to share with you in this post. I’m not going to cover the stuff about start-ups in this post; I’m only going to leave you with The Lean Startup and one quote:

Done is better than perfect. So start doing something already!

Presentation notes

Some random facts:

  • Bought by Microsoft
  • Integral part of Visual Studio 2015
  • Xamarin University (approx. 1k$/year)
  • It’s good to know each platform and its specifics. For example, to know the application lifecycle, how the app behaves when it goes to background mode, etc.
  • They needed four months to port their Mogy app to Xamarin iOS and then additional 2 to do it for Android

Good stuff is that you have Native access:

Three different ways to develop apps these days:

The difference between Traditional Xamarin Approach and Xamarin.Forms

Before going into the web dev, I was working with C#, and the following slide is indeed true. Pair that with the ever so slightly awesome Visual Studio and you’re golden 🙂

I’ve learned that everyone gets accustomed to the tool/language that they’re working in so some hardcore ObjectiveC devs may not agree with the following:

IMHO, if you’re a .NET developer and you want to build Android/iOS apps you really have a no-brainer choice.

100% API coverage:

Native performance (something that we from the hybrid dev world yarn for):

You have all your projects in one Visual Studio solution:

Some code sharing stats:

You can buy/sell components which can really help if you’re trying to get some product fast to the market:

Prebuilt app template examples:

An example of the native UI from the shared code (it changes based on the deployed platform). Shared UI code is defined in XAML.

Two aforementioned Xamarin approaches (Traditional and Forms):

Available controls:

Some third party vendors that are developing additional controls:

How to extend:

How they manage platform specific code and unify it in one function:

Some challenges:

Additional notes to these:

  • Some of the problems are related to setting up assets per platform
  • You need to take care of the back button in your designs on iOS
  • Had few problems with push notification debugging
  • The main problem with Android is its segmentation (meaning, too many different devices with different screen sizes and hardware)

Supported gestures:

Xamarin Test Cloud seems cool as you can test your app on actual devices. I’ve tested this in this blog post:

Analytics:

Questions

Does Xamarin help, hurt, or remain neutral in terms of debugging ease compared to each native platform’s tools/helpers?

  • Neutral, as if something breaks you can go to the exact line in the source code. However, we had quite a hard time debugging push notifications.

Do you ship a Windows Phone app now that you have that available?

  • No.

What sacrifices in terms of UX did you have to make?

  • …at some point we were cursing ourselves not to have taken the Traditional Xamarin Approach opposed to the Xamarin.Forms, as that would then give us more leverage in terms of UI tweaking, but we eventually managed to deal with it.

Did you evaluate React Native as well? How about hybrid (Cordova/Ionic)?

  • We started some two years ago, and at the time hybrid approaches weren’t so ‘cool’ (we looked at PhoneGap), so we opted for Xamarin. Plus, we were .NET devs to begin with, so it was practically a no-brainer choice for us.

64th SQL/DEV user group meeting about Xamarin presented by @andrejrad https://t.co/Kvw5qezaUE

— Nikola Brežnjak (@HitmanHR) February 21, 2017

Meetups

6th MeCoDe meetup – Why Azure?

Yesterday (26.01.2017) we had our 6th MeCoDe meetup and this time it was all about Azure.

The team from the company Axiom were the presenters. They are one of our most devoted members as they attended every meetup so far. Thanks guys, keep it up!! 🙂

They showed us how they use Azure in their business, and also gave us an awesome hands-on example on which we worked through together by following on our own laptops. Btw, in case you’re interested, they’re searching for a new colleague to join their forces.

Few pics from the meetup:

[ngg_images source=”galleries” container_ids=”17″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

As always, I encourage you to send us your wishes for next meetup topics, as well as speaking proposals. Thanks, and see you on the next meetup (around 24.02.2017).

Go

How to dockerize a simple Go app

In this tutorial, I’m going to show you how to dockerize a simple app (written in Go) that shows the current time. Github repo is here, in case you’re interested.

Dockerfile

So, if you haven’t played with Docker before, official docs would be a good start.

For our Go app, we need to create a file named Dockerfile with the following content:

FROM golang:onbuild
EXPOSE 8080

Go code

As for our app, the code is rather short and simple:

package main

import (
    "fmt"
    "net/http"
    "time"
)

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
    curTime := time.Now().Format("02.01.2006 15:04:05")

    fmt.Fprintf(w, "%s", curTime)
}

If you haven’t played with Go before, official docs would be a good place to start.

The only important thing to note here is that we’re listening on port 8080, which we need to set in the Dockerfile through EXPOSE.

Steps on how to make this yourself

Go code

  • Create the Go app (for testing purposes, you may use the same exact code)
  • Test it locally with go run curtime.go
  • Open your browser and go to http://localhost:8080
  • You should see the current time displayed

Docker

  • Create a Dockerfile with that content (Make sure you set the correct port in case you’ll be using a different one)
  • Inside the source folder (where you have curtime.go and Dockerfile) run docker build -t yourUserName/curtime . – this will create the image
  • You can check if the image was created with docker images
  • Run the image in a container: docker run -d -p 8000:8080 yourUserName/curtime
  • Access the app via your browser on port 8000. I used 8000 and 8080 intentionally so that it’s easier to explain that the 8000 port is the one on your computer and the 8080 is the port to which we’re ‘binding’ to

Few other useful Docker commands:

  • docker ps will list all the running containers. By adding the -a switch, you’ll see even the stopped ones
  • docker stop – stop the running container
  • docker rm containerID – delete the container with id containerID
  • docker images – list the images that are on your machine
  • docker rmi imageID – delete the image with id imageID

How to #dockerize a simple #Go app? https://t.co/JSIrP3CHYO

— Nikola Brežnjak (@HitmanHR) January 18, 2017

Meetups

5th MeCoDe meetup in Čakovec – Laravel

This post comes sooo late, but better late then never they say 🙂

This was the first meetup since we changed our name from Ionic framework meetup. The sole reason for that was that we don’t want to convey the message that we’re talking only about Ionic. As you all know, and can see in the previous meetups, we’ve been covering a lot of ground in the web development and design world in general, and we plan on continuing with this practice.

Also, we have a new logo, thanks to our Goran Levačić – thank you!

Our 5th MeCoDe Meetup was held on 1st of December, 2016. It was titled Uvod u Laravel – najpopularniji PHP framework današnjice.

I would like to thank our Meetup member, Srđan Srđenović the CEO of Koder who was the presenter this time and who did a great job presenting the material and showing us why Laravel is the most popular PHP framework these days.

We learned about:

  • the MVC in Laravel
  • how to install it
  • how it’s structured
  • how to configure it
  • how to work with Artisan
  • how the eloquent model works
  • how to set up routes and views

and we did all that on our computers, which is always cool to have some working app when you go home from a meetup.

Few pics from the meetup:

[ngg_images source=”galleries” container_ids=”16″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

I’ll take the opportunity to announce the 6th MeCoDe meetup: ‘Why Azure’ that will take place on 26th of January, 2017. You can read more details about the meetup on the MeCoDe Meetup page. See you there!

Pluralsight

Notes from Kanban Fundamentals course on Pluralsight

Here are my notes from the very good Pluralsight course Kanban fundamentals by Steve Smith.

  • Kanban = kan (visual) & ban (card)
  • Taiichi Ono from Toyota 1920ies
  • Kanban is about maximizing flow
  • It’s for visualizing work and limiting WIP (work in progress)
  • Little’s Law states that queue length (L) = arival rate * avg. wait time.
  • Cycle time = WIP / Throughput
Lead time vs Cycle time
Ticket created Start work Ticket implemented
Lead time
  Cycle time

Personal Kanban

  • Visualize work
  • Limit WIP

  • Book reference: Personal Kanban

Personal Kanban getting started

  • Gather materials (sticky notes, whiteboard, pens)
  • Establish Value stream (Ready/Doing/Done)
  • Make your backlog explicit (put them on sticky notes, focus on completeness, not organization)
  • Establish WIP limit
  • Begin pulling tasks
  • Reflect

Create a blocked state too – prioritize them and set a WIP on them as well!

Potentially, add a Today column:

  • Important and Urgent matrix by Dwight Eisenhower
  • Quadrant of Kaizen – important but not urgent.

Prioritization lanes:

Kanban for software teams

  • Book Reference: Kanban – Successful Evolutionary Change for Your Technology Business

Usually, the upstream process (UP) would produce as fast as they could without worrying about the downstream process (DP) – this lead to a lot of waste = overproduction.

However, in the pull model, the DP requests more parts, and the UP produces just enough items to keep the store populated with some limited number of parts.

The Kanban Method** Properties

  • Visualize workflow
  • Limit WIP
  • Measure and manage flow
  • Make process policies explicit
  • Use models to recognize improvement opportunities

Recipe for success

  • Focus on quality – reduces defects
  • Reduce WIP – reduces defects as well
  • Deliver often – as that builds trust
  • Balance demand against throughput – don’t accept work at a rate higher than the rate your team produces work. This will yield bottlenecks
  • Prioritize
  • Attack sources of variability to improve predictability –

Microsoft case study 2004:

  • remove estimations
  • limit WIP
  • More frequent cadence

Implementing Kanban

  • Define your process and endpoints
  • Identify types of the workflow
  • Create a card wall
  • Establish and visualize queues/buffers

Examples

Example usage for ‘swimlanes’ (horizontal lines denoting ‘critical’ tasks that eventually happen):

An example of post it notes on the actual physical board in case that’s used.

Online Tools

The author mentioned the following tools:

  • AgileZen
  • LeanKit
  • Trello
  • Targetprocess

However, this list is rather old. Even so much so that at the time Trello was free, and it just got sold yesterday 🙂

I’d like to add one kanban tool that I use for personal usage: https://kanbanflow.com. And one that I’m about to start using, and will write my thoughts about how well is fitting in our workflow after I do some work with it: https://www.blossom.co/.

Conclusion

Very good introduction to Kanban, which may be just as much as you’ll ever need.

My notes from Kanban Fundamentals course on Pluralsight https://t.co/tOQ0Nen0nY

— Nikola Brežnjak (@HitmanHR) January 11, 2017

Miscellaneou$

After writing 300 posts, this is why I think you should start blogging too

TL;DR

In this post I’m going to share with you:

  • few things that I learned from writing 300 posts
  • why I think you should start blogging as well
  • my thanks to one ever so slightly awesome role model

Backup your stuff

This tip may come as unexpected, given the fact that this is actually a 302nd post on my blog and one could argue that by now I have some system in place for dealing with that, right? Well, yeah, but so it is that this is the second time I’m writing this post from scratch.

Yeah, please don’t ask; I always keep a backup of backups (how meta, right?) but in this particular case, I was ‘smart’ and had it on my Desktop.

Seriously bro, Desktop!? What are you, like, 2015!?

I know, I know.

Don’t you, like, have Time Machine backup, or something.

Yeah, I do, but it wasn’t backed up… You know what, please just stop putting additional salt on the already burning wounds. Thank you very much, it’s enough of a lesson without it.

Actually, you know, just the other day I watched this movie, and it could be that my safest bet would probably be to ask (nicely, of course) No Such Agency if they have it on file somewhere. OK, joking a bit; I honestly don’t care – we may as well all be in The Truman Show and so what – do your best with the hand you’ve been dealt.

The beginnings

One doesn’t come to write 300 posts overnight, and we all start somewhere. My humble beginnings started on August 15, 2013, when I published my first post about Carcassonne scoring board application. I wrote the 100th post overview on December 28, 2014, and the 200th post overview on August 20, 2015.

With this 300th overview being published today on the last day of 2016, I’m roughly below 100 posts in average per year, which is not too shabby, but I’m striving to do better.

My approach

I’m happy to say that my approach hadn’t changed from the time when I wrote the 200th post overview and that it’s still some kind of an inner drive to:

…help people by bridging this seemingly invisible gap between the awesome programmers and not-so-awesome programmers who would use a bit of step by step help, by making my tutorials straight to the point with each step, without skipping the ever so slightly “obvious” parts.

OK, but why!?

OK, seriously now man, in this day and age, tell me what are you getting out of this?

Let me be lazy and use the same quote I did last time:

You learn the best when you have to teach someone something.

So, when I learn something new, or when I stumble upon a problem that I can’t solve for some time I benefit from documenting it on my blog in few ways:

  • I tend to remember things way longer when I actually write them down
  • I potentially help someone else who may stumble at the same error in future
  • I have a reference for when I need to look it up

Also, by breaking things down to the core concepts and then being able to see the bigger picture is an invaluable skill to have, and Einstein said it best:

If you can’t explain it simply, you don’t understand it well enough.

Seriously, where’s the catch!?

There’s not. And, in case you don’t buy into all this I just want to help you with my blog, you can take a look at the number of my StackOverflow answers, two books (1, 2) I’m giving away for free, or come to a free meetup that I’m hosting once a month. Anyways, I’m not trying to market myself or show how super I am; I’m merely making a point as to what I’m saying.

Opportunities and why I think you should start writing a blog

However, (aha!, now we have him!!), I have to tell you one thing that will inevitably happen. As you start writing a blog and solving things and publishing it for other people to learn from you will inevitably come out as an expert in the field (in case you specialized) and thus you’ll get more opportunities than you can even imagine. Book writing offers, consulting and conference speaking gigs, you name it.

The process of achieving consistency

I’m a firm believer in processes that are used and cultivated for good, as it takes a lot of “I don’t feel like it” situations out of an equation. And, I believe, you know that these days tend to just ‘happen’, and then magically stretch on for weeks until you gather your thoughts and snap out of it.

Thus, my advice for writing more is nothing new, and you hear it probably all over the Internetz. The problem is that its hard, and people tend to run away from hard things these days. The sole ‘tool’ which you have to nurture, train and maintain is consistency.

Put in the work daily, fail, learn, get up, improve, put in the work, fail, learn, improve. Mary go round… The next thing you know it, you won’t be thinking about the process anymore, you’ll live it, preach it. However, this is hard, I know. But you’re in it for the long run, remember? So, put your hand on the plow and keep on…

Thus, if you want to start writing blog posts about some topic, just start today. Don’t go and read a book on the topic (chances are you’ll never finish it in the first place :/). Just freaking do it already! Share what you’ve learned along the way. In case a year from now you won’t be ashamed by the quality of your posts you did back then, then my friend, you haven’t grown, and it’s time for some introspection (the same rule applies to your code if you’re a software developer).

Read more nonfiction books

Don’t get me wrong; one can learn from fiction books as well. However, imagine you read 10 pages a day of some book that’s related to what you’re trying to achieve (C#, PHP, Soft skills, Finance even, …).

No, Facebook doesn’t count. Drop that already. That’s like talking into the wind if you’re talking at all, that is.

In one month you would read 300 pages of some book. And in one year you’d read 12 books. Now, imagine you take and apply only one idea from each of those books – how different do you think your life would be? How much more valuable do you think you could be to your society, spouse, child, yourself if you invest in yourself?

Ok, and now to address the elephant in the room:

What is this new age success/growth mindset that you’ve got going on here?

Yeah, the only post where I kind of touched this was the one about Makers vs Consumers – don’t hate, donate. And, I’m not going to ramble on and on why you should read more. I’m just going to say that I agree with the following quote:

Your level of success will seldom exceed your level of personal development.
~ Jim Rohn

Homerun posts

Two posts that I’m very proud of (and have been published on Pluralsight) are:

  • Getting started with Angular 2 by building a Giphy search application
  • Ionic Framework: A definitive 10,000 word guide

Few of the posts on this blog have indeed been doing well:

  • Posting data from Ionic 2 app to a PHP server
  • How to run Node.js server in Ionic mobile app?
  • How to send an email in Ionic framework application?
  • Introduction to TDD in Ionic framework

Few other posts worth mentioning:

  • Makers vs Consumers – don’t hate, donate
  • Why am I getting Unexpected token ‘\u0000’ when using npm install -g package
  • How to set up live Markdown preview on Windows with Sublime Text and Markmon
  • Raneto Google OAuth login
  • How to create a native iOS app that can receive VoIP push notifications

What’s next for me?

I’ve been putting off blogging about Ionic 2 for far too long now, and now when the dust has settled, I’m going to go into this fully, so expect a flood of posts concerning that in this year. As I still work on Ionic 1 codebase, expect to get some ‘hard-learned tips’ for working with the framework from day 1.

On a totally different note, I started looking into the Go language and am liking it so far. I hope that my journey will evolve so that I’ll be able to work with it even more on a professional level as well. Be it as it may, expect some posts on that subject when I gain some more knowledge about it.

Special thanks

I’ve read a few books that could be classified as ‘self-help/self-improvement’ books, and (surprisingly so?) I’ve read a lot of the software development books. However, it was not until I read John Sonmez book Soft Skills (you can read my review here) that I started taking all this a bit more seriously and started reading way more about all of this.

I still remember when I emailed him asking if Ionic framework was a good technology to niche down. Now, a year and a half later, being in the top #3 answerer in Ionic framework tag on Stackoverflow I can only say – thank you.

In case you’re into improving as a software developer and getting to the next level of your personal development, be sure to check his Youtube channel. Who knows, you may just find something valuable for you.

Some of you may also be familiar with Elliott Hulse, and if so, you’ll enjoy their interview.

Conclusion

My intention was not to make this into a motivational speech. Though, if it helped kick you out of your comfort zone and into the producer mentality, that’s great. However, don’t forget:

Inspiration is for amateurs – the rest of us just show up and get to work.

So, wish you a happy, healthy, fulfilling and productive 2017!!

After writing 300 posts, this is why I think you should start blogging too https://t.co/RkFwPNZjib

— Nikola Brežnjak (@HitmanHR) December 31, 2016

Miscellaneou$

Ekobit DevArena 2016

TL;DR

In this post, I’ll show you some pictures and notes from the Ekobit DevArena 2016 conference.

Previous conferences

In case you’re interested here are the posts from the last two that I attended:

  • DevArena 2014
  • DevArena 2015

One does not simply skip breakfast…

Yeah, I eat too much, don’t invite me to your events unless you’ve got plenty to eat

¯\_(ツ)_/¯

This is how the accreditation looked on the back side, with the list of presentations per each track (4 in total):

I was super lazy this year regarding note taking, so I’ll pull a lazy on you and just show you the pictures that I took from each of the presentation that I attended.

They say that the picture is worth a thousand words. Well, in that case, this post is a lot of thousand words long 🙂

Keynote

[ngg_images source=”galleries” container_ids=”8″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

Tesla 🙂

[ngg_images source=”galleries” container_ids=”9″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

EU funds

[ngg_images source=”galleries” container_ids=”10″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

Angular 2

[ngg_images source=”galleries” container_ids=”11″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

Microservices

[ngg_images source=”galleries” container_ids=”12″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

Electron

[ngg_images source=”galleries” container_ids=”13″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

React

[ngg_images source=”galleries” container_ids=”15″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

React Native

[ngg_images source=”galleries” container_ids=”14″ override_thumbnail_settings=”0″ thumbnail_width=”120″ thumbnail_height=”90″ thumbnail_crop=”1″ images_per_page=”20″ number_of_columns=”0″ ajax_pagination=”0″ show_all_in_lightbox=”0″ use_imagebrowser_effect=”0″ show_slideshow_link=”1″ slideshow_link_text=”[Show as slideshow]” order_by=”sortorder” order_direction=”ASC” returns=”included” maximum_entity_count=”500″ display_type=”photocrati-nextgen_basic_thumbnails”]

Prize draw

They had a nice additional prize draw for those who asked questions (you get a small paper which you toss in a drawing bowl). I got 4 of them this year. However, no luck in winning something again 🙁

Ekobit #DevArena 2016 https://t.co/czNvnGJpGr

— Nikola Brežnjak (@HitmanHR) October 27, 2016

Page 21 of 51« First...10«20212223»304050...Last »

Recent posts

  • When espanso Breaks on Long Replacement Strings (and How to Fix It)
  • 2024 Top Author on dev.to
  • Hara hachi bun me
  • Discipline is also a talent
  • Play for the fun of it

Categories

  • Android (3)
  • Books (114)
    • Programming (22)
  • CodeProject (36)
  • Daily Thoughts (78)
  • Go (3)
  • iOS (5)
  • JavaScript (128)
    • Angular (4)
    • Angular 2 (3)
    • Ionic (61)
    • Ionic2 (2)
    • Ionic3 (8)
    • MEAN (3)
    • NodeJS (27)
    • Phaser (1)
    • React (1)
    • Three.js (1)
    • Vue.js (3)
  • Leadership (1)
  • Meetups (8)
  • Miscellaneou$ (78)
    • Breaking News (8)
    • CodeSchool (2)
    • Hacker Games (3)
    • Pluralsight (7)
    • Projects (2)
    • Sublime Text (2)
  • PHP (6)
  • Quick tips (41)
  • Servers (8)
    • Heroku (1)
    • Linux (3)
  • Stack Overflow (81)
  • Unity3D (9)
  • Windows (8)
    • C# (2)
    • WPF (3)
  • Wordpress (2)

"There's no short-term solution for a long-term result." ~ Greg Plitt

"Everything around you that you call life was made up by people that were no smarter than you." ~ S. Jobs

"Hard work beats talent when talent doesn't work hard." ~ Tim Notke

© since 2016 - Nikola Brežnjak