{"title":"oded.dev","link":[{"@attributes":{"href":"https:\/\/oded.dev\/atom.xml","rel":"self"}},{"@attributes":{"href":"https:\/\/oded.dev\/"}}],"updated":"2021-02-23T08:09:42.688Z","id":"https:\/\/oded.dev\/","author":{"name":"Oded Lazar"},"generator":"Hexo","entry":[{"title":"Working from Home + Corporate VPN","link":{"@attributes":{"href":"https:\/\/oded.dev\/2021\/02\/22\/SSH-GlobalProtect\/"}},"id":"https:\/\/oded.dev\/2021\/02\/22\/SSH-GlobalProtect\/","published":"2021-02-22T17:30:03.000Z","updated":"2021-02-23T08:09:42.688Z","summary":"<p>Hey everyone! today I\u2019d like to tell you a small story about a guy that\u2019s been stuck working from home for more than a year and is suffer","category":[{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}},{"@attributes":{"term":"devops","scheme":"https:\/\/oded.dev\/tags\/devops\/"}}]},{"title":"AX3600 - Post #1","link":{"@attributes":{"href":"https:\/\/oded.dev\/2020\/11\/30\/AX3600-1\/"}},"id":"https:\/\/oded.dev\/2020\/11\/30\/AX3600-1\/","published":"2020-11-30T19:08:00.000Z","updated":"2021-02-22T17:11:05.614Z","summary":"<p>In my <a href=\"\/2020\/10\/23\/AX3600-0\">previous post<\/a> I gave you an intro about AX3600 and how awesome it is. This post will focus on ho","category":[{"@attributes":{"term":"hacking","scheme":"https:\/\/oded.dev\/categories\/hacking\/"}},{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}},{"@attributes":{"term":"xiaomi","scheme":"https:\/\/oded.dev\/tags\/xiaomi\/"}},{"@attributes":{"term":"ax3600","scheme":"https:\/\/oded.dev\/tags\/ax3600\/"}}]},{"title":"AX3600 - Post #0","link":{"@attributes":{"href":"https:\/\/oded.dev\/2020\/10\/23\/AX3600-0\/"}},"id":"https:\/\/oded.dev\/2020\/10\/23\/AX3600-0\/","published":"2020-10-23T13:34:10.000Z","updated":"2021-02-22T17:11:05.614Z","summary":"<p>Wow. last time I wrote anything was ~2 years ago. I actually spent a whole day on getting the blog to working state!<br>Anyhow, I\u2019m back ","category":[{"@attributes":{"term":"hacking","scheme":"https:\/\/oded.dev\/categories\/hacking\/"}},{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}},{"@attributes":{"term":"xiaomi","scheme":"https:\/\/oded.dev\/tags\/xiaomi\/"}},{"@attributes":{"term":"ax3600","scheme":"https:\/\/oded.dev\/tags\/ax3600\/"}}]},{"title":"Getting an Accurate Weather Forecast using Wi-Fi Position System","link":{"@attributes":{"href":"https:\/\/oded.dev\/2018\/01\/12\/wips_weather\/"}},"id":"https:\/\/oded.dev\/2018\/01\/12\/wips_weather\/","published":"2018-01-12T21:01:09.000Z","updated":"2021-02-22T17:11:05.634Z","summary":"<p>I\u2019m travelling a lot with my laptop, and having an accurate weather forecast on-the-go is very convenient.<\/p>\n<p><img src=\"\/images\/2018\/","category":[{"@attributes":{"term":"devops","scheme":"https:\/\/oded.dev\/categories\/devops\/"}},{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}},{"@attributes":{"term":"python","scheme":"https:\/\/oded.dev\/tags\/python\/"}}]},{"title":"You're not a Java Developer","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/11\/28\/not_an_lang_dev\/"}},"id":"https:\/\/oded.dev\/2017\/11\/28\/not_an_lang_dev\/","published":"2017-11-28T08:53:00.000Z","updated":"2021-02-22T17:11:05.630Z","summary":"<p>You are not a \u201cJava Developer\u201d.<br>You are a Software Developer who is capable of writing software in Java.<\/p>\n<p>You don\u2019t want to hire","category":[{"@attributes":{"term":"thoughts","scheme":"https:\/\/oded.dev\/categories\/thoughts\/"}},{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/thoughts\/programming\/"}}]},{"title":"Migrating Fedora from BIOS to UEFI","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/11\/13\/fedora_uefi\/"}},"id":"https:\/\/oded.dev\/2017\/11\/13\/fedora_uefi\/","published":"2017-11-13T15:21:13.000Z","updated":"2021-02-22T17:11:05.626Z","summary":"<p>Let me tell you a story.<\/p>\n<p>This is not a sad story, but a geeky one.<\/p>\n<p>A story about a developer that was told it\u2019s impossible ","category":[{"@attributes":{"term":"devops","scheme":"https:\/\/oded.dev\/categories\/devops\/"}},{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}}]},{"title":"The Guts n\u2019 Glory of Database Internals","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/11\/07\/guts-n-glory-of-db-internals\/"}},"id":"https:\/\/oded.dev\/2017\/11\/07\/guts-n-glory-of-db-internals\/","published":"2017-11-07T10:16:37.000Z","updated":"2021-02-22T17:11:05.626Z","summary":"<p>A year ago <a href=\"https:\/\/ayende.com\/\">Oren Eini<\/a> (a.k.a <a href=\"https:\/\/twitter.com\/ayende\">@ayende<\/a>) wrote a series dubbed <a ","category":[{"@attributes":{"term":"devops","scheme":"https:\/\/oded.dev\/categories\/devops\/"}},{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/devops\/programming\/"}},{"@attributes":{"term":"databases","scheme":"https:\/\/oded.dev\/tags\/databases\/"}}]},{"title":"My take on Modern C++","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/11\/06\/modern-cpp\/"}},"id":"https:\/\/oded.dev\/2017\/11\/06\/modern-cpp\/","published":"2017-11-06T07:27:12.000Z","updated":"2021-02-22T17:11:05.630Z","summary":"<p>C++ is a big language that has evolved tremendously since it\u2019s inception way back in the 1980\u2019s.<\/p>\n<p>Throughout the years, many millio","category":[{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/programming\/"}},{"@attributes":{"term":"c++","scheme":"https:\/\/oded.dev\/tags\/c\/"}}]},{"title":"C++ <algorithm> Series #0","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/11\/03\/cpp-algo-0\/"}},"id":"https:\/\/oded.dev\/2017\/11\/03\/cpp-algo-0\/","published":"2017-11-03T12:43:00.000Z","updated":"2021-02-22T17:11:05.626Z","summary":"<p><img src=\"\/images\/2017\/11\/xkcd-algo.png\"><\/p>\n<p>The more I learn about an eco-system, the more I understand how little I know about it.<","category":[{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/programming\/"}},{"@attributes":{"term":"c++","scheme":"https:\/\/oded.dev\/tags\/c\/"}}]},{"title":"Everything that is wrong with sudo, and how I'm planning to fix it","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/10\/21\/doas-hello-world\/"}},"id":"https:\/\/oded.dev\/2017\/10\/21\/doas-hello-world\/","published":"2017-10-20T21:37:00.000Z","updated":"2021-02-22T17:11:05.626Z","summary":"<h1 align=\"center\">\n  <a href=\"https:\/\/github.com\/odedlaz\/suex\"><img src=\"\/images\/2017\/10\/suex_xkcd.png\" alt=\"suex\" width=\"256\" height=\"256\"","category":[{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/programming\/"}},{"@attributes":{"term":"c++","scheme":"https:\/\/oded.dev\/tags\/c\/"}},{"@attributes":{"term":"project","scheme":"https:\/\/oded.dev\/tags\/project\/"}}]},{"title":"Implementing Go's defer keyword in C++","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/10\/05\/go-defer-in-cpp\/"}},"id":"https:\/\/oded.dev\/2017\/10\/05\/go-defer-in-cpp\/","published":"2017-10-05T08:24:00.000Z","updated":"2021-02-22T17:11:05.626Z","summary":"<p>Go has a neat keyword called defer that is used to ensure that a function call is performed later in a program\u2019s execution, usually for p","category":[{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/programming\/"}},{"@attributes":{"term":"c++","scheme":"https:\/\/oded.dev\/tags\/c\/"}},{"@attributes":{"term":"golang","scheme":"https:\/\/oded.dev\/tags\/golang\/"}}]},{"title":"sick of sudoers NOPASSWD?","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/08\/30\/runas-tool\/"}},"id":"https:\/\/oded.dev\/2017\/08\/30\/runas-tool\/","published":"2017-08-30T06:24:00.000Z","updated":"2021-02-22T17:11:05.630Z","summary":"<p>TL;DR: I wrote a tool that allows to run a binary as a different owner\/group.  <\/p>\n<p>You can download it from <a href=\"https:\/\/github.c","category":[{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/programming\/"}},{"@attributes":{"term":"c++","scheme":"https:\/\/oded.dev\/tags\/c\/"}},{"@attributes":{"term":"project","scheme":"https:\/\/oded.dev\/tags\/project\/"}},{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}}]},{"title":"GNOME Shell Modes","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/08\/20\/gnome3-modes\/"}},"id":"https:\/\/oded.dev\/2017\/08\/20\/gnome3-modes\/","published":"2017-08-20T17:39:00.000Z","updated":"2021-02-22T17:11:05.626Z","summary":"<p>A few days ago I installed PulseSecure\u2019s client to gain access to the corporate VPN.<br>For reasons comepletely unknown to me, these guys","category":[{"@attributes":{"term":"devops","scheme":"https:\/\/oded.dev\/categories\/devops\/"}},{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}},{"@attributes":{"term":"gnome","scheme":"https:\/\/oded.dev\/tags\/gnome\/"}}]},{"title":"Algorithms to Live By","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/08\/11\/algorithms-to-live-by\/"}},"id":"https:\/\/oded.dev\/2017\/08\/11\/algorithms-to-live-by\/","published":"2017-08-11T18:13:25.000Z","updated":"2021-02-22T17:11:05.626Z","summary":"<p><img src=\"\/images\/2017\/08\/algorithms-to-live-by.jpg\"><\/p>\n<p>A few weeks ago I started reading <a href=\"http:\/\/algorithmstoliveby.com\/\">Algorithms to Live By: The Computer Science of Human Decisions<\/a> and been fascinated by it ever since:<\/p>\n<blockquote>\n<p>What should we do, or leave undone, in a day or a lifetime? How much messiness should we accept? What balance of the new and familiar is the most fulfilling? These may seem like uniquely human quandaries, but they are not. Computers, like us, confront limited space and time, so computer scientists have been grappling with similar problems for decades. And the solutions they\u2019ve found have much to teach us.<\/p>\n<p>In a dazzlingly interdisciplinary work, <a href=\"http:\/\/brian-christian.com\/\">Brian Christian<\/a> and <a href=\"http:\/\/cocosci.berkeley.edu\/tom\/\">Tom Griffiths<\/a> show how algorithms developed for computers also untangle very human questions. They explain how to have better hunches and when to leave things to chance, how to deal with overwhelming choices and how best to connect with others. From finding a spouse to finding a parking spot, from organizing one\u2019s inbox to peering into the future, <a href=\"http:\/\/algorithmstoliveby.com\/\">Algorithms to Live By<\/a> transforms the wisdom of computer science into strategies for human living.<\/p>\n<\/blockquote>\n<p>I\u2019ll try and give you a little taste of the book - which I\u2019m still reading (more precisely, <a href=\"https:\/\/www.audible.com\/pd\/Business\/Algorithms-to-Live-By-Audiobook\/B01D24NLWO\">listening<\/a>), so you\u2019ll know what you\u2019re getting into.<\/p>","category":[{"@attributes":{"term":"general","scheme":"https:\/\/oded.dev\/categories\/general\/"}},{"@attributes":{"term":"book","scheme":"https:\/\/oded.dev\/categories\/general\/book\/"}},{"@attributes":{"term":"algorithm","scheme":"https:\/\/oded.dev\/tags\/algorithm\/"}}]},{"title":"Making Hexo Blazing Fast","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/07\/26\/hexo-performance-optimizations\/"}},"id":"https:\/\/oded.dev\/2017\/07\/26\/hexo-performance-optimizations\/","published":"2017-07-26T14:24:13.000Z","updated":"2021-02-22T17:11:05.630Z","summary":"<p>A week ago I migrated my blog from <a href=\"\/2017\/07\/11\/From-Ghost-to-Hexo\/\">Ghost to Hexo<\/a> to gain better performance and save money.<\/p>\n<p>Hexo is said to be \u201cBlazing Fast\u201d, but while I did \u201cfeel\u201d that my <a href=\"https:\/\/hexo.io\/\">Hexo<\/a> based site was snappier than its predecessor, it was far from \u201cBlazing Fast\u201d.<\/p>\n<p>Performance is extremely important. There are a lot of articles on the subject, most of which point out that website performance &amp; uptime are key to user satisfaction. WebpageFX wrote a nice summary of the subject - <a href=\"https:\/\/www.webpagefx.com\/blog\/web-design\/why-website-speed-is-important\/\">Why Website Speed is Important<\/a>.<\/p>\n<p>I\u2019m not a web developer, and have almost zero knowledge in website optimizations. Nonetheless, I\u2019ve optimized more then a few apps in my career and know how to approach such problems.<\/p>\n<p>All I need is to figure out the tooling to find the bottlenecks and fix them to gain <strong>good enough<\/strong> performance. That is, I\u2019m not looking into optimizing every single piece of the website, only making it fast enough so it\u2019ll feel snappy.<\/p>\n<p>This blog post explains the steps I took in order to dramatically decrease the average page size to less then 350k.<\/p>\n<p><img src=\"\/images\/2017\/07\/xkcd-optimization.png\"><\/p>","category":[{"@attributes":{"term":"devops","scheme":"https:\/\/oded.dev\/categories\/devops\/"}},{"@attributes":{"term":"optimization","scheme":"https:\/\/oded.dev\/tags\/optimization\/"}},{"@attributes":{"term":"hexo","scheme":"https:\/\/oded.dev\/tags\/hexo\/"}}]},{"title":"From Ghost to Hexo","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/07\/11\/From-Ghost-to-Hexo\/"}},"id":"https:\/\/oded.dev\/2017\/07\/11\/From-Ghost-to-Hexo\/","published":"2017-07-11T09:03:00.000Z","updated":"2021-02-22T17:11:05.618Z","summary":"<p>After a few months of hosting my blog at <a href=\"https:\/\/digitalocean.com\/\">DigitalOcean<\/a>, I decided to ditch <a href=\"https:\/\/ghost.org\/\">Ghost<\/a>.<br>Instead, I\u2019m moving my blog to <a href=\"https:\/\/hexo.io\/\">Hexo<\/a>, hosted by <a href=\"https:\/\/pages.github.com\/\">GitHub Pages<\/a>.<\/p>\n<p><strong>TL;DR<\/strong> -<\/p>\n<ul>\n<li>Ghost doesn\u2019t offer any server features, but runs one.<\/li>\n<li>Ghost wasn\u2019t fast enough.<\/li>\n<li>Unnecessary Server costs.<\/li>\n<li>To much Maintenance.<\/li>\n<\/ul>\n<p><img src=\"\/images\/2017\/07\/hexo-logo.png\"><\/p>","category":[{"@attributes":{"term":"announcement","scheme":"https:\/\/oded.dev\/categories\/announcement\/"}},{"@attributes":{"term":"blog","scheme":"https:\/\/oded.dev\/categories\/announcement\/blog\/"}},{"@attributes":{"term":"hexo","scheme":"https:\/\/oded.dev\/tags\/hexo\/"}},{"@attributes":{"term":"ghost","scheme":"https:\/\/oded.dev\/tags\/ghost\/"}}]},{"title":"coroutines: basic building blocks for concurrency","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/07\/05\/coroutines-basic-building-blocks-for-concurrency\/"}},"id":"https:\/\/oded.dev\/2017\/07\/05\/coroutines-basic-building-blocks-for-concurrency\/","published":"2017-07-05T08:27:00.000Z","updated":"2017-07-07T13:22:14.000Z","summary":"<p>This part of the series explains the basic building block that allow writing concurrent programs in python.<\/p>\n<p>Later in the series I\u2019ll show how to use different async paradigms using the new async syntax that was (finally) introduced in Python 3.5.<\/p>\n<h2 id=\"Prerequisites\"><a href=\"#Prerequisites\" class=\"headerlink\" title=\"Prerequisites\"><\/a>Prerequisites<\/h2><ol>\n<li>You\u2019re using python 3.6.x<\/li>\n<li>You\u2019re familiar with coroutines. otherwise, read - <a href=\"\/2017\/04\/11\/python-coroutines-introduction\/\">coroutines: Introduction<\/a>.<ul>\n<li>You might also want to read the previous blog post: <a href=\"\/2017\/04\/11\/python-coroutines-pipelines-and-data-flow\/\">coroutines: Pipelines &amp; Data flow<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ol>","category":[{"@attributes":{"term":"programming","scheme":"https:\/\/oded.dev\/categories\/programming\/"}},{"@attributes":{"term":"python","scheme":"https:\/\/oded.dev\/tags\/python\/"}},{"@attributes":{"term":"concurrency","scheme":"https:\/\/oded.dev\/tags\/concurrency\/"}}]},{"title":"Becoming the go-to guy for Linux internals","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/07\/03\/Becoming-the-go-to-guy-for-Linux-internals-Cybereason\/"}},"id":"https:\/\/oded.dev\/2017\/07\/03\/Becoming-the-go-to-guy-for-Linux-internals-Cybereason\/","published":"2017-07-03T16:21:00.000Z","updated":"2017-07-03T19:27:22.000Z","summary":"<p>7 months ago I made a new years resolution to master vim: <a href=\"\/2016\/12\/12\/the-road-to-mastering-vim\/\">The Road to Mastering Vim<\/a>.<br>I\u2019m not a master just yet, it\u2019s going to take a few years. After 7 months of exclusively editing text &amp; code with vim, I can honestly say that I\u2019m feeling at home and I can\u2019t go back.<\/p>\n<p>A few days ago I <a href=\"\/2017\/06\/22\/goodbye-gartner-hello-cybereason\/\">told the world that I\u2019m moving to Cybereason<\/a>. I didn\u2019t say that I\u2019m going as hard core as it gets - joining the team that develops the agent on Linux endpoints.<\/p>\n<h3><center> New Role \u2192 New Challenges. <\/center><\/h3>\n\n<center>![](\/images\/2017\/06\/cybereason.png)<\/center>","category":[{"@attributes":{"term":"general","scheme":"https:\/\/oded.dev\/categories\/general\/"}},{"@attributes":{"term":"cybereason","scheme":"https:\/\/oded.dev\/tags\/cybereason\/"}}]},{"title":"Running, Editing & Debugging .NET Core Apps Inside a Container","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/06\/25\/Running-Editing-Debugging-NET-Core-Apps-Inside-a-Container\/"}},"id":"https:\/\/oded.dev\/2017\/06\/25\/Running-Editing-Debugging-NET-Core-Apps-Inside-a-Container\/","published":"2017-06-25T13:04:00.000Z","updated":"2017-06-26T13:58:21.000Z","summary":"<p>Today I needed to add a few features to an existing .NET Core application. I\u2019m running Fedora 25, but that shouldn\u2019t be an issue, right? because -<\/p>\n<p><img src=\"\/images\/2017\/06\/ms_love_linux.jpg\"><\/p>\n<p>It appears that it doesn\u2019t love Fedora 25, because it\u2019s still not officially supported. Instead of hacking around and trying to get this thing working, and wasting my whole day doing so, I thought - why not use Docker?<\/p>\n<p>The idea was simple - create a container that fires up <a href=\"https:\/\/code.visualstudio.com\/\">Visual Studio Code<\/a> inside a container that has <a href=\"https:\/\/www.microsoft.com\/net\/core\">.NET Core<\/a> installed.<\/p>\n<p><img src=\"\/images\/2017\/06\/docker-net.png\"><\/p>","category":[{"@attributes":{"term":"devops","scheme":"https:\/\/oded.dev\/categories\/devops\/"}},{"@attributes":{"term":"linux","scheme":"https:\/\/oded.dev\/tags\/linux\/"}},{"@attributes":{"term":"docker","scheme":"https:\/\/oded.dev\/tags\/docker\/"}},{"@attributes":{"term":"vscode","scheme":"https:\/\/oded.dev\/tags\/vscode\/"}},{"@attributes":{"term":".netcore","scheme":"https:\/\/oded.dev\/tags\/netcore\/"}}]},{"title":"Goodbye Gartner, Hello Cybereason","link":{"@attributes":{"href":"https:\/\/oded.dev\/2017\/06\/22\/Goodbye-Gartner-Hello-Cybereason\/"}},"id":"https:\/\/oded.dev\/2017\/06\/22\/Goodbye-Gartner-Hello-Cybereason\/","published":"2017-06-22T02:58:00.000Z","updated":"2017-06-23T11:05:17.000Z","summary":"<p><strong>TL;DR<\/strong>: I\u2019m leaving <a href=\"http:\/\/gici.co.il\/\">Gartner Innovation Center<\/a> and joining <a href=\"https:\/\/cybereason.com\/\">Cybereason<\/a> \ud83c\udf89\ud83c\udf89\ud83c\udf89<\/p>\n<p>The blog post is split into four parts:<\/p>\n<ul>\n<li><a href=\"\/2017\/06\/22\/goodbye-gartner-hello-cybereason#the-past\">The Past: A brief history of how Gartner Innovation Center was formed.<\/a><\/li>\n<li><a href=\"\/2017\/06\/22\/goodbye-gartner-hello-cybereason#the-present\">The Present: What Gartner Innovation Center is currently up to<\/a><\/li>\n<li><a href=\"\/2017\/06\/22\/goodbye-gartner-hello-cybereason#the-decision-to-move\">The decision to move and get out of my comfort zone<\/a><\/li>\n<li><a href=\"\/2017\/06\/22\/goodbye-gartner-hello-cybereason#the-future\">The Future: My thoughts on what\u2019s going to happen next<\/a><\/li>\n<\/ul>","category":[{"@attributes":{"term":"announcement","scheme":"https:\/\/oded.dev\/categories\/announcement\/"}},{"@attributes":{"term":"general","scheme":"https:\/\/oded.dev\/categories\/announcement\/general\/"}},{"@attributes":{"term":"cybereason","scheme":"https:\/\/oded.dev\/tags\/cybereason\/"}},{"@attributes":{"term":"gici","scheme":"https:\/\/oded.dev\/tags\/gici\/"}}]}]}