Uncategorized

Kubernetes DevOps day-to-day tasks and commands – Kubernetes/HELM Cheatsheet

 

Often I see members of my team struggling to remember the somehow hard to remember commands for operating Kubernetes. Its quite hard to find a descent documentation that goes straight to the point. Not much lalala, but just give me the CMD I’m looking for.

This is a curated list that I’ve been updating periodically with many of the commands I use day to day on operations, so if you know anything that is not here, please let me know! 😀

Kubernetes DevOps day-to-day tasks and commands

devops

 

Kubernetes – How to change the scope to another namespace

$ kubectl config set-context $(kubectl config current-context) --namespace=env-JIRA-1234

Kubernetes – How to List the active pods on a namespace:

$ kubectl get pods
NAME READY STATUS RESTARTS AGE
golang-api-1280745034-4s6jt 1/1 Running 0 17m
golang-api-1280745034-7knzq 1/1 Running 0 17m
``

 

Kubernetes – How to Get the logs for a POD:

$ kubectl logs golang-api-1280745034-4s6jt

 

Kubernetes – How to Get services the Load Balancer IP addresses for a Namespace:

$ kubectl get services --namespace=develop
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
(...)

 

Kubernetes – How to Get the ingres and services for a Namespace:

$ kubectl get ing,service --namespace=develop

Kubernetes – How to Get info about the services for a Namespace

$ kubectl describe services --namespace=develop 
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
(...)

Kubernetes – How to Get info about the services for ALL Namespaces

$ kubectl get services --all-namespaces
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
(...)

 

Kubernetes – How to open a proxy to a POD and expose it locally OR (How to connect to a POD directly and expose it locally)

$ kubectl port-forward golang-api-1280745034-4s6jt 8888:3000

 

Kubernetes – How to configure kubectl to always point to same cluster

$ kubectl config set-context gke_apps_europe-west1-b_europa --namespace=prod

Kubernetes – How to Get the current context (The cluster kubectl is pointing to)

$ kubectl config current-context

Kubernetes – How to setup kubectl Auto Complete

$ source <(kubectl completion bash)

Kubernetes – How to check resource utilization (TOP) for all nodes (Cluster legs)

$kubectl top nodes

Kubernetes – How to check resource utilization (TOP) for all pods in all namespaces

$ kubectl top pods --all-namespaces

Kubernetes – How to WATCH constantly the resource utilization for all pods in a particular namespace and order the results so they don’t keep changing all the time.

$ watch "kubectl top pods --namespace=prod |sort"

Kubernetes – How to WATCH constantly the resource utilization for nodes in a particular namesmace (legs) and order the results so they don’t keep changing all the time.

$ watch "kubectl top nodes --namespace=prod |sort"

Kubernetes – How to WATCH constantly the resource utilization for all pods in ALL namespaces and order the results so they don’t keep changing all the time.

$ watch "kubectl top pods --all-namespaces |sort"

 

Kubernetes – How to kill all running jobs:

`kubectl delete jobs -l `

Kubernetes – How to SSH inside a node to execute commands

 gcloud compute ssh gke-cluster-default-pool-123-4321s --zone europe-west1-c

 

Kubernetes – How to SSH inside the pod and perform a curl on the healthcheck endpoint. This is particular useful for troubleshot and assert that the service is really running and healthy.

$ kubectl exec -ti golang-api-1280745034-4s6jt curl http://localhost:3000/health`

 

Kubernetes – How to Change the configuration file  ‘on the fly’

 kubectl apply -f kubernetes/config/develop.yaml

Kubernetes – How to Restart all PODS in one go:

 $kubectl delete pods -l app=golang-api --namespace=prod

Kubernetes – How to List all Environment variables for a particular POD

$ kubectl exec -ti golang-api-4135068084-3wpb5 env --namespace=prod

Kubernetes – How to Check health for a particular backend POD from inside the frontend pod in order to test that they connect with no issues

$ kubectl exec -ti front-end-355436834-whtnp curl http://golang-api/health --namespace=prod

Kubernetes – How to Check for all logs inside the main scheduler

 $ journalctl -f

