Author Archives: Nejc Zupan

Upgrading our Intranet to Plone 5

While we haven’t done any Plone consulting (well, *any* consulting to be exact) in over 3 years, we still use Plone internally, every single day. It was about time our Intranet got some love, so I put on my disco pants, poured some of Belgium’s finest and got to work.

Our installation was an old Plone 4.1 one. It was about 3 years since we last touched it (apart from applying security hotfixes, obviously). The first task was to clean up and update our buildout environment. Mostly throwing things away. I like my Plone vanilla flavored. What followed was making sure our tests still pass and enabling Travis CI for the project.

Then came the upgrade to a new major version of Plone. The Plone 5. And let me tell you how the upgrade went:

  1. Bump version to 5.0.6, make sure buildout uses version pins that come with Plone 5.0.6.
  2. Run buildout & restart server.
  3. Click a big honking “Upgrade” button.
  4. Crack open another beer.

I mean seriously, people! Why can’t all software have such smooth upgrade paths!? Plonistas, you have my utmost respect.

Back in the Plone 4.1 days we still had Archetypes, an ancient framework for defining types of content, but Plone 5 is all about Dexterity, so I migrated that too. With a click of a button. Zero hassle once again.

What followed was some throwing content around, updating workflows and permissions to match our company structure and that was mostly it. Oh yeah and I released a Plone 5 remake of our old “niteoweb.loginas” add-on, now promptly named “collective.impersonate“.

If felt good to do some Plone after such a long time. I was surprised how polished the version 5 is. The docs are miles better than what I remember, the UI is fantastic and the thing is now really snappy.

That said, there’s a few more things I would like to get done:

  • increase portal max width to ~1200px
  • fix a styling bug in State tab in toolbar
  • red font color for private items in Navigation and Sidebar
  • and a few more minor tweaks here and there

Are you a Plone freelancer who can take care of these for us? Shoot us an email to jobs at! Bonus karma points for getting your fixes merged upstream.

Our fancy intranet!


NiteoWeb is a remote-first team. While we do have a physical office in Ljubljana, few people go there regularly. Most of us prefer to work from home, from coffee shops or from the beach. Wherever and whenever we feel we are the most productive.

While remote work certainly has its benefits, it does indeed have its challenges. Building rapport with coworkers is harder over digital channels than it is in person. While we do have a daily stand-up meeting on Google Hangouts where we all gather around a digital campfire for a few minutes every morning,  it isn’t enough.

About once a month those of us living in Slovenia try to get together for lunch, a picnic or a local tech meetup. These in-person gatherings are fantastic, but they are geographically limited. It does not make sense for people outside of Slovenia to travel for hours just to attend a lunch.  So we started doing semiannual gatherings where the entire team converges on a single physical location to talk, socialize and rant.

We call these gatherings IRLs (“In Real Life”).  In the summer we do it in Slovenia (or close by) and during the winter we do it in some warm place around the world. This summer we booked an AirBNB villa in Vodnjan, just across the border with Croatia. What a fantastic place we got!

The summer IRL was two days filled to the brink with insightful talks from the team, mindblowing idea pitches and great discussion about anything and everything. Besides politics, SpaceX and latest hacks we talked about what we as a company should do in near- to mid-term future. We updated our internal policies. And we had tons of great BBQ by the pool. I can’t wait what batshit crazy things we come up with at our next IRL, due in January 2017. In Bangkok!

20160615_122819 img_3193 img_3199 img_8178

A dev’s MacBook from scratch

I’ve been a long time Apple user. I hate a lot about the company’s policy and how they treat their power users, but I love the tight integration between their software and hardware. Another thing to love is their migration tools. You buy new hardware, you click Restore from backup and you are done. Safari even opens up the tabs you had open on the old device. However recently, I’ve splurged on a new MacBook 12” and decided to set it up from scratch. For the fun of it. Here are some notes of how I’ve set it up for myself, for future reference and if someone is in a similar position.


  • Don’t sign into iCloud during installation as that starts syncing everything to iCloud and you might not want that.
  • I moved over some files manually from a Time Machine external disk and they got “locked” i.e. I had to enter the admin password for any change to them. This is how I “unlocked” them: xattr -c -r FOLDER_WITH_LOCKED_ITEMS/ && chmod -RN FOLDER_WITH_LOCKED_ITEMS/

System configuration:

  • First off, update to the latest version of OS X, since every major update overwrites some system configuration and you don’t want to duplicate your work.
  • Turn on auto updates. Doh.
  • Go through all System preferences panes and see what works for you. Take your time to see what’s there, it pays off.
  • I disabled Location services, because I use VPNs a lot and then Location Services get totally confused.
  • Enable sending/receiving SMS and calls on OS X — a killer Apple feature for me.
  • Disabled Document Handoff because I don’t want all my docs in the cloud by default.
  • On a MacBook 12″ moving the Dock to the right makes the most sense in my eyes.
  • Set a nice “return for reward” message to be displayed on Locked screen. Something along the lines of “If you have found this laptop, please call me on MY NUMBER or send me an email to MY EMAIL and get a sweet reward! Thanks!”
  • Check Require an administrator password to access system-wide preferences. Doh.
  • Turn on FileVault and Firewall. Double-doh.
  • Firewall -> Advanced -> enable Stealth Mode. Though need to remember to turn it off when diagnosing network problems.

