From d2580b0f5109b84bfb3e69a06807532c9e8c829f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20Fernando=20S=C3=A1nchez?= Date: Fri, 20 Jan 2023 18:42:41 +0100 Subject: [PATCH] rebuilding site Fri 20 Jan 2023 18:42:41 CET --- categories/index.html | 189 ++++++++ categories/index.xml | 15 + cheatsheet/emacs/index.html | 109 +++++ cheatsheet/index.html | 256 +++++++++++ cheatsheet/index.xml | 55 +++ cheatsheet/linux/index.html | 253 +++++++++++ cheatsheet/page/1/index.html | 1 + cheatsheet/python/index.html | 111 +++++ cheatsheet/rpi/index.html | 120 +++++ index.html | 316 ++++++++++++++ index.json | 1 + index.xml | 223 ++++++++++ page/1/index.html | 1 + page/2/index.html | 323 ++++++++++++++ page/3/index.html | 244 +++++++++++ page/index.html | 205 +++++++++ page/index.xml | 24 + page/page/1/index.html | 1 + page/todo/index.html | 212 +++++++++ post/2013-08-17-creating-my-web/index.html | 241 ++++++++++ .../index.html | 199 +++++++++ .../index.html | 314 +++++++++++++ post/2014-09-23-publishing-to-pypi/index.html | 335 ++++++++++++++ post/2014-10-09-proxies/index.html | 301 +++++++++++++ post/2014-12-09-zotero/index.html | 332 ++++++++++++++ post/2015-04-10-github-dotfiles/index.html | 211 +++++++++ post/2016-09-28-tqdm/index.html | 208 +++++++++ post/2019-01-06-zigbee2mqtt/index.html | 317 ++++++++++++++ post/2019-05-01-surface-go/index.html | 272 ++++++++++++ .../index.html | 238 ++++++++++ post/2021-10-30-logitech-mk850/index.html | 234 ++++++++++ post/index.html | 315 +++++++++++++ post/index.xml | 153 +++++++ post/page/1/index.html | 1 + post/page/2/index.html | 322 ++++++++++++++ post/page/3/index.html | 243 +++++++++++ posts/index.html | 189 ++++++++ posts/index.xml | 15 + project/index.html | 196 +++++++++ search/index.html | 207 +++++++++ sitemap.xml | 278 ++++++++++++ tags/apache/index.html | 261 +++++++++++ tags/apache/index.xml | 55 +++ tags/apache/page/1/index.html | 1 + tags/arch/index.html | 209 +++++++++ tags/arch/index.xml | 25 ++ tags/arch/page/1/index.html | 1 + tags/config/index.html | 215 +++++++++ tags/config/index.xml | 26 ++ tags/config/page/1/index.html | 1 + tags/dotfiles/index.html | 215 +++++++++ tags/dotfiles/index.xml | 26 ++ tags/dotfiles/page/1/index.html | 1 + tags/emacs/index.html | 213 +++++++++ tags/emacs/index.xml | 24 + tags/emacs/page/1/index.html | 1 + tags/git/index.html | 264 +++++++++++ tags/git/index.xml | 45 ++ tags/git/page/1/index.html | 1 + tags/github/index.html | 259 +++++++++++ tags/github/index.xml | 44 ++ tags/github/page/1/index.html | 1 + tags/gunicorn/index.html | 238 ++++++++++ tags/gunicorn/index.xml | 45 ++ tags/gunicorn/page/1/index.html | 1 + tags/heroku/index.html | 214 +++++++++ tags/heroku/index.xml | 25 ++ tags/heroku/page/1/index.html | 1 + tags/index.html | 413 ++++++++++++++++++ tags/index.xml | 304 +++++++++++++ tags/iot/index.html | 215 +++++++++ tags/iot/index.xml | 26 ++ tags/iot/page/1/index.html | 1 + tags/javascript/index.html | 238 ++++++++++ tags/javascript/index.xml | 34 ++ tags/javascript/page/1/index.html | 1 + tags/keyboard/index.html | 239 ++++++++++ tags/keyboard/index.xml | 37 ++ tags/keyboard/page/1/index.html | 1 + tags/linux/index.html | 275 ++++++++++++ tags/linux/index.xml | 57 +++ tags/linux/page/1/index.html | 1 + tags/lisp/index.html | 213 +++++++++ tags/lisp/index.xml | 24 + tags/lisp/page/1/index.html | 1 + tags/logitech/index.html | 239 ++++++++++ tags/logitech/index.xml | 37 ++ tags/logitech/page/1/index.html | 1 + tags/mouse/index.html | 218 +++++++++ tags/mouse/index.xml | 27 ++ tags/mouse/page/1/index.html | 1 + tags/mqtt/index.html | 215 +++++++++ tags/mqtt/index.xml | 26 ++ tags/mqtt/page/1/index.html | 1 + tags/nginx/index.html | 217 +++++++++ tags/nginx/index.xml | 26 ++ tags/nginx/page/1/index.html | 1 + tags/org/index.html | 213 +++++++++ tags/org/index.xml | 24 + tags/org/page/1/index.html | 1 + tags/productivity/index.html | 213 +++++++++ tags/productivity/index.xml | 24 + tags/productivity/page/1/index.html | 1 + tags/programming/index.html | 209 +++++++++ tags/programming/index.xml | 26 ++ tags/programming/page/1/index.html | 1 + tags/proxy/index.html | 238 ++++++++++ tags/proxy/index.xml | 45 ++ tags/proxy/page/1/index.html | 1 + tags/pypi/index.html | 214 +++++++++ tags/pypi/index.xml | 25 ++ tags/pypi/page/1/index.html | 1 + tags/python/index.html | 327 ++++++++++++++ tags/python/index.xml | 84 ++++ tags/python/page/1/index.html | 1 + tags/rpi/index.html | 207 +++++++++ tags/rpi/index.xml | 25 ++ tags/rpi/page/1/index.html | 1 + tags/ruby/index.html | 218 +++++++++ tags/ruby/index.xml | 25 ++ tags/ruby/page/1/index.html | 1 + tags/starters/index.html | 218 +++++++++ tags/starters/index.xml | 25 ++ tags/starters/page/1/index.html | 1 + tags/surface-go/index.html | 215 +++++++++ tags/surface-go/index.xml | 26 ++ tags/surface-go/page/1/index.html | 1 + tags/uwsgi/index.html | 238 ++++++++++ tags/uwsgi/index.xml | 45 ++ tags/uwsgi/page/1/index.html | 1 + tags/webdav/index.html | 217 +++++++++ tags/webdav/index.xml | 26 ++ tags/webdav/page/1/index.html | 1 + tags/zigbee/index.html | 215 +++++++++ tags/zigbee/index.xml | 26 ++ tags/zigbee/page/1/index.html | 1 + tags/zotero/index.html | 217 +++++++++ tags/zotero/index.xml | 26 ++ tags/zotero/page/1/index.html | 1 + 139 files changed, 16906 insertions(+) create mode 100644 categories/index.html create mode 100644 categories/index.xml create mode 100644 cheatsheet/emacs/index.html create mode 100644 cheatsheet/index.html create mode 100644 cheatsheet/index.xml create mode 100644 cheatsheet/linux/index.html create mode 100644 cheatsheet/page/1/index.html create mode 100644 cheatsheet/python/index.html create mode 100644 cheatsheet/rpi/index.html create mode 100644 index.html create mode 100644 index.json create mode 100644 index.xml create mode 100644 page/1/index.html create mode 100644 page/2/index.html create mode 100644 page/3/index.html create mode 100644 page/index.html create mode 100644 page/index.xml create mode 100644 page/page/1/index.html create mode 100644 page/todo/index.html create mode 100644 post/2013-08-17-creating-my-web/index.html create mode 100644 post/2013-08-22-remove-git-files-with-globbing/index.html create mode 100644 post/2014-03-27-updating-eurolovemap/index.html create mode 100644 post/2014-09-23-publishing-to-pypi/index.html create mode 100644 post/2014-10-09-proxies/index.html create mode 100644 post/2014-12-09-zotero/index.html create mode 100644 post/2015-04-10-github-dotfiles/index.html create mode 100644 post/2016-09-28-tqdm/index.html create mode 100644 post/2019-01-06-zigbee2mqtt/index.html create mode 100644 post/2019-05-01-surface-go/index.html create mode 100644 post/2021-10-29-logitech-mx-keys-mac/index.html create mode 100644 post/2021-10-30-logitech-mk850/index.html create mode 100644 post/index.html create mode 100644 post/index.xml create mode 100644 post/page/1/index.html create mode 100644 post/page/2/index.html create mode 100644 post/page/3/index.html create mode 100644 posts/index.html create mode 100644 posts/index.xml create mode 100644 project/index.html create mode 100644 search/index.html create mode 100644 sitemap.xml create mode 100644 tags/apache/index.html create mode 100644 tags/apache/index.xml create mode 100644 tags/apache/page/1/index.html create mode 100644 tags/arch/index.html create mode 100644 tags/arch/index.xml create mode 100644 tags/arch/page/1/index.html create mode 100644 tags/config/index.html create mode 100644 tags/config/index.xml create mode 100644 tags/config/page/1/index.html create mode 100644 tags/dotfiles/index.html create mode 100644 tags/dotfiles/index.xml create mode 100644 tags/dotfiles/page/1/index.html create mode 100644 tags/emacs/index.html create mode 100644 tags/emacs/index.xml create mode 100644 tags/emacs/page/1/index.html create mode 100644 tags/git/index.html create mode 100644 tags/git/index.xml create mode 100644 tags/git/page/1/index.html create mode 100644 tags/github/index.html create mode 100644 tags/github/index.xml create mode 100644 tags/github/page/1/index.html create mode 100644 tags/gunicorn/index.html create mode 100644 tags/gunicorn/index.xml create mode 100644 tags/gunicorn/page/1/index.html create mode 100644 tags/heroku/index.html create mode 100644 tags/heroku/index.xml create mode 100644 tags/heroku/page/1/index.html create mode 100644 tags/index.html create mode 100644 tags/index.xml create mode 100644 tags/iot/index.html create mode 100644 tags/iot/index.xml create mode 100644 tags/iot/page/1/index.html create mode 100644 tags/javascript/index.html create mode 100644 tags/javascript/index.xml create mode 100644 tags/javascript/page/1/index.html create mode 100644 tags/keyboard/index.html create mode 100644 tags/keyboard/index.xml create mode 100644 tags/keyboard/page/1/index.html create mode 100644 tags/linux/index.html create mode 100644 tags/linux/index.xml create mode 100644 tags/linux/page/1/index.html create mode 100644 tags/lisp/index.html create mode 100644 tags/lisp/index.xml create mode 100644 tags/lisp/page/1/index.html create mode 100644 tags/logitech/index.html create mode 100644 tags/logitech/index.xml create mode 100644 tags/logitech/page/1/index.html create mode 100644 tags/mouse/index.html create mode 100644 tags/mouse/index.xml create mode 100644 tags/mouse/page/1/index.html create mode 100644 tags/mqtt/index.html create mode 100644 tags/mqtt/index.xml create mode 100644 tags/mqtt/page/1/index.html create mode 100644 tags/nginx/index.html create mode 100644 tags/nginx/index.xml create mode 100644 tags/nginx/page/1/index.html create mode 100644 tags/org/index.html create mode 100644 tags/org/index.xml create mode 100644 tags/org/page/1/index.html create mode 100644 tags/productivity/index.html create mode 100644 tags/productivity/index.xml create mode 100644 tags/productivity/page/1/index.html create mode 100644 tags/programming/index.html create mode 100644 tags/programming/index.xml create mode 100644 tags/programming/page/1/index.html create mode 100644 tags/proxy/index.html create mode 100644 tags/proxy/index.xml create mode 100644 tags/proxy/page/1/index.html create mode 100644 tags/pypi/index.html create mode 100644 tags/pypi/index.xml create mode 100644 tags/pypi/page/1/index.html create mode 100644 tags/python/index.html create mode 100644 tags/python/index.xml create mode 100644 tags/python/page/1/index.html create mode 100644 tags/rpi/index.html create mode 100644 tags/rpi/index.xml create mode 100644 tags/rpi/page/1/index.html create mode 100644 tags/ruby/index.html create mode 100644 tags/ruby/index.xml create mode 100644 tags/ruby/page/1/index.html create mode 100644 tags/starters/index.html create mode 100644 tags/starters/index.xml create mode 100644 tags/starters/page/1/index.html create mode 100644 tags/surface-go/index.html create mode 100644 tags/surface-go/index.xml create mode 100644 tags/surface-go/page/1/index.html create mode 100644 tags/uwsgi/index.html create mode 100644 tags/uwsgi/index.xml create mode 100644 tags/uwsgi/page/1/index.html create mode 100644 tags/webdav/index.html create mode 100644 tags/webdav/index.xml create mode 100644 tags/webdav/page/1/index.html create mode 100644 tags/zigbee/index.html create mode 100644 tags/zigbee/index.xml create mode 100644 tags/zigbee/page/1/index.html create mode 100644 tags/zotero/index.html create mode 100644 tags/zotero/index.xml create mode 100644 tags/zotero/page/1/index.html diff --git a/categories/index.html b/categories/index.html new file mode 100644 index 0000000..a03d6d4 --- /dev/null +++ b/categories/index.html @@ -0,0 +1,189 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Categories

+
+ + + + + +
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/categories/index.xml b/categories/index.xml new file mode 100644 index 0000000..363bba9 --- /dev/null +++ b/categories/index.xml @@ -0,0 +1,15 @@ + + + + Categories on Balkian's site + /categories/ + Recent content in Categories on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + \ No newline at end of file diff --git a/cheatsheet/emacs/index.html b/cheatsheet/emacs/index.html new file mode 100644 index 0000000..d68ba4a --- /dev/null +++ b/cheatsheet/emacs/index.html @@ -0,0 +1,109 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Emacs

+ +

Show plain text version

+
+ +
+
1
+
+
(font-lock-mode)
+
+
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/cheatsheet/index.html b/cheatsheet/index.html new file mode 100644 index 0000000..8d535cd --- /dev/null +++ b/cheatsheet/index.html @@ -0,0 +1,256 @@ + + + + + + Balkian's site - Cheatsheets + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Emacs

+

Configuration files and tricks for emacs

+ +emacs + +org + +productivity + +lisp + + +
+
+ + +
+
+ +

Linux

+

Tips and tricks for GNU/Linux and Unix

+ +linux + +arch + + +
+
+ + +
+
+ +

Python

+

Tips and useful libraries for python developers

+ +python + +programming + + +
+
+ + +
+
+ +

Raspberry Pi

+

Tools, links and configuration for your Raspberry Pi

+ +rpi + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/cheatsheet/index.xml b/cheatsheet/index.xml new file mode 100644 index 0000000..197c151 --- /dev/null +++ b/cheatsheet/index.xml @@ -0,0 +1,55 @@ + + + + Cheatsheets on Balkian's site + /cheatsheet/ + Recent content in Cheatsheets on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Emacs + /cheatsheet/emacs/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/emacs/ + <h1 id="show-plain-text-version">Show plain text version</h1> + + + + Linux + /cheatsheet/linux/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/linux/ + Black screen and LightDM doesn&rsquo;t unlock Add this to your /etc/lightdm/lightdm.conf file: +1 2 [LightDM] logind-check-graphical=true Edit previous commands fc is a shell builtin to list and edit previous commands in an editor. In addition to editing a single line (which you can also do with C-x C-e), it also allows you to edit and run several lines at the same time. + + + + Python + /cheatsheet/python/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/python/ + Interesting libraries TQDM From tqdm&rsquo;s github repository: + tqdm means &ldquo;progress&rdquo; in Arabic (taqadum, تقدّم) and an abbreviation for &ldquo;I love you so much&rdquo; in Spanish (te quiero demasiado). + + + + + Raspberry Pi + /cheatsheet/rpi/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/rpi/ + HDMI flickering Avoid HDMI flickering/intermittent blanking on RPI with a 1400x1050 VGA monitor. +1 2 3 4 5 6 hdmi_drive=2 hdmi_group=2 hdmi_mode=42 disable_overscan=1 config_hdmi_boost=7 + + + + \ No newline at end of file diff --git a/cheatsheet/linux/index.html b/cheatsheet/linux/index.html new file mode 100644 index 0000000..04dc2a3 --- /dev/null +++ b/cheatsheet/linux/index.html @@ -0,0 +1,253 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Linux

+ +

Black screen and LightDM doesn’t unlock

+

Add this to your /etc/lightdm/lightdm.conf file:

+
+ +
+
1
+2
+
+
[LightDM]
+logind-check-graphical=true
+
+
+

Edit previous commands

+

fc is a shell builtin to list and edit previous commands in an editor. +In addition to editing a single line (which you can also do with C-x C-e), it also allows you to edit and run several lines at the same time. +You use it like this:

+

List previous commands

+
+ +
+
1
+2
+3
+4
+5
+
+
$ fc -l
+10259  nvim deploy.sh
+10260* cd ..
+10261* nvim content/cheatsheet/linux.md
+10262  cd
+
+
+

List commands with date (in zsh)

+
+ +
+
1
+2
+3
+4
+5
+
+
$ fc -ld
+10260* 19:38  cd ..
+10261* 19:38  nvim content/cheatsheet/linux.md
+10262  19:40  cd
+10263  19:40  fc -l
+
+
+

You can add the date too:

+
+ +
+
1
+2
+3
+4
+
+
$ fc -fld
+10262  1/10/2019 19:40  cd
+10263  1/10/2019 19:40  fc -l
+10264  1/10/2019 19:40  fc -ld
+
+
+

You can edit a range of commands

+
+ +
+
1
+
+
$ fc 10262 10264
+
+
+

The range can be relative to the current position, so the previous command is equivalent to:

+
+ +
+
1
+
+
$ fc -3 -1
+
+
+

If you save and exit, all commands are executed as a script, and it will be added to your history.

+

Source: https://shapeshed.com/unix-fc/

+

Prevent logoff from killing tmux sessions

+

Lately I’ve noticed that logging out of i3, intentionally or when i3 fails, would also kill any tmux or emacs sessions. +This is extremely annoying.

+

This is caused by a new default in logind (systemd’s login) to kill user process on logoff. +You can revert this setting in your logind.conf (/etc/systemd/logind.conf):

+
+ +
+
1
+
+
KillUserProcesses=no
+
+
+

Or only for a specific process (e.g., tmux):

+
+ +
+
1
+
+
systemd-run --scope --user tmux
+
+
+

Source: https://unix.stackexchange.com/questions/490267/prevent-logoff-from-killing-tmux-session

+

Upload a temporary file

+

Sometimes you just need to copy/paste a file from a server, and copying from the terminal can be a hassle. +These two services are command-line “pastebins” just one curl away:

+
+ +
+
1
+2
+3
+4
+5
+6
+7
+8
+
+
<command> | curl -F 'sprunge=<-' http://sprunge.us
+# OR
+
+<command> 2>&1 | curl -F 'f:1=<-' ix.io
+
+# OR
+
+<command> | curl -F"file=@-" https://ttm.sh
+
+
+

Install Fortinet SSLVPN support for NetworkManager

+

UPM (Universidad Politécnica de Madrid) uses a propriatary VPN solution. +The instructions for GNU/Linux on their website involve downloading a specific client (.tar.gz) and manually running it. +That works, but it is kind of a hassle. +A much more convenient alternative is installing this NetworkManager plugin:

+
+ +
+
1
+2
+
+
pacman -Sy networkmanager-fortisslvpn 
+# Or apt get install networkmanager-fortisslvpn 
+
+
+

Now you can simply add a new VPN connection in NetworkManager and manage it as you would any other connection.

+ + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/cheatsheet/page/1/index.html b/cheatsheet/page/1/index.html new file mode 100644 index 0000000..0783a2c --- /dev/null +++ b/cheatsheet/page/1/index.html @@ -0,0 +1 @@ +/cheatsheet/ \ No newline at end of file diff --git a/cheatsheet/python/index.html b/cheatsheet/python/index.html new file mode 100644 index 0000000..b59e93f --- /dev/null +++ b/cheatsheet/python/index.html @@ -0,0 +1,111 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Python

+ +

Interesting libraries

+

TQDM

+

From tqdm’s github repository:

+
+

tqdm means “progress” in Arabic (taqadum, تقدّم) and an abbreviation for “I love you so much” in Spanish (te quiero demasiado).

+
+

TQDM in action

+ + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/cheatsheet/rpi/index.html b/cheatsheet/rpi/index.html new file mode 100644 index 0000000..e0770f5 --- /dev/null +++ b/cheatsheet/rpi/index.html @@ -0,0 +1,120 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Raspberry Pi

+ +

HDMI flickering

+

Avoid HDMI flickering/intermittent blanking on RPI with a 1400x1050 VGA monitor.

+
+ +
+
1
+2
+3
+4
+5
+6
+
+

+   hdmi_drive=2
+   hdmi_group=2
+   hdmi_mode=42
+   disable_overscan=1
+   config_hdmi_boost=7
+
+
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..3a12b10 --- /dev/null +++ b/index.html @@ -0,0 +1,316 @@ + + + + + + + Balkian's site - Balkian's site + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2021/10/30 +

Logitech MB850 combi in linux

+ +linux + +logitech + +keyboard + +mouse + + +
+ + As a follow-up to my last post, I’ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: +The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + +
+ + +
+ + + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + +
+ + +
+ + + Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019. + + +
+ + +
+
+ 2019/01/06 +

Controlling Zigbee devices with MQTT

+ +mqtt + +iot + +zigbee + + +
+ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you’re anything like me, you’re probably a sucker for IoT devices. For a long time, I’ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + +
+ + +
+
+ 2016/09/28 +

Progress bars in python

+ +python + + +
+ +

tqdm is a nice way to add progress +bars in the command line or in a jupyter notebook.

+

image