Kubernetes – How to List all pods and order them by how many times they have restarted. This is useful to detect memory leaks or debug the pods that are restarting more often.

$ kubectl get pods --sort-by=.status.containerStatuses[0].restartCount

Kubernetes – How to test that your API is returning something on a particular endpoint directly inside the POD (Useful when you deploy something but is not working .. you are pulling your hair out and hating kubernetes … keep call and curl it from inside 😀 )

$ kubectl exec -ti frontend-355436834-whtnp curl http://golang-api/find/1 --namespace=develop

 

Kubernetes – How to proxy a existing InfluxDB pod so you can use it locally:

$ kubectl port-forward --namespace monitoring $(kubectl get pods --namespace monitoring -l app=influxdb-influxdb -o jsonpath='{ .items[0].metadata.name }') 8086:8086

 

GCLOUD: How to list all images for your Docker eu.gcr.io:

gcloud

$ gcloud container images list-tags eu.gcr.io/thomasmodeneis-apps/golang-api

 

HELM DevOps day-to-day tasks and commands

helm

HELM – How to deploy a Docker image from eu.gcr.io to your cluster:

$ export NAMESPACE=develop
$ export VERSION=1.0.0
$ helm upgrade -i golang-api-$NAMESPACE ./helm_chart \ 
--namespace=$NAMESPACE 
--values helm_values/develop.yaml 
--set cluster=clustername,version=$VERSION

 

HELM – How to delete a chart and all its pods

helm delete redis-develop

 

HELM – How to delete a chart and all its pods for a specific namespace:

helm delete redis-develop --namespace=cache-develop

 

HELM – How to delete a chart and all its pods and purge it, in order to also delete PV and PVC’s associated to it: (Caution, this will delete all your data from stored disks).

helm delete redis-develop --purge

 

 

I hope it helps,

 

Happy opensource coding for everyone 😀

Advertisements
Uncategorized

The 2017 – OpenSource Development Laptop

The begin of …

Its 2017, Long after this post could be written, I suffered long days and nights on Windows on the 90’s, why not, almost all possible Windows combinations of it … Windows 3.11, Windows 95, Windows 2000, Windows XP, Windows NT …

Bill-Gates-Will-Teach-You-How-to-Count-Windows-10-Meme

Oh, it was a hell of a pain, it was proprietary, expensive and, well it was Windows …

How nice it was when Windows suggested for us to look online for solutions … exactly when the internet was not working …

The middle age …

Until one day I decided it was about time to kill the old Windows and get myself a brand new fancy Macbook… I had them all, Macs 10.4, 10.5, 10.6, 10.7, 10.8, 10.9 …

Until one day …

Latest release: Macbook Pro 13-inch
macpro2017

Specs:

  • Processor: 2,9‑GHz dual‑core Intel Core i5‑processor
    Memory: 16 GB DDR3 2133‑MHz,
  • HD: SSD van 512 GB1
    Graphics Card: Intel Iris Graphics 550

Price: 2.439,00 euros.

But … Its 2017, all the other vendors are shipping notebooks with 64GB, i7 or Xeon with 8 cores processor and fully configurable, but Macbook Pro, comes locked, sealed …can touch it .. its just fancy, the hardware is capped.

So I decided it was time …

2weeks

The Macbook Pro is dead, long live the king!

Linux on a High-end Laptop, is it worth it ?

Yes it does, and to confirm that I took the challenge to buy two new laptops.

I did long research on the web to find the best price for my money, because I have a development team, is important that all the developers have proper computers to be able to process BigData computations with really memory consuming frameworks for Map-Reduce and several other databases that the projects this days are demanding …

After researching for months, I decided with two good machines: Lenovo P50 and Dell Skylake Precision.

Lenovo Thinkpad P50 with Ubuntu 16.04

lenovo-p50-keyboard

Specs:

Intel Core i7-6820HQ 2.7 GHz @ 2.7 GHz (Intel Core i7) – 8 cores.
Graphics adapter NVIDIA Quadro M2000M – 4096 MB, Core: 1136 MHz, Memory: 1252 MHz, GDDR5, ForceWare 354.25, Optimus

64GB DDR4 Ram Corsair.

