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
Books

#AskGaryVee – Gary Vaynerchuck

My favorite quotes from the book #AskGaryVee: One Entrepreneur’s Take on Leadership, Social Media, and Self-Awareness  by Gary Vaynerchuk which I rated 5/5 on my Goodreads account:

Smart work will never replace hard work. It only suplements it.

Putting your self out of bussiness is a lot more fun than having someone else do it for you.

I put zero weight into anyone’s opinion about me because I know exactly who I am. Can you say the same?

Stop focusing on dumb shit. Don’t be afraid to break things. Don’t be romantic. Don’t take the time to breathe. Don’t aim for perfect. And whatever you do, keep moving. Reread this a few times…

Passion is an unmatched fuel. Add being happy to that and you have a wonderful formula for good health.

Ideas are worthless without the execution; execution is pointless without the ideas.

My kids’ generation may be the last generation that holds university to such high esteem.

If you’re not producing content, you don’t exist.

A lot of new entrepreneurs tell me they’re hustling, and then they’ll ask me if I liked the last episode of Ballers. They’re trying to get a business off the ground and they’ve got time to watch TV? It’s like wanting to lose weight and sneaking away to scarf down a Big Mac. It’s just not going to work. I’m twenty years into my career with two businesses under my belt and the only time I take to watch TV is when the Jets are on. There is so much hustle in my day I don’t even have a second to spare to “hang out” and catch up with the people around me when I’m at work. It may not be ideal for most, but I love it because it allows me to get the things done that I seek to accomplish.

Once people love you, it’s easy to sell them stuff.

Everybody’s got a plan until they get punched in the face. You can strategize and plan all you like, but once you’re on the court, or in the ring, or on the field, you’d better be ready to adjust and improvise.

If you like these quotes, be sure to check out Gary’s other book I read: Crush It!

Favorite #quotes from an awesome #book #AskGaryVee by the ever so slightly remarkable Gary Vaynerchuck https://t.co/4AVVXGWvO7

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

Books

Crush It! – Gary Vaynerchuk

My favorite quotes from the book Crush It!: Why Now Is the Time to Cash In on Your Passion  by Gary Vaynerchuk which I rated 4/5 on my Goodreads account:

Love your family, work super hard, live your passion.

Live your passion. What does that mean, anyway? It means that when you get up for work every morning, every single morning, you are pumped because you get to talk about or work with or do the thing that interests you the most in the world. You don’t live for vacations because you don’t need a break from what you’re doing—working, playing, and relaxing are one and the same. You don’t even pay attention to how many hours you’re working because to you, it’s not really work. You’re making money, but you’d do whatever it is you’re doing for free.

There no longer has to be a difference between who you are and what you do.

Even if your ambitions are huge, start slow, start small, build gradually, build smart.

Developing your personal brand is key to monetizing your passion online. Developing your personal brand is the same thing as living and breathing your résumé.

Quality is a tremendous filter. Cream always rises, my friends, no matter how many cups of coffee you pour.

Know yourself. Choose the right medium, choose the right topic, create awesome content, and you can make a lot of money being happy.

 

Favorite quotes from the #book Crush It by the ever so slightly awesome Gary Vaynerchuk https://t.co/UL7L1yhkGj

— Nikola Brežnjak (@HitmanHR) July 17, 2017

Ionic3

How to get started with Ionic framework 3 on Mac and Windows

This is the first post in a series of posts which will teach you how to take advantage of your web development knowledge in building hybrid applications for iOS and Android with Ionic framework 3 (I’ll use Ionic in the rest of the post).

This is an update of the series of posts that I did for the original version of the Ionic framework, and you can read it here.

This first post explains:

  • How to make an app these days
  • What actually is Ionic framework
  • How is Ionic 3 different from Ionic 1 and 2
  • How to install Ionic on both Mac and Windows
  • How to use Ionic CLI to start an Ionic project
  • How to run an Ionic application

You can read the second post in the series here: How to create a calculator application with Ionic framework 3 by using Ionic Creator for UI.

Why should you listen to me?

This is in no way my attempt at feeding my ego, it’s just to give you soundness of mind that what I’m writing here may actually be useful to you.

  • Wrote a book about the original Ionic framework, and you can get it for free
  • Wrote for Pluralsight on the topic of Ionic: Ionic Framework: A definitive 10,000-word guide
  • In the top #3 all time answerers for the ionic tag on StackOverflow. If you want to see what those answers actually are, you can take a look at my StackOverflow profile.
  • Was a technical reviewer for the book Getting started with Ionic

Introduction

…up to 90% of mobile time is spent in apps

You’re bombarded with reports like this and this that users tend to spend way more time on their phones and especially in apps (rather than surfing the web using their phones) and you decided that it’s time to learn how to make an app.

If you’re a web developer, you have a decent knowledge of HTML, CSS, and JavaScript; also, you’re most likely using one of the ever so slightly popular frameworks these days like Angular, React or Ember, to name a few. If you’re even proficient enough with the MEAN stack, you are a well-rounded full stack developer, and you basically have it all. Well, except the apps part, right?

If you want to see what’s all that fuss about the MEAN stack, you can check out the free four-part tutorial series that I wrote for HackHands, starting with the first post on How to get started on the MEAN stack.

But, where to start with making an app? Could you use some of your existing skills? Up until fairly recently, if you wanted to make an app for (currently) two most popular mobile operating systems (iOS and Android – sorry Windows Phone ?) your only bet was to make the so-called, native application by using the SDKs of the intended platforms.