+
+ +
+
1
+2
+3
+4
+5
+
+
from tqdm import tqdm
+import time
+
+for i in tqdm(range(100)):
+    time.sleep(1)
+
+
+
+ +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/index.json b/index.json new file mode 100644 index 0000000..5f1186a --- /dev/null +++ b/index.json @@ -0,0 +1 @@ +[{"categories":null,"contents":"As a follow-up to my last post, I\u0026rsquo;ve decided to also configure my mk850 combo (k850 + m720 triathlon).\nSome notes:\n The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. Every press maps to three key events. I\u0026rsquo;ve disabled two of them and mapped the action to F19, in case I want to use it in my DE/WM. 1 2 3 4 5 6 7 8 evdev:input:* KEYBOARD_KEY_70039=leftctrl # bind capslock to w evdev:input:b0005v046DpB015* KEYBOARD_KEY_700e0=f19 KEYBOARD_KEY_700e2=unknown KEYBOARD_KEY_7002b=unknown After that, simply run:\n sudo udevadm hwdb --update \u0026amp;\u0026amp; sudo udevadm trigger Make sure the settings have been applied by running evemu-describe:\n1 sudo /sbin/evemu-describe /dev/input/event\u0026lt;id of your device\u0026gt; | grep KEY_ ","permalink":"/post/2021-10-30-logitech-mk850/","tags":["linux","logitech","keyboard","mouse"],"title":"Logitech MB850 combi in linux"},{"categories":null,"contents":"I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain.\nAs soon as I plugged it in, I realized there were some glaring issues with the keyboard. First of all, the Meta/Super and Alt keys are reversed in this keyboard. In the normal/full version of this keyboard, Logitech gives an option to choose between Mac, Windows and iOS host, and that changes the behavior of the keys. In this version, tho, only iOS and Mac are available.\nBesides that, there\u0026rsquo;s the issue of the grave (tilde) and angle keys switched as well.\nSwitching these keys around would be very easy with Xorg, but Wayland once again complicates things\u0026hellip;\nThese issues almost made me return the keyboard. Luckily, tho, there is another option: configuring the keys one level lower than wayland (and X11), through hwdb.\nLong story short, this will configure any Logitech keyboard with the same product id (0x4092) to use a saner configuration:\n1 2 3 4 5 6 7 8 9 10 11 12 #File: /etc/udev/hwdb.d/90-logitech-keyboard.hwdb evdev:input:b0003v046Dp4092* KEYBOARD_KEY_700e2=leftmeta KEYBOARD_KEY_700e3=leftalt KEYBOARD_KEY_70039=leftctrl KEYBOARD_KEY_70064=102nd KEYBOARD_KEY_70035=grave KEYBOARD_KEY_700e7=rightalt KEYBOARD_KEY_700e6=rightmeta KEYBOARD_KEY_7006d=compose After that, simply run:\n sudo udevadm hwdb --update \u0026amp;\u0026amp; sudo udevadm trigger ","permalink":"/post/2021-10-29-logitech-mx-keys-mac/","tags":["linux","logitech","keyboard"],"title":"Logitech MX Keys for Mac on Linux"},{"categories":null,"contents":"Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.\nInstalling the kernel 1 2 git clone --depth 1 https://github.com/jakeday/linux-surface.git ~/linux-surface cp -a ~/linux-surface /media/\u0026lt;your usb\u0026gt; 1 2 3 cp -a /media/\u0026lt;your usb\u0026gt;/linux-surface ~/ cd ~/linux-surface/ sudo sh setup.sh Booting ubuntu first Switch out of Windows S mode.\nBoot into the \u0026ldquo;Command Prompt\u0026rdquo;.\nFrom Windows go to \u0026ldquo;change advanced startup options\u0026rdquo; and select \u0026ldquo;restart now\u0026rdquo;.\nWhen it reboots, choose the \u0026ldquo;Troubleshoot\u0026rdquo; option, then choose the \u0026ldquo;Advanced options\u0026rdquo; option, and finally choose the \u0026ldquo;Command Prompt\u0026rdquo; option.\nAfter the device reboots, login to the command prompt and then you should see a terminal with X:\\windows\\system32\u0026gt;\nAt the prompt, check your UEFI entries:\n1 bcdedit /enum firmware Copy UEFI entry of \u0026ldquo;Windows Boot Manager\u0026rdquo; to create a new entry for Ubuntu: bcdedit /copy {bootmgr} /d \u0026ldquo;Ubuntu\u0026rdquo;\nCopy the printed GUID number including the braces {} using Ctrl+C\nSet file path for the new Ubuntu entry. Replace {guid} with the returned GUID of the previous command (Ctrl+V). bcdedit /set {guid} path \\EFI\\ubuntu\\grubx64.efi\nSet Ubuntu as the first/ entry in the boot sequence. Again replace {guid} with the returned GUID of the copy command.\n1 bcdedit /set {fwbootmgr} displayorder {guid} /addfirst Check your UEFI entries again: bcdedit /enum firmware You should see something like this:\n1 2 3 4 5 6 7 8 9 10 Firmware Boot Manager --------------------- identifier {fwbootmgr} displayorder {3510232e-f8eb-e811-95ce-9ecab3f9d1c4} {bootmgr} {2148799b-f8eb-e811-95ce-9ecab3f9d1c4} {312e8a67-c2f6-e811-95ce-3c1ab3f9d1de} {312e8a68-c2f6-e811-95ce-3c1ab3f9d1de} timeout 0 Make sure the GUID you copied is the first one listed in displayorder. Then type exit, turn off the PC and turn it back on. After this my surface go is automatically booting to the grub bootloader which lets me choose between Windows and Ubuntu but defaults to Ubuntu after ten seconds.\n","permalink":"/post/2019-05-01-surface-go/","tags":["linux","surface go","config"],"title":"Linux on the Microsoft Surface Go"},{"categories":null,"contents":"This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network.\nIf you\u0026rsquo;re anything like me, you\u0026rsquo;re probably a sucker for IoT devices. For a long time, I\u0026rsquo;ve been using WiFi-enabled lights, and Amazon dash buttons to control them. To keep these (cheap Chinese) internet enabled devices away from your network and their respective cloud services, you\u0026rsquo;ll probably want to set up a dedicated network in your router (more on this on a future post, maybe). Another disadvantage of WiFi devices is that they\u0026rsquo;re relatively power hungry.\nA popular alternative is using ZigBee for communication. It is a dedicated protocol similar to bluetooth (BLE), with lower power requirements and bitrate.\nTake the (super cute) aqara cube as an example. It is a small cube that detects rotation on all of its axes, and tapping events. Here\u0026rsquo;s a video:\n To connect to zigbee devices you will need a zigbee enabled gateway (a.k.a. hub), which connects to your WiFi network and your zigbee devices. Once again, this means adding an internet-enabled device to your home, and probably a couple of cloud services.\nAs an alternative, you can set up your own zigbee gateway, and control it to your home automation platform of choice (e.g. home assistant). We will cover how to set up a zigbee2mqtt gateway that is also connected to an MQTT server, so you can use MQTT to control your devices and get notifications.\nWhat you need:\n Aqara cube. CC2531 zigbee sniffer. CC-debugger. You will need to flash your sniffer. For that, you only need to follow the instructions from the zigbee2mqtt documentation.\nOnce you\u0026rsquo;re done flashing, you\u0026rsquo;re ready to set up the zigbee2mqtt server. For convenience, I wrote a simple docker-compose to deploy a zigbee2mqtt server and a test mosquitto server:\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 version: \u0026#39;2.1\u0026#39; services: zigbee2mqtt: image: koenkk/zigbee2mqtt container_name: zigbee2mqtt restart: always volumes: - ./z2m-data/:/app/data/ devices: - \u0026#34;/dev/ttyACM0\u0026#34; networks: - hass mqtt: image: eclipse-mosquitto ports: - 1883:1883 - 9001:9001 networks: - hass volumes: - ./mosquitto.conf:/mosquitto/config/mosquitto.conf networks: hass: driver: overlay You can test your installation with:\n1 2 3 4 5 6 ❯ mosquitto_sub -h localhost -p 1883 -t \u0026#39;zigbee2mqtt/#\u0026#39; online {\u0026#34;battery\u0026#34;:17,\u0026#34;voltage\u0026#34;:2925,\u0026#34;linkquality\u0026#34;:149,\u0026#34;action\u0026#34;:\u0026#34;rotate_right\u0026#34;,\u0026#34;angle\u0026#34;:12.8} {\u0026#34;battery\u0026#34;:17,\u0026#34;voltage\u0026#34;:2925,\u0026#34;linkquality\u0026#34;:141,\u0026#34;action\u0026#34;:\u0026#34;slide\u0026#34;,\u0026#34;side\u0026#34;:2} {\u0026#34;battery\u0026#34;:17,\u0026#34;voltage\u0026#34;:2925,\u0026#34;linkquality\u0026#34;:120} {\u0026#34;battery\u0026#34;:17,\u0026#34;voltage\u0026#34;:2925,\u0026#34;linkquality\u0026#34;:141,\u0026#34;action\u0026#34;:\u0026#34;wakeup\u0026#34;} zigbee2mqtt supports the following events for the aqara cube: shake, wakeup, fall, tap, slide, flip180, flip90, rotate_left and rotate_right. Every event has additional information, such as the sides involved, or the degrees turned.\nNow you are ready to set up home assistant support in zigbee2mqtt following this guide.\n","permalink":"/post/2019-01-06-zigbee2mqtt/","tags":["mqtt","iot","zigbee"],"title":"Controlling Zigbee devices with MQTT"},{"categories":null,"contents":"tqdm is a nice way to add progress bars in the command line or in a jupyter notebook.\n1 2 3 4 5 from tqdm import tqdm import time for i in tqdm(range(100)): time.sleep(1) ","permalink":"/post/2016-09-28-tqdm/","tags":["python"],"title":"Progress bars in python"},{"categories":null,"contents":"Today\u0026rsquo;s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords.\nAs part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your .gitconfig file. This is cool and convenient, unless you happen to be publishing your .gitconfig file in a public repo.\nSo, how can you still share your gitconfig without sharing your password/token with the rest of the world? Since Git 1.7.0, you can include other files in your gitconfig.\n[include] path = ~/.gitconfig_secret And now, in your .gitconfig_secret file, you just have to add this:\n[github] user = balkian token = \u0026quot;\u0026lt; Your secret token \u0026gt;\u0026quot; ","permalink":"/post/2015-04-10-github-dotfiles/","tags":["github","git","dotfiles"],"title":"Sharing dotfiles"},{"categories":null,"contents":"Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav.\nIf you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. Hence, you will need another webdav server, and optionally let nginx proxy to it. This short post provides the basics to get that set-up working under Debian/Ubuntu.\nSetting up Apache First we need to install Apache:\n1 sudo apt-get install apache2 Change the head of \u0026ldquo;/etc/apache2/sites-enabled/000-default\u0026rdquo; to:\n1 \u0026lt;VirtualHost *:880\u0026gt; Then, create a file /etc/apache2/sites-available/webdav:\n1 2 3 4 5 6 7 8 9 10 11 12 13 Alias /dav /home/webdav/dav \u0026lt;Location /dav\u0026gt; Dav on Order Allow,Deny Allow from all Dav On Options +Indexes AuthType Basic AuthName DAV AuthBasicProvider file AuthUserFile /home/webdav/.htpasswd Require valid-user \u0026lt;/Location\u0026gt; Ideally, you want your webdav folders to be private, adding authentication to them. So you need to create the webdav and zotero users and add the passwords to an htpasswd file. Even though you could use a single user, since you will be configuring several clients with your credentials I encourage you to create the zotero user as well. This way you can always change the password for zotero without affecting any other application using webdav.\n1 2 3 4 sudo adduser webdav sudo htpasswd -c /home/webdav/.htpasswd webdav sudo htpasswd /home/webdav/.htpasswd zotero sudo mkdir -p /home/webdav/dav/zotero Enable the site and restart apache:\n1 2 3 4 sudo a2enmod webdav sudo a2enmod dav_fs sudo a2ensite webdav sudo service apache2 restart At this point everything should be working at http://\u0026lt;your_host\u0026gt;:880/dav/zotero\nSetting up NGINX After the Apache side is working, we can use nginx as a proxy to get cleaner URIs. In your desired site/location, add this:\n1 2 3 4 5 6 7 location /dav { client_max_body_size 20M; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:880; } Now just reload nginx:\n1 sudo service nginx force-reload Extras Zotero Reader - HTML5 client Zandy - Android Open Source client ","permalink":"/post/2014-12-09-zotero/","tags":["zotero","webdav","nginx","apache"],"title":"Zotero"},{"categories":null,"contents":"This is a quick note on proxying a local python application (e.g. flask) to a subdirectory in Apache. This assumes that the file wsgi.py contains a WSGI application with the name application. Hence, wsgi:application.\nGunicorn 1 2 3 4 5 \u0026lt;Location /myapp/\u0026gt; ProxyPass http://127.0.0.1:8888/myapp/ ProxyPassReverse http://127.0.0.1:8888/myapp/ RequestHeader set SCRIPT_NAME \u0026#34;/myapp/\u0026#34; \u0026lt;/Location\u0026gt; Important: SCRIPT_NAME and the end of ProxyPass URL MUST BE THE SAME. Otherwise, Gunicorn will fail miserably.\nTry it with:\n1 venv/bin/gunicorn -w 4 -b 127.0.0.1:8888 --log-file - --access-logfile - wsgi:application UWSGI This is a very simple configuration. I will try to upload one with more options for uwsgi (in a .ini file).\n1 2 3 4 \u0026lt;Location /myapp/\u0026gt; SetHandler uwsgi_handler uWSGISocker 127.0.0.1:8888 \u0026lt;/Location\u0026gt; Try it with:\n1 uwsgi --socket 127.0.0.1:8888 -w wsgi:application Extra: Supervisor If everything went as expected, you can wrap your command in a supervisor config file and let it handle the server for you.\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [unix_http_server] file=/tmp/myapp.sock ; path to your socket file [supervisord] logfile = %(here)s/logs/supervisor.log childlogdir = %(here)s/logs/ [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] logfile = %(here)s/logs/supervisorctl.log serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket [program:myapp] command = venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 --log-file %(here)s/logs/gunicorn.log --access-logfile - wsgi:application directory = %(here)s environment = PATH=%(here)s/venv/bin/ logfile = %(here)s/logs/myapp.log ","permalink":"/post/2014-10-09-proxies/","tags":["python","apache","proxy","gunicorn","uwsgi"],"title":"Proxies with Apache and python"},{"categories":null,"contents":"Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes.\nChoose a fancy name If you haven\u0026rsquo;t done so yet, take a minute or two to think about this. To publish on PyPi you need a name for your package that isn\u0026rsquo;t taken. What\u0026rsquo;s more, a catchy and unique name will help people remember your module and feel more inclined to at least try it.\nThe package name should hint what your module does, but that\u0026rsquo;s not always the case. That\u0026rsquo;s your call. I personally put uniqueness and memorability over describing the functionality.\nCreate a .pypirc configuration file 1 2 3 4 5 6 7 8 9 10 11 12 13 [distutils] # this tells distutils what package indexes you can push to index-servers =pypi # the live PyPI pypitest # test PyPI [pypi] # authentication details for live PyPI repository = https://pypi.python.org/pypi username = { your_username } password = { your_password } # not necessary [pypitest] # authentication details for test PyPI repository = https://testpypi.python.org/pypi username = { your_username } As you can see, you need to register both in the main pypi repository and the testing server. The usernames and passwords might be different, that is up to you!\nPrepare your package This should be the structure:\nroot-dir/ # Any name you want setup.py setup.cfg LICENSE.txt README.md mypackage/ __init__.py foo.py bar.py baz.py setup.cfg 1 2 [metadata] description-file = README.md The markdown README is the de facto standard in Github, but you can also use rST (reStructuredText), the standard in the python community.\nsetup.py 1 2 3 4 5 6 7 8 9 10 11 12 from distutils.core import setup setup(name = \u0026#39;mypackage\u0026#39;, packages = [\u0026#39;mypackage\u0026#39;], # this must be the same as the name above version = \u0026#39;{ version }\u0026#39;, description = \u0026#39;{ description }\u0026#39;, author = \u0026#39;{ name }\u0026#39;, email = \u0026#39;{ email }\u0026#39;, url = \u0026#39;https://github.com/{user}/{package}\u0026#39;, # URL to the github repo download_url = \u0026#39;https://github.com/{user}/{repo}/tarball/{version}\u0026#39;, keywords = [\u0026#39;websockets\u0026#39;, \u0026#39;display\u0026#39;, \u0026#39;d3\u0026#39;], # list of keywords that represent your package classifiers = [], ) You might notice that the download_url points to a Github URL. We could host our package anywhere, but Github is a convenient option. To create the tarball and the zip packages, you only need to tag a tag in your repository and push it to github:\n1 2 git tag {version} -m \u0026#34;{ Description of this tag/version}\u0026#34; git push --tags origin master Push to the testing/main pypi server It is advisable that you try your package on the test repository and fix any problems first. The process is simple:\n1 python setup.py register -r {pypitest/pypi} python setup.py sdist upload -r {pypitest/pypi} If everything went as expected, you can now install your package through pip and browse your package\u0026rsquo;s page. For instance, check my senpy package: https://pypi.python.org/pypi/senpy\n1 pip install senpy ","permalink":"/post/2014-09-23-publishing-to-pypi/","tags":["github","python","pypi"],"title":"Publishing on PyPi"},{"categories":null,"contents":"As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the \u0026ldquo;overall feeling\u0026rdquo; of each country about each topic. Then, we used some fancy JavaScript to make sense out of the raw information.\nIt didn\u0026rsquo;t go too bad, it turns out we won.\nNow, it was time for a face-lift. I used this opportunity to play with new technologies and improve it:\n Using Flask, this time using python 3.3 and Bootstrap 3.0 Cool HTML5+JS cards (thanks to pastetophone) Automatic generation of fake personal data to test the interface Obfuscation of personal emails The result can be seen here.\nPublishing a Python 3 app on Heroku 1 mkvirtualenv -p /usr/bin/python3.3 eurolovemap Since Heroku uses python 2.7 by default, we have to tell it which version we want, although it supports python 3.4 as well. I couldn\u0026rsquo;t get python 3.4 working using the deadsnakes ppa, so I used python 3.3 instead, which works fine but is not officially supported. Just create a file named runtime.txt in your project root, with the python version you want to use:\n1 python-3.3.1 Don\u0026rsquo;t forget to freeze your dependencies so Heroku can install them: bash pip freze \u0026gt; requirements.txt\nPublishing personal emails There are really sophisticated and effective ways to obfuscate personal emails so that spammers cannot easily grab yours. However, this time I needed something really simple to hide our emails from the simplest form of crawlers. Most of the team are in academia somehow, so in the end all our emails are available in sites like Google Scholar. Anyway, nobody likes getting spammed so I settled for a custom Caesar cipher. Please, don\u0026rsquo;t use it for any serious application if you are concerned about being spammed.\n1 2 def blur_email(email): return \u0026#34;\u0026#34;.join([chr(ord(i)+5) for i in email]) And this is the client side:\n1 2 3 4 5 6 7 8 9 10 11 12 window.onload = function(){ elems = document.getElementsByClassName(\u0026#39;profile-email\u0026#39;); for(var e in elems){ var blur = elems[e].innerHTML; var email = \u0026#34;\u0026#34;; for(var s in blur){ var a = blur.charCodeAt(s) email = email+String.fromCharCode(a-5); } elems[e].innerHTML = email; } } Unfortunately, this approach does not hide your email from anyone using PhantomJS, ZombieJS or similar. For that, other approaches like generating a picture with the address would be necessary. Nevertheless, it is overkill for a really simple ad-hoc application with custom formatting and just a bunch of emails that would easily be grabbed manually.\nGeneration of fake data To test the contact section of the site, I wanted to populate it with fake data. Fake-Factory is an amazing library that can generate fake data of almost any kind: emails, association names, acronyms\u0026hellip; It even lets you localise the results (get Spanish names, for instance) and generate factories for certain classes (à la Django).\nBut I also wanted pictures, enter Lorem Pixel. With its API you can generate pictures of almost any size, for different topics (e.g. nightlife, people) and with a custom text. You can even use an index, so it will always show the same picture.\nFor instance, the picture below is served through Lorem Pixel.\nBy the way, if you only want cat pictures, take a look at Placekitten. And for NSFW text, there\u0026rsquo;s the Samuel L. Jackson Ipsum\n","permalink":"/post/2014-03-27-updating-eurolovemap/","tags":["javascript","python","heroku"],"title":"Updating EuroLoveMap"},{"categories":null,"contents":"A simple trick. If you want to remove all the \u0026lsquo;.swp\u0026rsquo; files from a git repository, just use:\n1 git rm --cached \u0026#39;**.swp\u0026#39; ","permalink":"/post/2013-08-22-remove-git-files-with-globbing/","tags":["git"],"title":"Remove git files with globbing"},{"categories":null,"contents":"I\u0026rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository.\nBut Jekyll can be used independently, so if I ever choose to host the site myself, I can do it quite easily. Another thing that I liked about this approach is that the generated html files can be used in the future, and I will not need Jekyll to serve it. Jekyll is really simple and most of the things are written in plain html. That means that everything could be easily reused if I ever choose to change to another blogging framework (e.g. pelical). But, for the time being, I like the fact that Github takes care of the compilation as well, so I can simply modify or add files through the web interface should I need to.\nI hadn\u0026rsquo;t played with HTML and CSS for a while now, so I also wanted to use this site as a playground. At some point, I realised I was doing mostly everything in plain HTML and CSS, and decided to keep it like that for as long as possible. As of this writing, I haven\u0026rsquo;t included any Javascript code in the page. Probably I will use some to add my gists and repositories, but we will see about that.\nI think the code speaks for itself, so you can check out my repository on Github. You can clone and deploy it easily like this:\n1 2 3 git clone https://github.com/balkian/balkian.github.com cd balkian.github.com jekyll serve -w I will keep updating this post with information about:\n Some Jekyll plugins that might be useful What CSS tricks I learnt The webfonts I used The badge on the left side of the page ","permalink":"/post/2013-08-17-creating-my-web/","tags":["starters","javascript","ruby","github","git"],"title":"Creating my web"},{"categories":null,"contents":"Show plain text version 1 (font-lock-mode) ","permalink":"/cheatsheet/emacs/","tags":["emacs","org","productivity","lisp"],"title":"Emacs"},{"categories":null,"contents":"Ongoing Projects Senpy: a framework for semantic sentiment and emotion analysis services. Soil: an agent-based simulator for social networks based on nx-sim and networkx. Onyx: an ontology for emotion analysis that includes concepts from W3C\u0026rsquo;s provenance. Past Projects Marl: I updated this ontology, originally created by Adam Westerski, to make it compatible with the W3C\u0026rsquo;s provenance ontology. Hermes: one of my first projects, developed together with David Pérez as the special custom assignment in one of our courses. Hermes is an affective bot designed to mimic the behavour of humans. It included a plug-in system for its sensors and actuators. The information from its sensors changed its emotional state, which was shown via its actuators. Among others, it could fetch inforation from Twitter or its host system and change the expressions of an external Face made with servo motors or speak via its Text-To-Speech software. For instance, it could detect it was running out of battery, showing a sad face and sending an alerting tweet. You can see it in action in these two youtube videos: Part 1 and Part 2. Maia: the Modular Architecture for Intelligent Agents is an evented agent architecture that aims to update the classical frameworks for intelligent agents with the concepts emerged from the Live Web. EESTEC.net: the Plone based official portal of EESTEC. It has been my first and only experience with Plone. I fixed some bugs and implemented basic features. For more information, check my list of public repositories in Github.\n","permalink":"/project/","tags":null,"title":"Index of projects"},{"categories":null,"contents":"Black screen and LightDM doesn\u0026rsquo;t unlock Add this to your /etc/lightdm/lightdm.conf file:\n1 2 [LightDM] logind-check-graphical=true Edit previous commands fc is a shell builtin to list and edit previous commands in an editor. In addition to editing a single line (which you can also do with C-x C-e), it also allows you to edit and run several lines at the same time. You use it like this:\nList previous commands\n1 2 3 4 5 $ fc -l 10259 nvim deploy.sh 10260* cd .. 10261* nvim content/cheatsheet/linux.md 10262 cd List commands with date (in zsh)\n1 2 3 4 5 $ fc -ld 10260* 19:38 cd .. 10261* 19:38 nvim content/cheatsheet/linux.md 10262 19:40 cd 10263 19:40 fc -l You can add the date too:\n1 2 3 4 $ fc -fld 10262 1/10/2019 19:40 cd 10263 1/10/2019 19:40 fc -l 10264 1/10/2019 19:40 fc -ld You can edit a range of commands\n1 $ fc 10262 10264 The range can be relative to the current position, so the previous command is equivalent to:\n1 $ fc -3 -1 If you save and exit, all commands are executed as a script, and it will be added to your history.\nSource: https://shapeshed.com/unix-fc/\nPrevent logoff from killing tmux sessions Lately I\u0026rsquo;ve noticed that logging out of i3, intentionally or when i3 fails, would also kill any tmux or emacs sessions. This is extremely annoying.\nThis is caused by a new default in logind (systemd\u0026rsquo;s login) to kill user process on logoff. You can revert this setting in your logind.conf (/etc/systemd/logind.conf):\n1 KillUserProcesses=no Or only for a specific process (e.g., tmux):\n1 systemd-run --scope --user tmux Source: https://unix.stackexchange.com/questions/490267/prevent-logoff-from-killing-tmux-session\nUpload a temporary file Sometimes you just need to copy/paste a file from a server, and copying from the terminal can be a hassle. These two services are command-line \u0026ldquo;pastebins\u0026rdquo; just one curl away:\n1 2 3 4 5 6 7 8 \u0026lt;command\u0026gt; | curl -F \u0026#39;sprunge=\u0026lt;-\u0026#39; http://sprunge.us # OR \u0026lt;command\u0026gt; 2\u0026gt;\u0026amp;1 | curl -F \u0026#39;f:1=\u0026lt;-\u0026#39; ix.io # OR \u0026lt;command\u0026gt; | curl -F\u0026#34;file=@-\u0026#34; https://ttm.sh Install Fortinet SSLVPN support for NetworkManager UPM (Universidad Politécnica de Madrid) uses a propriatary VPN solution. The instructions for GNU/Linux on their website involve downloading a specific client (.tar.gz) and manually running it. That works, but it is kind of a hassle. A much more convenient alternative is installing this NetworkManager plugin:\n1 2 pacman -Sy networkmanager-fortisslvpn # Or apt get install networkmanager-fortisslvpn Now you can simply add a new VPN connection in NetworkManager and manage it as you would any other connection.\n","permalink":"/cheatsheet/linux/","tags":["linux","arch"],"title":"Linux"},{"categories":null,"contents":"Interesting libraries TQDM From tqdm\u0026rsquo;s github repository:\n tqdm means \u0026ldquo;progress\u0026rdquo; in Arabic (taqadum, تقدّم) and an abbreviation for \u0026ldquo;I love you so much\u0026rdquo; in Spanish (te quiero demasiado).\n ","permalink":"/cheatsheet/python/","tags":["python","programming"],"title":"Python"},{"categories":null,"contents":"HDMI flickering Avoid HDMI flickering/intermittent blanking on RPI with a 1400x1050 VGA monitor.\n1 2 3 4 5 6 hdmi_drive=2 hdmi_group=2 hdmi_mode=42 disable_overscan=1 config_hdmi_boost=7 ","permalink":"/cheatsheet/rpi/","tags":["rpi"],"title":"Raspberry Pi"},{"categories":null,"contents":"This file exists solely to respond to /search URL with the related search layout template.\nNo content shown here is rendered, all content is based in the template layouts/page/search.html\nSetting a very low sitemap priority will tell search engines this is not important content.\nThis implementation uses Fusejs, jquery and mark.js\nInitial setup Search depends on additional output content type of JSON in config.toml ``` [outputs] home = [\u0026ldquo;HTML\u0026rdquo;, \u0026ldquo;JSON\u0026rdquo;] ```\nSearching additional fileds To search additional fields defined in front matter, you must add it in 2 places.\nEdit layouts/_default/index.JSON This exposes the values in /index.json i.e. add category ``` \u0026hellip; \u0026ldquo;contents\u0026rdquo;:{{ .Content | plainify | jsonify }} {{ if .Params.tags }}, \u0026ldquo;tags\u0026rdquo;:{{ .Params.tags | jsonify }}{{end}}, \u0026ldquo;categories\u0026rdquo; : {{ .Params.categories | jsonify }}, \u0026hellip; ```\nEdit fuse.js options to Search static/js/search.js ``` keys: [ \u0026ldquo;title\u0026rdquo;, \u0026ldquo;contents\u0026rdquo;, \u0026ldquo;tags\u0026rdquo;, \u0026ldquo;categories\u0026rdquo; ] ```\n ${title} ${snippet}\n ","permalink":"/search/","tags":null,"title":"Search Results"},{"categories":null,"contents":"PhD Write my first workshop paper as main author Write my first journal paper Write my first book chapter Chair a W3C Community Group Collaborate on a W3C recommendation Become a doctor! Technical Write a NodeJS App. Maia [See ISSUES] Write my first Django Application Develop a distributed LibP2P golang application Github repo with +100 stars Build a custom LineageOS image Languages English Chinese Greek German Esperanto Personal Run a 10k Blog regularly for a year ","permalink":"/page/todo/","tags":null,"title":"To-do"}] \ No newline at end of file diff --git a/index.xml b/index.xml new file mode 100644 index 0000000..a1b4e8c --- /dev/null +++ b/index.xml @@ -0,0 +1,223 @@ + + + + Balkian's site + / + Recent content on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 30 Oct 2021 00:00:01 +0000 + + + + + + Logitech MB850 combi in linux + /post/2021-10-30-logitech-mk850/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /post/2021-10-30-logitech-mk850/ + As a follow-up to my last post, I&rsquo;ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: + The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + + + Logitech MX Keys for Mac on Linux + /post/2021-10-29-logitech-mx-keys-mac/ + Fri, 29 Oct 2021 00:00:01 +0000 + + /post/2021-10-29-logitech-mx-keys-mac/ + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + + + Linux on the Microsoft Surface Go + /post/2019-05-01-surface-go/ + Sat, 01 Jun 2019 00:00:01 +0000 + + /post/2019-05-01-surface-go/ + <p>Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.</p> + + + + Controlling Zigbee devices with MQTT + /post/2019-01-06-zigbee2mqtt/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /post/2019-01-06-zigbee2mqtt/ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you&rsquo;re anything like me, you&rsquo;re probably a sucker for IoT devices. For a long time, I&rsquo;ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + + + Progress bars in python + /post/2016-09-28-tqdm/ + Wed, 28 Sep 2016 18:47:00 +0000 + + /post/2016-09-28-tqdm/ + tqdm is a nice way to add progress bars in the command line or in a jupyter notebook. +1 2 3 4 5 from tqdm import tqdm import time for i in tqdm(range(100)): time.sleep(1) + + + + Sharing dotfiles + /post/2015-04-10-github-dotfiles/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /post/2015-04-10-github-dotfiles/ + Today&rsquo;s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + + + Zotero + /post/2014-12-09-zotero/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /post/2014-12-09-zotero/ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + + + Proxies with Apache and python + /post/2014-10-09-proxies/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /post/2014-10-09-proxies/ + <p>This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name <em>application</em>. Hence, wsgi:application.</p> +<h2 id="gunicorn">Gunicorn</h2> +<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> +<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5 +</span></code></pre></td> +<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-apache" data-lang="apache"><span style="color:#f92672">&lt;Location</span> <span style="color:#e6db74">/myapp/</span><span style="color:#f92672">&gt;</span> + ProxyPass http://127.0.0.1:8888/myapp/ + ProxyPassReverse http://127.0.0.1:8888/myapp/ + RequestHeader set SCRIPT_NAME <span style="color:#e6db74">&#34;/myapp/&#34;</span> +<span style="color:#f92672">&lt;/Location&gt;</span> +</code></pre></td></tr></table> +</div> +</div> + + + + Publishing on PyPi + /post/2014-09-23-publishing-to-pypi/ + Sat, 27 Sep 2014 10:00:00 +0000 + + /post/2014-09-23-publishing-to-pypi/ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + + + Updating EuroLoveMap + /post/2014-03-27-updating-eurolovemap/ + Thu, 27 Mar 2014 14:00:00 +0000 + + /post/2014-03-27-updating-eurolovemap/ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the &ldquo;overall feeling&rdquo; of each country about each topic. + + + + Remove git files with globbing + /post/2013-08-22-remove-git-files-with-globbing/ + Thu, 22 Aug 2013 23:14:00 +0000 + + /post/2013-08-22-remove-git-files-with-globbing/ + A simple trick. If you want to remove all the &lsquo;.swp&rsquo; files from a git repository, just use: +1 git rm --cached &#39;**.swp&#39; + + + + Creating my web + /post/2013-08-17-creating-my-web/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /post/2013-08-17-creating-my-web/ + I&rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + + + Emacs + /cheatsheet/emacs/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/emacs/ + <h1 id="show-plain-text-version">Show plain text version</h1> + + + + Index of projects + /project/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /project/ + Ongoing Projects Senpy: a framework for semantic sentiment and emotion analysis services. Soil: an agent-based simulator for social networks based on nx-sim and networkx. Onyx: an ontology for emotion analysis that includes concepts from W3C&rsquo;s provenance. Past Projects Marl: I updated this ontology, originally created by Adam Westerski, to make it compatible with the W3C&rsquo;s provenance ontology. + + + + Linux + /cheatsheet/linux/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/linux/ + Black screen and LightDM doesn&rsquo;t unlock Add this to your /etc/lightdm/lightdm.conf file: +1 2 [LightDM] logind-check-graphical=true Edit previous commands fc is a shell builtin to list and edit previous commands in an editor. In addition to editing a single line (which you can also do with C-x C-e), it also allows you to edit and run several lines at the same time. + + + + Python + /cheatsheet/python/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/python/ + Interesting libraries TQDM From tqdm&rsquo;s github repository: + tqdm means &ldquo;progress&rdquo; in Arabic (taqadum, تقدّم) and an abbreviation for &ldquo;I love you so much&rdquo; in Spanish (te quiero demasiado). + + + + + Raspberry Pi + /cheatsheet/rpi/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/rpi/ + HDMI flickering Avoid HDMI flickering/intermittent blanking on RPI with a 1400x1050 VGA monitor. +1 2 3 4 5 6 hdmi_drive=2 hdmi_group=2 hdmi_mode=42 disable_overscan=1 config_hdmi_boost=7 + + + + Search Results + /search/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /search/ + This file exists solely to respond to /search URL with the related search layout template. +No content shown here is rendered, all content is based in the template layouts/page/search.html +Setting a very low sitemap priority will tell search engines this is not important content. +This implementation uses Fusejs, jquery and mark. + + + + To-do + /page/todo/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /page/todo/ + PhD Write my first workshop paper as main author Write my first journal paper Write my first book chapter Chair a W3C Community Group Collaborate on a W3C recommendation Become a doctor! Technical Write a NodeJS App. Maia [See ISSUES] Write my first Django Application Develop a distributed LibP2P golang application Github repo with +100 stars Build a custom LineageOS image Languages English Chinese Greek German Esperanto Personal Run a 10k Blog regularly for a year + + + + \ No newline at end of file diff --git a/page/1/index.html b/page/1/index.html new file mode 100644 index 0000000..6926291 --- /dev/null +++ b/page/1/index.html @@ -0,0 +1 @@ +/ \ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..4a179bf --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,323 @@ + + + + + + + Balkian's site - Balkian's site + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2015/04/10 +

Sharing dotfiles

+ +github + +git + +dotfiles + + +
+ + Today’s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + +
+ + +
+
+ 2014/12/09 +