Price: 2.400 euros.

Installing Ubuntu 16.04 on it was easy but I found after the purchase a very unpleasant defect: External Display issue on P50 Linux

It took me days to figure a way out, in the end I decided to install Kubuntu …

 

Lenovo Thinkpad P50 with Kubuntu 16.04 … making your High-end Laptop friendly

Kubuntu is an operating system built by a worldwide community of developers, testers, supporters and translators. Kubuntu is a free, complete, and open-source alternative to Windows and Mac OS X which contains everything you need to work, play or share. Check out the Feature Tour if you would like to learn more!

Screenshot_20170521_185641

Kubuntu 16.04.2 LTS

Download Kubuntu 16.04.2 LTS from http://www.kubuntu.org/alternative-downloads 

Download and Install the ISO file into the pendrive using UNetbootin https://unetbootin.github.io/ and boot from it.

UNebooin

Boot your computer from the pendrive and after installing Kubuntu, Open System Settings, Display and Monitor and configure your second monitor:

 There you go, ready for Real Open Source Software Development with two screens.
Now the alternative for Lenovo on the other side of the coin behaves much better with Ubuntu 16.04:

Dell Skylake Precision 5520 with Ubuntu 16.04

dell-laptop-100618568-large

Specs: Intel Core i7-6700HQ 2.60GHz, GeForce GTX 960M/PCIe/SSE2

16GB DDR4 Ram Corsair.

500 GB Generic HDD.

Price: 2.100

Easy to install as well, in 30 minutes I had Ubuntu running with two monitors and no issues so far, making Dell Skylake the best buy for Ubuntu 16.04.

 

 

except after I put it for sleep and after awake … Suddenly all my dreams went apart, and the UI started to behave buggy 😦

 

Problem with Nvidia drivers

nviidadefect

It took me few days to figure a way out, I was just without time and restart the computer seemed to work, so oh … I happened to have this defect for two months, until one day I had enough and decided it was time for a proper fix.

How to fix Strange window borders after waking computer from sleep mode on Ubuntu 16.04

nvidiadefect

This fix is already packaged, but unfortunately is not yet available from the standard repositories, but you can easily get it from a PPA and replace your current driver with it by running the following commands:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt purge nvidia*
sudo apt install nvidia-381

After you finished, reboot and the issue should be gone.

Conclusion:

Yes, is time for OpenSource software development … There is proper hardware and proper Software for doing it so, thats I’m more than sure by now.

10 reasons why you should get a High-end Laptop with Linux for your next workstation: 

1. Ubuntu is user-friendly
2. Ubuntu is free
3. It’s secure. Say no to anti-virus.
4. It supported on High-End notebooks
5. Tons of Ubuntu flavors, [SOLVED] Kubuntu enabled Thinkpad P50 to run Linux with two monitors.
6. Supportive Ubuntu community, all this answers could not be provided without the community.
7. Low system requirements, it can run from the low to the high-end.
8. Tons of free software in Software Center
9. Improved compatibility, included drivers, [SOLVED] Dell Skylake Precision 5520 NVidia borders issue.
10. It’s open source

 

The long dark ages of vendor locking are gone, today is easy and simple to get your new computer with Ubuntu 16.04.

 

Get Ubuntu/Kubuntu on your next Notebook and enjoy the power of having 64GB DDR4 RAM.

 

Why not give it a try ?

Happy coding to everyone.

Uncategorized

How to restore KDE Plasma without restarting the computer

Hi,

If you are developing on KDE  for a while, you may experience that your KDE Plasma desktop environment will sometimes stop responding properly, or it will start taking a long time to do anything.

kde-plasma-5.9-wallpaper-750x469

Some people will just take the hit and reboot computer, I don’t like restarting … so, I decided it was about time to properly document the steps I have to do once in a while and use this for my own understanding … and maybe, help someone else.

Screenshot_20170514_112630

How To Restart KDE Plasma on Kubuntu

  • Open a terminal and run the following command:
kquitapp5 plasmashell && kstart plasmashell
  • The output for the command should be something like this:
  • $ kquitapp5 plasmashell && kstart plasmashell
    kstart(26096) main: Omitting both --window and --windowclass arguments is not recommended