This, of course, meant that you needed to make two versions of your application; one for iOS and one for Android. If you are a solo developer, chances that you’re proficient in both are not so great. Even if you are; I bet you’re favoring one platform over the other, right?

Therefore, for some time, developers were opting for either iOS or Android, whereas big firms had two developing departments, one for each platform.

Nowadays, luckily, with the help of Ionic Framework, and few others like React Native, NativeScript, Fuse, you can create an application by using the skills you, as a web developer, already have. If you’re not a web developer, don’t fret – this isn’t rocket science or machine learning… ?

How can you make an app these days?

We’ve kind of touched all three in the Introduction section, but let’s keep it nice and concise and list them here as well. So, there are actually few ways that you can make an application for mobile devices these days:

  • Native app
  • Mobile website (PWA)
  • Hybrid app
  • Xamarin, ReactNative, NativeScript!?

Now, let’s talk a bit more about the pros and cons of each of them.

Native app

As mentioned previously, you can make an app specifically for iOS and Android by using their specific SDKs. If you want to build a native application for iOS you have to:

  • have a Mac computer. Sure, there are ways around it, but I honestly don’t recommend them; for starters, a cheap Mac Mini will do just fine
  • download Xcode from the App Store (it’s actually free)
  • buy the Apple Developer license that costs 99$ per year. Even if you don’t make any new apps after publishing your one app to the App Store, you’ll still have to renew your subscription every year to keep your app in the App Store ??

You can write the apps by using the Swift language, or it’s predecessor ObjectiveC.

If we’re honest here, I think that Swift is a great step up from the clunky ObjectiveC, but that’s just my own opinion (some people, of course, disagree). Anyways, if you ever decide to go native just make sure you go with Swift as you’ll get to know your way around it way sooner than with ObjectiveC, especially if you have a background in web development.

If you want to build a native application for Android you have to:

  • have any computer
  • download the appropriate SDKs (we’ll cover this in the next section)
  • buy the Google Developer license which is a one time 25$ purchase

One of the pros of a native applications would be it’s speed and direct access to a native API (you don’t have to use any middleman wrappers, like in hybrid apps). A definite con of a native applications is that you need to build two (or more) applications, one for each desired platform.

Mobile website (PWA)

A mobile website is actually a “normal” website (yeah, don’t go jumping because of the terminology; you’re smart, you get the point) that you visit with your browser on your phone, designed specifically to adapt to your phone’s screen. As we’ve noted in the Introduction section, researches show that in today’s world mobile websites tend to have a way lower engagement than they used to.

Developers used to make specific sites just for mobile browsers (on it’s own domain; usually m.domain.com) but this proved to be hard to maintain. A practice called responsive website design is used these days, where you basically have one HTML codebase, and you determine the look for specific devices (based on resolutions) by using the so-called media queries.

A great example of a mobile framework is jQuery mobile that is soon coming out with its new 1.5 version (here’s their alpha changelog), so we’ll see if they bring something new to the table. From my personal experience with the framework from four years ago, I have all but good words for it; so, definitely use it if you’re “only” making a mobile version of your web application.

A definite advantage of the mobile websites is that you can update them as you see fit, without waiting for the approval from Apple or Google. One of the disadvantages is definitely the fact that the mobile websites these days have way lower engagement than they used to, and that you can’t basically use any of the additional phone features like for example camera or GPS.

Since this is an update of the post, few things have changed and if you only want to make a ‘mobile website’. I’d suggest looking into PWA (Progressive Web Apps) as they are the new cool nowadays, and some go even as far as saying that native apps are doomed due to PWAs, but we won’t be focusing on that here.

Good news for those of you who also want to create PWAs of your apps – with Ionic you can! Ionic enables you to get the best of both worlds: cross-platform app store deployment on iOS, Android, and Windows, along with deployment to the mobile web as a Progressive Web App with the same code. But, let’s not be hasty, we’ll cover that in the next section.

Hybrid app

A hybrid app is a basically a mobile application, written with the same set of languages that you use when building websites, with the addition that it contains an isolated browser instance, called WebView, which runs this web application inside of a native app. Hybrid apps can access the mobile device and use the additional phone features like for example camera or GPS.

A definite advantage of the hybrid apps is the fact that you can access the additional phone features via plugins and that you can do all the development with the same set of skills as you use when developing “normal” web applications.

One of the disadvantages is the fact that, even though it’s improving, the so-called Web View has its limitations in terms of speed. Also, it might not be best suited to choose hybrid if you’re using a lot of additional phone features, as you would have to use a lot of plugins which would slow the app down. But, from my personal experience, we have 30+ plugins (yeah, don’t ask) that we use in our app and we’re getting away with it ?.

Finally, you would definitely not use it if you’re on a quest to make the next best game with full-blown 3D graphics.

Xamarin, ReactNative, NativeScript!?

We have to be fair here and mention the new players who promise the fact of having a full API access without any additional plugins and produce ‘actual’ native apps with very high percentage of shared code. So, the app is not run in the Web View like in Ionic’s case which is a boost to the app speed.

If you’re coming from .NET background and you want to create an app; then you can stop reading here, as from what I’ve seen Xamarin is a sure bet for you and you’ll instantly feel at home.

If you’re a React guy, then ReactNative may just be up your alley. As they say on their website:

With React Native, you don’t build a “mobile web app”, an “HTML5 app”, or a “hybrid app”. You build a real mobile app that’s indistinguishable from an app built using Objective-C or Java. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.

As for NativeScript; to be honest, I don’t have experience with it, but it seems they’re in a similar boat as ReactNative as they also give you the NativeUI without web views.