Zotero

+ +zotero + +webdav + +nginx + +apache + + +
+ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + +
+ + +
+
+ 2014/10/09 +

Proxies with Apache and python

+ +python + +apache + +proxy + +gunicorn + +uwsgi + + +
+ +

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+
+ + +
+ + +
+
+ 2014/09/27 +

Publishing on PyPi

+ +github + +python + +pypi + + +
+ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + +
+ + +
+
+ 2014/03/27 +

Updating EuroLoveMap

+ +javascript + +python + +heroku + + +
+ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the “overall feeling” of each country about each topic. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 0000000..2dd7ee8 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1,244 @@ + + + + + + + Balkian's site - Balkian's site + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2013/08/22 +

Remove git files with globbing

+ +git + + +
+ +

A simple trick. If you want to remove all the ‘.swp’ files from a git +repository, just use:

+
+ +
+
1
+
+
git rm --cached '**.swp'
+
+
+
+ +
+ + +
+
+ 2013/08/22 +

Creating my web

+ +starters + +javascript + +ruby + +github + +git + + +
+ + I’ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/page/index.html b/page/index.html new file mode 100644 index 0000000..04c5e87 --- /dev/null +++ b/page/index.html @@ -0,0 +1,205 @@ + + + + + + Balkian's site - Pages + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

To-do

+

+ + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/page/index.xml b/page/index.xml new file mode 100644 index 0000000..49173cc --- /dev/null +++ b/page/index.xml @@ -0,0 +1,24 @@ + + + + Pages on Balkian's site + /page/ + Recent content in Pages on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + To-do + /page/todo/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /page/todo/ + PhD Write my first workshop paper as main author Write my first journal paper Write my first book chapter Chair a W3C Community Group Collaborate on a W3C recommendation Become a doctor! Technical Write a NodeJS App. Maia [See ISSUES] Write my first Django Application Develop a distributed LibP2P golang application Github repo with +100 stars Build a custom LineageOS image Languages English Chinese Greek German Esperanto Personal Run a 10k Blog regularly for a year + + + + \ No newline at end of file diff --git a/page/page/1/index.html b/page/page/1/index.html new file mode 100644 index 0000000..b19c856 --- /dev/null +++ b/page/page/1/index.html @@ -0,0 +1 @@ +/page/ \ No newline at end of file diff --git a/page/todo/index.html b/page/todo/index.html new file mode 100644 index 0000000..3285f7b --- /dev/null +++ b/page/todo/index.html @@ -0,0 +1,212 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

PhD

+
    +
  • Write my first workshop paper as main author
  • +
  • Write my first journal paper
  • +
  • Write my first book chapter
  • +
  • Chair a W3C Community Group
  • +
  • Collaborate on a W3C recommendation
  • +
  • Become a doctor!
  • +
+

Technical

+
    +
  • Write a NodeJS App. Maia [See ISSUES]
  • +
  • Write my first Django Application
  • +
  • Develop a distributed LibP2P golang application
  • +
  • Github repo with +100 stars
  • +
  • Build a custom LineageOS image
  • +
+

Languages

+
    +
  • English
  • +
  • Chinese
  • +
  • Greek
  • +
  • German
  • +
  • Esperanto
  • +
+

Personal

+
    +
  • Run a 10k
  • +
  • Blog regularly for a year
  • +
+ + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2013-08-17-creating-my-web/index.html b/post/2013-08-17-creating-my-web/index.html new file mode 100644 index 0000000..362abdd --- /dev/null +++ b/post/2013-08-17-creating-my-web/index.html @@ -0,0 +1,241 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Creating my web

+2013/08/22 + +starters + +javascript + +ruby + +github + +git + + +

+

I’ve finally decided to set up a decent personal page. I have settled +for github-pages because I like the idea of keeping my site in a +repository and having someone else host and deploy it for me. The site +will be really simple, mostly static files. Thanks to Github, +Jekyll will automatically generate static pages +for my posts every time I commit anything new to this repository.

+

But Jekyll can be used independently, so if I ever choose to host the +site myself, I can do it quite easily. Another thing that I liked about +this approach is that the generated html files can be used in the +future, and I will not need Jekyll to serve it. Jekyll is really simple +and most of the things are written in plain html. That means that +everything could be easily reused if I ever choose to change to another +blogging framework (e.g. pelical). But, for the time being, I like the +fact that Github takes care of the compilation as well, so I can simply +modify or add files through the web interface should I need to.

+

I hadn’t played with HTML and CSS for a while now, so I also wanted to +use this site as a playground. At some point, I realised I was doing +mostly everything in plain HTML and CSS, and decided to keep it like +that for as long as possible. As of this writing, I haven’t included +any Javascript code in the page. Probably I will use some to add my +gists and +repositories, but we will see about that.

+

I think the code speaks for itself, so you can check out my repository +on Github. You can clone +and deploy it easily like this:

+
+ +
+
1
+2
+3
+
+
git clone
+https://github.com/balkian/balkian.github.com cd balkian.github.com
+jekyll serve -w
+
+
+

I will keep updating this post with information about:

+
    +
  • Some Jekyll plugins that might be useful
  • +
  • What CSS tricks I learnt
  • +
  • The webfonts I used
  • +
  • The badge on the left side of the page
  • +
+ + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2013-08-22-remove-git-files-with-globbing/index.html b/post/2013-08-22-remove-git-files-with-globbing/index.html new file mode 100644 index 0000000..7783ac2 --- /dev/null +++ b/post/2013-08-22-remove-git-files-with-globbing/index.html @@ -0,0 +1,199 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Remove git files with globbing

+2013/08/22 + +git + + +

+

A simple trick. If you want to remove all the ‘.swp’ files from a git +repository, just use:

+
+ +
+
1
+
+
git rm --cached '**.swp'
+
+
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2014-03-27-updating-eurolovemap/index.html b/post/2014-03-27-updating-eurolovemap/index.html new file mode 100644 index 0000000..93c6095 --- /dev/null +++ b/post/2014-03-27-updating-eurolovemap/index.html @@ -0,0 +1,314 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Updating EuroLoveMap

+2014/03/27 + +javascript + +python + +heroku + + +

+

As part of the OpeNER +hackathon +we decided to build a prototype that would allow us to compare how +different countries feel about several topics. We used the OpeNER +pipeline to get the sentiment from a set of newspaper articles we +gathered from media in several languages. Then we aggregated those +articles by category and country (using the source of the article or the +language it was written in), obtaining the “overall feeling” of each +country about each topic. Then, we used some fancy JavaScript to make +sense out of the raw information.

+

It didn’t go too bad, it turns out we +won.

+

Now, it was time for a face-lift. I used this opportunity to play with +new technologies and improve it:

+
    +
  • Using Flask, this time using python 3.3 and Bootstrap 3.0
  • +
  • Cool HTML5+JS cards (thanks to +pastetophone)
  • +
  • Automatic generation of fake personal data to test the interface
  • +
  • Obfuscation of personal emails
  • +
+

The result can be seen here.

+

Publishing a Python 3 app on Heroku

+
+ +
+
1
+
+
mkvirtualenv -p /usr/bin/python3.3 eurolovemap
+
+
+

Since Heroku uses python 2.7 by default, we have to tell it which +version we want, although it supports python 3.4 as well. I couldn’t +get python 3.4 working using the +deadsnakes ppa, so +I used python 3.3 instead, which works fine but is not officially +supported. Just create a file named runtime.txt in your project root, +with the python version you want to use:

+
+ +
+
1
+
+
python-3.3.1
+
+
+

Don’t forget to freeze your dependencies so Heroku can install them: +bash pip freze > requirements.txt

+

Publishing personal emails

+

There are really sophisticated and effective ways to obfuscate personal +emails so that spammers cannot easily grab yours. However, this time I +needed something really simple to hide our emails from the simplest form +of crawlers. Most of the team are in academia somehow, so in the end all +our emails are available in sites like Google Scholar. Anyway, nobody +likes getting spammed so I settled for a custom Caesar +cipher. Please, don’t use +it for any serious application if you are concerned about being spammed.

+
+ +
+
1
+2
+
+
def blur_email(email):
+    return "".join([chr(ord(i)+5) for i in email])
+
+
+

And this is the client side:

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+
+
window.onload = function(){
+     elems = document.getElementsByClassName('profile-email');
+     for(var e in elems){
+        var blur = elems[e].innerHTML;
+        var email = "";
+        for(var s in blur){
+            var a = blur.charCodeAt(s)
+            email = email+String.fromCharCode(a-5);
+        }
+        elems[e].innerHTML = email;
+     }
+}
+
+
+

Unfortunately, this approach does not hide your email from anyone using +PhantomJS, +ZombieJS or similar. For that, other +approaches like generating a picture with the address would be +necessary. Nevertheless, it is overkill for a really simple ad-hoc +application with custom formatting and just a bunch of emails that would +easily be grabbed manually.

+

Generation of fake data

+

To test the contact section of the site, I wanted to populate it with +fake data. Fake-Factory is an amazing +library that can generate fake data of almost any kind: emails, +association names, acronyms… It even lets you localise the results +(get Spanish names, for instance) and generate factories for certain +classes (à la Django).

+

But I also wanted pictures, enter Lorem Pixel. +With its API you can generate pictures of almost any size, for different +topics (e.g. nightlife, people) and with a custom text. You can even use +an index, so it will always show the same picture.

+

For instance, the picture below is served through Lorem Pixel.

+

+

By the way, if you only want cat pictures, take a look at +Placekitten. And for NSFW text, there’s the +Samuel L. Jackson Ipsum

+ + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2014-09-23-publishing-to-pypi/index.html b/post/2014-09-23-publishing-to-pypi/index.html new file mode 100644 index 0000000..e54fdca --- /dev/null +++ b/post/2014-09-23-publishing-to-pypi/index.html @@ -0,0 +1,335 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Publishing on PyPi

+2014/09/27 + +github + +python + +pypi + + +

+

Developing a python module and publishing it on Github is cool, but most +of the times you want others to download and use it easily. That is the +role of PyPi, the python package repository. In this post I show you how +to publish your package in less than 10 minutes.

+

Choose a fancy name

+

If you haven’t done so yet, take a minute or two to think about this. +To publish on PyPi you need a name for your package that isn’t taken. +What’s more, a catchy and unique name will help people remember your +module and feel more inclined to at least try it.

+

The package name should hint what your module does, but that’s not +always the case. That’s your call. I personally put uniqueness and +memorability over describing the functionality.

+

Create a .pypirc configuration file

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+
+
[distutils] # this tells distutils what package indexes you can push to
+index-servers =
+    pypi # the live PyPI
+    pypitest # test PyPI
+
+[pypi] # authentication details for live PyPI
+repository = https://pypi.python.org/pypi
+username = { your_username }
+password = { your_password } # not necessary
+
+[pypitest] # authentication details for test PyPI
+repository = https://testpypi.python.org/pypi
+username = { your_username }
+
+
+

As you can see, you need to register both in the main pypi +repository and +the testing +server. The +usernames and passwords might be different, that is up to you!

+

Prepare your package

+

This should be the structure:

+
root-dir/    # Any name you want
+    setup.py
+    setup.cfg
+    LICENSE.txt
+    README.md
+    mypackage/
+        __init__.py
+        foo.py
+        bar.py
+        baz.py
+

setup.cfg

+
+ +
+
1
+2
+
+
[metadata]
+description-file = README.md
+
+
+

The markdown README is the de facto standard in Github, but you can +also use rST (reStructuredText), the standard in the python community.

+

setup.py

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+
+
from distutils.core import setup
+
+setup(name = 'mypackage',
+      packages = ['mypackage'], # this must be the same as the name above
+      version = '{ version }',
+      description = '{ description }',
+      author = '{ name }',
+      email = '{ email }',
+      url = 'https://github.com/{user}/{package}', # URL to the github repo
+      download_url = 'https://github.com/{user}/{repo}/tarball/{version}',
+      keywords = ['websockets', 'display', 'd3'], # list of keywords that represent your package
+      classifiers = [], )
+
+
+

You might notice that the download_url points to a Github URL. We could +host our package anywhere, but Github is a convenient option. To create +the tarball and the zip packages, you only need to tag a tag in your +repository and push it to github:

+
+ +
+
1
+2
+
+
git tag {version} -m "{ Description of this tag/version}"
+git push --tags origin master
+
+
+

Push to the testing/main pypi server

+

It is advisable that you try your package on the test repository and fix +any problems first. The process is simple:

+
+ +
+
1
+
+
python setup.py register -r {pypitest/pypi} python setup.py sdist upload -r {pypitest/pypi}
+
+
+

If everything went as expected, you can now install your package through +pip and browse your package’s page. For instance, check my senpy +package: https://pypi.python.org/pypi/senpy

+
+ +
+
1
+
+
pip install senpy
+
+
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2014-10-09-proxies/index.html b/post/2014-10-09-proxies/index.html new file mode 100644 index 0000000..810f4fe --- /dev/null +++ b/post/2014-10-09-proxies/index.html @@ -0,0 +1,301 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Proxies with Apache and python

+2014/10/09 + +python + +apache + +proxy + +gunicorn + +uwsgi + + +

+

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+

Important: SCRIPT_NAME and the end of ProxyPass URL MUST BE +THE SAME. Otherwise, Gunicorn will fail miserably.

+

Try it with:

+
+ +
+
1
+
+
venv/bin/gunicorn -w 4 -b 127.0.0.1:8888 --log-file - --access-logfile - wsgi:application
+
+
+

UWSGI

+

This is a very simple configuration. I will try to upload one with more +options for uwsgi (in a .ini file).

+
+ +
+
1
+2
+3
+4
+
+
<Location /myapp/>
+    SetHandler uwsgi_handler
+    uWSGISocker 127.0.0.1:8888
+</Location>
+
+
+

Try it with:

+
+ +
+
1
+
+
uwsgi --socket 127.0.0.1:8888 -w wsgi:application
+
+
+

Extra: Supervisor

+

If everything went as expected, you can wrap your command in a +supervisor config file and let it handle the server for you.

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+
+
[unix_http_server]
+file=/tmp/myapp.sock ; path to your socket file
+
+[supervisord]
+logfile = %(here)s/logs/supervisor.log
+childlogdir = %(here)s/logs/
+
+[rpcinterface:supervisor]
+supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
+
+[supervisorctl]
+logfile = %(here)s/logs/supervisorctl.log
+serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
+
+[program:myapp]
+command = venv/bin/gunicorn -w 4 -b 0.0.0.0:5000 --log-file %(here)s/logs/gunicorn.log --access-logfile - wsgi:application
+directory = %(here)s
+environment = PATH=%(here)s/venv/bin/
+logfile = %(here)s/logs/myapp.log
+
+
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2014-12-09-zotero/index.html b/post/2014-12-09-zotero/index.html new file mode 100644 index 0000000..98f485d --- /dev/null +++ b/post/2014-12-09-zotero/index.html @@ -0,0 +1,332 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Zotero

+2014/12/09 + +zotero + +webdav + +nginx + +apache + + +

+

Zotero is an Open Source tool that lets you +organise your bibliography, syncing it with the cloud. Unlike other +alternatives such as Mendeley, Zotero can +upload the attachments and data to a private cloud via WebDav.

+

If you use nginx as your web server, know that even though it provides +partial support for webdav, Zotero needs more than that. Hence, you will +need another webdav server, and optionally let nginx proxy to it. This +short post provides the basics to get that set-up working under +Debian/Ubuntu.

+

Setting up Apache

+

First we need to install Apache:

+
+ +
+
1
+
+
sudo apt-get install apache2
+
+
+

Change the head of “/etc/apache2/sites-enabled/000-default” to:

+
+ +
+
1
+
+
<VirtualHost *:880>
+
+
+

Then, create a file /etc/apache2/sites-available/webdav:

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+
+
Alias /dav /home/webdav/dav
+<Location /dav>
+    Dav on
+    Order Allow,Deny
+    Allow from all
+    Dav On
+    Options +Indexes
+    AuthType Basic
+    AuthName DAV
+    AuthBasicProvider file
+    AuthUserFile /home/webdav/.htpasswd
+    Require valid-user
+</Location>
+
+
+

Ideally, you want your webdav folders to be private, adding +authentication to them. So you need to create the webdav and zotero +users and add the passwords to an htpasswd file. Even though you could +use a single user, since you will be configuring several clients with +your credentials I encourage you to create the zotero user as well. This +way you can always change the password for zotero without affecting any +other application using webdav.

+
+ +
+
1
+2
+3
+4
+
+
sudo adduser webdav
+sudo htpasswd -c /home/webdav/.htpasswd webdav
+sudo htpasswd /home/webdav/.htpasswd zotero
+sudo mkdir -p /home/webdav/dav/zotero
+
+
+

Enable the site and restart apache:

+
+ +
+
1
+2
+3
+4
+
+
sudo a2enmod webdav
+sudo a2enmod dav_fs
+sudo a2ensite webdav
+sudo service apache2 restart
+
+
+

At this point everything should be working at +http://<your_host>:880/dav/zotero

+

Setting up NGINX

+

After the Apache side is working, we can use nginx as a proxy to get +cleaner URIs. In your desired site/location, add this:

+
+ +
+
1
+2
+3
+4
+5
+6
+7
+
+
location /dav {
+    client_max_body_size 20M;
+    proxy_set_header X-Real-IP  $remote_addr;
+    proxy_set_header X-Forwarded-For $remote_addr;
+    proxy_set_header Host $host;
+    proxy_pass http://127.0.0.1:880;
+}
+
+
+

Now just reload nginx:

+
+ +
+
1
+
+
sudo service nginx force-reload
+
+
+

Extras

+ + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2015-04-10-github-dotfiles/index.html b/post/2015-04-10-github-dotfiles/index.html new file mode 100644 index 0000000..c952e98 --- /dev/null +++ b/post/2015-04-10-github-dotfiles/index.html @@ -0,0 +1,211 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Sharing dotfiles

+2015/04/10 + +github + +git + +dotfiles + + +

+

Today’s post is half a quick note, half public shaming. In other words, +it is a reminder to be very careful with OAuth tokens and passwords.

+

As part of moving to emacs, I starting using the incredibly useful +gh.el. When you first use it, the +extension saves either your password or an OAuth token in your +.gitconfig file. This is cool and convenient, unless you happen to be +publishing your .gitconfig file in a public +repo.

+

So, how can you still share your gitconfig without sharing your +password/token with the rest of the world? Since Git 1.7.0, you can +include other files in your +gitconfig.

+
[include]
+    path = ~/.gitconfig_secret
+

And now, in your .gitconfig_secret file, you just have to add this:

+
[github]
+    user = balkian 
+    token = "< Your secret token >" 
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2016-09-28-tqdm/index.html b/post/2016-09-28-tqdm/index.html new file mode 100644 index 0000000..234811f --- /dev/null +++ b/post/2016-09-28-tqdm/index.html @@ -0,0 +1,208 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Progress bars in python

+2016/09/28 + +python + + +

+

tqdm is a nice way to add progress +bars in the command line or in a jupyter notebook.

+

image

+
+ +
+
1
+2
+3
+4
+5
+
+
from tqdm import tqdm
+import time
+
+for i in tqdm(range(100)):
+    time.sleep(1)
+
+
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2019-01-06-zigbee2mqtt/index.html b/post/2019-01-06-zigbee2mqtt/index.html new file mode 100644 index 0000000..8a32d77 --- /dev/null +++ b/post/2019-01-06-zigbee2mqtt/index.html @@ -0,0 +1,317 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Controlling Zigbee devices with MQTT

