Running IntelliJ IDEA under DWM with java 7 & 8

For quite long time I’ve been using IntelliJ 12 because it was still compatible with java 6 which & was running well with DWM. Whenever I was trying a newer version of IntelliJ which required java 7, I was getting a gray screen. The IDE was loading but couldn’t see anything but a gray window. And that sucked because the newer versions of IntelliJ support multiple selections etc which are quite neat.

Today I finally found a solution to the problem (mentioned here http://comments.gmane.org/gmane.comp.misc.suckless/13490) and I basically had to run the following command before starting IntelliJ:

> wmname LG3D
> ./idea.sh

And that was it! Seems like you can use this tool/trick for any java program that has some issues!

So now I’m running IntelliJ using a little script I created inside /usr/bin/intellj (remember to sudo chmod a+x /usr/bin/intellj so other users can run it as well):

#!/bin/bash
wmname LG3D
export IDEA_JDK=/usr/lib/jvm/java-8-oracle
~/Software/idea-IC-135.690/bin/idea.sh

Update: If you want to run Webstorm, you might need to exchange IDEA_JDK with WEBIDE_JDK

Advertisements

Connecting to wifi through command line (Lubuntu + DWM)

Hi everyone!

As you might have noticed already, I’m a big fun of DWM and for long time I had issues with wireless. Basically whenever I wanted to change to a different wireless network I had to logout from DWM, login to the Lubuntu’s default desktop manager (not even sure what it’s called) and from there switch to the new wifi. That was kind of annoying, having to close all my open applications just to set up the wifi.

I’ve tried a few times with iwconfig etc to get it working but I never managed to connect to another wifi through command line until today! How did I do that? I used nmcli tool! This seems to be the command line tool of the network manager. Here is the command I used to connect to the wifi network:

sudo nmcli dev wifi connect <wifinetworkname> password <wifipass>

That’s simple isn’t it? Enjoy!

Note: if you want to see what networks are found in range you can use the following simple command:

nmcli connection

Server time went out of sync

Last Sunday night I received a call from one of my clients that the pdf generation stopped working! What on earth! It was working fine for the 2 years and it decided this Sunday to stop working? What happened? I checked the code (nothing was committed accidentally). Checked the requests “Server can not generate pdf”. Then after a bit of debugging it turned out that the code that was uploading the generated PDF to Amazon S3 was throwing an error. Luckily the error description was quite clear:

The difference between the request time and the current time is too large.

So right away I checked the hour of the server that generates the PDF files & indeed it was around 15 mins in front. After a bit of looking up online I found that you can sync your server time using the command below. And that right away solved the issue & PDF generation was magically fixed 🙂


sudo ntpdate ntp.ubuntu.com
sudo apt install ntp
sudo systemctl reload ntp.service

You can read more about it on Ubuntu documentation

flatMap explained

Understanding how map works is pretty easy. It doesn’t need a second thought. In the contrary flatMap usually needs a bit of thinking to realize/remember how it works. In this post I’ll try to give a schematic explanation of the difference of flatMap & map.

Basically, map & flatMap result to the same thing. They take a monad & return a monad with transformed values.

monad transformations

The difference between them lays in the transformation function. Map’s transformation function takes a value & returns a value where flatMap takes a value & returns a monad with the transformed value.

map

flatMap

Now you will ask me why is it called flatMap then? Well .. it’s called flatMap because if you use map on a function that returns a monad, you get a “doublemonad (see drawing below). So in that context, flatMap “flattens out” the result 🙂

issue with map

And that situation (double monad) happens quite often! For example, if you have a booking that has an optional user. And the optional user has an optional email. And you want to write a method getEmail() that gives you the email option of a booking, how would you do it with map?

booking : Booking
booking.user : Option[User]      
booking.user.email : Option[String]
def getEmail(booking: Booking) : Option[String] = ???

If you use map for it, you’ll have to do something like that (mainly because booking.user.map(_.email) returns an Option[Option[String]]):

def getEmail(booking: Booking) = booking.user.map(_.email).getOrElse(None)

This is where flatMap becomes useful. Due to the fact that flatMap’s transformation function is returning a monad, we kind of right away get the inner monad!:

def getEmail(booking: Booking) booking.user.flatMap(_.email)

And that’s it! Do you get it now why is it called flatMap? Hope this blog post helps you remember it 🙂 Have a nice day!

Lock your screen with slock

I’m sitting here in a co-working space (first time in my life) and a very good friend of mine showed me an awesome command for locking the screen when leaving the desk. As you might have imagined, me as a DWM user I’ve fallen in love with it right way. Here it goes!

slock

Note: to unlock just put your login password & hit enter. Whatever else you type the screen shouldn’t react. Awesome isn’t it?

Virtual Desktops in Windows using VirtuaWin

Good morning everyone!

I’ve used for the first time today VirtuaWin under Win 7 64-bit and I’m happy to say that it worked well! I downloaded the executable setup from the website, I run it and a small tray icon appeared. I couldn’t figure out how to move a window from one desktop to another but then I opened the setup page and I saw the hotkeys. I modified them (as shown on the screenshot below) and now I have my desktops & shortcuts like in Linux (Ctrl + Alt + <arrow> switches to other desktops and Ctrl + Alt + Shift + <arrow> moves windows to other desktops).

VirtuaWinSetupHotkeys

Screenshot of the hotkeys I set up so VirtuaWin behaves like in Linux

Have a nice day & hope this post will help you put an order to your windows 🙂

 

 

Remove element after applying bindings with knockout.js

There are some situations that you want to display something before the bindings get applied. For example, you might want to display a loading message until the bindings have been applied to this set of elements. Here is how you can do it.

<div id="container">
  <div data-bind="if: false">  <-- here is the trick
    <span>Loading ..</span>
  </div>
  <div data-bind=" --- something to bind by calling ko.applyBindings() --- "></div>
</div>

How it works? Simple. Once the bindings are applied, the binding on the div that surrounds the loading text will be removed automatically! 🙂