You can check out a good blog post on the topic of Ionic vs. NativeScript vs. ReactNative here.

What is Ionic and why it’s so good

As I gave an answer on StackOverflow:

Disclaimer: This will sound like an advertisement, so I have to say I’m in no way affiliated with Ionic, I just happen to like it so much that I’m sharing the love for it.

Ionic is so much more than “just” a UI framework. Ionic allows you to:

  • have truly only one single codebase and deploy to iOS, Android, and Windows, along with the mobile web as a Progressive Web App
  • generate icons and splash screens for all devices and device sizes with a single command: ionic cordova resources. This alone saves you at least a day of image preparing for various sizes.
  • instantly update your apps with code changes, even when running directly on your device with ionic cordova run --livereload
  • build and test iOS and Android versions side-by-side and see changes instantly with ionic lab
  • share your Ionic apps with clients, customers, and testers all around the world without ever going through the App Store with ionic upload
  • easily access the full native functionality of the device using Ionic Native
  • Also, Drifty (the team behind the Ionic framework) is building a full-stack backend services and tools for your Ionic app like Live updating (for deploying a new version without going through Apple review process! – this is huge!), Push notifications, Cloud packaging, Ionic Creator etc.
  • Ionic CLI (command line interface) uses Cordova in the backend and allows you to build (directly using Ionic CLI) apps for iOS and Android (just by doing ionic cordova build ios or ionic cordova build android).
  • Ionic uses Angular as a frontend framework so if you’re familiar with it, it will come as a bonus. Yes, the newest version of Ionic (currently 3) uses the newest and coolest Angular (currently 4) (which was a total rewrite from the Angular 1 version)
  • All in all, I personally think Ionic framework has a bright future, so if nothing else – give it a try I bet you’ll like the ease of making an app with it.

Do I have your attention now? Great, let’s install all the needed prerequisites in the next section and start using Ionic!

How is Ionic 3 different from Ionic 1 and 2

Josh Morony wrote about 7 Reasons Why Ionic 2 Is Better Than Ionic 1 and made a video about What Ionic 3 means to Ionic 2, and I encourage you to check them out to learn more about:

  • why Ionic 2 is totally different (and better) from Ionic 1 and
  • why Ionic 3 is not that much different from Ionic 2

The biggest change comes down to the fact that Ionic 2 and 3 use the new Angular (now at version 4), whereas Ionic 1 uses the old Angular 1.

Now, don’t get me wrong – we all seem to love the ‘new shiny things’, but I can tell you from my experience that even with Ionic 1 you can still make great apps! So, even if you’re awesome at Angular 1 I’d suggest you go for Ionic 3, as the benefits are truly amazing. Plus, you don’t want to be working in a 5 years ‘old’ technology, now do you? ?

Installing prerequisites for both Mac and Windows

We need to have Node.js and Git installed in order to install both Ionic and Cordova. If you already have (and if you’re a web developer chances are that you do) these tools installed, you can skip this section, and go straight to installing Ionic.

Installing Node.js

In order to download Node.js, visit https://nodejs.org/en/download/, where you’ll see the following options:

Installation on Windows and Mac OS is simple as you just have to download and run the appropriate installer and follow the familiar instructions (next, next, next, sure I accept, next, finish ).

If you have brew on your Mac then you can also install Node.js with:

brew install node

In both cases, npm (Node Package Manager – used to install other packages) will be installed along with Node.js.

To verify that you installed Node.js correctly on a Windows machine, run the following command in your Command prompt (or, even better, use Console 2):

node -v

You should get an output similar to: v8.0.0.

To verify that you installed Node.js correctly on your Mac, run the same command as above in your Terminal (or, even better, use iTerm), and you should get the same similar output as above.

To verify that you have npm install, just run: npm -v and you should get an output similar to: 5.0.1

Installing Git

In order to install Git, visit http://git-scm.com/download, where you’ll see the following options:

Installation on Windows and Mac OS is as simple as for Node.js as you just have to download and run the appropriate installer and follow the, yet again, familiar instructions.

To verify that you installed Git correctly on your Windows/Mac machine, run the following command in your Command prompt/Terminal:

git

You should get an output similar to:

usage: git [--version] [--help] [-C ] [-c name=value]
[--exec-path[=]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=] [--work-tree=] [--namespace=]
<command></command> []

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status