Don’t worry about the warning, it should work with no problems.

You may experience that this shell after running the command, will be printing the logs of plasma for you, something like this is expected to happen:

$ org.kde.plasma.pulseaudio: No object for name "alsa_output.pci-0000_00_1f.3.analog-stereo"
org.kde.plasma.pulseaudio: No object for name "alsa_output.pci-0000_00_1f.3.analog-stereo"
org.kde.plasma.pulseaudio: No object for name "alsa_input.pci-0000_00_1f.3.analog-stereo"
libkcups: Cancel-Subscription last error: 0 successful-ok
file:///usr/share/plasma/shells/org.kde.plasma.desktop/contents/views/Panel.qml:83: TypeError: Cannot read property 'Layout' of null
Connecting to deprecated signal QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
file:///usr/share/plasma/plasmoids/org.kde.plasma.digitalclock/contents/ui/DigitalClock.qml:443:5: QML Text: Cannot anchor to a null item.
Notifications service registered
libkcups: Get-Jobs last error: 0 successful-ok
libkcups: Get-Jobs last error: 0 successful-ok
libkcups: Create-Printer-Subscriptions last error: 0 successful-ok
Plasma Shell startup completed
libkcups: 0
libkcups: 0
Both point size and pixel size set. Using pixel size.
networkmanager-qt: void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap&) Unhandled property "AllDevices"
networkmanager-qt: void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap&) Unhandled property "Devices"
networkmanager-qt: void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap&) Unhandled property "GlobalDnsConfiguration"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "S390Subchannels"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
ktp-common-internals: Current presence changed
ktp-common-internals: Current presence changed



Other variant for the error:

libkcups: Get-Jobs last error: 0 successful-ok
 libkcups: 0
 libkcups: Get-Jobs last error: 0 successful-ok
 libkcups: 0
 QXcbConnection: XCB error: 2 (BadValue), sequence: 762, resource id: 20971554, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 767, resource id: 20971552, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 772, resource id: 20971550, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 777, resource id: 20971549, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 782, resource id: 20971548, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 787, resource id: 20971547, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 792, resource id: 20971545, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 797, resource id: 20971544, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 802, resource id: 20971543, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 807, resource id: 20971542, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 812, resource id: 20971541, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 817, resource id: 20971540, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 822, resource id: 20971539, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 827, resource id: 20971538, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 832, resource id: 20971536, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 837, resource id: 20971535, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 842, resource id: 20971534, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 847, resource id: 20971752, major code: 142 (Unknown), minor code: 3
 QXcbConnection: XCB error: 2 (BadValue), sequence: 852, resource id: 20971761, major code: 142 (Unknown), minor code: 3
 org.kde.plasma.pulseaudio: No object for name "alsa_output.pci-0000_00_1f.3.analog-stereo"
 org.kde.plasma.pulseaudio: No object for name "alsa_output.pci-0000_00_1f.3.analog-stereo"
 org.kde.plasma.pulseaudio: No object for name "alsa_input.pci-0000_00_1f.3.analog-stereo"

 

Restarting KDE Plasma common errors

It maybe that the plasma will just refuse to die and it will throw rocks back to you:

$ kquitapp5 plasmashell && kstart plasmashell
 "Quitting application plasmashell failed. Error reported was:\n\n org.freedesktop.DBus.Error.UnknownObject : No such object path '/MainApplication'"

 

$ kquitapp5 plasmashell | true && kstart plasmashell | true "Quitting application plasmashell failed. Error reported was:\n\n org.freedesktop.DBus.Error.NoReply : Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken." kstart(577) main: Omitting both --window and --windowclass arguments is not recommended

 

Restarting KDE Plasma ignoring errors

This command will ignore the error exit from the first command and continue processing the start even if the kquitapp5 fails to execute.

 

