I AM ADRIAN
SOFTWARE ENGINEER

I am Adrian Krebs, from Bern, Switzerland, with a passion for Software Development.
Enthusiastic about new technologies, design and innovation.
Always eager to learn.

Hire Me!

About Me

Stay hungry, stay foolish (Steve Jobs)

My Passion

Bereits nach meinen ersten Zeilen JavaScript wusste ich wo meine berufliche Zukunft hingehen soll. Kreativität, Abstraktion, Mathematik, Design und viele andere Faktoren werden im Software Handwerk vereint. Die pulsierende Community treibt sich zu immer neuen Entwicklungen an. Unter anderem deswegen ist der Bann dieser Branche für mich bis heute ungebrochen

Mein ständiger Drang sich neues Wissen anzueignen und sich zu verbessern kommt mir in der Software-Entwicklung zudem zu Gute.

Nebst meiner hauptberuflichen Tätigkeit widme ich mich kleinen Projekten für Kunden. Dabei lege ich wert auf folgende Punkte:

  • Konzeption und Realisation von Web-, Enterprise- und Android Applikationen nach neusten technologischen Standarts
  • Durch regelmässige, kurze Meetings haben sie immer einen Finger am Puls des Projekts
  • Offene, transparente Kommunikation in allen Phasen des Projekts
  • Auch nach Abschluss des Projektes werden Sie bei der Wartung und beim Unterhalt Ihres Produktes unterstützt

My Skills

Nachfolgend meine Spezialgebiete:

Android

Von der Konzipierung bis zur Aufschaltung in Google-Play

Java Enterprise Applications

3 Layer Applikationen inklusive Datenbank Design und Implementierung

Desktop Applikationen in Java FX und C#

Cient Applikationen mit Webservice Server-Schnittstellen

Web-Design

Entwurf und Entwicklung einer Website.

Technical Skills

Meine technischen Fähigkeiten beschränken sich selbstverständlich nicht nur auf Programmiersprachen und Frameworks.

Nach und nach konnte ich ständig neue Werkzeuge der Software Entwicklung in meine Toolbox packen, welche nun für viele Situationen und Projekte bestens ausgerüstet ist.

Java EE70%
SQL70%
JavaScript / AngularJS60%
HTML585%
C#60%
Android50%

Post-it wall