grow, mark and tweak your common history
branch List, create, or delete branches
checkout Switch branches or restore working tree files
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
tag Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command></command>' or 'git help '
<command></command> to read about a specific subcommand or concept.
<command></command> ```

You don't have to worry if you don't know how to use Git since you won't be needing it directly (npm uses it to download packages). However, if you would like to learn (and there's no reason why you shouldn't expand your knowledge), you can check out this [good interactive tutorial](https://try.github.io/levels/1/challenges/1) made by CodeSchool.

## Installing Ionic
If you've installed the needed prerequisites from the previous section, then in order to install Ionic (both on Mac and Windows) you just have to run the following command:

`npm install ionic cordova -g`

Ionic uses [Cordova](https://cordova.apache.org/) in the background for packaging up the native app, thus the need for it. We're using the **-g** flag here, in order to install the packages **ionic** and **cordova** [globally](https://docs.npmjs.com/getting-started/installing-npm-packages-globally).

To verify that you've installed Ionic correctly on your Windows/Mac machine, run the following command in your Command prompt/Terminal:

`ionic -v`

You should get an output similar to:

`3.4.0`

To verify that you've installed Cordova correctly on your Windows/Mac machine, run the following command in your Command prompt/Terminal:

`cordova -v`

You should get an output similar to:

`7.0.1`

If you had Node.js installed before (and haven't used it much since), you may get a notification like this:


Upgrade warning – for the CLI to run correctly,
it is highly suggested to upgrade the following:

Please update your Node runtime to version >=0.12.x



To resolve this issue, just update Node.js; either by re-downloading it (on Windows) or by executing the following command in the Terminal (on a Mac): `brew update; brew upgrade node` > I would like to take a moment here and encourage you to post a comment about any problems you may come across (and from my experience from StackOverflow there tends to be quite a lot of them ?) with these (seemingly simple) installation tasks. There always tends to be some older version of Node.js installed, or problems with cache and npm, blah blah blah... I will do my best to try to resolve your issue. ## Using Ionic CLI If you run `ionic` in your Terminal/Command prompt you will get an output similar to the one below:

CLI 3.4.0
Usage:

$ ionic [–help] [–verbose] [–quiet] [] [options]
$ ionic [–confirm] [–no-interactive] [–yarn] [–no-timeout]

Global Commands:

docs ………………… Open the Ionic documentation website
info ………………… Print system/environment info
login ……………….. Login with your Ionic ID
signup ………………. Create an Ionic account
start ……………….. Create a new project
telemetry ……………. Opt in and out of telemetry

Project Commands:

You are not in a project directory.


What you got is actually a nice summary of the global commands that you can run using the ionic CLI, along with their short descriptions. _Btw, if you're wondering what this CLI thing is (and you haven't [Googled it yet](https://en.wikipedia.org/wiki/Command-line_interface)); it's actually an acronym for Command Line Interface, and in Ionic terms it's actually a tool that makes it easier to [start, build, run, and emulate, (and a lot more), Ionic apps](http://ionicframework.com/docs/cli/)._ In the following chapters we will cover most of these commands, but for now, let's not burden you too much, and let's do a quick skin deep dive by making a simple project using `ionic start` command. ## Starting a project with Ionic CLI by using the existing templates Cool, you've made it so far - I promise, you're going to see some code now! ![](http://i.imgur.com/Y8FXaWm.jpg) Ionic CLI allows you to start and initialize your project by using the aforementioned `ionic start` command. If you take a look at [the official documentation for the start command](http://ionicframework.com/docs/cli/start/) you will see something like the following definition: `ionic start [&lt;name&gt;] [&lt;template&gt;]` >❗If you're familiar with Ionic 1, then you'll notice that they've changed it a bit. If you still want to run Ionic 1 apps with an Ionic CLI version 3 or above, you need to pass in the `--type` flag like this: `ionic start myApp --type ionic1` If you just run `ionic start appname` the Ionic CLI will make a bootstrap application with all the needed parts in the **appname** folder, with the so-called **blank** template. In case you want to see the list of all the starter projects, you can run `ionic start --list`:

ionic start –list
tabs …………… ionic-angular A starting project with a simple tabbed interface
blank ………….. ionic-angular A blank starter project
sidemenu ……….. ionic-angular A starting project with a side menu with navigation in the content area
super ………….. ionic-angular A starting project complete with pre-built pages, providers and best practices for Ionic development.
conference ……… ionic-angular A project that demonstrates a realworld application
tutorial ……….. ionic-angular A tutorial based project that goes along with the Ionic documentation
aws ……………. ionic-angular AWS Mobile Hub Starter
tabs …………… ionic1 A starting project for Ionic using a simple tabbed interface
blank ………….. ionic1 A blank starter project for Ionic
sidemenu ……….. ionic1 A starting project for Ionic using a side menu with navigation in the content area
maps …………… ionic1 An Ionic starter project using Google Maps and a side menu


Additionally, you can use Github repo starters and Codepen URL starters. In our example, we will use the **sidemenu** template, so execute the following command from your Terminal/Command prompt: `ionic start Ionic3_1stTutorial sidemenu` You should see something similar to the following output:

✔ Creating directory ./Ionic3_1stTutorial – done!
[INFO] Fetching app base (https://github.com/ionic-team/ionic2-app-base/archive/master.tar.gz)
✔ Downloading – done!
[INFO] Fetching starter template sidemenu (https://github.com/ionic-team/ionic2-starter-sidemenu/archive/master.tar.gz)
✔ Downloading – done!
✔ Updating package.json with app details – done!
✔ Creating configuration file ionic.config.json – done!
[INFO] Installing dependencies may take several minutes!

npm install
✔ Running command – done!
npm install –save-dev –save-exact @ionic/cli-plugin-ionic-angular@latest
✔ Running command – done!
git init
✔ Running command – done!
git add -A
✔ Running command – done!
git commit -m “Initial commit” –no-gpg-sign
✔ Running command – done!

♬ ♫ ♬ ♫ Your Ionic app is ready to go! ♬ ♫ ♬ ♫

Run your app in the browser (great for initial development):
ionic serve

Run on a device or simulator:
ionic cordova run ios

Test and share your app on a device with the Ionic View app:
http://view.ionic.io

? Link this app to your Ionic Dashboard to use tools like Ionic View? No

Go to your newly created project: cd ./Ionic3_1stTutorial


## Running the Ionic application Now that we've initialized our Ionic application based on the **sidemenu** template, we have to run it in order to see what Ionic CLI generated for us. First, change the directory to the name of the application you gave in the `ionic start` command. In our case, that's: `cd Ionic3_1stTutorial`. If you open up the project in your editor (I use [Visual Studio Code](https://code.visualstudio.com/) with Solarized Dark theme nowadays, after being loyal, and paying ?, customer of [Sublime Text 3](http://www.sublimetext.com/3)) you will see the following folder structure: ![](http://i.imgur.com/cecGiB3.png) In the following chapters, we will spend most of the time in the **app** folder. > ❗ Those of you coming from Ionic 1 background be wary of the `www` folder - don't touch it at all, as this is where all the transpiled/compressed code is saved. `src/app` is your new `www` folder. > Since Ionic 3 is based on [Angular](https://angular.io/) framework, you will need at least a basic understanding of it, and you can start exploring it with a [free interactive tutorial](https://www.codeschool.com/courses/accelerating-through-angular) by CodeSchool, or you can check out my post for Pluralsight: [Getting started with Angular 2 by building a Giphy search application](https://www.pluralsight.com/guides/front-end-javascript/getting-started-with-angular-2-by-building-a-giphy-search-application). Please note that this is very different from Angular 1 that you (and me ?) was accustomed to. There are few ways in which you can get your Ionic application running: + `ionic serve` - starts the app in a local web browser + `ionic cordova emulate android` - starts the app in an emulator (in this example Android is used; you can also use **ios** if you're on a Mac and have all the prerequisites installed) + `ionic cordova run android` - starts the app on the actual device that's plugged into your computer + `ionic cordova build android` - creates an **.apk** file which you can physically copy to your Android device and run it (this scenario doesn't work for iOS devices in normal circumstances; you have to go through Xcode, as we'll describe in detail in the next chapter) So, now run the following command in your Terminal/Command prompt: `ionic serve` You should see the following similar output:

[INFO] Starting app-scripts server: –port 8100 –p 8100 –livereload-port 35729 –r 35729 –address 0.0.0.0 – Ctrl+C to
cancel
[13:56:20] watch started …
[13:56:20] build dev started …
[13:56:20] clean started …
[13:56:20] clean finished in 1 ms
[13:56:20] copy started …
[13:56:20] transpile started …
[13:56:22] transpile finished in 2.03 s
[13:56:22] preprocess started …
[13:56:22] deeplinks started …
[13:56:22] deeplinks finished in 11 ms
[13:56:22] preprocess finished in 13 ms
[13:56:22] webpack started …
[13:56:22] copy finished in 2.20 s
[13:56:29] webpack finished in 6.91 s
[13:56:29] sass started …
[13:56:30] sass finished in 953 ms
[13:56:30] postprocess started …
[13:56:30] postprocess finished in 10 ms
[13:56:30] lint started …
[13:56:30] build dev finished in 9.95 s
[13:56:30] watch ready in 10.03 s
[13:56:30] dev server running: http://localhost:8103/

[INFO] Development server running
Local: http://localhost:8103

[13:56:35] lint finished in 5.13 s
“`