+2019/01/06 + +mqtt + +iot + +zigbee + + +

+

This is a short tutorial on connecting a zigbee device (an Aqara cube) +to an MQTT server, so you can control your zigbee devices from the +network.

+

If you’re anything like me, you’re probably a sucker for IoT devices. +For a long time, I’ve been using WiFi-enabled lights, and Amazon dash +buttons to control them. To keep these (cheap Chinese) internet enabled +devices away from your network and their respective cloud services, +you’ll probably want to set up a dedicated network in your router (more +on this on a future post, maybe). Another disadvantage of WiFi devices +is that they’re relatively power hungry.

+

A popular alternative is using ZigBee for communication. It is a +dedicated protocol similar to bluetooth (BLE), with lower power +requirements and bitrate.

+

Take the (super cute) aqara cube as an example. It is a small cube that +detects rotation on all of its axes, and tapping events. Here’s a +video:

+ +
+ +
+ +

To connect to zigbee devices you will need a zigbee enabled gateway +(a.k.a. hub), which connects to your WiFi network and your zigbee +devices. Once again, this means adding an internet-enabled device to +your home, and probably a couple of cloud services.

+

As an alternative, you can set up your own zigbee gateway, and control +it to your home automation platform of choice (e.g. home assistant). We +will cover how to set up a zigbee2mqtt gateway that is also connected to +an MQTT server, so you can use MQTT to control your devices and get +notifications.

+

What you need:

+ +

You will need to flash your sniffer. For that, you only need to follow +the instructions from the zigbee2mqtt +documentation.

+

Once you’re done flashing, you’re ready to set up the zigbee2mqtt +server. For convenience, I wrote a simple docker-compose to deploy a +zigbee2mqtt server and a test mosquitto server:

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+
+
version: '2.1'
+services:
+  zigbee2mqtt:
+    image: koenkk/zigbee2mqtt
+    container_name: zigbee2mqtt 
+    restart: always
+    volumes:
+      - ./z2m-data/:/app/data/
+    devices:
+      - "/dev/ttyACM0"
+    networks:
+        - hass
+  mqtt:
+    image: eclipse-mosquitto
+    ports:
+       - 1883:1883
+       - 9001:9001 
+    networks:
+        - hass
+    volumes:
+      - ./mosquitto.conf:/mosquitto/config/mosquitto.conf
+networks:
+  hass:
+    driver: overlay
+
+
+

You can test your installation with:

+
+ +
+
1
+2
+3
+4
+5
+6
+
+
❯ mosquitto_sub -h localhost -p 1883 -t 'zigbee2mqtt/#'
+online
+{"battery":17,"voltage":2925,"linkquality":149,"action":"rotate_right","angle":12.8}
+{"battery":17,"voltage":2925,"linkquality":141,"action":"slide","side":2}
+{"battery":17,"voltage":2925,"linkquality":120}
+{"battery":17,"voltage":2925,"linkquality":141,"action":"wakeup"}
+
+
+

zigbee2mqtt supports the following events for the aqara cube: shake, +wakeup, fall, tap, slide, flip180, flip90, rotate_left and +rotate_right. Every event has additional information, such as the sides +involved, or the degrees turned.

+

Now you are ready to set up home assistant support in zigbee2mqtt +following this +guide.

+ + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2019-05-01-surface-go/index.html b/post/2019-05-01-surface-go/index.html new file mode 100644 index 0000000..a8d9cee --- /dev/null +++ b/post/2019-05-01-surface-go/index.html @@ -0,0 +1,272 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Linux on the Microsoft Surface Go

+2019/06/01 + +linux + +surface go + +config + + +

+

Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.

+

Installing the kernel

+
+ +
+
1
+2
+
+
git clone --depth 1 https://github.com/jakeday/linux-surface.git ~/linux-surface
+cp -a ~/linux-surface /media/<your usb>
+
+
+
+ +
+
1
+2
+3
+
+
cp -a /media/<your usb>/linux-surface ~/
+cd ~/linux-surface/
+sudo sh setup.sh
+
+
+

Booting ubuntu first

+

Switch out of Windows S mode.

+

Boot into the “Command Prompt”.

+

From Windows go to “change advanced startup options” and select “restart now”.

+

When it reboots, choose the “Troubleshoot” option, then choose the “Advanced options” option, and finally choose the “Command Prompt” option.

+

After the device reboots, login to the command prompt and then you should see a terminal with X:\windows\system32>

+

At the prompt, check your UEFI entries:

+
+ +
+
1
+
+
bcdedit /enum firmware
+
+
+

Copy UEFI entry of “Windows Boot Manager” to create a new entry for Ubuntu: bcdedit /copy {bootmgr} /d “Ubuntu”

+

Copy the printed GUID number including the braces {} using Ctrl+C

+

Set file path for the new Ubuntu entry. Replace {guid} with the returned GUID of the previous command (Ctrl+V). bcdedit /set {guid} path \EFI\ubuntu\grubx64.efi

+

Set Ubuntu as the first/ entry in the boot sequence. Again replace {guid} with the returned GUID of the copy command.

+
+ +
+
1
+
+
bcdedit /set {fwbootmgr} displayorder {guid} /addfirst
+
+
+

Check your UEFI entries again: bcdedit /enum firmware You should see something like this:

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+
+

+Firmware Boot Manager
+---------------------
+identifier              {fwbootmgr}
+displayorder            {3510232e-f8eb-e811-95ce-9ecab3f9d1c4}
+                        {bootmgr}
+                        {2148799b-f8eb-e811-95ce-9ecab3f9d1c4}
+                        {312e8a67-c2f6-e811-95ce-3c1ab3f9d1de}
+                        {312e8a68-c2f6-e811-95ce-3c1ab3f9d1de}
+timeout                 0
+
+
+

Make sure the GUID you copied is the first one listed in displayorder. Then type exit, turn off the PC and turn it back on. After this my surface go is automatically booting to the grub bootloader which lets me choose between Windows and Ubuntu but defaults to Ubuntu after ten seconds.

+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2021-10-29-logitech-mx-keys-mac/index.html b/post/2021-10-29-logitech-mx-keys-mac/index.html new file mode 100644 index 0000000..6fe8390 --- /dev/null +++ b/post/2021-10-29-logitech-mx-keys-mac/index.html @@ -0,0 +1,238 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Logitech MX Keys for Mac on Linux

+2021/10/29 + +linux + +logitech + +keyboard + + +

+

I recently got Logitech MX Keys for Mac keyboard at work. +The German version, to be more precise. +This version was three times cheaper than the Windows equivalent with either US or ES layout. +Since I touch type anyway, I thought it was a bargain.

+

As soon as I plugged it in, I realized there were some glaring issues with the keyboard. +First of all, the Meta/Super and Alt keys are reversed in this keyboard. +In the normal/full version of this keyboard, Logitech gives an option to choose between Mac, Windows and iOS host, and that changes the behavior of the keys. +In this version, tho, only iOS and Mac are available.

+

Besides that, there’s the issue of the grave (tilde) and angle keys switched as well.

+

Switching these keys around would be very easy with Xorg, but Wayland once again complicates things…

+

These issues almost made me return the keyboard. +Luckily, tho, there is another option: configuring the keys one level lower than wayland (and X11), through hwdb.

+

Long story short, this will configure any Logitech keyboard with the same product id (0x4092) to use a saner configuration:

+
+ +
+
 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+
+
#File: /etc/udev/hwdb.d/90-logitech-keyboard.hwdb
+
+evdev:input:b0003v046Dp4092*
+ KEYBOARD_KEY_700e2=leftmeta
+ KEYBOARD_KEY_700e3=leftalt
+ KEYBOARD_KEY_70039=leftctrl
+ KEYBOARD_KEY_70064=102nd
+ KEYBOARD_KEY_70035=grave
+ KEYBOARD_KEY_700e7=rightalt
+ KEYBOARD_KEY_700e6=rightmeta
+ KEYBOARD_KEY_7006d=compose
+
+
+
+

After that, simply run:

+
 sudo udevadm hwdb --update && sudo udevadm trigger
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/2021-10-30-logitech-mk850/index.html b/post/2021-10-30-logitech-mk850/index.html new file mode 100644 index 0000000..826d73f --- /dev/null +++ b/post/2021-10-30-logitech-mk850/index.html @@ -0,0 +1,234 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Logitech MB850 combi in linux

+2021/10/30 + +linux + +logitech + +keyboard + +mouse + + +

+

As a follow-up to my last post, I’ve decided to also configure my mk850 combo (k850 + m720 triathlon).

+

Some notes:

+
    +
  • The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc)
  • +
  • The mouse has an additional button that registers as a keyboard. Every press maps to three key events. I’ve disabled two of them and mapped the action to F19, in case I want to use it in my DE/WM.
  • +
+
+ +
+
1
+2
+3
+4
+5
+6
+7
+8
+
+
evdev:input:*                                                        
+ KEYBOARD_KEY_70039=leftctrl  # bind capslock to w 
+
+evdev:input:b0005v046DpB015*
+ KEYBOARD_KEY_700e0=f19
+ KEYBOARD_KEY_700e2=unknown
+ KEYBOARD_KEY_7002b=unknown
+
+
+
+

After that, simply run:

+
 sudo udevadm hwdb --update && sudo udevadm trigger
+

Make sure the settings have been applied by running evemu-describe:

+
+ +
+
1
+
+
 sudo /sbin/evemu-describe  /dev/input/event<id of your device> | grep KEY_  
+
+
+
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/index.html b/post/index.html new file mode 100644 index 0000000..bd373c1 --- /dev/null +++ b/post/index.html @@ -0,0 +1,315 @@ + + + + + + Balkian's site - Posts + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2021/10/30 +

Logitech MB850 combi in linux

+ +linux + +logitech + +keyboard + +mouse + + +
+ + As a follow-up to my last post, I’ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: +The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + +
+ + +
+ + + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + +
+ + +
+ + + Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019. + + +
+ + +
+
+ 2019/01/06 +

Controlling Zigbee devices with MQTT

+ +mqtt + +iot + +zigbee + + +
+ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you’re anything like me, you’re probably a sucker for IoT devices. For a long time, I’ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + +
+ + +
+
+ 2016/09/28 +

Progress bars in python

+ +python + + +
+ +

tqdm is a nice way to add progress +bars in the command line or in a jupyter notebook.

+

image

+
+ +
+
1
+2
+3
+4
+5
+
+
from tqdm import tqdm
+import time
+
+for i in tqdm(range(100)):
+    time.sleep(1)
+
+
+
+ +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/index.xml b/post/index.xml new file mode 100644 index 0000000..d82b06b --- /dev/null +++ b/post/index.xml @@ -0,0 +1,153 @@ + + + + Posts on Balkian's site + /post/ + Recent content in Posts on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 30 Oct 2021 00:00:01 +0000 + + + + + + Logitech MB850 combi in linux + /post/2021-10-30-logitech-mk850/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /post/2021-10-30-logitech-mk850/ + As a follow-up to my last post, I&rsquo;ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: + The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + + + Logitech MX Keys for Mac on Linux + /post/2021-10-29-logitech-mx-keys-mac/ + Fri, 29 Oct 2021 00:00:01 +0000 + + /post/2021-10-29-logitech-mx-keys-mac/ + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + + + Linux on the Microsoft Surface Go + /post/2019-05-01-surface-go/ + Sat, 01 Jun 2019 00:00:01 +0000 + + /post/2019-05-01-surface-go/ + <p>Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.</p> + + + + Controlling Zigbee devices with MQTT + /post/2019-01-06-zigbee2mqtt/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /post/2019-01-06-zigbee2mqtt/ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you&rsquo;re anything like me, you&rsquo;re probably a sucker for IoT devices. For a long time, I&rsquo;ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + + + Progress bars in python + /post/2016-09-28-tqdm/ + Wed, 28 Sep 2016 18:47:00 +0000 + + /post/2016-09-28-tqdm/ + tqdm is a nice way to add progress bars in the command line or in a jupyter notebook. +1 2 3 4 5 from tqdm import tqdm import time for i in tqdm(range(100)): time.sleep(1) + + + + Sharing dotfiles + /post/2015-04-10-github-dotfiles/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /post/2015-04-10-github-dotfiles/ + Today&rsquo;s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + + + Zotero + /post/2014-12-09-zotero/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /post/2014-12-09-zotero/ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + + + Proxies with Apache and python + /post/2014-10-09-proxies/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /post/2014-10-09-proxies/ + <p>This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name <em>application</em>. Hence, wsgi:application.</p> +<h2 id="gunicorn">Gunicorn</h2> +<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> +<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5 +</span></code></pre></td> +<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-apache" data-lang="apache"><span style="color:#f92672">&lt;Location</span> <span style="color:#e6db74">/myapp/</span><span style="color:#f92672">&gt;</span> + ProxyPass http://127.0.0.1:8888/myapp/ + ProxyPassReverse http://127.0.0.1:8888/myapp/ + RequestHeader set SCRIPT_NAME <span style="color:#e6db74">&#34;/myapp/&#34;</span> +<span style="color:#f92672">&lt;/Location&gt;</span> +</code></pre></td></tr></table> +</div> +</div> + + + + Publishing on PyPi + /post/2014-09-23-publishing-to-pypi/ + Sat, 27 Sep 2014 10:00:00 +0000 + + /post/2014-09-23-publishing-to-pypi/ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + + + Updating EuroLoveMap + /post/2014-03-27-updating-eurolovemap/ + Thu, 27 Mar 2014 14:00:00 +0000 + + /post/2014-03-27-updating-eurolovemap/ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the &ldquo;overall feeling&rdquo; of each country about each topic. + + + + Remove git files with globbing + /post/2013-08-22-remove-git-files-with-globbing/ + Thu, 22 Aug 2013 23:14:00 +0000 + + /post/2013-08-22-remove-git-files-with-globbing/ + A simple trick. If you want to remove all the &lsquo;.swp&rsquo; files from a git repository, just use: +1 git rm --cached &#39;**.swp&#39; + + + + Creating my web + /post/2013-08-17-creating-my-web/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /post/2013-08-17-creating-my-web/ + I&rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + + + \ No newline at end of file diff --git a/post/page/1/index.html b/post/page/1/index.html new file mode 100644 index 0000000..5887d0a --- /dev/null +++ b/post/page/1/index.html @@ -0,0 +1 @@ +/post/ \ No newline at end of file diff --git a/post/page/2/index.html b/post/page/2/index.html new file mode 100644 index 0000000..0448203 --- /dev/null +++ b/post/page/2/index.html @@ -0,0 +1,322 @@ + + + + + + Balkian's site - Posts + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2015/04/10 +

Sharing dotfiles

+ +github + +git + +dotfiles + + +
+ + Today’s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + +
+ + +
+
+ 2014/12/09 +

Zotero

+ +zotero + +webdav + +nginx + +apache + + +
+ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + +
+ + +
+
+ 2014/10/09 +

Proxies with Apache and python

+ +python + +apache + +proxy + +gunicorn + +uwsgi + + +
+ +

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+
+ + +
+ + +
+
+ 2014/09/27 +

Publishing on PyPi

+ +github + +python + +pypi + + +
+ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + +
+ + +
+
+ 2014/03/27 +

Updating EuroLoveMap

+ +javascript + +python + +heroku + + +
+ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the “overall feeling” of each country about each topic. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/post/page/3/index.html b/post/page/3/index.html new file mode 100644 index 0000000..f4bdf87 --- /dev/null +++ b/post/page/3/index.html @@ -0,0 +1,243 @@ + + + + + + Balkian's site - Posts + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2013/08/22 +

Remove git files with globbing

+ +git + + +
+ +

A simple trick. If you want to remove all the ‘.swp’ files from a git +repository, just use:

+
+ +
+
1
+
+
git rm --cached '**.swp'
+
+
+
+ +
+ + +
+
+ 2013/08/22 +

Creating my web

+ +starters + +javascript + +ruby + +github + +git + + +
+ + I’ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/posts/index.html b/posts/index.html new file mode 100644 index 0000000..de2e8cd --- /dev/null +++ b/posts/index.html @@ -0,0 +1,189 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Posts

+
+ + + + + +
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/posts/index.xml b/posts/index.xml new file mode 100644 index 0000000..1605ea5 --- /dev/null +++ b/posts/index.xml @@ -0,0 +1,15 @@ + + + + Posts on Balkian's site + /posts/ + Recent content in Posts on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + \ No newline at end of file diff --git a/project/index.html b/project/index.html new file mode 100644 index 0000000..7efa873 --- /dev/null +++ b/project/index.html @@ -0,0 +1,196 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Ongoing Projects

+
    +
  • Senpy: a framework for semantic sentiment and emotion analysis services.
  • +
  • Soil: an agent-based simulator for social networks based on nx-sim and networkx.
  • +
  • Onyx: an ontology for emotion analysis that includes concepts from W3C’s provenance.
  • +
+

Past Projects

+
    +
  • Marl: I updated this ontology, originally created by Adam Westerski, to make it compatible with the W3C’s provenance ontology.
  • +
  • Hermes: one of my first projects, developed together with David Pérez as the special custom assignment in one of our courses. Hermes is an affective bot designed to mimic the behavour of humans. It included a plug-in system for its sensors and actuators. The information from its sensors changed its emotional state, which was shown via its actuators. Among others, it could fetch inforation from Twitter or its host system and change the expressions of an external Face made with servo motors or speak via its Text-To-Speech software. For instance, it could detect it was running out of battery, showing a sad face and sending an alerting tweet. You can see it in action in these two youtube videos: Part 1 and Part 2.
  • +
  • Maia: the Modular Architecture for Intelligent Agents is an evented agent architecture that aims to update the classical frameworks for intelligent agents with the concepts emerged from the Live Web.
  • +
  • EESTEC.net: the Plone based official portal of EESTEC. It has been my first and only experience with Plone. I fixed some bugs and implemented basic features.
  • +
+

For more information, check my list of public repositories in Github.

+ + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/search/index.html b/search/index.html new file mode 100644 index 0000000..9e95ebd --- /dev/null +++ b/search/index.html @@ -0,0 +1,207 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +
+
+ +
+

Matching pages

