{"@attributes":{"version":"2.0"},"channel":{"title":"Or Elimelech","link":"https:\/\/or-e.net\/","description":"Recent content on Or Elimelech","image":{"title":"Or Elimelech","url":"https:\/\/or-e.net\/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E","link":"https:\/\/or-e.net\/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E"},"generator":"Hugo -- 0.151.0","language":"en","lastBuildDate":"Wed, 15 Jan 2025 00:00:00 +0000","item":[{"title":"Support Touch ID for sudo","link":"https:\/\/or-e.net\/posts\/sudo-tid\/","pubDate":"Wed, 15 Jan 2025 00:00:00 +0000","guid":"https:\/\/or-e.net\/posts\/sudo-tid\/","description":"<p>Just got a new computer again (new job) and realized I need to reconfigure sudo to work with touch-id.\nI then realized I didn&rsquo;t have touch-id enabled for sudo in a long time, the reason is that every OS update it resets the config.\nToday when enabling it, I have realized that there&rsquo;s a file called <code>\/etc\/pam.d\/sudo_local.template<\/code> which does exactly that.<\/p>\n<p><code>sudo_local<\/code> is a filed that will not be overwritten when upgrading between OS versions.<\/p>"},{"title":"Add Protobuf messages into gRPC errors.","link":"https:\/\/or-e.net\/posts\/grpc-details\/","pubDate":"Sun, 08 May 2022 00:00:00 +0000","guid":"https:\/\/or-e.net\/posts\/grpc-details\/","description":"<p>I had encountred a number of times for the need to give a structured message through gRPC errors\nThe default <code>Go<\/code> err or <code>status.Errorf<\/code> functions are simple strings by default.<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;\"><code class=\"language-go\" data-lang=\"go\"><span style=\"display:flex;\"><span><span style=\"color:#66d9ef\">func<\/span> (<span style=\"color:#a6e22e\">s<\/span> <span style=\"color:#f92672\">*<\/span><span style=\"color:#a6e22e\">Server<\/span>) <span style=\"color:#a6e22e\">LintFile<\/span>(<span style=\"color:#a6e22e\">ctx<\/span> <span style=\"color:#a6e22e\">context<\/span>.<span style=\"color:#a6e22e\">Context<\/span>, <span style=\"color:#a6e22e\">req<\/span> <span style=\"color:#f92672\">*<\/span><span style=\"color:#a6e22e\">LintRequest<\/span>) (<span style=\"color:#f92672\">*<\/span><span style=\"color:#a6e22e\">LintResponse<\/span>, <span style=\"color:#66d9ef\">error<\/span>) {\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#a6e22e\">lintRes<\/span>, <span style=\"color:#a6e22e\">err<\/span> <span style=\"color:#f92672\">:=<\/span> <span style=\"color:#a6e22e\">lint<\/span>(<span style=\"color:#a6e22e\">ctx<\/span>, <span style=\"color:#a6e22e\">req<\/span>.<span style=\"color:#a6e22e\">GetFile<\/span>())\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">if<\/span> <span style=\"color:#a6e22e\">err<\/span> <span style=\"color:#f92672\">!=<\/span> <span style=\"color:#66d9ef\">nil<\/span> {\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#75715e\">\/\/ lintRes is a protbuf message containing detailed error<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#75715e\">\/\/ for each line in the given file.<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>\t\t<span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#66d9ef\">nil<\/span>, <span style=\"color:#a6e22e\">status<\/span>.<span style=\"color:#a6e22e\">New<\/span>(<span style=\"color:#a6e22e\">codes<\/span>.<span style=\"color:#a6e22e\">FailedPrecondition<\/span>, <span style=\"color:#e6db74\">&#34;File isn&#39;t valid&#34;<\/span>).<span style=\"color:#a6e22e\">WithDetails<\/span>(<span style=\"color:#a6e22e\">lintRes<\/span>)\n<\/span><\/span><span style=\"display:flex;\"><span>\t}\n<\/span><\/span><span style=\"display:flex;\"><span>\t<span style=\"color:#66d9ef\">return<\/span> <span style=\"color:#f92672\">&amp;<\/span><span style=\"color:#a6e22e\">LintResponse<\/span>{}, <span style=\"color:#66d9ef\">nil<\/span>\n<\/span><\/span><span style=\"display:flex;\"><span>}\n<\/span><\/span><\/code><\/pre><\/div><p>The example above illustrates a situation where you need to know what exactly was wrong with the file,\nThe line number of where the error happened, what&rsquo;s the reason etc.<\/p>"},{"title":"Build a datalake on top of BigQuery","link":"https:\/\/or-e.net\/posts\/bigquery-lakehouse\/","pubDate":"Mon, 14 Mar 2022 00:00:00 +0000","guid":"https:\/\/or-e.net\/posts\/bigquery-lakehouse\/","description":"<p>Google BigQuery is a very powerful, serverless data warehosue that\nlets you ingest unlimited data on a pay-per-use basis (storage + querying).\nThe primary advantage of data warehouses is the ability to quickly query and analyze immense amounts of <strong>structured<\/strong> data.<\/p>\n<p>Modern data warehouses support new, unstructured data types such as JSON, Avro, and so on, which makes these data warehouses a great contender for data lakes.\nBigQuery recently added native JSON column type, which we can leverage for our semi-structured lakehouse.\nWith JSON support we can skip the traditional datalakes that are just blob storage with files, from classic Hadoop + hive through GCS, S3, Athena etc.\nMaintaining such infrastructure and understanding the low-level components, such as metastore, ORC, and Parquet is an expensive process for most startups, financially and with regard to domain expertise.<\/p>"},{"title":"About","link":"https:\/\/or-e.net\/about\/","pubDate":"Mon, 01 Jan 0001 00:00:00 +0000","guid":"https:\/\/or-e.net\/about\/","description":"<p>Or is an experienced SRE for over a decade, building companies and their infrastructure.\nResponsible for educating engineers working with cloud-native platforms on best-practices,\nhelping them be the best and most efficient they can be in order to provide value with least friction.\nDesigning highly scalable platforms that serve billions of requests and happy customers with resiliency and simplicity in mind.<\/p>\n<p>Manifesting systems and bringing them to life with the best in class technology-stack that fits the needs of the business.\nWhether it be Kubernetes, Google Cloud Platform, AWS, Go, Prometheus, Temporal etc.\nWriting packages alongside developers to help them abstract the complexity away from servers they build\nsuch as gRPC and Pub\/Sub with developer-experience in mind.<\/p>"}]}}