Also, you should get your local browser started up automatically, pointing to the address http://localhost:8100/, with an output similar to the one on the image below (I resized the window for clarity – if you’re using Chrome, you can get the Window Resizer plugin, or use the Chrome Dev Tools Emulate feature):

Awesome thing about this is that you have automatically set up live reload feature, which means that as soon as you change the code in your app folder, the application will reload automatically so that you don’t have to keep pressing the F5 (&#8984;+R) key on your Windows (Mac) machine.

If you like, you can get this project on Github.

Conclusion

In this chapter we’ve gone through the options that you have in making an app these days. Then we explained what actually is Ionic framework and how to install it on both Mac and Windows. With the use of the Ionic CLI we started a project based on the sidemenu template, and finally, we ran it locally in the browser with the use of ionic serve command. In the next chapter, I’ll show you how to create your own calculator application by making use of Ionic Creator.

How to get started with @Ionicframework 3 on #Mac and #Windows https://t.co/DZrp4q5ott pic.twitter.com/SbGfTbXzh0

— Nikola Brežnjak (@HitmanHR) July 16, 2017

Books

You Are a Badass – Jen Sincero

My favorite quotes from the book You Are a Badass: How to Stop Doubting Your Greatness and Start Living an Awesome Life  by Jen Sincero which I rated 4/5 on my Goodreads account:

“If you’re serious about changing your life, you’ll find a way. If you’re not, you’ll find an excuse.”

“You are loved. Massively. Ferociously. Unconditionally. The Universe is totally freaking out about how awesome you are. It’s got you wrapped in a warm gorilla hug of adoration. It wants to give you everything you desire. It wants you to be happy. It wants you to see what it sees in you.”

“What other people think about you has nothing to do with you and everything to do with them.”

“Because if you base your self-worth on what everyone else thinks of you, you hand all your power over to other people and become dependent on a source outside of yourself for validation. Then you wind up chasing after something you have no control over, and should that something suddenly place its focus somewhere else, or change its mind and decide you’re no longer very interesting, you end up with a full-blown identity crisis.”

“So often, we pretend we’ve made a decision, when what we’ve really done is signed up to try until it gets too uncomfortable.”

“Maybe, if you put your disbelief aside, roll up your sleeves, take some risks, and totally go for it, you’ll wake up one day and realize you’re living the kind of life you used to be jealous”

“Nobody who ever accomplished anything big or new or worth raising a celebratory fist in the air did it from their comfort zone. They risked ridicule and failure and sometimes even death.” 

“The only failure is quitting. Everything else is just gathering information.” 

“If you are depressed, you are living in the past. If you are anxious, you are living in the future. If you are at peace, you are living in the present.” 

“I can pretty much guarantee that every time you tearfully ask yourself the question, “WTF is my problem?!” the answer lies in some lame, limiting, and false subconscious belief that you’ve been dragging around without even realizing” 

“There’s something called the Crab Effect. If you put a bunch of crabs in a bowl and if, while they’re in there crawling all over each other, one of them tries to climb out, the rest of them will try to pull him back down instead of helping to push him out. No wonder they’re called crabs.” 

“Because so often when we say we’re unqualified for something, what we’re really saying is that we’re too scared to try it, not that we can’t do it.”

“You need to go from wanting to change your life to deciding to change your life.”

“What you tell yourself on a daily basis is more powerful than you know.” 

“Our greatest fears are the greatest waste of time.” 

“Comparison is the fastest way to take all the fun out of life.”

My favorite #quotes from the #book You Are a Badass by Jen Sincero https://t.co/XUV6CZ0lWi

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

Ionic3

How to create the simplest TODO application with Ionic 3

TL;DR

This is the simplest example which shows how to create a simple TODO application with Ionic 3 in just a few lines of code.

Quickstart

To see it in action:

  • Clone the finished project from Github
  • Make sure you’ve got the newest Ionic CLI (see this post for more instructions)
  • Run ionic serve
  • The app in action (after adding few items and swiping to delete one):

Step by step on how to create this yourself from scratch

Create a new blank Ionic project with ionic start Ionic3ServerSendTest blank

Template

Copy the following code to src/pages/home/home.html file:

Here we have three parts:

  • an input (ion-input) field where we enter the text for our TODO. We’ve put a ngModel of name todo on it – we will be able to reference this in the code by this same variable name.
  • a button (ion-button) which when clicked calls the function called add, which we’ll define in our src/pages/home/home.ts file shown below.
  • a list (ion-list) with multiple items (ion-item) in it. Also, we’ve made use of the ion-item-sliding (learn more about it from the docs here). We are repeating the ion-item-sliding component as many times as we have items in the todos array (you’ll see where we set that in the home.ts file, as mentioned above).

Code

To the src/pages/home/home.ts file copy the following content:

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';

@Component({
    selector: 'page-home',
    templateUrl: 'home.html'
})
export class HomePage {
    todos: string[] = [];
    todo: string;

    constructor(public navCtrl: NavController) {

    }

    add() {
        this.todos.push(this.todo);
        this.todo = "";
    }

    delete(item) {
        var index = this.todos.indexOf(item, 0);
        if (index > -1) {
            this.todos.splice(index, 1);
        }
    }
}

The only thing that differs here from the basic blank template generated code is the todos and todo variables which we use for holding the array of todos and a current todo that’s connected to the model in the input box.

The add function pushes the current todo that we have in the input box at the time of pressing the Add button into the todos array.

The delete function first finds the index of the item that we want to delete from the list and then, by using the splice function, it deletes the item from the todos array.

Running the app

Just run ionic serve or even better yet ionic lab from the root directory of your Ionic app and you’ll have the app running locally in your browser tab with live reload option turned on.

Conclusion

That’s it. It doesn’t get any easier than this. Sure, this is as simple as it gets; there’s no persistence or anything, that’s for you to play with. Or, well, I may add that in the next tutorial…

‘Till then, have a great one, and a happy 4th of July to all my friends across the big pond 😉

How to create the simplest #TODO application with #Ionic 3 https://t.co/xvjmXVruBH

— Nikola Brežnjak (@HitmanHR) July 4, 2017

Miscellaneou$

Get free stickers from dev.to

This is just a quick post to say thank you to the dev.to community for sending me these awesome new stickers and a T-shirt. This way my ‘old’ laptop got even more crowded and a ‘new’ one is now nicely showing my day to day activities:

Copying and pasting from StackOverflow ?

OK, true, sometimes I answer some questions as well ?

Anyways, make sure to check them out as you too can get these stickers (if you’re into this that is) for free here: http://dev.to/freestickers.

Their community seemed to have liked the post I shared about Git branching done right with Gitflow & improving code quality with code reviews so check it out if it sounds interesting…

Oh, btw, you can see how my Lenovo ? looked like covered with stickers.

Keep your stacks overflowing folks and talk to you soon!

devtoStickers

Got free stickers thanks to @ThePracticalDev https://t.co/Jg2L5ZabL7

— Nikola Brežnjak (@HitmanHR) June 27, 2017

Meetups

Freelancing – 10th MeCoDe meetup

Meetup notes

Recently (14.06.2017), we had our 10th MeCoDe meetup, and this time the topic was the ever so slightly mysterious world of Freelancing.

The presenter was Martina Lipovac, the owner of the creative studio Trogled, who did an awesome job sharing her experience with freelancing in terms of how it is to work from home, how to use different freelancing platforms, how to find new work and communicate with clients, how to organize time, etc.

Also, she covered a lot of things from the legal aspect regarding how to have everything ‘by the book’. Martina also arranged a guest video presentation from her friend Matija Matečić, the CEO of Solo, which is an online service for creating invoices which follow our (sometimes weird) legislation (Croatian specific).

By sharing her success story, I hope some folks got inspired to finally try if this ‘mysterious freelancing’ works for them.

You can take a look at Martina’s presentation here.

Picture time

[ngg_images source=”galleries” container_ids=”29″ 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”]

Milestones

This was our 10th Meetup in a span of just a bit over one year. I’m very happy that our small community has such a will to learn new things and expand horizons on a professional level, so am looking forward to another 10!

Call for speakers

As always, we welcome new speakers, even with n0 prior experience (you gotta start somewhere, right? :)) so in case you wanna share something with us, just shoot me an email…