+
+
+
+ + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + + + + + diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..482d2af --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,278 @@ + + + + + / + 2021-10-30T00:00:01+00:00 + + + + /tags/keyboard/ + 2021-10-30T00:00:01+00:00 + + + + /tags/linux/ + 2021-10-30T00:00:01+00:00 + + + + /tags/logitech/ + 2021-10-30T00:00:01+00:00 + + + + /post/2021-10-30-logitech-mk850/ + 2021-10-30T00:00:01+00:00 + + + + /tags/mouse/ + 2021-10-30T00:00:01+00:00 + + + + /post/ + 2021-10-30T00:00:01+00:00 + + + + /tags/ + 2021-10-30T00:00:01+00:00 + + + + /post/2021-10-29-logitech-mx-keys-mac/ + 2021-10-29T00:00:01+00:00 + + + + /tags/config/ + 2019-06-01T00:00:01+00:00 + + + + /post/2019-05-01-surface-go/ + 2019-06-01T00:00:01+00:00 + + + + /tags/surface-go/ + 2019-06-01T00:00:01+00:00 + + + + /post/2019-01-06-zigbee2mqtt/ + 2019-01-06T10:00:00+00:00 + + + + /tags/iot/ + 2019-01-06T10:00:00+00:00 + + + + /tags/mqtt/ + 2019-01-06T10:00:00+00:00 + + + + /tags/zigbee/ + 2019-01-06T10:00:00+00:00 + + + + /post/2016-09-28-tqdm/ + 2016-09-28T18:47:00+00:00 + + + + /tags/python/ + 2016-09-28T18:47:00+00:00 + + + + /tags/dotfiles/ + 2015-04-10T17:47:00+00:00 + + + + /tags/git/ + 2015-04-10T17:47:00+00:00 + + + + /tags/github/ + 2015-04-10T17:47:00+00:00 + + + + /post/2015-04-10-github-dotfiles/ + 2015-04-10T17:47:00+00:00 + + + + /tags/apache/ + 2014-12-09T12:12:12+00:00 + + + + /tags/nginx/ + 2014-12-09T12:12:12+00:00 + + + + /tags/webdav/ + 2014-12-09T12:12:12+00:00 + + + + /post/2014-12-09-zotero/ + 2014-12-09T12:12:12+00:00 + + + + /tags/zotero/ + 2014-12-09T12:12:12+00:00 + + + + /tags/gunicorn/ + 2014-10-09T10:00:00+00:00 + + + + /post/2014-10-09-proxies/ + 2014-10-09T10:00:00+00:00 + + + + /tags/proxy/ + 2014-10-09T10:00:00+00:00 + + + + /tags/uwsgi/ + 2014-10-09T10:00:00+00:00 + + + + /post/2014-09-23-publishing-to-pypi/ + 2014-09-27T10:00:00+00:00 + + + + /tags/pypi/ + 2014-09-27T10:00:00+00:00 + + + + /tags/heroku/ + 2014-03-27T14:00:00+00:00 + + + + /tags/javascript/ + 2014-03-27T14:00:00+00:00 + + + + /post/2014-03-27-updating-eurolovemap/ + 2014-03-27T14:00:00+00:00 + + + + /post/2013-08-22-remove-git-files-with-globbing/ + 2013-08-22T23:14:00+00:00 + + + + /post/2013-08-17-creating-my-web/ + 2013-08-22T14:14:22+00:00 + + + + /tags/ruby/ + 2013-08-22T14:14:22+00:00 + + + + /tags/starters/ + 2013-08-22T14:14:22+00:00 + + + + /tags/arch/ + + + + /categories/ + + + + /cheatsheet/ + + + + /cheatsheet/emacs/ + + + + /tags/emacs/ + + + + /project/ + + + + /cheatsheet/linux/ + + + + /tags/lisp/ + + + + /tags/org/ + + + + /page/ + + + + /posts/ + + + + /tags/productivity/ + + + + /tags/programming/ + + + + /cheatsheet/python/ + + + + /cheatsheet/rpi/ + + + + /tags/rpi/ + + + + /search/ + 0.1 + + + + /page/todo/ + + + \ No newline at end of file diff --git a/tags/apache/index.html b/tags/apache/index.html new file mode 100644 index 0000000..3094533 --- /dev/null +++ b/tags/apache/index.html @@ -0,0 +1,261 @@ + + + + + + Balkian's site - apache + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/12/09 +

Zotero

+ +zotero + +webdav + +nginx + +apache + + +
+ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + +
+ + +
+
+ 2014/10/09 +

Proxies with Apache and python

+ +python + +apache + +proxy + +gunicorn + +uwsgi + + +
+ +

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+
+ + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/apache/index.xml b/tags/apache/index.xml new file mode 100644 index 0000000..b9170f4 --- /dev/null +++ b/tags/apache/index.xml @@ -0,0 +1,55 @@ + + + + apache on Balkian's site + /tags/apache/ + Recent content in apache on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Tue, 09 Dec 2014 12:12:12 +0000 + + + + + + Zotero + /post/2014-12-09-zotero/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /post/2014-12-09-zotero/ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + + + Proxies with Apache and python + /post/2014-10-09-proxies/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /post/2014-10-09-proxies/ + <p>This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name <em>application</em>. Hence, wsgi:application.</p> +<h2 id="gunicorn">Gunicorn</h2> +<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> +<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5 +</span></code></pre></td> +<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-apache" data-lang="apache"><span style="color:#f92672">&lt;Location</span> <span style="color:#e6db74">/myapp/</span><span style="color:#f92672">&gt;</span> + ProxyPass http://127.0.0.1:8888/myapp/ + ProxyPassReverse http://127.0.0.1:8888/myapp/ + RequestHeader set SCRIPT_NAME <span style="color:#e6db74">&#34;/myapp/&#34;</span> +<span style="color:#f92672">&lt;/Location&gt;</span> +</code></pre></td></tr></table> +</div> +</div> + + + + \ No newline at end of file diff --git a/tags/apache/page/1/index.html b/tags/apache/page/1/index.html new file mode 100644 index 0000000..9aba95e --- /dev/null +++ b/tags/apache/page/1/index.html @@ -0,0 +1 @@ +/tags/apache/ \ No newline at end of file diff --git a/tags/arch/index.html b/tags/arch/index.html new file mode 100644 index 0000000..361ae0c --- /dev/null +++ b/tags/arch/index.html @@ -0,0 +1,209 @@ + + + + + + Balkian's site - arch + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Linux

+

Tips and tricks for GNU/Linux and Unix

+ +linux + +arch + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/arch/index.xml b/tags/arch/index.xml new file mode 100644 index 0000000..2fd1401 --- /dev/null +++ b/tags/arch/index.xml @@ -0,0 +1,25 @@ + + + + arch on Balkian's site + /tags/arch/ + Recent content in arch on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Linux + /cheatsheet/linux/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/linux/ + Black screen and LightDM doesn&rsquo;t unlock Add this to your /etc/lightdm/lightdm.conf file: +1 2 [LightDM] logind-check-graphical=true Edit previous commands fc is a shell builtin to list and edit previous commands in an editor. In addition to editing a single line (which you can also do with C-x C-e), it also allows you to edit and run several lines at the same time. + + + + \ No newline at end of file diff --git a/tags/arch/page/1/index.html b/tags/arch/page/1/index.html new file mode 100644 index 0000000..97c0bbb --- /dev/null +++ b/tags/arch/page/1/index.html @@ -0,0 +1 @@ +/tags/arch/ \ No newline at end of file diff --git a/tags/config/index.html b/tags/config/index.html new file mode 100644 index 0000000..bb726ad --- /dev/null +++ b/tags/config/index.html @@ -0,0 +1,215 @@ + + + + + + Balkian's site - config + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + + Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/config/index.xml b/tags/config/index.xml new file mode 100644 index 0000000..cc192f3 --- /dev/null +++ b/tags/config/index.xml @@ -0,0 +1,26 @@ + + + + config on Balkian's site + /tags/config/ + Recent content in config on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 01 Jun 2019 00:00:01 +0000 + + + + + + Linux on the Microsoft Surface Go + /post/2019-05-01-surface-go/ + Sat, 01 Jun 2019 00:00:01 +0000 + + /post/2019-05-01-surface-go/ + <p>Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.</p> + + + + \ No newline at end of file diff --git a/tags/config/page/1/index.html b/tags/config/page/1/index.html new file mode 100644 index 0000000..b160f31 --- /dev/null +++ b/tags/config/page/1/index.html @@ -0,0 +1 @@ +/tags/config/ \ No newline at end of file diff --git a/tags/dotfiles/index.html b/tags/dotfiles/index.html new file mode 100644 index 0000000..4b7be37 --- /dev/null +++ b/tags/dotfiles/index.html @@ -0,0 +1,215 @@ + + + + + + Balkian's site - dotfiles + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2015/04/10 +

Sharing dotfiles

+ +github + +git + +dotfiles + + +
+ + Today’s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/dotfiles/index.xml b/tags/dotfiles/index.xml new file mode 100644 index 0000000..db071eb --- /dev/null +++ b/tags/dotfiles/index.xml @@ -0,0 +1,26 @@ + + + + dotfiles on Balkian's site + /tags/dotfiles/ + Recent content in dotfiles on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Fri, 10 Apr 2015 17:47:00 +0000 + + + + + + Sharing dotfiles + /post/2015-04-10-github-dotfiles/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /post/2015-04-10-github-dotfiles/ + Today&rsquo;s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + + + \ No newline at end of file diff --git a/tags/dotfiles/page/1/index.html b/tags/dotfiles/page/1/index.html new file mode 100644 index 0000000..d5410a5 --- /dev/null +++ b/tags/dotfiles/page/1/index.html @@ -0,0 +1 @@ +/tags/dotfiles/ \ No newline at end of file diff --git a/tags/emacs/index.html b/tags/emacs/index.html new file mode 100644 index 0000000..3e3e0ec --- /dev/null +++ b/tags/emacs/index.html @@ -0,0 +1,213 @@ + + + + + + Balkian's site - emacs + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Emacs

+

Configuration files and tricks for emacs

+ +emacs + +org + +productivity + +lisp + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/emacs/index.xml b/tags/emacs/index.xml new file mode 100644 index 0000000..e019d2d --- /dev/null +++ b/tags/emacs/index.xml @@ -0,0 +1,24 @@ + + + + emacs on Balkian's site + /tags/emacs/ + Recent content in emacs on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Emacs + /cheatsheet/emacs/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/emacs/ + <h1 id="show-plain-text-version">Show plain text version</h1> + + + + \ No newline at end of file diff --git a/tags/emacs/page/1/index.html b/tags/emacs/page/1/index.html new file mode 100644 index 0000000..dc952aa --- /dev/null +++ b/tags/emacs/page/1/index.html @@ -0,0 +1 @@ +/tags/emacs/ \ No newline at end of file diff --git a/tags/git/index.html b/tags/git/index.html new file mode 100644 index 0000000..6aac256 --- /dev/null +++ b/tags/git/index.html @@ -0,0 +1,264 @@ + + + + + + Balkian's site - git + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2015/04/10 +

Sharing dotfiles

+ +github + +git + +dotfiles + + +
+ + Today’s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + +
+ + +
+
+ 2013/08/22 +

Remove git files with globbing

+ +git + + +
+ +

A simple trick. If you want to remove all the ‘.swp’ files from a git +repository, just use:

+
+ +
+
1
+
+
git rm --cached '**.swp'
+
+
+
+ +
+ + +
+
+ 2013/08/22 +

Creating my web

+ +starters + +javascript + +ruby + +github + +git + + +
+ + I’ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/git/index.xml b/tags/git/index.xml new file mode 100644 index 0000000..dcb3b68 --- /dev/null +++ b/tags/git/index.xml @@ -0,0 +1,45 @@ + + + + git on Balkian's site + /tags/git/ + Recent content in git on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Fri, 10 Apr 2015 17:47:00 +0000 + + + + + + Sharing dotfiles + /post/2015-04-10-github-dotfiles/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /post/2015-04-10-github-dotfiles/ + Today&rsquo;s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + + + Remove git files with globbing + /post/2013-08-22-remove-git-files-with-globbing/ + Thu, 22 Aug 2013 23:14:00 +0000 + + /post/2013-08-22-remove-git-files-with-globbing/ + A simple trick. If you want to remove all the &lsquo;.swp&rsquo; files from a git repository, just use: +1 git rm --cached &#39;**.swp&#39; + + + + Creating my web + /post/2013-08-17-creating-my-web/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /post/2013-08-17-creating-my-web/ + I&rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + + + \ No newline at end of file diff --git a/tags/git/page/1/index.html b/tags/git/page/1/index.html new file mode 100644 index 0000000..0432cba --- /dev/null +++ b/tags/git/page/1/index.html @@ -0,0 +1 @@ +/tags/git/ \ No newline at end of file diff --git a/tags/github/index.html b/tags/github/index.html new file mode 100644 index 0000000..bf85525 --- /dev/null +++ b/tags/github/index.html @@ -0,0 +1,259 @@ + + + + + + Balkian's site - github + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2015/04/10 +

Sharing dotfiles

+ +github + +git + +dotfiles + + +
+ + Today’s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + +
+ + +
+
+ 2014/09/27 +

Publishing on PyPi

+ +github + +python + +pypi + + +
+ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + +
+ + +
+
+ 2013/08/22 +

Creating my web

+ +starters + +javascript + +ruby + +github + +git + + +
+ + I’ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/github/index.xml b/tags/github/index.xml new file mode 100644 index 0000000..6bc2266 --- /dev/null +++ b/tags/github/index.xml @@ -0,0 +1,44 @@ + + + + github on Balkian's site + /tags/github/ + Recent content in github on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Fri, 10 Apr 2015 17:47:00 +0000 + + + + + + Sharing dotfiles + /post/2015-04-10-github-dotfiles/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /post/2015-04-10-github-dotfiles/ + Today&rsquo;s post is half a quick note, half public shaming. In other words, it is a reminder to be very careful with OAuth tokens and passwords. +As part of moving to emacs, I starting using the incredibly useful gh.el. When you first use it, the extension saves either your password or an OAuth token in your . + + + + Publishing on PyPi + /post/2014-09-23-publishing-to-pypi/ + Sat, 27 Sep 2014 10:00:00 +0000 + + /post/2014-09-23-publishing-to-pypi/ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + + + Creating my web + /post/2013-08-17-creating-my-web/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /post/2013-08-17-creating-my-web/ + I&rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + + + \ No newline at end of file diff --git a/tags/github/page/1/index.html b/tags/github/page/1/index.html new file mode 100644 index 0000000..d99716f --- /dev/null +++ b/tags/github/page/1/index.html @@ -0,0 +1 @@ +/tags/github/ \ No newline at end of file diff --git a/tags/gunicorn/index.html b/tags/gunicorn/index.html new file mode 100644 index 0000000..a1962a3 --- /dev/null +++ b/tags/gunicorn/index.html @@ -0,0 +1,238 @@ + + + + + + Balkian's site - gunicorn + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/10/09 +

Proxies with Apache and python

+ +python + +apache + +proxy + +gunicorn + +uwsgi + + +
+ +

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+
+ + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/gunicorn/index.xml b/tags/gunicorn/index.xml new file mode 100644 index 0000000..299b88a --- /dev/null +++ b/tags/gunicorn/index.xml @@ -0,0 +1,45 @@ + + + + gunicorn on Balkian's site + /tags/gunicorn/ + Recent content in gunicorn on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Thu, 09 Oct 2014 10:00:00 +0000 + + + + + + Proxies with Apache and python + /post/2014-10-09-proxies/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /post/2014-10-09-proxies/ + <p>This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name <em>application</em>. Hence, wsgi:application.</p> +<h2 id="gunicorn">Gunicorn</h2> +<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> +<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5 +</span></code></pre></td> +<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-apache" data-lang="apache"><span style="color:#f92672">&lt;Location</span> <span style="color:#e6db74">/myapp/</span><span style="color:#f92672">&gt;</span> + ProxyPass http://127.0.0.1:8888/myapp/ + ProxyPassReverse http://127.0.0.1:8888/myapp/ + RequestHeader set SCRIPT_NAME <span style="color:#e6db74">&#34;/myapp/&#34;</span> +<span style="color:#f92672">&lt;/Location&gt;</span> +</code></pre></td></tr></table> +</div> +</div> + + + + \ No newline at end of file diff --git a/tags/gunicorn/page/1/index.html b/tags/gunicorn/page/1/index.html new file mode 100644 index 0000000..4edcf3b --- /dev/null +++ b/tags/gunicorn/page/1/index.html @@ -0,0 +1 @@ +/tags/gunicorn/ \ No newline at end of file diff --git a/tags/heroku/index.html b/tags/heroku/index.html new file mode 100644 index 0000000..defc554 --- /dev/null +++ b/tags/heroku/index.html @@ -0,0 +1,214 @@ + + + + + + Balkian's site - heroku + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/03/27 +

Updating EuroLoveMap

+ +javascript + +python + +heroku + + +
+ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the “overall feeling” of each country about each topic. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/heroku/index.xml b/tags/heroku/index.xml new file mode 100644 index 0000000..0a3f604 --- /dev/null +++ b/tags/heroku/index.xml @@ -0,0 +1,25 @@ + + + + heroku on Balkian's site + /tags/heroku/ + Recent content in heroku on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Thu, 27 Mar 2014 14:00:00 +0000 + + + + + + Updating EuroLoveMap + /post/2014-03-27-updating-eurolovemap/ + Thu, 27 Mar 2014 14:00:00 +0000 + + /post/2014-03-27-updating-eurolovemap/ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the &ldquo;overall feeling&rdquo; of each country about each topic. + + + + \ No newline at end of file diff --git a/tags/heroku/page/1/index.html b/tags/heroku/page/1/index.html new file mode 100644 index 0000000..b242aa6 --- /dev/null +++ b/tags/heroku/page/1/index.html @@ -0,0 +1 @@ +/tags/heroku/ \ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..119000d --- /dev/null +++ b/tags/index.html @@ -0,0 +1,413 @@ + + + + + + Balkian's site - WELCOME + + + + + + + + + + + + + + +
+
+
+ + + +

Tags

+
+ + + + + + + + + +python (5) + + + + + + +linux (4) + + + + + + +git (3) + + + + + + +github (3) + + + + + + +apache (2) + + + + + + +javascript (2) + + + + + + +keyboard (2) + + + + + + +logitech (2) + + + + + + +arch (1) + + + + + + +config (1) + + + + + + +dotfiles (1) + + + + + + +emacs (1) + + + + + + +gunicorn (1) + + + + + + +heroku (1) + + + + + + +iot (1) + + + + + + +lisp (1) + + + + + + +mouse (1) + + + + + + +mqtt (1) + + + + + + +nginx (1) + + + + + + +org (1) + + + + + + +productivity (1) + + + + + + +programming (1) + + + + + + +proxy (1) + + + + + + +pypi (1) + + + + + + +rpi (1) + + + + + + +ruby (1) + + + + + + +starters (1) + + + + + + +surface-go (1) + + + + + + +uwsgi (1) + + + + + + +webdav (1) + + + + + + +zigbee (1) + + + + + + +zotero (1) + + +
+ +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/index.xml b/tags/index.xml new file mode 100644 index 0000000..1171fc8 --- /dev/null +++ b/tags/index.xml @@ -0,0 +1,304 @@ + + + + Tags on Balkian's site + /tags/ + Recent content in Tags on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 30 Oct 2021 00:00:01 +0000 + + + + + + keyboard + /tags/keyboard/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /tags/keyboard/ + + + + + linux + /tags/linux/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /tags/linux/ + + + + + logitech + /tags/logitech/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /tags/logitech/ + + + + + mouse + /tags/mouse/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /tags/mouse/ + + + + + config + /tags/config/ + Sat, 01 Jun 2019 00:00:01 +0000 + + /tags/config/ + + + + + surface go + /tags/surface-go/ + Sat, 01 Jun 2019 00:00:01 +0000 + + /tags/surface-go/ + + + + + iot + /tags/iot/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /tags/iot/ + + + + + mqtt + /tags/mqtt/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /tags/mqtt/ + + + + + zigbee + /tags/zigbee/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /tags/zigbee/ + + + + + python + /tags/python/ + Wed, 28 Sep 2016 18:47:00 +0000 + + /tags/python/ + + + + + dotfiles + /tags/dotfiles/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /tags/dotfiles/ + + + + + git + /tags/git/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /tags/git/ + + + + + github + /tags/github/ + Fri, 10 Apr 2015 17:47:00 +0000 + + /tags/github/ + + + + + apache + /tags/apache/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /tags/apache/ + + + + + nginx + /tags/nginx/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /tags/nginx/ + + + + + webdav + /tags/webdav/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /tags/webdav/ + + + + + zotero + /tags/zotero/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /tags/zotero/ + + + + + gunicorn + /tags/gunicorn/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /tags/gunicorn/ + + + + + proxy + /tags/proxy/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /tags/proxy/ + + + + + uwsgi + /tags/uwsgi/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /tags/uwsgi/ + + + + + pypi + /tags/pypi/ + Sat, 27 Sep 2014 10:00:00 +0000 + + /tags/pypi/ + + + + + heroku + /tags/heroku/ + Thu, 27 Mar 2014 14:00:00 +0000 + + /tags/heroku/ + + + + + javascript + /tags/javascript/ + Thu, 27 Mar 2014 14:00:00 +0000 + + /tags/javascript/ + + + + + ruby + /tags/ruby/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /tags/ruby/ + + + + + starters + /tags/starters/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /tags/starters/ + + + + + arch + /tags/arch/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /tags/arch/ + + + + + emacs + /tags/emacs/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /tags/emacs/ + + + + + lisp + /tags/lisp/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /tags/lisp/ + + + + + org + /tags/org/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /tags/org/ + + + + + productivity + /tags/productivity/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /tags/productivity/ + + + + + programming + /tags/programming/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /tags/programming/ + + + + + rpi + /tags/rpi/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /tags/rpi/ + + + + + \ No newline at end of file diff --git a/tags/iot/index.html b/tags/iot/index.html new file mode 100644 index 0000000..bdd9d0d --- /dev/null +++ b/tags/iot/index.html @@ -0,0 +1,215 @@ + + + + + + Balkian's site - iot + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2019/01/06 +