Interesting things about my daily life as a programmer. Instead of writing my own blog I'm gonna add a post-it for each new acknowledged thing.
"When you write about the things you read, it causes the value of you reading to increase exponentially. You don’t just gain more knowledge, you’re able to put into action."
  • Napoleon Hill's advice

    10/12/2016

    • Mastermind

    • Definite Chief Aim

    • Initiative and Leadership

    • Habit of Saving Money

    • Imagination

    • Enthusiasm

    • Self Confidence

    • Doing more than paid for

    • Pleasing personality

    • Cooperation

    • Concentration
  • Memory Palace technique

    7/28/2016

    Idea is to create this imagined construction in your minds eye and populate it with images of the things you want to remember. The crazier, weirder or more bizarre, the more unforgettable!

  • 7 Steps to Solve Algorithm Problems

    9/23/2016

    • Step 1: Listen
    • Step 2: Example (not too small)
    • Step 3: Brute Force
    • Step 4: Optimize
    • Step 5: Walk Through
    • Step 6: Implement (write beautiful code)
    • Step 7: Test
  • TreeMap, HashMap, LinkedHashMap

    9/23/2016

    • HashMap key ordering is arbitrary. Implemented by an array of LinkedLists. Output a mapping of names to Person objects alphabetical.
    • TreeMap keys are ordered. Implemented by Red-Black-Tree. Useful for a "More" function
    • LinkedHashMap keys are ordered by their insertion order. Useful in caching situations when you want to delete the oldest item.
  • Recursion

    9/19/2016

    • A simple base case which we have a solution for and a return value.
    • A way of getting our problem closer to the base case. I.e. a way to chop out part of the problem to get a somewhat simpler problem.
    • use polymorphism instead of switch statements
    • A recursive call which passes the simpler problem back into the method.
    • Factorial, Fibonacci, Towers of Hanoi, ...
  • Uncle Bob Take Aways

    9/5/2016

    • Tell, don't ask principle
    • Command and Query Separation
    • use polymorphism instead of switch statements
    • extract till you drop
    • max three method arguments
    • should not check for null if its not a widley accessible public method. trust your team. write good tests
    • defensive programming
    • The Law of Demeter: Each unit should have only limited knowledge about other units: only units "closely" related to the current unit. Don't talk to strangers. wiki
  • MEAN Stack

    9/4/2016

    The MEAN stack is a popular web development stack made up of MongoDB, Express, AngularJS, and Node.js.

  • Linked List Append

    9/3/2016

      Append(element)

    • set the HEAD (first element) to a current variable and track the previous element with a variable.
    • Iterate over the elements till you arrive at the element which has no NEXT attribute anymore. Set NEXT attribute with the new element.
    • If you have no HEAD yet. just set the new element to head.
    udacity sample HackerRank Challenge
  • Linked List Delete

    9/3/2016

      Delete(value)

    • set the HEAD (first element) to a current variable and track the previous element with a variable.
    • Iterate over the elements till you arrive at the element which matches the searched value. relink the reference of the previous element (previous.next = current.next).
    • If you delete the element at the first position, don't forget to set the new HEAD.
    udacity sample
  • Linked List Insertion

    9/3/2016

      Insert(position,element)

    • set the HEAD (first element) to a current variable and track the position with a counter.
    • Iterate over the elements till you arrive at the desired position. Relink references (NEXT attribute on each element).
    • If you insert an element at the first position, don't forget to set the new HEAD
    udacity sample
  • S.A.R

    9/1/2016

    S.A.R stands for Situation, Action, Result
    This approach means that you start off outlining the situation, then explaining the actions and lastly describing the results

  • Summary Deep Work Book

    9/1/2016

    • Identify the core factors that determine success and happiness in your professional and personal life. Adopt a tool only if its positve impacts outweigh its negative impacts
    • Don't use the Internet to entertain yourself
    • Schedule every minute of your day
    • Meditate productively: physically but not mentally occupied activity and focus your attention on a single well-defined professional problem
  • Summary Deep Work Book

    9/1/2016

    Rule #1 Work Deeply
    Rule #2 Embrace Boredom
    Rule #3 Quit Social Media
    Rule #4 Drain the Shallows

  • The 4 Disciplines of Execution

    8/27/2016

    - Focus on the wildly important
    - Act on Lead Mesures. I.e time spent in a state of deep work dedicated toward your wildly important goal
    - Keep a compelling scoreboard. Mark each our of deep work on your scoreboard
    - Create a cadence of accountability. Weekly review in which you make a plan for the workweek ahead. Analyze scoreboard
    scoreboard sample

  • Deep Work

    8/27/2016

    I'm currently reading Deep Work Rules for Focused Success in a Distracted World. I'm gonna sum up some important take aways:

    • Deliberate practice cannot exist alongside distraction
    • High-Qulity Work Produced = (Time Spent) x (Intensity of Focus)
    • Minimum unit of time for deep work tends to be at least one full day
    Book on Amazon
  • Space complexity

    8/20/2016

    Time is not the only thing that matters in algorithms. If we need a two dimensional array of size nxn, this will require O(n^2) space

  • Time complexity (big O)

    8/20/2016

    When you see a problem where number of elements gets halfed each time, that will likely be a O(log N) runtime
    When you see a recurive function that makes multiple calls, the runtime will often look like O (branches^depth) where branches is the number of time each recursive call branches. i.e O (2^n)

  • A/B Testing

    8/19/2016

    also known as split tests, which are online experiments used to test potential improvements to a website or mobile application. Two versions of the website are shown to different users - usually the existing website and a potential change. Then, the results are analyzed to determine whether the change is an improvement worth launching.
    Udacity course

  • HTTP/2

    8/17/2016

    HTTP/2 supports queries multiplexing, headers compression, priority and more intelligent packet streaming management. This results in reduced latency and accelerates content download on modern web pages.
    FAQ

  • Hackathon starter kit

    8/17/2016

    Great web starter kit for hackathons. Comes with a bunch of API's and frameworks included
    Github Repo

  • Jade templating engine

    8/17/2016

    Jade has a cleaner, more readable syntax than plain HTML and comes with filters and helpers
    Github Repo

  • Credit Default Swaps

    8/15/2016

    An agreement between two parties to exchange the credit risk of an issuer (reference entity).
    Quora Wiki

  • Anti Forgery State Token

    8/5/2016

    To protect the security of your users by preventing request forgery attacks, the client app should create an anti-forgery state token for each session (i.e for each time u access the website)
    Udacity course here

  • OAuth2

    8/5/2016

    OAuth is a protocol with which a 3-party app can access your data stored in another website without your account and password.
    stackoverflow

  • Flask

    8/5/2016

    Python framework for fullstack web applications. Inluding templating, Restful request dispatching, built-in development server
    go to flask website here

  • Loan-to-value

    8/2/2016

    The loan-to-value (LTV) ratio is a financial term used by lenders to express the ratio of a loan to the value of an asset purchased.
    wikipedia

  • What is a Collateralized Debt Obligation - CDO

    8/2/2016

    A structured financial product that pools together cash flow-generating assets and repackages this asset pool into discrete tranches that can be sold to investors. A collateralized debt obligation (CDO) is so-called because the pooled assets – such as mortgages, bonds and loans – are essentially debt obligations that serve as collateral for the CDO.

  • Chris Hadfield's advice to young people

    8/1/2016

    Decide in your heart of hearts what really excites and challenges you, and start moving your life in that direction. Every decision you make, from what you eat to what you do with your time tonight, turns you into who you are tomorrow, and the day after that. Look at who you want to be, and start sculpting yourself into that person. You may not get exactly where you thought you'd be, but you will be doing things that suit you in a profession you believe in. Don't let life randomly kick you into the adult you don't want to become.

  • Session hijacking

    8/1/2016

    In particular, it is used to refer to the theft of a magic cookie used to authenticate a user to a remote server. session/cookie hijacking

  • Refactoring Tips IntelliJ

    7/22/2016

    • Use Ctrl+Alt+m to extract the selected codeblock to a new method
    • Use Ctrl+F6 to change method signature
    • Use Alt Insert to add new file to project
  • Authentication/ Authorization

    7/22/2016

    This week I'm gonna work through serval tutorials about authentication for websites. Topics covered are: HTTPS or not? JavaScript encryption/hashing. CAPTCHAS. Storing passwords/verifying logins. Session data. Preventing rapid-fire login attempts. OAuth2.0

  • Combination formula

    7/21/2016

    • "the order doesn't matter"
    • How many combinations are there for 6 people to sit on 4 chairs? nCk = n!/(n-k)!/k! = n!/k!(n-k)! = 6C4 = 6!/4!*2! = 15 comibinations
    • Handshakes in a room with 4 people? 4!(2!(4-2)! --> bucket has 4 people and we have 2 "slots" = 6 combinations Combinations with repetition: (n +(k-1))!/(k-1)!n!
    probability and combinatorics
  • Permutations

    7/21/2016

    • "the order does matter"
    • P(n,k),(n = number of things to choose from, k = we choose k of them) nPk = n!/(n-k)!
    • Permutation with repetition = n!/k!. Possible three letter words? if repetition allowed = 26^3(n^r) else 26!/23! --> 0! is 1 <--
    • of permutation(or arrangements) of n diff things taken k at a time=nPk=n!/(n-k)!
    • of permutation(or arrangements) of n diff things taken all at a time=nPn=n!
    • of permutation(or arrangements) of n things out of which P1 are alike and are of one type , p2 are alike and are of one type is given by n!/(p1!*p2!)
    probability and combinatorics
  • Binary search

    7/20/2016

    Binary search is an efficient algorithm for finding an item from an ordered list of items. It works by repeatedly dividing in half the portion of the list that could contain the item, until you've narrowed down the possible locations to just one. The running time of binary search is always O(log n).

  • Complexity of algorithms

    7/19/2016

    Big-O notation is a relative representation of the complexity of an algorithm. Stackoverflow BigO cheatsheet Explanation on KahnAcademy

  • Millers Law

    7/19/2016

    The Magical Number Seven, Plus or Minus Two: Some Limits on Our Capacity for Processing Information. Wikipedia article

  • Microsoft REST API Guidelines

    7/19/2016

    One of the best and most complete guides for designing a REST (Representational state transfer) interface. Available on GitHub

  • Idempotent operations

    7/19/2016

    In computing, an idempotent operation is one that has no additional effect if it is called more than once with the same input parameters. For example, removing an item from a set can be considered an idempotent operation on the set. In mathematics, an idempotent operation is one where f(f(x)) = f(x). For example, the abs() function is idempotent because abs(abs(x)) = abs(x) for all x. Stackoverflow

2016

Nov

Die Mobiliar

Software Engineer

November 2015 – present Bern, BE

2015

Oct

ZundS GmbH

Software Developer

October 2014 – September 2015 (1 year)Biel, BE

Sep

HFT Mittelland

Ausbildung

October 2012 – October 2014 (2 years)Biel, BE