#Freelancing – 10th MeCoDe meetup https://t.co/0WguhFlAqu

— Nikola Brežnjak (@HitmanHR) June 26, 2017

Ionic3

Posting data from Ionic 3 app to a PHP server

TL;DR

This is the simplest example which shows how to POST data from an Ionic 3 app to a PHP server.

The tutorial covering the Ionic version 1 can be found here, and the tutorial covering the Ionic version 2 can be found here.

Quickstart

To see it in action:

    1. Clone the finished project from Github
    2. Make sure you’ve got the newest Ionic CLI (see below for instructions)
    3. Run ionic serve
    4. You should see something like this:
      ionic2ServerPost

If you want to make it work from your server:

  1. Make sure you’ve got the newest Ionic CLI (see below for instructions)
  2. Clone the finished project from Github
  3. Upload the PHP/api.php file to your server
  4. In the src/pages/home/home.ts file adjust the link variable (line #21) to point to your server
  5. Run ionic serve

Getting started with Ionic 3

After neglecting Ionic 3 (and for the most part Ionic 2) for far too long due to the overburdening work I still have on my Ionic 1 apps, I finally got some time to take a look at Ionic 3 and update the most popular post about Ionic on my blog, so here you go and enjoy.

In general, from me playing just a bit with Ionic 3, I have to say I love it, so expect some more posts about it soon-ish…

To install the Ionic SDK and create Ionic 3 projects, you need to install the latest Ionic CLI:

npm install -g ionic

You don’t need to worry about this messing up your current ionic CLI since the new one still works with old Ionic 1 projects.

Just for reference, here’s what my ionic info says now:

$> ionic info 

global packages:

    @ionic/cli-utils : 1.4.0
    Ionic CLI        : 3.4.0

local packages:

    @ionic/app-scripts              : 1.3.7
    @ionic/cli-plugin-ionic-angular : 1.3.1
    Ionic Framework                 : ionic-angular 3.4.2

System:

    Node       : v8.0.0
    OS         : macOS Sierra
    Xcode      : Xcode 8.3.3 Build version 8E3004b 
    ios-deploy : 1.9.1 
    ios-sim    : 5.0.13 
    npm        : 5.0.1 

Step by step on how to create this yourself from scratch

  1. Create a new blank Ionic project with:
    ionic start Ionic3ServerSendTest blank
  2. Copy the following code to src/pages/home/home.html file:
    <ion-header>
     <ion-navbar>
     <ion-title>
     Ionic3 Server Send Test
     </ion-title>
     </ion-navbar>
    </ion-header>
    
    <ion-content padding>
     <ion-list>
     <ion-item>
     <ion-label floating>Username</ion-label>
     <ion-input type="text" name="username" [(ngModel)]="data.username"></ion-input>
     </ion-item>
    
     <button ion-button block (click)="submit()">Submit to server</button>
     </ion-list>
    
     <ion-card>
     <ion-card-header>
     Response
     </ion-card-header>
    
     <ion-card-content>
     <b>{{data.response}}</b>
     </ion-card-content>
     </ion-card>
    </ion-content>
    

    Here you basically created a form with an username input field and with a button which acts as a submit button.

    Once the button is clicked AngularJS should handle it within the submit() function which we will define in our src/pages/home/home.ts file (shown below).

    Input username uses  the new syntax for ng-model , and it binds to the variable data.username, so that you can then use it in your submit() function (shown below).

    Components are a bit different in Ionic 3 now, so I encourage you can take a look at the official documentation.

  3. On your server, create an api.php file with the following content:
    <?php
        //http://stackoverflow.com/questions/18382740/cors-not-working-php
        if (isset($_SERVER['HTTP_ORIGIN'])) {
            header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
            header('Access-Control-Allow-Credentials: true');
            header('Access-Control-Max-Age: 86400');    // cache for 1 day
        }
    
        // Access-Control headers are received during OPTIONS requests
        if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    
            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
                header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
    
            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
                header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    
            exit(0);
        }
    
    
        //http://stackoverflow.com/questions/15485354/angular-http-post-to-php-and-undefined
        $postdata = file_get_contents("php://input");
        if (isset($postdata)) {
            $request = json_decode($postdata);
            $username = $request->username;
    
            if ($username != "") {
                echo "Server returns: " . $username;
            }
            else {
                echo "Empty username parameter!";
            }
        }
        else {
            echo "Not called properly with username parameter!";
        }
    ?>

    As you can see from the code, the first part is explained in detail in this StackOverflow question, and it basically solves the CORS issue that you would otherwise run into.

    The second part, explained in detail in this StackOverflow question,  deals with the way you POST data from Ionic to your PHP server. The gist is that since we POSTed in a JSON format, we have to json_decode  the data that comes to your PHP server.

  4. To the file src/pages/home/home.ts file copy the following content and adjust the link variable to point to the file on your server:
    import { Component } from '@angular/core';
    import { NavController } from 'ionic-angular';
    import { Http } from '@angular/http'; //https://stackoverflow.com/questions/43609853/angular-4-and-ionic-3-no-provider-for-http
    
    @Component({
     selector: 'page-home',
     templateUrl: 'home.html'
    })
    
    export class HomePage {
     data:any = {};
    
     constructor(public navCtrl: NavController, public http: Http) {
     this.data.username = '';
     this.data.response = '';
    
     this.http = http;
     }
    
     submit() {
     var link = 'http://nikola-breznjak.com/_testings/ionicPHP/api.php';
     var myData = JSON.stringify({username: this.data.username});
     
     this.http.post(link, myData)
     .subscribe(data => {
     this.data.response = data["_body"]; //https://stackoverflow.com/questions/39574305/property-body-does-not-exist-on-type-response
     }, error => {
     console.log("Oooops!");
     });
     }
    }

    As with the Ionic 2 tutorial, things have changed a lot since Ionic 1, but in Ionic 3 (if you come from Ionic 2) you shouldn’t have any problems. Anyways, practice makes perfect, so make sure you put in the hours of deliberate practice.

    In this file, we import the Http component from Angular. You can check out the link in the comment to learn that you also need to import and inject HttpModule in src/app/app.module.ts (two new lines that I’ve added are bolded):

    import { BrowserModule } from '@angular/platform-browser';
    import { ErrorHandler, NgModule } from '@angular/core';
    import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
    import { SplashScreen } from '@ionic-native/splash-screen';
    import { StatusBar } from '@ionic-native/status-bar';
    import { HttpModule} from '@angular/http';
    
    import { MyApp } from './app.component';
    import { HomePage } from '../pages/home/home';
    
    @NgModule({
     declarations: [
     MyApp,
     HomePage
     ],
     imports: [
     BrowserModule,
     IonicModule.forRoot(MyApp),
     HttpModule
     ],
     bootstrap: [IonicApp],
     entryComponents: [
     MyApp,
     HomePage
     ],
     providers: [
     StatusBar,
     SplashScreen,
     {provide: ErrorHandler, useClass: IonicErrorHandler}
     ]
    })
    export class AppModule {}

    Inside the HomePage class, we now have a constructor where we’re setting some default values. Important to note, see how we’re passing in Http via the constructor parameter.

    Inside the submit function we use the http service to post to our API endpoint with some data. Make note of how we use the subscribe function to handle data once it arrives. Also, make sure you check out the StackOverflow link in the comment as a solution of how to access plain text response.

  5. Run ionic serve  from the root directory of your Ionic app