$ kquitapp5 plasmashell | true && kstart plasmashell | true
  ..
  ..
 org.kde.plasma.pulseaudio: No object for name "alsa_output.pci-0000_00_1f.3.analog-stereo"
 org.kde.plasma.pulseaudio: No object for name "alsa_output.pci-0000_00_1f.3.analog-stereo"
 org.kde.plasma.pulseaudio: No object for name "alsa_input.pci-0000_00_1f.3.analog-stereo"
 kstart(6920) main: Omitting both --window and --windowclass arguments is not recommended
 libkcups: Cancel-Subscription last error: 0 successful-ok
 libkcups: Create-Printer-Subscriptions last error: 0 successful-ok
 libkcups: Cancel-Subscription last error: 0 successful-ok

$ kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
file:///usr/share/plasma/shells/org.kde.plasma.desktop/contents/views/Panel.qml:83: TypeError: Cannot read property 'Layout' of null
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
Connecting to deprecated signal QDBusConnectionInterface::serviceOwnerChanged(QString,QString,QString)
Trying to use rootObject before initialization is completed, whilst using setInitializationDelayed. Forcing completion
file:///usr/share/plasma/plasmoids/org.kde.plasma.digitalclock/contents/ui/DigitalClock.qml:443:5: QML Text: Cannot anchor to a null item.
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
Trying to use rootObject before initialization is completed, whilst using setInitializationDelayed. Forcing completion
Notifications service registered
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
libkcups: Get-Jobs last error: 0 successful-ok
libkcups: Get-Jobs last error: 0 successful-ok
libkcups: Create-Printer-Subscriptions last error: 0 successful-ok
file:///usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/ScrollView.qml:350: TypeError: Cannot read property 'padding' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/ScrollView.qml:349: TypeError: Cannot read property 'padding' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/ScrollView.qml:348: TypeError: Cannot read property 'padding' of null
file:///usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/ScrollView.qml:347: TypeError: Cannot read property 'padding' of null
Plasma Shell startup completed
libkcups: 0
libkcups: 0
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
Both point size and pixel size set. Using pixel size.
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
networkmanager-qt: void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap&) Unhandled property "AllDevices"
networkmanager-qt: void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap&) Unhandled property "Devices"
networkmanager-qt: void NetworkManager::NetworkManagerPrivate::propertiesChanged(const QVariantMap&) Unhandled property "GlobalDnsConfiguration"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "S390Subchannels"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "LldpNeighbors"
networkmanager-qt: virtual void NetworkManager::DevicePrivate::propertyChanged(const QString&, const QVariant&) Unhandled property "Real"
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
kf5.kcoreaddons.desktopparser: Could not locate service type file kservicetypes5/plasma-popupapplet.desktop, tried ("/home/u/.local/share", "/usr/share/plasma", "/usr/local/share", "/usr/share", "/var/lib/snapd/desktop")
ktp-common-internals: Current presence changed
ktp-common-internals: Current presence changed

 


Restarting KDE Plasma by Killing plasmashell and then restart it in the background (ignore output).

$ killall plasmashell && plasmashell > /dev/null 2>&1 & disown
[1] 2054

 

Restarting KDE Plasma by running kquitapp5 and then restart it in the background.

 kquitapp5 plasmashell && plasmashell &

 

 

I hope it helps.

Happy open-source coding to everyone! 🙂

linux, rethinkdb, Uncategorized

Running a RethinkDB Proxy as Daemon

 

In this article we are going to learn the commands and steps to have a install daemonize package on Ubuntu 16.10,Ubuntu 14.04, CentOS 6, CentOS 7, Fedora, etc …

Quick Install Daemonize:

wget https://github.com/bmc/daemonize/archive/release-1.7.7.tar.gz
tar -xvzf release-1.7.7.tar.gz
cd daemonize-release-1.7.7/
sh configure
make
sudo make install

 

Running RethinkDB Proxy with Daemonize:

daemonize -E BUILD_ID=dontKillMe -p /opt/rethinkdb_proxy.pid \ 
/usr/bin/rethinkdb proxy --join yourcluster:29015 \
--http-port 8095 --bind all

 

Check all the other usages for daemonize:

# daemonize
daemonize, version 1.7.7
Usage: daemonize [OPTIONS] path [arg] ...

OPTIONS

-a Append to, instead of overwriting, output files. Ignored
 unless -e and/or -o are specified.