Controlling Zigbee devices with MQTT

+ +mqtt + +iot + +zigbee + + +
+ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you’re anything like me, you’re probably a sucker for IoT devices. For a long time, I’ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/iot/index.xml b/tags/iot/index.xml new file mode 100644 index 0000000..1d17ccd --- /dev/null +++ b/tags/iot/index.xml @@ -0,0 +1,26 @@ + + + + iot on Balkian's site + /tags/iot/ + Recent content in iot on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sun, 06 Jan 2019 10:00:00 +0000 + + + + + + Controlling Zigbee devices with MQTT + /post/2019-01-06-zigbee2mqtt/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /post/2019-01-06-zigbee2mqtt/ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you&rsquo;re anything like me, you&rsquo;re probably a sucker for IoT devices. For a long time, I&rsquo;ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + + + \ No newline at end of file diff --git a/tags/iot/page/1/index.html b/tags/iot/page/1/index.html new file mode 100644 index 0000000..8b01d33 --- /dev/null +++ b/tags/iot/page/1/index.html @@ -0,0 +1 @@ +/tags/iot/ \ No newline at end of file diff --git a/tags/javascript/index.html b/tags/javascript/index.html new file mode 100644 index 0000000..a854542 --- /dev/null +++ b/tags/javascript/index.html @@ -0,0 +1,238 @@ + + + + + + Balkian's site - javascript + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/03/27 +

Updating EuroLoveMap

+ +javascript + +python + +heroku + + +
+ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the “overall feeling” of each country about each topic. + + +
+ + +
+
+ 2013/08/22 +

Creating my web

+ +starters + +javascript + +ruby + +github + +git + + +
+ + I’ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/javascript/index.xml b/tags/javascript/index.xml new file mode 100644 index 0000000..acf6ebb --- /dev/null +++ b/tags/javascript/index.xml @@ -0,0 +1,34 @@ + + + + javascript on Balkian's site + /tags/javascript/ + Recent content in javascript on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Thu, 27 Mar 2014 14:00:00 +0000 + + + + + + Updating EuroLoveMap + /post/2014-03-27-updating-eurolovemap/ + Thu, 27 Mar 2014 14:00:00 +0000 + + /post/2014-03-27-updating-eurolovemap/ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the &ldquo;overall feeling&rdquo; of each country about each topic. + + + + Creating my web + /post/2013-08-17-creating-my-web/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /post/2013-08-17-creating-my-web/ + I&rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + + + \ No newline at end of file diff --git a/tags/javascript/page/1/index.html b/tags/javascript/page/1/index.html new file mode 100644 index 0000000..b891add --- /dev/null +++ b/tags/javascript/page/1/index.html @@ -0,0 +1 @@ +/tags/javascript/ \ No newline at end of file diff --git a/tags/keyboard/index.html b/tags/keyboard/index.html new file mode 100644 index 0000000..b5aa5a2 --- /dev/null +++ b/tags/keyboard/index.html @@ -0,0 +1,239 @@ + + + + + + Balkian's site - keyboard + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2021/10/30 +

Logitech MB850 combi in linux

+ +linux + +logitech + +keyboard + +mouse + + +
+ + As a follow-up to my last post, I’ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: +The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + +
+ + +
+ + + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/keyboard/index.xml b/tags/keyboard/index.xml new file mode 100644 index 0000000..e91258e --- /dev/null +++ b/tags/keyboard/index.xml @@ -0,0 +1,37 @@ + + + + keyboard on Balkian's site + /tags/keyboard/ + Recent content in keyboard on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 30 Oct 2021 00:00:01 +0000 + + + + + + Logitech MB850 combi in linux + /post/2021-10-30-logitech-mk850/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /post/2021-10-30-logitech-mk850/ + As a follow-up to my last post, I&rsquo;ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: + The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + + + Logitech MX Keys for Mac on Linux + /post/2021-10-29-logitech-mx-keys-mac/ + Fri, 29 Oct 2021 00:00:01 +0000 + + /post/2021-10-29-logitech-mx-keys-mac/ + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + + + \ No newline at end of file diff --git a/tags/keyboard/page/1/index.html b/tags/keyboard/page/1/index.html new file mode 100644 index 0000000..91cac87 --- /dev/null +++ b/tags/keyboard/page/1/index.html @@ -0,0 +1 @@ +/tags/keyboard/ \ No newline at end of file diff --git a/tags/linux/index.html b/tags/linux/index.html new file mode 100644 index 0000000..2c6b8a3 --- /dev/null +++ b/tags/linux/index.html @@ -0,0 +1,275 @@ + + + + + + Balkian's site - linux + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2021/10/30 +

Logitech MB850 combi in linux

+ +linux + +logitech + +keyboard + +mouse + + +
+ + As a follow-up to my last post, I’ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: +The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + +
+ + +
+ + + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + +
+ + +
+ + + Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019. + + +
+ + +
+
+ +

Linux

+

Tips and tricks for GNU/Linux and Unix

+ +linux + +arch + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/linux/index.xml b/tags/linux/index.xml new file mode 100644 index 0000000..742370a --- /dev/null +++ b/tags/linux/index.xml @@ -0,0 +1,57 @@ + + + + linux on Balkian's site + /tags/linux/ + Recent content in linux on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 30 Oct 2021 00:00:01 +0000 + + + + + + Logitech MB850 combi in linux + /post/2021-10-30-logitech-mk850/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /post/2021-10-30-logitech-mk850/ + As a follow-up to my last post, I&rsquo;ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: + The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + + + Logitech MX Keys for Mac on Linux + /post/2021-10-29-logitech-mx-keys-mac/ + Fri, 29 Oct 2021 00:00:01 +0000 + + /post/2021-10-29-logitech-mx-keys-mac/ + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + + + Linux on the Microsoft Surface Go + /post/2019-05-01-surface-go/ + Sat, 01 Jun 2019 00:00:01 +0000 + + /post/2019-05-01-surface-go/ + <p>Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.</p> + + + + Linux + /cheatsheet/linux/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/linux/ + Black screen and LightDM doesn&rsquo;t unlock Add this to your /etc/lightdm/lightdm.conf file: +1 2 [LightDM] logind-check-graphical=true Edit previous commands fc is a shell builtin to list and edit previous commands in an editor. In addition to editing a single line (which you can also do with C-x C-e), it also allows you to edit and run several lines at the same time. + + + + \ No newline at end of file diff --git a/tags/linux/page/1/index.html b/tags/linux/page/1/index.html new file mode 100644 index 0000000..82150f6 --- /dev/null +++ b/tags/linux/page/1/index.html @@ -0,0 +1 @@ +/tags/linux/ \ No newline at end of file diff --git a/tags/lisp/index.html b/tags/lisp/index.html new file mode 100644 index 0000000..64f943d --- /dev/null +++ b/tags/lisp/index.html @@ -0,0 +1,213 @@ + + + + + + Balkian's site - lisp + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Emacs

+

Configuration files and tricks for emacs

+ +emacs + +org + +productivity + +lisp + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/lisp/index.xml b/tags/lisp/index.xml new file mode 100644 index 0000000..0ca6e3a --- /dev/null +++ b/tags/lisp/index.xml @@ -0,0 +1,24 @@ + + + + lisp on Balkian's site + /tags/lisp/ + Recent content in lisp on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Emacs + /cheatsheet/emacs/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/emacs/ + <h1 id="show-plain-text-version">Show plain text version</h1> + + + + \ No newline at end of file diff --git a/tags/lisp/page/1/index.html b/tags/lisp/page/1/index.html new file mode 100644 index 0000000..1dbe46b --- /dev/null +++ b/tags/lisp/page/1/index.html @@ -0,0 +1 @@ +/tags/lisp/ \ No newline at end of file diff --git a/tags/logitech/index.html b/tags/logitech/index.html new file mode 100644 index 0000000..6a60da7 --- /dev/null +++ b/tags/logitech/index.html @@ -0,0 +1,239 @@ + + + + + + Balkian's site - logitech + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2021/10/30 +

Logitech MB850 combi in linux

+ +linux + +logitech + +keyboard + +mouse + + +
+ + As a follow-up to my last post, I’ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: +The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + +
+ + +
+ + + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/logitech/index.xml b/tags/logitech/index.xml new file mode 100644 index 0000000..6a22e10 --- /dev/null +++ b/tags/logitech/index.xml @@ -0,0 +1,37 @@ + + + + logitech on Balkian's site + /tags/logitech/ + Recent content in logitech on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 30 Oct 2021 00:00:01 +0000 + + + + + + Logitech MB850 combi in linux + /post/2021-10-30-logitech-mk850/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /post/2021-10-30-logitech-mk850/ + As a follow-up to my last post, I&rsquo;ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: + The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + + + Logitech MX Keys for Mac on Linux + /post/2021-10-29-logitech-mx-keys-mac/ + Fri, 29 Oct 2021 00:00:01 +0000 + + /post/2021-10-29-logitech-mx-keys-mac/ + I recently got Logitech MX Keys for Mac keyboard at work. The German version, to be more precise. This version was three times cheaper than the Windows equivalent with either US or ES layout. Since I touch type anyway, I thought it was a bargain. +As soon as I plugged it in, I realized there were some glaring issues with the keyboard. + + + + \ No newline at end of file diff --git a/tags/logitech/page/1/index.html b/tags/logitech/page/1/index.html new file mode 100644 index 0000000..cd7dc7a --- /dev/null +++ b/tags/logitech/page/1/index.html @@ -0,0 +1 @@ +/tags/logitech/ \ No newline at end of file diff --git a/tags/mouse/index.html b/tags/mouse/index.html new file mode 100644 index 0000000..53fe843 --- /dev/null +++ b/tags/mouse/index.html @@ -0,0 +1,218 @@ + + + + + + Balkian's site - mouse + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2021/10/30 +

Logitech MB850 combi in linux

+ +linux + +logitech + +keyboard + +mouse + + +
+ + As a follow-up to my last post, I’ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: +The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/mouse/index.xml b/tags/mouse/index.xml new file mode 100644 index 0000000..8c38837 --- /dev/null +++ b/tags/mouse/index.xml @@ -0,0 +1,27 @@ + + + + mouse on Balkian's site + /tags/mouse/ + Recent content in mouse on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 30 Oct 2021 00:00:01 +0000 + + + + + + Logitech MB850 combi in linux + /post/2021-10-30-logitech-mk850/ + Sat, 30 Oct 2021 00:00:01 +0000 + + /post/2021-10-30-logitech-mk850/ + As a follow-up to my last post, I&rsquo;ve decided to also configure my mk850 combo (k850 + m720 triathlon). +Some notes: + The keyboard is usually connected to this PC through bluetooth. Since this is a change I usually do in the system for every keyboard, I added a rule for any bus (usb, bluetooth, etc) The mouse has an additional button that registers as a keyboard. + + + + \ No newline at end of file diff --git a/tags/mouse/page/1/index.html b/tags/mouse/page/1/index.html new file mode 100644 index 0000000..7c5d963 --- /dev/null +++ b/tags/mouse/page/1/index.html @@ -0,0 +1 @@ +/tags/mouse/ \ No newline at end of file diff --git a/tags/mqtt/index.html b/tags/mqtt/index.html new file mode 100644 index 0000000..d572c58 --- /dev/null +++ b/tags/mqtt/index.html @@ -0,0 +1,215 @@ + + + + + + Balkian's site - mqtt + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2019/01/06 +

Controlling Zigbee devices with MQTT

+ +mqtt + +iot + +zigbee + + +
+ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you’re anything like me, you’re probably a sucker for IoT devices. For a long time, I’ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/mqtt/index.xml b/tags/mqtt/index.xml new file mode 100644 index 0000000..d946737 --- /dev/null +++ b/tags/mqtt/index.xml @@ -0,0 +1,26 @@ + + + + mqtt on Balkian's site + /tags/mqtt/ + Recent content in mqtt on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sun, 06 Jan 2019 10:00:00 +0000 + + + + + + Controlling Zigbee devices with MQTT + /post/2019-01-06-zigbee2mqtt/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /post/2019-01-06-zigbee2mqtt/ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you&rsquo;re anything like me, you&rsquo;re probably a sucker for IoT devices. For a long time, I&rsquo;ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + + + \ No newline at end of file diff --git a/tags/mqtt/page/1/index.html b/tags/mqtt/page/1/index.html new file mode 100644 index 0000000..4d4e1e2 --- /dev/null +++ b/tags/mqtt/page/1/index.html @@ -0,0 +1 @@ +/tags/mqtt/ \ No newline at end of file diff --git a/tags/nginx/index.html b/tags/nginx/index.html new file mode 100644 index 0000000..d73dcf6 --- /dev/null +++ b/tags/nginx/index.html @@ -0,0 +1,217 @@ + + + + + + Balkian's site - nginx + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/12/09 +

Zotero

+ +zotero + +webdav + +nginx + +apache + + +
+ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/nginx/index.xml b/tags/nginx/index.xml new file mode 100644 index 0000000..b5f3aca --- /dev/null +++ b/tags/nginx/index.xml @@ -0,0 +1,26 @@ + + + + nginx on Balkian's site + /tags/nginx/ + Recent content in nginx on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Tue, 09 Dec 2014 12:12:12 +0000 + + + + + + Zotero + /post/2014-12-09-zotero/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /post/2014-12-09-zotero/ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + + + \ No newline at end of file diff --git a/tags/nginx/page/1/index.html b/tags/nginx/page/1/index.html new file mode 100644 index 0000000..61faa4e --- /dev/null +++ b/tags/nginx/page/1/index.html @@ -0,0 +1 @@ +/tags/nginx/ \ No newline at end of file diff --git a/tags/org/index.html b/tags/org/index.html new file mode 100644 index 0000000..2cc3e17 --- /dev/null +++ b/tags/org/index.html @@ -0,0 +1,213 @@ + + + + + + Balkian's site - org + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Emacs

+

Configuration files and tricks for emacs

+ +emacs + +org + +productivity + +lisp + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/org/index.xml b/tags/org/index.xml new file mode 100644 index 0000000..10ee139 --- /dev/null +++ b/tags/org/index.xml @@ -0,0 +1,24 @@ + + + + org on Balkian's site + /tags/org/ + Recent content in org on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Emacs + /cheatsheet/emacs/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/emacs/ + <h1 id="show-plain-text-version">Show plain text version</h1> + + + + \ No newline at end of file diff --git a/tags/org/page/1/index.html b/tags/org/page/1/index.html new file mode 100644 index 0000000..cca160a --- /dev/null +++ b/tags/org/page/1/index.html @@ -0,0 +1 @@ +/tags/org/ \ No newline at end of file diff --git a/tags/productivity/index.html b/tags/productivity/index.html new file mode 100644 index 0000000..19e8fe2 --- /dev/null +++ b/tags/productivity/index.html @@ -0,0 +1,213 @@ + + + + + + Balkian's site - productivity + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Emacs

+

Configuration files and tricks for emacs

+ +emacs + +org + +productivity + +lisp + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/productivity/index.xml b/tags/productivity/index.xml new file mode 100644 index 0000000..15f958a --- /dev/null +++ b/tags/productivity/index.xml @@ -0,0 +1,24 @@ + + + + productivity on Balkian's site + /tags/productivity/ + Recent content in productivity on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Emacs + /cheatsheet/emacs/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/emacs/ + <h1 id="show-plain-text-version">Show plain text version</h1> + + + + \ No newline at end of file diff --git a/tags/productivity/page/1/index.html b/tags/productivity/page/1/index.html new file mode 100644 index 0000000..409e2ca --- /dev/null +++ b/tags/productivity/page/1/index.html @@ -0,0 +1 @@ +/tags/productivity/ \ No newline at end of file diff --git a/tags/programming/index.html b/tags/programming/index.html new file mode 100644 index 0000000..4c81938 --- /dev/null +++ b/tags/programming/index.html @@ -0,0 +1,209 @@ + + + + + + Balkian's site - programming + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Python

+

Tips and useful libraries for python developers

+ +python + +programming + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/programming/index.xml b/tags/programming/index.xml new file mode 100644 index 0000000..b7c769a --- /dev/null +++ b/tags/programming/index.xml @@ -0,0 +1,26 @@ + + + + programming on Balkian's site + /tags/programming/ + Recent content in programming on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Python + /cheatsheet/python/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/python/ + Interesting libraries TQDM From tqdm&rsquo;s github repository: + tqdm means &ldquo;progress&rdquo; in Arabic (taqadum, تقدّم) and an abbreviation for &ldquo;I love you so much&rdquo; in Spanish (te quiero demasiado). + + + + + \ No newline at end of file diff --git a/tags/programming/page/1/index.html b/tags/programming/page/1/index.html new file mode 100644 index 0000000..425c13b --- /dev/null +++ b/tags/programming/page/1/index.html @@ -0,0 +1 @@ +/tags/programming/ \ No newline at end of file diff --git a/tags/proxy/index.html b/tags/proxy/index.html new file mode 100644 index 0000000..0206320 --- /dev/null +++ b/tags/proxy/index.html @@ -0,0 +1,238 @@ + + + + + + Balkian's site - proxy + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/10/09 +

Proxies with Apache and python

