1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Embeded images
#![cfg_attr(feature = "doc-images",
cfg_attr(all(),
doc = ::embed_doc_image::embed_image!("roger", "images/roger.jpg"),
))]
#![cfg_attr(
    not(feature = "doc-images"),
    doc = "**Doc images not enabled**. Compile with feature `doc-images` and Rust version >= 1.54 \
           to enable."
)]
//! Hi! I'm Roger.
//!
//! ![Roger Selfie][roger]
//!
//! I'm currently living in Wales, working for a company in Germany that plays with charging stations for Electric Cars.
//!
//! Did a lot of 🐍 python hacking in the past, but this days I'm mostly a 🦀 rustacean.
//! # Social
//! * Twitter: [@roger_duran](https://twitter.com/roger_duran)
//! * Fedi: [@rogerduran@mastodon.social](https://mastodon.social/@rogerduran)
//! * Github: [roger](https://github/roger)
//! * IRC: rogerduran @ libera
//! * Keybase: [rogerduran](https://keybase.io/rogerduran)
//!
//! # Random projects
//! * [tmux-hints](https://github.com/Roger/tmux-hints) - UI to select links in tmux
//! * [dcpu](https://github.com/Roger/dcpu) - DCPU implementation
//! * [greenis](https://github.com/Roger/greenis) - Very basic re-implementation of redis in rust
//! * [qtile](https://github.com/qtile/qtile) - tiling window manager (I'm not active in the project anymore)
//! * [esp32-camera-poc](https://github.com/Roger/esp32-camera-poc) - rust bindings for esp32-camera
//! * [serde-with-expand-env](https://github.com/Roger/serde-with-expand-env) - Parse environment variables in serde crate using deserialize_with
//! * [imgexpr](https://fsck.com.ar/imgexpr//#eyJ1cmwiOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQW9BQUFBR1FDQVlBQUFBKzg5RWxBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINFFFWER4MHJ1ZTcyY0FBQUFCMXBWRmgwUTI5dGJXVnVkQUFBQUFBQVEzSmxZWFJsWkNCM2FYUm9JRWRKVFZCa0xtVUhBQUFKQTBsRVFWUjQydTNkelU0YlZ4aUE0VzltakNVVGZnUXF4SWhRa05yS1VsT3BsYnJKdG9xcUxyb3U2UzAwcTZwWGtDdm9LamZRSDFidHBxc3E2cXFWa0hJRldXU0ZFQWdVU0NvanhjYll6SFFiVmNHaERaZ1ovRHpyRVI2Zk14NWVIZnZZU2F2VktnSUFnTEdSR2dJQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQUFBSVFBQUFCQ0FDQUFBUUFRQUFDQUNBQUFRQVFnQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQUFBSVFBQUFCQ0FDQUFBUUFRQUFDQUNBQUFRQVFnQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQUFBSVFBQUFCQ0FDQUFBUUFRQUFDQUNBQUFRQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQUFBSVFBQUFCQ0FDQUFBUUFRQUFDQUNBQUFRQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQUFBSVFBQUFCQ0FDQUFBUUFRQUFDQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQUFBSVFBQUFCQ0FDQUFBUUFRQUFDQUFoQUFBQUVJQUFBQWhBQUFBRUlBRUNGMUF3QlVCVzM5L2RqbzkyT2lTSEhOTE1zVnRiV29sTWIzZTF0cXQyTzMvZjNZMzdJTVpOSkVoL2V1aFhkeWNtUm5WZHlmQncvYkcvSHAwVXg5TGh2RmhiaXIvbDVGeGhqK2ZvdTYzM2xzbGtCQkFBWU13SVFBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFEZ2twenJOMDN5UEk5N096dnhvTnM5ODVpdlptZmpTYk5abWllVzkvdnhjR3NyN3ViNW1jZmNYMXlNUCtmbVhBVnZNODdudURhK3VIRWpkcGVYbzBpU3lqd1dBRnhuVmdBQkFBUWdBQUFDRUFBQUFRZ0FnQUFFQUVBQUFnQWdBQUVBRUlBQUFBaEFBQUFFSUFBQUFoQUFBQUVJQUlBQUJBQkFBQUlBaksrYUlRRGdvdDNlMzQrTmRqc21ydG56K3FoZWozUjFOVTdUZEt6SDZydG1NeDdOenJyUUs4d0tJQUNBQUFRQVFBQUNBQ0FBQVFBUWdBQUFDRUFBQU1yRzE4QUFjQ1Vta3lRV0dvMzRNVWxLY1Q0enZWNThNaGhFWXF6ZTZHQml3Z1VzQU1uelBPN3Q3TVNEYnJjeTUzd3p5MkpoZFRVS0wrSnJNNmYvOW0yekdYLzRuaTVLYkNaTlkzRnBLZTdYeXZHdjZPTzl2ZmpwNkNneVk4VVk4Qll3QUlBQUJBQkFBQUlBY0czNE1BRUF3QkJIZVI3UDl2Wktzd25uZGI1TzAzaHZjVEgrUHVmblJBVWdBTUFRbmFLSTZIUktmWTRuYVJyMVBELzM4UUp3UkdiVE5KSjZQVFpIOUhpMXdTRGVId3hLdVp2Tm5MNjlvaWhpcGRjTGUzd0IrRitkWUFoRzQwNmpFYnZMeTdFK291WGpteTlleEc4SEJ6RnQ2Sy9Obkw1cU1CakU5MXRiOGVYcHFZa0E0RCt6Q1FRQVFBQUNBQ0FBQVFBUWdBQUFWSk5OSUFBQVF6U3pMRmJXMXFKelJiL0Z2SFo0R0w4K2Z4Nk5DL3liVmdBQkFNYk1oYVhzTCsxMlJMdHRSQUVBU3M0S0lBQ0FBQVFBUUFBQ0FDQUFBUUFRZ0FBQVZNQ0Y3UUorSjh1aU56RVJqOHZ5eklvaTN1MzFZdG9jQXdCY1RnQitOalVWVDVyTldDL0pFOHY3L1hpNHRSVjM4OXdzQXdDOHdsdkFBQUFDRUFBQUFRZ0FnQUFFQUVBQUFnQWdBQUVBS0p1YUlSaU5SeTlmUmp4OWFpQUFnQ3RuQlJBQVFBQUNBQ0FBQVFBUWdBQUFDRUFBQUNyQUx1QVJtVTNUU09yMTJDekorV1JwR3BFa0pnWUFCQ0NYNVU2akVidkx5N0Zla3VpYWk0akN0QURBV1BJV01BQ0FBQVFBUUFBQ0FDQUFBUUFRZ0FBQUNFQUFBQVFnQUFBQ0VBQUFBUWdBZ0FBRUFFQUFBZ0FnQUFFQUVJQUFBQWhBQUFBQkNBQ0FBQVFBUUFBQ0FDQUFBUUNvbHBvaEFLNlRvenlQWjN0N3NaRWtvN3VSRGdZeC9ZWmora1VSaHdjSDhYT1dqZXk4a2p5UEQ0ckNYSjNUVEs5blZZUlNYcXVUSnlkUkY0RFY5TGpialdSN096WkxjajZmcDJuTUx5MUZVWE1KVkhGT2k2S0lsZE5Uay9BYW5hS0k2SFJLZDE3OWlJampZeE5VZ2JtQ2NiaFcvZmNma1hhZWwrcm1mNXBsRVNWZUdUQ25BSEI1ckhZREFBaEFBQUFFSUFBQUFoQUFBQUVJQUVBRkpLMVd5MVpRQUlBeFlnVVFBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUNFQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUNFQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUNFQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUFRZ0FBQUNFQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUFRZ0FBQUNFQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFDRUFBQUFRZ0FBQUNFQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFDRUFBQUFRZ0FBQUNFQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFBUWdJWUFBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQkNBQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQUJDQUFBQUlRQUFBQVFnQWdBQUVBRUFBQWdBZ0FBRUFFSUFBQUFoQUFBQUVJQUFBQWhBQUFBRUlBSUFBQkFCQUFBSUFJQUFCQURqTFA3TGZGaUdqdHdJK0FBQUFBRWxGVGtTdVFtQ0MiLCJpbnB1dCI6Im8gKiB4IC0gYyoxMDAgPj4gbyAqICh5ICsgYyApIn0=) - Instagram filters with math (?)
//! * [superjot](https://www.youtube.com/watch?v=Afe86vmjGlw&) - Superhot demake for ludumdare
//! * [escrotum](https://github.com/Roger/escrotum) - python screenshot utility inspired by scrot (not active in the project anymore)
//! * [defuse](https://github.com/Roger/defuse) - (DEAD) fuse python router inspired by flask
//! * [emesene](https://github.com/emesene/emesene) - (DEAD) Contributed to emesene, an MSN client in python