-c <dir> Set daemon's working directory to <dir>.
-e <stderr> Send daemon's stderr to file <stderr>, instead of /dev/null.
-E var=value Pass environment setting to daemon. May appear multiple times.
-o <stdout> Send daemon's stdout to file <stdout>, instead of /dev/null.
-p <pidfile> Save PID to <pidfile>.
-u <user> Run daemon as user <user>. Requires invocation as root.
-l <lockfile> Single-instance checking using lockfile <lockfile>.
-v Issue verbose messages to stdout while daemonizing.

 

Cheers.

Uncategorized

Developers don’t leave jobs, They leave their managers

dilbert20069158902091

Manage developers is not an easy task, and its really hard to find a good manager this days.
And the market is really overloaded with recruiters that will do EVERYTHING then can and even what they can’t to get your best developer out to another company, and sometimes they don’t even need to offer more money, are you wondering why??

Is hard is to hire good people but is even harder is to keep them on the job. Today’s companies and big brands are trying to hire developers for a permanent role for YEARS and they can’t find anyone good, I mean, good developers are not even applying for the roles. :O

Do you wonder why? I will tell you this, from the point of view of a Developer, what are the worst things you can do to your good people and how to avoid having your good people packing…

Believe me or not, All that’s required is a new perspective and some effort on the manager’s part.

1. Recognize Contributions and Reward Good Work

Its easy to underestimate the power of the high five, or the thank you very much, or the “great job mate, I’m really proud of working with you”. Top performers are intrinsically motivated, but when you work hard, what you really want may be just a “Well done mate, I really like working with you”. Everyone likes cheering, especially those who work hard and give all in.
Managers should communicate with their people to find out what makes them feel good and then to reward them for a job well done.
BUT Make sure you recognize the right people, recognize the bad people instead of the good ones, is a SERIOUS mistake.

2. Care about your Employee

Almost everyone that I know will instantaneously leave their jobs because of their relationship with their management. Smart companies make sure that managers knows how to be HUMANS and balance professional life with personal life. I mean, “take that grumpy face out and wear some smile for god sake”.
Celebrate an employee’s success, empathize with those going through hard times, managers who fail to care will always have high turnover rates. People will leave. It’s impossible to work for someone eight-plus hours a day and be asked to stay extra or over the weekend when your boss is an grumpy cat.

3. Don’t overwork People

I know, is really tempting to work your best people hard. Don’t fall into this trap.
A Stanford research shows that productivity declines sharply when the workweek exceeds 50 hours, and productivity drops off so much after 55 hours that you don’t get anything out of working more.
Overworking good employees is easy to do, but it just makes them feel as if they’re being punished for great performance and is counterproductive. Just think, If you want people to work harder, you need to give something back, increase their status, or pay rise. Nobody will stay if their job suffocates them. Get that best developer and give him a raise, a promotion or a title-changes. If you simply increase workload because people are talented, without changing a thing, they will leave you, there are TONS of recruitment agencies hunting people down, and for a developer to move a job this days is as easy as going out for a beer.

4. Honor your word.

Making promises to people is dangerous when you don’t mean it. If you say something you better do it. Or don’t say a word. Otherwise you may be watching your good developer walking out the door. Sad but true. Instead, if you uphold a commitment, you grow in respect and you prove yourself to be trustworthy and honorable. But when you disregard your commitment is just disrespectful. After all, if the boss doesn’t honor his or her commitments, why should I ?
“A leader leads by example, not by force.” Sun Tzu.

5. Hire a bad developer / someone who don’t work hard

If you are working in an environment where you are the smartest person, you are in the wrong company. I mean, everyone knows it.
Good and hard-working professionals want to work with like-minded professionals. When managers don’t do the hard work of hiring good people, it’s hell-like for those who stuck working alongside them. Promoting the wrong people is even worse. It’s a massive insult. No wonder it makes good people leave.

6. Let People Pursue Their Dreams