That’s all folks, I hope this tutorial helps you in starting your journey towards Ionic3 & Angular4!

Posting data from #Ionic 3 app to a #PHP server https://t.co/QYKiQtq1kJ

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

Meetups

Web API on ASP.NET Core – 9th MeCoDe meetup

Meetup notes

Few Thursdays ago (18.05.2017) (yeah, I know, this post comes late, but better late than never, they say 🙂) we had our 9th MeCoDe meetup, and this time the topic was Web API on ASP.NET Core.

The presenter was Velimir Sanjković, the owner of S-Soft, who did a great job showing us first hand how to create a Web API on ASP.NET core using both Visual Studio and Visual Code.

Source code

In case you want to check out the code, you can do so via Github.

Picture time

[ngg_images source=”galleries” container_ids=”28″ 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”]

Milestones

Believe it or not, MeCoDe is one year old already!

Miscellaneou$

Weblica 2017

This was the 3rd Weblica conference in my Međimurje county (I wrote about the first one here and about the second one here).

Again, the entrance was free and every attendee got a nice T-Shirt (best design so far if you ask me), loads of stuff to eat and drink. The talks were interesting and informative, and for all this a big two thumbs up to the organizers. Also, active participants could get Microsoft keyboards, wireless mouses, USB drives, etc…

