Markdown editors

I have searched and tested several editors during these days, and I was able to narrow down the selection to my needs. Typora and Mark Text.

tl;dr

Typora is beautiful, easy and just works. currently at Version 0.99.32.1 free, when 1.0 is here, you need to buy a license.

Mark Text is beautiful, easy, has a better support for mermaid and IS FREE.
the only downside for me: on my ubuntu it has a slight lag.

Typora - typora.io | github

Markdown WYSIWYG

MD Code Editor

MarkText - marktext.app | github

Editor view

Source Code View

cloud encryption: cryptomator

Here is a great solution for anyone who wants to encrypt their data before putting it onto the cloud.

https://cryptomator.org/

It's an open-source encryption software for PC, MAC, Linux, Android, and iOS. So every common plattform is supported.

How is it encrypted?

In short:
You get a realtime de-/encrypted container.

the password: scrypt
the files: AES-GCM (256 Bit)
(the filenames are also encrypted beforehand)

See the full documentation on that here: https://docs.cryptomator.org/en/latest/security/architecture/

pc windows example

Note

There are multiple files generated. good for cloud sync.
The structure looks for similar to the files and folders created with ENC DataVault by ENC Security
You get a "light" Version (which enables AES 256 bit) of that software with buying a Sandisk Cruzer USB Stick. I've bought the pro version allowing multiple, military-grade AES 512 and also AES 1024 bit containers.
=> cryptomator has a better usability

Use cases

In my case, I use it to safely share and access data between my windows pc, linux (ubuntu) and android smartphone.

On mobile, you get the option to sync your taken pictures encrypted into one container. for convenience, there is the option of entering your credentials to encrypted containers via fingerprint.

It would be possible to share cloud storage with other family members and keep private data protected.

You could also just encrypt your files locally on an external disk.

About the company: Skymatic GmbH

It's born as a german startup with the idea: there are a few cloud encryption tools available... but no one has made their code open source to be transparent and also more secure.

They also provide company licenses for implementing their technology into your own software or you can get an enterprise solution for encrypted file storing and sharing: cryptomator server https://server.cryptomator.org/

Pricing

Nov 2019:
PC / Linux / Mac: Pay what you want

0 EUR, 9 EUR, 15 EUR, 25 EUR or what you want

Android and iOS:

iOS 5,99 EUR - 4,99 USD
Android 9,99 EUR
right now there is a discount for 5,99 EUR

Secure E-Mail with Gpg4win