Talented employees are passionate, just like evangelists. Providing opportunities for them to pursue their passions improves their productivity and satisfaction. Its easy to think as a bad manager and force people to work within a little box, fearing that productivity will decline if they let people expand their focus and pursue their passions.
This fear is just not true, studies show that people who are able to pursue their passions at work experience flow, a euphoric state of mind that is five times more productive than those who don’t pursue their dreams. So, dream on with your developers, let them fly and give them guidance!

7. Help them to Develop new Skills

The most talented employees want to develop new skills, so that they can take up new challenges, your job as a Manager is to keep it coming, get them exiting things to do, If you don’t, your best people will grow bored and leave, believe me.
What is most impressive about this topic is: When I ask a manager their inattention to employees, I often hear the excuse, using words such as “trust,” “autonomy,” and “empowerment.” This is bullshit. Good managers manage, no matter how talented the employee. Pay attention on what people are working on be constantly listening and PLEASE give feedback. Management may have a beginning, but it certainly has no end. When you have a talented employee, it’s up to you to keep him exited and helping him to improve & expand their skill set.

8. Never fail to Engage improvements

The most talented employees seek to improve everything they see or work with. Promote night-hacking’s, challenges, games, algorithms and rewards. If you take away their ability to change and improve things because you’re not comfortable with it ? this makes them hate their jobs, really do. Failing to catch up on this not only limits them, it limits you.

9. Never fail to challenge people with their skills

Great managers challenge, they push but not too much. Instead of setting mundane, incremental goals, play withy lofty goals that push people out of their comfort zones. You have to do everything in your power to help them succeed. When talented and intelligent people find themselves doing things that are too easy or boring, they seek other jobs and they will walk out that door.

I hope this may help you to avoid crying over spilt milk, take of that grumpy face, start smiling, learn something technical, get closer to your developers, learn, go and do things with them, be part of the team and you will be rewarded with excellent professionals, avoid contact, behave as an asshole and you will be left with the as-slickers, the decision is up to you.

“Victorious warriors win first and then go to war, while defeated warriors go to war first and then seek to win.” Sun Tzu

Uncategorized

Google creates a new parent company called Alphabet

Google announced late Yesterday, that it is creating a new parent company called Alphabet, which will be run by its two founders, Larry Page and Sergey Brin.

company-products

No, this does not appear to be an April Fool’s joke o/
They really created a company called Alphabet, that looks exactly like the image above, all the google products may one day full-fill the whole alphabet ? no one knows, but one thing we know, The operational change may help establish Google (or Alphabet) as an alternate version of Berkshire Hathaway, the portfolio of longterm businesses and investments run by famed investor Warren Buffett.

“Our company is operating well today, but we think we can make it cleaner and more accountable,”
“So we are creating a new company, called Alphabet. I am really excited to be running Alphabet as CEO with help from my capable partner, Sergey, as President.”

In essence, this allows Google to build a more robust portfolio of businesses, each with its own dedicated CEO, under the Alphabet umbrella.

Alphabet will replace Google Inc. as the business traded on the stock market; Google, the service, will be the largest single entity owned by that parent company.

Read the announcement “G is for Google.”

Uncategorized

Leadership on a technical commitee vs hiring and appointing the leader (io.js vs node.js)

NodeJS is an open source project. In 2013, it was acquired by Joyent.
The most popular fork of Node.js is io.js.

What? There is a fork of NodeJS? Why ? What happened ?
After the acquisition of NodeJS by Joyent, developers were not satisfied with the decisions taken.

Joyent, as any big company would do, after acquiring NodeJS, started to impose a different style of leadership.

Some people say this style can be defined as:
1. hire new staff
2. appoint the leaders
3. control developers tasks and new features.

What are the differences between NodeJS and io.js?

io.js:

1. this repository began as a GitHub fork of joyent/node
2. community-driven development together with active release cycles
3. includes many of the original Node.js developers
4. NodeJS new features are being merged into io.js
5. contributions and releases are under an open governance model.

Node.js:

1. NodeJS was invented in 2009 by Ryan Dahl, and other developers working at Joyent.
2. has slowed down development in recent time
3. sponsored by Joyent
4. Joyent owns the trademark Node.js
5. Advisory Board.

Wait, wait, this one is really important, so what is this Advisory Board again?
Lets make a quote from Joyent’s blog:

“As the community becomes more complex, it is important that we find ways to balance the needs of all constituents and provide a platform for these organizations to come together and to provide input into the project.”

Previously, Node.js was run via mailing lists, GitHub issues, and anyone could contribute ideas. But, after this transition to the advisory board, the community started getting some hate because it brought control away from the everyday contributors and moved the power to the “big shots”: companies such as Walmart, Yahoo, IBM, Microsoft, Joyent, Netflix, and PayPal.

I read in many many blogs and heard talking to people, that this caused frustration to contributors when pull requests where not accepted. So then people decided to make a fork of the entire NodeJS project, this is the origin of ‘IO.JS’.

Several NodeJS core contributors like Isaac Schlueter who was the leader of the Nodejs project and Ryan Dahl joined aiming to address a growing pile of concerns that NodeJS developers and contributors have.

I will make here a very unfair developers battle:

NodeJS vs io.js

Round 1:
NodeJS: Joyent wants NodeJS to stable. This means that NodeJS stays on an older version of V8. Consequently NodeJS does not support newest Javascript features.

io.js: is landing all changes to V8 as soon as they become stable, making this features available to devs asap.

NodeJS 0 x 1 io.js


Round 2:

NodeJS: Each odd release (as 0.11.x) is unstable and each even release is stable.
This lead the community to be waiting for v 0.12 for several months and many times to only be put off for later at least twice. The community has been waiting for the release for at-least a year now. Node looks at 0.12 as a staging point for 1.0 although the framework has been stable for a long time.

io.js: wants to use semantic version and update their version number whenever a breaking change occurs and move on, instead of using it as a lure to convince enterprises which are still skeptical of Node. This is why io.js reached v1.0 before NodeJS did and will probably stay ahead of Node in this matter.

NodeJS 0 x 2 io.js


Round 3:

NodeJS: Another strong feeling among developers is that a Benevolent Dictator style leadership has been promoted by Joyent has stopped working and that the community should have a more open governance.

io.js: bases its leadership on a technical commitee which takes care of the project’s governance based on consensus and not based on the descisions of an individual.

NodeJS 0 x 3 io.js


Round 4:

Currently, io.js is in multiple aspects, a bit faster than Node.js.

The complete performance benchmark can be found here: https://raygun.io/blog/2015/02/node-js-performance-node-js-vs-io-js/

NodeJS 0 x 4 io.js

Round 5:

io.js’s ECMAScript 6 support is much broader than Node.js. Comparison can be found here. http://kangax.github.io/compat-table/es6/#iojs

NodeJS 0 x 5 io.js

Round 6:

io.js ships with Google V8 4.1.0.25, and Node.js 0.12.1 ships with V8 3.28.73. Also, flags for ECMAScript 6 are different between Node.js and io.js. io.js’s guide to ECMAScript 6 flags can be found here. http://kangax.github.io/compat-table/es6/#iojs

NodeJS 0 x 6 io.js

Round 7:

NodeJS: Over the last year or so, the number of commits on the Node.js repo has been steadily decreasing.
nodejscontributions

Even worse, the number of releases of node drastically reduced in 2014.
nodejsreleases

io.js: Over the last months, the number of commits in the io.js repo has been just increasing.
iojscontributions

Result:

NodeJS 0 x 7 io.js

Conclusion:
io.js is based on a Technical Commitee which in practice takes care of the project’s governance based on consensus and not based on the descisions of an individual or just big brand companies. So far, by doing our unfair comparision this seems to be working better than the Advisory Board.

The IO.js is based on collaboration and people are complaining that Joyent doesn’t seem to be doing much to adapt to developers.

Reference:
https://raygun.io/blog/2015/02/node-js-performance-node-js-vs-io-js/
http://stackoverflow.com/questions/27309412/what-is-the-difference-between-node-js-and-io-js
http://www.infoworld.com/article/2855057/application-development/why-iojs-decided-to-fork-nodejs.html
http://www.quora.com/Why-is-NodeJS-splitting-into-two-versions-io-js-and-node-js
https://nodesource.com/blog/nodejs-v012-iojs-and-the-nodesource-linux-repositories