I got a mouse 🙂

Here I’ll just add few of the interesting slides from the presentations that I’ve attended. You can check the full program on Weblica’s website.

Conference oppening – Velimir Sanjković

ASP.NET Core i Angular 2 – Ratko Ćosić

[ngg_images source=”galleries” container_ids=”21″ 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”]

ASP.NET Core serving JavaScript applications – Dobriša Adamec

[ngg_images source=”galleries” container_ids=”23″ 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”]

Lunch

[ngg_images source=”galleries” container_ids=”24″ 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”]

Node.js + Docker – Davor Tarandek

[ngg_images source=”galleries” container_ids=”25″ 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 – Toni Petrina

[ngg_images source=”galleries” container_ids=”26″ 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”]

No Bulls*it Freelancer – Tomislav Kozačinski

[ngg_images source=”galleries” container_ids=”27″ 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”]

Demystified Webpack – Andrei Zvonimir Crnković

[ngg_images source=”galleries” container_ids=”22″ 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”]

All in all, a great conference and hope to see you next year…

#Weblica 2017 notes @weblica https://t.co/2UooGO7k6R

— Nikola Brežnjak (@HitmanHR) May 29, 2017

Page 19 of 51« First...10«18192021»304050...Last »

Recent posts

  • Discipline is also a talent
  • Play for the fun of it
  • The importance of failing
  • A fresh start
  • Perseverance

Categories

  • Android (3)
  • Books (114)
    • Programming (22)
  • CodeProject (35)
  • Daily Thoughts (77)
  • Go (3)
  • iOS (5)
  • JavaScript (127)
    • Angular (4)
    • Angular 2 (3)
    • Ionic (61)
    • Ionic2 (2)
    • Ionic3 (8)
    • MEAN (3)
    • NodeJS (27)
    • Phaser (1)
    • React (1)
    • Three.js (1)
    • Vue.js (2)
  • Leadership (1)
  • Meetups (8)
  • Miscellaneou$ (77)
    • Breaking News (8)
    • CodeSchool (2)
    • Hacker Games (3)
    • Pluralsight (7)
    • Projects (2)
    • Sublime Text (2)
  • PHP (6)
  • Quick tips (40)
  • 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