On the 07.05.2019 the BSI (Federal Office for Information Security) has released a press article that federal institutions may use Gpg4win ( https://www.gpg4win.de/ ) to send VS-NfD / restricted data via mail.
which means for us..
-> if it's safe for restricted federal data...
-> it's safe to use for everyone's emails as well 🙂

https://www.bsi.bund.de/DE/Presse/Pressemitteilungen/Presse2019/Gpg4win-mit-VS-NfD-070519.html

A note on why you should encrypt and what the software does, can be found here

https://www.bsi.bund.de/DE/Themen/Kryptografie_Kryptotechnologie/Kryptotechnologie/Gpg4win/gpg4win_node.html

Basically.. if you send private messages... in the realworld, you wouldn't want to send several things readable to everyone on the way either, like on a postcard.

=> On the web.. sending emails is like sending postcards...

Of course, TLS/SSL helps that the way your message is transferred safely.. but on the servers, your emails are still readable in clear text.
Oh.. wait.. there is the patriot act, which allows national agencies to access to those on demand. but not only the USA has such laws..

The thing is, that federal security agencies like the NSA might copy your emails and make profiles from it.
Even your metadata 😉 speaks a lot about you
who you are friend with.. what topics you talk to them.. when you are awake, if you are in vacations, from which location/computer you send your email from... and many more

The goal here is: END to END
private/public key encryption (RSA)

How does RSA work?

You can encrypt with a public key but only decrypt with a private key.
https://www.tutorialspoint.com/cryptography/public_key_encryption.htm

You generate a password-protected private key, which you don't share.
With this one, you generate a public key.

Now you send your public key to the other person.
The other person encrypts the message with your public key and sends it to you.
You can decrypt the message with your private key.

I'll make a tutorial on how actually to use Gpg4win

Write Clean Javascript Code

A awesome resouce on writing clean javascript code
https://github.com/ryanmcdermott/clean-code-javascript

based on Robert C. Martin's book
Clean Code: A Handbook of Agile Software Craftsmanship

"The only valid measurement of code quality is WTFs/minute"

Variables

  • Use meaningful and pronounceable variable names
  • Use the same vocabulary for the same type of variable
  • Use searchable names
  • Use explanatory variables
  • Avoid Mental Mapping
  • Don't add unneeded context
  • Use default arguments instead of short circuiting or conditionals

Functions

  • Function arguments (2 or fewer ideally)
  • Functions should do one thing
  • Function names should say what they do
  • Functions should only be one level of abstraction
  • Remove duplicate code
  • Set default objects with Object.assign
  • Don't use flags as function parameters
  • Avoid Side Effects
  • Don't write to global functions
  • Favor functional programming over imperative programming
  • Encapsulate conditionals
  • Avoid negative conditionals
  • Avoid conditionals
  • Avoid type-checking
  • Don't over-optimize
  • Remove dead code

Objects and Data Structures

  • Use getters and setters
  • Make objects have private members

Classes

  • Prefer ES2015/ES6 classes over ES5 plain functions
  • Use method chaining
  • Prefer composition over inheritance

SOLID

  • Single Responsibility Principle (SRP)
  • Open/Closed Principle (OCP)
  • Liskov Substitution Principle (LSP)
  • Interface Segregation Principle (ISP)
  • Dependency Inversion Principle (DIP)

Testing

  • Single concept per test

Concurrency

  • Use Promises, not callbacks
  • Async/Await are even cleaner than Promises

Error Handling

  • Don't ignore caught errors
  • Don't ignore rejected promises

Formatting

  • Use consistent capitalization
  • Function callers and callees should be close

Comments

  • Only comment things that have business logic complexity.
  • Don't leave commented out code in your codebase
  • Don't have journal comments
  • Avoid positional markers

Microservices, APIs, SOA


I found a great article on "Microservices, SOA, and APIs: Friends or enemies?"
check it out.. really easy to understand the differences

https://developer.ibm.com/tutorials/1601_clark-trs/


A little bit about Microservices:

It's often said.. complex code is spaghetti code (with meatballs = OOP), well structured layered code is lasagne code.. and microservices ravioli code.

On bigger applications.. a well thought out monolithic modular app might not be enough or at least not performant enough.

Big companies like Netflix talk about it.
https://www.nginx.com/blog/microservices-at-netflix-architectural-best-practices/

The millions of users require:

  • fast startup times,
  • easy and reactive ui,
  • working movies (main functionality),
  • no downtimes and
  • always new features/updates.

The solution to this of course is a microservice application


Thoughts before creating microservice instead of monolithic applications:

  • Do you need to scale? How much concurrent users do you have?
  • Does your application or several parts really need to have a high-availability?
  • Do you develop in separate teams or is everyone on one team?

Benefits

  • Scalability:
  • Microservices can be monitored really well, giving you metrics to find services with high hardware requirements or faulting services
  • run multiple instances for particular services, making reaction times really fast by also giving you a high availability (in case they crash)
  • You can run/scale on multiple Servers / PaaS Instances (Pivotal, AWS, ...) with different spec requirements depending on what your microservices needs
  • Improved Isolation:
  • every Microservice should be one logical part and thus can be updated or refactored or exchanged separate without affecting the others
  • By doing only one particular job (bounded context).. your microservices become easier to read, test and optimize
  • You can use multiple programming languages in one project. eg. node.js, ruby, c#, python, c, R.. in the end you talk via API
  • Background Services:
  • You can run background jobs, which wait for events to start working. they can do things without your interaction.

Disadvantages

  • Distributed System Complexity (Logging, Monitoring, Network, Msg Queues, Multiple Instances, )
  • with more Services, more parts can fail
  • Architecture causes network-load and can be slowed down by network-latency
  • May have double code for same helper functionalities

Programming Services it is highly recommended to apply the principles of

12 Factor Apps

https://12factor.net/

  • Code is Version controlled with many deploys [Codebase]
  • Dependencies are declared and isolated in a manifest [Dependencies]
  • Configurations are stored in ENVironment variables, not config files [Config]
  • Service are attached Resources, which can be consumed over Network (local or 3rd Party) and can be detached at will [Backing Service]
  • Build and Run stages are seperated. Providing a faster, tested and better Release Management. [Build, release, run]
  • Services are Stateless. They share nothing. They only use persistent data from backing stores. Thus they can easily be scaled. [Process]
  • To fit the concurrency needs, services are exported via Port Binding. [Concurrency]
  • Processes should be designed to be disposable without hassle [Disposable]
  • You should have a similar Developement and Production environment, designed for continuous integration. [Dev/Prod parity]
  • Logs should be treated as Event Streams. The App should never be concerned of storing logs. [Logs]
  • Management Tasks running as Processes: no local terminal, no direct db access. [Admin processes]

Terminator won’t start

I ran into a stupid error.

My terminal client Terminator wouldn't start on ubuntu and I didn't get any no error either.

I started it via terminal. Here I got the following error:

/usr/bin/terminator
except (KeyError,ValueError), ex

I found the problem and solution
python3 was changed to my default system python

=> changed it back to 2.7, everything works again

I use update-alternatives

you can set up things easily. eg. python

check if it's maybe already set up for python

# CHECK if setup for python
update-alternatives --list python

otherwise set up the alternatives

# SETUP ALTERNATIVE 1
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

# SETUP ALTERNATIVE 2
update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2

and configure the version you want to be used by default

# CONFIGURE
update-alternatives --config python

There are 2 choices for the alternative python (providing /usr/bin/python).
Selection Path Priority Status
0 /usr/bin/python3.6 2 auto mode
1 /usr/bin/python2.7 1 manual mode
2 /usr/bin/python3.6 2 manual mode
Press to keep the current choice[*], or type selection number:

RIPE NCC Badges

Here are some Badges of courses I've taken.

  

You get also PDF certificates which you can print.

https://academy.ripe.net/

RIPE Database Expert Course

What you actually learn: 
How to get Data out of the RIPE DB, how to Register new IPs.
Best practice for registering Networks.

1 - RIPE Database Basics
Let's get started! Learn about the different object types and how they relate to each other.

2 - Registering Contact Information
Create your first RIPE Database objects. Learn how to create a person and role object in the RIPE Database.

3 - Querying the RIPE Database
How can you find information in the RIPE Database? And how can you manage your search results?

4 - Protection Mechanisms
All of your RIPE Database objects must be protected. Learn how to add maintainers to your objects.

5 - Creating Assignments
Learn the concept of hierarchical authorisation and create assignments in the RIPE Database.

6 - ROUTE and ROUTE6 Objects
Learn what route and route6 objects are and how you can create them.

7 - Reverse Delegation
Learn how you can setup reverse DNS delegation in the RIPE Database

Introduction to IPv6 Course

What you actually learn:
How IPv6 works and whats different in v6 Protocols (instead of ARP, RIP, DHCP).
How many IP subnets to assign for different needs (sizes of houses, companies).
How to implement some security features, based on IPv6 Addresses.

1. From IPv4 to IPv6
Let's get started! From IPv4 exhaustion straight into IPv6. Let's see why it is a good idea to start working on your IPv6 network.

2. IPv6 Address Basics
Learn how to write IPv6 addresses correctly and calculate your first IPv6 subnets.

3. IPv6 Transition Mechanisms
What are the most used IPv6 Transition Mechanisms? Go through our list to learn the trends.

4. Deploying IPv6
SLAAC, ND, DHCPv6, DNS...don't let the acronyms fool you. Let's look at the best ways to take advantage of IPv6 characteristics.

5. Get and Register IPv6
Do you need to request your IPv6 allocation? Do you have an IPv6 allocation but you don't know how to register it? This section is made especially for you.

6. IPv6 Assignments and Addressing Plans
Learn IPv6 assignment best practices and get inspired for your addressing plan.

7. IPv6 and Security
Discover the different security aspects you need to consider when you deploy IPv6.

well.. who doesn't like badges 😉

online courses, moocs and video lecture portals

I often use e-learning portals to learn new stuff.
You don't need them exactly, nowadays you could learn everything on youtube, medium, github or free e-books.

However, the good about courses/e-learning portals is, the authors do create more courses, get feedback and get better at teaching stuff. You often get a certificate, which can be motivating seeing your progress.

There are also courses made by universities or colleges. Here you can often buy a qualified certification.
These are usually different: high quality, academic correctness where the information comes from. Since I am used to it.. I love this as well. But they often expect previous knowledge to understand the topics.

And there are learning portal joint-ventures from big companies like microsoft, ibm, ...

I found there is a pile full of learning portals out there.
I wanted to give you a list of some for IT and computer science related topics I use.


Search Portals

But first.. there's a company which created a search portal to find online courses:
www.edukatico.org/en

There is also a search portal for certificates:
www.springest.de


Academic Education Sites

HPI (Hasso Plattner Institut): http://open.hpi.de/

High quality business, software, new it technology and it law related (german) courses.

A good thing is.. you can enter the courses even afterwards.. if you don't mind learning for the knowledge not for the certificate. Or qualified certificates which can be credited as ECTS if you are a student.

These are the courses I absolved here:

About Semantic Web Technologies

  • Information Service Engineering (semanticweb2017)
  • Linked Data Engineering (semanticweb2016)

Others

  • Blockchain: Hype oder Innovation? (blockchain2018)
  • IT-Recht für Software-Entwickler

edX: https://www.edx.org/

Lots of high quality university courses from MIT, Harvard University, University of California Berkley, RWTH Aachen, Technische Universität München, Hongkong University of Science and Technologie, Kyoto University, Peking University...

on different topics

Architecture, Art & Culture, Biology & Life Sciences, Business & Management, Chemistry, Communication, Computer Science, Data Analysis & Statistics, Design, Economics & Finance, Education & Teacher Training, Electronics, Energy & Earth Sciences, Engineering, Environmental Studies, Ethics, Food & Nutrition, Health & Safety, History, Humanities, Language, Law, Literature, Math, Medicine, Music, Philanthropy, Philosophy & Ethics, Physics, Science, Social Sciences

You can get paid qualified certificates which can be credited as ECTS or just view the courses and maybe upgrade to a verified certificate later. You can also get a Micromasters Degree for certain topics.


Education Sites

Pluralsight - https://www.pluralsight.com/

High quality Software development, IT Ops, Professional Business, Data Professional, IT-Security, Design, Photography courses. Some courses have a clearly knowledge prequirements.

Price is a monthly or annually fee
35 $ / Month or 299 $ annually
or the premium version with certification practice exams for 449 $ annuall

There are some weekly free courses... I recommend you to check it out!

Udemy - https://www.udemy.com/

Medium to high quality.. for lots of different interesting topics. Often very good and easy explanation. Lots of trainers.. so every course might be different.
Prices for courses are ~10-12 EUR.. 100 EUR

Coursera - https://www.coursera.org/

High quality university like MIT, Princeton, UCS or Google courses
You can take courses, get specializations, professional certificates, master track certificates or even degrees. You often need to know pre-requirements
Price range is from free to 30k (masters degree), depending on what program you choose

Udacity - https://eu.udacity.com

high quality courses on computer science, programming, autonomous systems, business and career from the big companies like google, nvidia, kaggle, amazon, ibm, unity
Price is 500-999 $ for a topic related nanodegree