Finder preferences:

  • Show extensions.
  • When performing a search: Search the Current Folder, otherwise it searches the entire computer by default and almost kills Finder.
  • New Finder windows show: my home folder. I hate the “All My Files” default view. Absolutely hate it.

Various tools and apps:

  • Resilio Sync: fantastic app for sharing files among team members, based on bittorrent.
  • Slack: team communication, we use it religiously.
  • Crypho: secure team communication. I’m looking forward to the day when we can replace Slack with Crypho, so we have all communication secure, but as it is, Slack is just way more convenient for everyone to use.
  • LittleSnitch: allow/disable connections per app/port/protocol/address. Fantastic to prevent apps from contacting ads/tracking services and getting more insight into what goes on in the background.
  • Alfred: great productivity app, “replaces” Spotlight and then some!
  • Bartender: get that Menu Bar under control!
  • Flux: same as Redshift on Linux, adjusts screen colours for late night hacking sessions.
  • AppTrap: automatic cleanup of files that apps leave laying around after you delete them
  • iStat menus: to always be able to see what my system is doing with a glance.screen-shot-2016-10-05-at-20-44-24
  • Seashore: GIMP/Photoshop clone with a Mac-style UI. But seems an abandoned project, need to find a replacement …
  • Calibre: eBook management.
  • iBank: keeping my finances in check.
  • LibreOffice. And removed Apple’s Numbers & Pages.

Development environment:

  • Homebrew: the quintessential package manager for OS X.
  • Twitter: funny as it sounds, but Twitter is a great way to stay on top of latest patches/releases/news in tech.
  • Colloquy: a lot of Open Source still happens on IRC and this is how I keep in touch.
  • Chrome: been using it a few years now for browsing and development, but I want to switch back to Firefox soon. Extensions I cannot live without: BackStop, The Great Suspender, Send to Kindle, StayFocusd and Full Page Screen Capture.
  • Tunnelblick: the OS X OpenVPN client.
  • ExtFS for Mac: so I am able to mount ExtFS volumes (Linux drives, Raspberry PI SD cards, etc.)
  • pgAdmin3 and pgweb: admin interfaces for PostgreSQL, lately pgweb sees way more usage than pgAdmin3. Also sqlite browser for SQLite.
  • dotfiles: I keep a private git repo with all my “dotfiles” so history is tracked.
  • travis-cli & heroku-cli: working with Travis and Heroku from the comfort of the terminal window.
  • Vagrant: for simple virtualization needs, when I want to test out something without polluting my main environment.
  • Shush: a vital tool for any remote worker, to keep unwanted background noise from polluting teleconferencing.
  • Sublime Text: I’ve been a TextMate user for quite a while but I jumped ship when I saw how much faster ST is. That was years ago and I’m sticking with ST for now, got used to it and it works for me. I did migrate to ST3 recently though. The list of plugins I use:
    • GitGutter
    • SideBar Enhancements
    • Requirements Txt
    • Color Highlighter
    • CSS3
    • jQuery
    • SublimeLinter
    • SublimeLinter-annotations
    • SublimeLinter-pydocstyle (sudo pip2/3 install pydocstyle)
    • SublimeLinter-flake8 (sudo pip2/3 install flake8)
    • SublimeLinter-jshint (npm install -g jshint)
    • SublimeLinter-shellcheck (brew install shellcheck)
    • SublimeLinter-pyyaml (sudo pip3 install pyyaml)
    • SublimeLinter-json
    • BracketHighlighter
    • Jedi – Python Autocompletion
    • theme: SoDaReloaded Light.sublime-theme
    • pdb snippet:
    • starting ST from the current dir in console by typing subl -n .:

WP Meetups

A few months back I noticed we actually have regular WordPress Meetups in Ljubljana, our base town. We attended one in April, where David talked about theming and Emanuel about bringing WordPress into the Public Sector. On the second one, in June, we were active participants: Janez and myself delivered a talk titled Lessons learned running 25k WordPress blogs describing how we scaled Easy Blog Networks to 25k blogs running on several hundred servers.

Both events also had a Lightning Talks section, which is what I normally enjoy the most. So many great ideas packed into such a short timeframe. Looking forward to the next meetup that should happen sometime in Autumn!

img_8157 img_7930 img_7932vlcsnap-2016-09-11-11h59m58s941


Every time when I am in a pair-programming session and the other person does not use a clipboard manager I am taken aback at how such a thing is even possible. To me, a clipboard manager is such an essential piece of toolkit that I forget it’s there.

What is a clipboard manager? In its simplest form it’s a history of the things you copied. For example, you select text “Foo”, press Ctrl+C (Cmd+C on a Mac), then repeat the same on text “Bar”. The clipboard manager will keep both “Foo” and “Bar” values handy for use when needed.

Screen Shot 2016-06-21 at 23.15.17

My entire clipboard history, searchable, just one keypress away. Priceless.

Simple as that. And so, so effective! Every time you need to copy many things from one window to another, select and copy them one by one, go to the other window, paste them one by one. You save a ton of window switching and clicking around! Good clipboard managers support searching through the history of things you copied and they are smart about the type of content you copied, such as plain text, URLs, images, etc. There are many more reasons why using a clipboard manager makes your day easier.

Personally, I use the clipboard manager that comes with Alfred, the OS X productivity app. But there are literally hundreds of clipboard managers out there, for all major OSes and most of them do their job just fine. Choosing one is mostly about personal preference on keyboard for keyboard shortcuts and styling.

So, what are you waiting for? Get one!