+ +python + +apache + +proxy + +gunicorn + +uwsgi + + +
+ +

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+
+ + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/proxy/index.xml b/tags/proxy/index.xml new file mode 100644 index 0000000..822ac68 --- /dev/null +++ b/tags/proxy/index.xml @@ -0,0 +1,45 @@ + + + + proxy on Balkian's site + /tags/proxy/ + Recent content in proxy on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Thu, 09 Oct 2014 10:00:00 +0000 + + + + + + Proxies with Apache and python + /post/2014-10-09-proxies/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /post/2014-10-09-proxies/ + <p>This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name <em>application</em>. Hence, wsgi:application.</p> +<h2 id="gunicorn">Gunicorn</h2> +<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> +<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5 +</span></code></pre></td> +<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-apache" data-lang="apache"><span style="color:#f92672">&lt;Location</span> <span style="color:#e6db74">/myapp/</span><span style="color:#f92672">&gt;</span> + ProxyPass http://127.0.0.1:8888/myapp/ + ProxyPassReverse http://127.0.0.1:8888/myapp/ + RequestHeader set SCRIPT_NAME <span style="color:#e6db74">&#34;/myapp/&#34;</span> +<span style="color:#f92672">&lt;/Location&gt;</span> +</code></pre></td></tr></table> +</div> +</div> + + + + \ No newline at end of file diff --git a/tags/proxy/page/1/index.html b/tags/proxy/page/1/index.html new file mode 100644 index 0000000..796882c --- /dev/null +++ b/tags/proxy/page/1/index.html @@ -0,0 +1 @@ +/tags/proxy/ \ No newline at end of file diff --git a/tags/pypi/index.html b/tags/pypi/index.html new file mode 100644 index 0000000..333e127 --- /dev/null +++ b/tags/pypi/index.html @@ -0,0 +1,214 @@ + + + + + + Balkian's site - pypi + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/09/27 +

Publishing on PyPi

+ +github + +python + +pypi + + +
+ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/pypi/index.xml b/tags/pypi/index.xml new file mode 100644 index 0000000..4de0af3 --- /dev/null +++ b/tags/pypi/index.xml @@ -0,0 +1,25 @@ + + + + pypi on Balkian's site + /tags/pypi/ + Recent content in pypi on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 27 Sep 2014 10:00:00 +0000 + + + + + + Publishing on PyPi + /post/2014-09-23-publishing-to-pypi/ + Sat, 27 Sep 2014 10:00:00 +0000 + + /post/2014-09-23-publishing-to-pypi/ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + + + \ No newline at end of file diff --git a/tags/pypi/page/1/index.html b/tags/pypi/page/1/index.html new file mode 100644 index 0000000..ee9cf03 --- /dev/null +++ b/tags/pypi/page/1/index.html @@ -0,0 +1 @@ +/tags/pypi/ \ No newline at end of file diff --git a/tags/python/index.html b/tags/python/index.html new file mode 100644 index 0000000..9ba77aa --- /dev/null +++ b/tags/python/index.html @@ -0,0 +1,327 @@ + + + + + + Balkian's site - python + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2016/09/28 +

Progress bars in python

+ +python + + +
+ +

tqdm is a nice way to add progress +bars in the command line or in a jupyter notebook.

+

image

+
+ +
+
1
+2
+3
+4
+5
+
+
from tqdm import tqdm
+import time
+
+for i in tqdm(range(100)):
+    time.sleep(1)
+
+
+
+ +
+ + +
+
+ 2014/10/09 +

Proxies with Apache and python

+ +python + +apache + +proxy + +gunicorn + +uwsgi + + +
+ +

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+
+ + +
+ + +
+
+ 2014/09/27 +

Publishing on PyPi

+ +github + +python + +pypi + + +
+ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + +
+ + +
+
+ 2014/03/27 +

Updating EuroLoveMap

+ +javascript + +python + +heroku + + +
+ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the “overall feeling” of each country about each topic. + + +
+ + +
+
+ +

Python

+

Tips and useful libraries for python developers

+ +python + +programming + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/python/index.xml b/tags/python/index.xml new file mode 100644 index 0000000..22cb39d --- /dev/null +++ b/tags/python/index.xml @@ -0,0 +1,84 @@ + + + + python on Balkian's site + /tags/python/ + Recent content in python on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Wed, 28 Sep 2016 18:47:00 +0000 + + + + + + Progress bars in python + /post/2016-09-28-tqdm/ + Wed, 28 Sep 2016 18:47:00 +0000 + + /post/2016-09-28-tqdm/ + tqdm is a nice way to add progress bars in the command line or in a jupyter notebook. +1 2 3 4 5 from tqdm import tqdm import time for i in tqdm(range(100)): time.sleep(1) + + + + Proxies with Apache and python + /post/2014-10-09-proxies/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /post/2014-10-09-proxies/ + <p>This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name <em>application</em>. Hence, wsgi:application.</p> +<h2 id="gunicorn">Gunicorn</h2> +<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> +<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5 +</span></code></pre></td> +<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-apache" data-lang="apache"><span style="color:#f92672">&lt;Location</span> <span style="color:#e6db74">/myapp/</span><span style="color:#f92672">&gt;</span> + ProxyPass http://127.0.0.1:8888/myapp/ + ProxyPassReverse http://127.0.0.1:8888/myapp/ + RequestHeader set SCRIPT_NAME <span style="color:#e6db74">&#34;/myapp/&#34;</span> +<span style="color:#f92672">&lt;/Location&gt;</span> +</code></pre></td></tr></table> +</div> +</div> + + + + Publishing on PyPi + /post/2014-09-23-publishing-to-pypi/ + Sat, 27 Sep 2014 10:00:00 +0000 + + /post/2014-09-23-publishing-to-pypi/ + Developing a python module and publishing it on Github is cool, but most of the times you want others to download and use it easily. That is the role of PyPi, the python package repository. In this post I show you how to publish your package in less than 10 minutes. + + + + Updating EuroLoveMap + /post/2014-03-27-updating-eurolovemap/ + Thu, 27 Mar 2014 14:00:00 +0000 + + /post/2014-03-27-updating-eurolovemap/ + As part of the OpeNER hackathon we decided to build a prototype that would allow us to compare how different countries feel about several topics. We used the OpeNER pipeline to get the sentiment from a set of newspaper articles we gathered from media in several languages. Then we aggregated those articles by category and country (using the source of the article or the language it was written in), obtaining the &ldquo;overall feeling&rdquo; of each country about each topic. + + + + Python + /cheatsheet/python/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/python/ + Interesting libraries TQDM From tqdm&rsquo;s github repository: + tqdm means &ldquo;progress&rdquo; in Arabic (taqadum, تقدّم) and an abbreviation for &ldquo;I love you so much&rdquo; in Spanish (te quiero demasiado). + + + + + \ No newline at end of file diff --git a/tags/python/page/1/index.html b/tags/python/page/1/index.html new file mode 100644 index 0000000..e3477ba --- /dev/null +++ b/tags/python/page/1/index.html @@ -0,0 +1 @@ +/tags/python/ \ No newline at end of file diff --git a/tags/rpi/index.html b/tags/rpi/index.html new file mode 100644 index 0000000..cda1107 --- /dev/null +++ b/tags/rpi/index.html @@ -0,0 +1,207 @@ + + + + + + Balkian's site - rpi + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ +

Raspberry Pi

+

Tools, links and configuration for your Raspberry Pi

+ +rpi + + +
+
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/rpi/index.xml b/tags/rpi/index.xml new file mode 100644 index 0000000..d6f3a54 --- /dev/null +++ b/tags/rpi/index.xml @@ -0,0 +1,25 @@ + + + + rpi on Balkian's site + /tags/rpi/ + Recent content in rpi on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + + + + + + Raspberry Pi + /cheatsheet/rpi/ + Mon, 01 Jan 0001 00:00:00 +0000 + + /cheatsheet/rpi/ + HDMI flickering Avoid HDMI flickering/intermittent blanking on RPI with a 1400x1050 VGA monitor. +1 2 3 4 5 6 hdmi_drive=2 hdmi_group=2 hdmi_mode=42 disable_overscan=1 config_hdmi_boost=7 + + + + \ No newline at end of file diff --git a/tags/rpi/page/1/index.html b/tags/rpi/page/1/index.html new file mode 100644 index 0000000..91e06cd --- /dev/null +++ b/tags/rpi/page/1/index.html @@ -0,0 +1 @@ +/tags/rpi/ \ No newline at end of file diff --git a/tags/ruby/index.html b/tags/ruby/index.html new file mode 100644 index 0000000..dc4cc61 --- /dev/null +++ b/tags/ruby/index.html @@ -0,0 +1,218 @@ + + + + + + Balkian's site - ruby + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2013/08/22 +

Creating my web

+ +starters + +javascript + +ruby + +github + +git + + +
+ + I’ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/ruby/index.xml b/tags/ruby/index.xml new file mode 100644 index 0000000..0bb858f --- /dev/null +++ b/tags/ruby/index.xml @@ -0,0 +1,25 @@ + + + + ruby on Balkian's site + /tags/ruby/ + Recent content in ruby on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Thu, 22 Aug 2013 14:14:22 +0000 + + + + + + Creating my web + /post/2013-08-17-creating-my-web/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /post/2013-08-17-creating-my-web/ + I&rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + + + \ No newline at end of file diff --git a/tags/ruby/page/1/index.html b/tags/ruby/page/1/index.html new file mode 100644 index 0000000..e1d1435 --- /dev/null +++ b/tags/ruby/page/1/index.html @@ -0,0 +1 @@ +/tags/ruby/ \ No newline at end of file diff --git a/tags/starters/index.html b/tags/starters/index.html new file mode 100644 index 0000000..7ef420d --- /dev/null +++ b/tags/starters/index.html @@ -0,0 +1,218 @@ + + + + + + Balkian's site - starters + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2013/08/22 +

Creating my web

+ +starters + +javascript + +ruby + +github + +git + + +
+ + I’ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/starters/index.xml b/tags/starters/index.xml new file mode 100644 index 0000000..6ff4b83 --- /dev/null +++ b/tags/starters/index.xml @@ -0,0 +1,25 @@ + + + + starters on Balkian's site + /tags/starters/ + Recent content in starters on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Thu, 22 Aug 2013 14:14:22 +0000 + + + + + + Creating my web + /post/2013-08-17-creating-my-web/ + Thu, 22 Aug 2013 14:14:22 +0000 + + /post/2013-08-17-creating-my-web/ + I&rsquo;ve finally decided to set up a decent personal page. I have settled for github-pages because I like the idea of keeping my site in a repository and having someone else host and deploy it for me. The site will be really simple, mostly static files. Thanks to Github, Jekyll will automatically generate static pages for my posts every time I commit anything new to this repository. + + + + \ No newline at end of file diff --git a/tags/starters/page/1/index.html b/tags/starters/page/1/index.html new file mode 100644 index 0000000..efd305f --- /dev/null +++ b/tags/starters/page/1/index.html @@ -0,0 +1 @@ +/tags/starters/ \ No newline at end of file diff --git a/tags/surface-go/index.html b/tags/surface-go/index.html new file mode 100644 index 0000000..a0b5dd0 --- /dev/null +++ b/tags/surface-go/index.html @@ -0,0 +1,215 @@ + + + + + + Balkian's site - surface go + + + + + + + + + + + + + + +
+
+
+ + + + +
+ + + Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/surface-go/index.xml b/tags/surface-go/index.xml new file mode 100644 index 0000000..c357da6 --- /dev/null +++ b/tags/surface-go/index.xml @@ -0,0 +1,26 @@ + + + + surface go on Balkian's site + /tags/surface-go/ + Recent content in surface go on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sat, 01 Jun 2019 00:00:01 +0000 + + + + + + Linux on the Microsoft Surface Go + /post/2019-05-01-surface-go/ + Sat, 01 Jun 2019 00:00:01 +0000 + + /post/2019-05-01-surface-go/ + <p>Believe it or not, Surface tablets have pretty good linux support, except for the webcams in newer models. +These are some useful notes to get Ubuntu installed in your surface go, as of Summer 2019.</p> + + + + \ No newline at end of file diff --git a/tags/surface-go/page/1/index.html b/tags/surface-go/page/1/index.html new file mode 100644 index 0000000..100befc --- /dev/null +++ b/tags/surface-go/page/1/index.html @@ -0,0 +1 @@ +/tags/surface-go/ \ No newline at end of file diff --git a/tags/uwsgi/index.html b/tags/uwsgi/index.html new file mode 100644 index 0000000..942764e --- /dev/null +++ b/tags/uwsgi/index.html @@ -0,0 +1,238 @@ + + + + + + Balkian's site - uwsgi + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/10/09 +

Proxies with Apache and python

+ +python + +apache + +proxy + +gunicorn + +uwsgi + + +
+ +

This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name application. Hence, wsgi:application.

+

Gunicorn

+
+ +
+
1
+2
+3
+4
+5
+
+
<Location /myapp/>
+    ProxyPass http://127.0.0.1:8888/myapp/
+    ProxyPassReverse http://127.0.0.1:8888/myapp/
+    RequestHeader set SCRIPT_NAME "/myapp/"
+</Location>
+
+
+
+ + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/uwsgi/index.xml b/tags/uwsgi/index.xml new file mode 100644 index 0000000..1662137 --- /dev/null +++ b/tags/uwsgi/index.xml @@ -0,0 +1,45 @@ + + + + uwsgi on Balkian's site + /tags/uwsgi/ + Recent content in uwsgi on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Thu, 09 Oct 2014 10:00:00 +0000 + + + + + + Proxies with Apache and python + /post/2014-10-09-proxies/ + Thu, 09 Oct 2014 10:00:00 +0000 + + /post/2014-10-09-proxies/ + <p>This is a quick note on proxying a local python application (e.g. flask) +to a subdirectory in Apache. This assumes that the file wsgi.py contains +a WSGI application with the name <em>application</em>. Hence, wsgi:application.</p> +<h2 id="gunicorn">Gunicorn</h2> +<div class="highlight"><div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"> +<table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"><tr><td style="vertical-align:top;padding:0;margin:0;border:0;"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">4 +</span><span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">5 +</span></code></pre></td> +<td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"> +<pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-apache" data-lang="apache"><span style="color:#f92672">&lt;Location</span> <span style="color:#e6db74">/myapp/</span><span style="color:#f92672">&gt;</span> + ProxyPass http://127.0.0.1:8888/myapp/ + ProxyPassReverse http://127.0.0.1:8888/myapp/ + RequestHeader set SCRIPT_NAME <span style="color:#e6db74">&#34;/myapp/&#34;</span> +<span style="color:#f92672">&lt;/Location&gt;</span> +</code></pre></td></tr></table> +</div> +</div> + + + + \ No newline at end of file diff --git a/tags/uwsgi/page/1/index.html b/tags/uwsgi/page/1/index.html new file mode 100644 index 0000000..b5adf63 --- /dev/null +++ b/tags/uwsgi/page/1/index.html @@ -0,0 +1 @@ +/tags/uwsgi/ \ No newline at end of file diff --git a/tags/webdav/index.html b/tags/webdav/index.html new file mode 100644 index 0000000..7cea77e --- /dev/null +++ b/tags/webdav/index.html @@ -0,0 +1,217 @@ + + + + + + Balkian's site - webdav + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/12/09 +

Zotero

+ +zotero + +webdav + +nginx + +apache + + +
+ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/webdav/index.xml b/tags/webdav/index.xml new file mode 100644 index 0000000..0f243e9 --- /dev/null +++ b/tags/webdav/index.xml @@ -0,0 +1,26 @@ + + + + webdav on Balkian's site + /tags/webdav/ + Recent content in webdav on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Tue, 09 Dec 2014 12:12:12 +0000 + + + + + + Zotero + /post/2014-12-09-zotero/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /post/2014-12-09-zotero/ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + + + \ No newline at end of file diff --git a/tags/webdav/page/1/index.html b/tags/webdav/page/1/index.html new file mode 100644 index 0000000..e4eb112 --- /dev/null +++ b/tags/webdav/page/1/index.html @@ -0,0 +1 @@ +/tags/webdav/ \ No newline at end of file diff --git a/tags/zigbee/index.html b/tags/zigbee/index.html new file mode 100644 index 0000000..8a94614 --- /dev/null +++ b/tags/zigbee/index.html @@ -0,0 +1,215 @@ + + + + + + Balkian's site - zigbee + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2019/01/06 +

Controlling Zigbee devices with MQTT

+ +mqtt + +iot + +zigbee + + +
+ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you’re anything like me, you’re probably a sucker for IoT devices. For a long time, I’ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/zigbee/index.xml b/tags/zigbee/index.xml new file mode 100644 index 0000000..70cd158 --- /dev/null +++ b/tags/zigbee/index.xml @@ -0,0 +1,26 @@ + + + + zigbee on Balkian's site + /tags/zigbee/ + Recent content in zigbee on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Sun, 06 Jan 2019 10:00:00 +0000 + + + + + + Controlling Zigbee devices with MQTT + /post/2019-01-06-zigbee2mqtt/ + Sun, 06 Jan 2019 10:00:00 +0000 + + /post/2019-01-06-zigbee2mqtt/ + This is a short tutorial on connecting a zigbee device (an Aqara cube) to an MQTT server, so you can control your zigbee devices from the network. +If you&rsquo;re anything like me, you&rsquo;re probably a sucker for IoT devices. For a long time, I&rsquo;ve been using WiFi-enabled lights, and Amazon dash buttons to control them. + + + + \ No newline at end of file diff --git a/tags/zigbee/page/1/index.html b/tags/zigbee/page/1/index.html new file mode 100644 index 0000000..d0763ee --- /dev/null +++ b/tags/zigbee/page/1/index.html @@ -0,0 +1 @@ +/tags/zigbee/ \ No newline at end of file diff --git a/tags/zotero/index.html b/tags/zotero/index.html new file mode 100644 index 0000000..3389c71 --- /dev/null +++ b/tags/zotero/index.html @@ -0,0 +1,217 @@ + + + + + + Balkian's site - zotero + + + + + + + + + + + + + + +
+
+
+ + + + +
+
+ 2014/12/09 +

Zotero

+ +zotero + +webdav + +nginx + +apache + + +
+ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + +
+ + + + + + + +
+ + + + +
+
+
+
+

+ J. Fernando Sánchez Rada | balkian +

+
+
    +
  • +
  • +
  • +
  • +
  • +
+

+ Creative Commons A-SA-NC +

+
+
+ + + + + + diff --git a/tags/zotero/index.xml b/tags/zotero/index.xml new file mode 100644 index 0000000..09867f3 --- /dev/null +++ b/tags/zotero/index.xml @@ -0,0 +1,26 @@ + + + + zotero on Balkian's site + /tags/zotero/ + Recent content in zotero on Balkian's site + Hugo -- gohugo.io + en-us + This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. + Tue, 09 Dec 2014 12:12:12 +0000 + + + + + + Zotero + /post/2014-12-09-zotero/ + Tue, 09 Dec 2014 12:12:12 +0000 + + /post/2014-12-09-zotero/ + Zotero is an Open Source tool that lets you organise your bibliography, syncing it with the cloud. Unlike other alternatives such as Mendeley, Zotero can upload the attachments and data to a private cloud via WebDav. +If you use nginx as your web server, know that even though it provides partial support for webdav, Zotero needs more than that. + + + + \ No newline at end of file diff --git a/tags/zotero/page/1/index.html b/tags/zotero/page/1/index.html new file mode 100644 index 0000000..8a16825 --- /dev/null +++ b/tags/zotero/page/1/index.html @@ -0,0 +1 @@ +/tags/zotero/ \ No newline at end of file