<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tom Ron</title><description>Tom Ron — data scientist. Notes on data, Python, machine learning, and things worth reading.</description><link>https://tomron.net/</link><language>en</language><item><title>One Gateway to Route Them All</title><link>https://tomron.net/2026/08/29/one-gateway-to-route-them-all/</link><guid isPermaLink="true">https://tomron.net/2026/08/29/one-gateway-to-route-them-all/</guid><description>In August, Stripe announced it had agreed to acquire OpenRouter — reportedly for more than $7 billion, per Bloomberg . OpenRouter helps businesses route and…</description><pubDate>Sat, 29 Aug 2026 20:03:23 GMT</pubDate><content:encoded>
&lt;p&gt;In August, Stripe announced it had agreed to acquire OpenRouter — reportedly for more than $7 billion, per &lt;a&gt;Bloomberg&lt;/a&gt;. OpenRouter helps businesses route and optimize token usage across 400+ models from more than 80 providers, and it fits alongside the token-billing work Stripe has been shipping for a year. Earlier in 2026, &lt;a&gt;Palo Alto Networks bought Portkey&lt;/a&gt; to anchor its Prisma AIRS platform.&lt;/p&gt;



&lt;p&gt;The layer in question is the AI gateway: a single service that sits between your application and every model provider you call. Your code talks to the gateway; the gateway talks to OpenAI, Anthropic, Google, Bedrock, or whatever open-weight model you&apos;re hosting yourself. If your team calls more than one provider, you&apos;ve probably built some version of this already, even if you didn&apos;t call it that. It usually starts as a thin wrapper around an API client, then grows into something bigger once you realize you can&apos;t answer basic questions like &quot;how much did we spend on GPT-5 last week&quot; or &quot;what happens when Anthropic has an outage.&quot; A gateway turns that ad-hoc wrapper into infrastructure. Four reasons it&apos;s worth doing deliberately:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Unified access&lt;/strong&gt; - One API, one auth scheme, many models. Instead of maintaining separate SDKs and error-handling paths for OpenAI, Anthropic, Google, and whatever open-weight model your ML team is experimenting with this month, you integrate once and swap models by changing a string - instead of migrating twelve call sites when a provider deprecates an endpoint.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Cost observability and savings&lt;/strong&gt; - The gateway sits in the one place that sees every request, making it the natural home for spend attribution by team, project, or feature - and for caching, routing to cheaper models, and budget enforcement.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Compliance&lt;/strong&gt; - Once you have that central choke point, you can enforce data residency, redact PII before it leaves your network, log everything for audit, and apply guardrails consistently instead of per-integration.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Business continuity&lt;/strong&gt; - the gateway already knows about every provider; it&apos;s the natural place to build fallbacks - if Anthropic degrades, silently retry on OpenAI or a self-hosted model, instead of your product going down with the provider.&lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2026/08/untitled-diagram-2026-08-29-173307.png&quot; alt=&quot;&quot; class=&quot;wp-image-2190&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Which products are out there?&lt;/h3&gt;



&lt;p&gt;&lt;a&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;&lt;/a&gt; -The household name: a hosted marketplace fronting 400+ models from 80+ providers, with automatic routing between providers serving the same model when one degrades. Breadth and zero setup are the pitch — one API key, immediate access to essentially everything worth calling, per-provider fallback included. Pricing is pass-through on tokens with a flat fee on credit purchases, around 5.5% on card, cheaper via BYOK. Interesting to watch whether the fee or business model changes once it becomes a Stripe subsidiary.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;strong&gt;LiteLLM&lt;/strong&gt;&lt;/a&gt; - The opposite bet: an open-source proxy you run yourself, OpenAI-compatible across 100+ providers, no vendor in your request path and no markup — you pay providers directly. You get control: your VPC, your logs, your keys, free core routing and failover. You also get the ops - the Kubernetes deployment, the database behind spend tracking, etc. Open-core pricing: free to self-host; Enterprise adds SSO, RBAC, and audit logs.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;a&gt;Cloudflare AI Gateway&lt;/a&gt;&lt;/strong&gt; - Rides the edge network that already terminates much of the internet&apos;s traffic, so the pitch is proximity and operational simplicity rather than model breadth: caching, rate limiting, logging, and guardrails close to your users, obtained by pointing your existing SDK at a new base URL. Dashboard analytics, caching, and rate limiting are free on all plans; persistent logs are across every tier; and it now supports OpenAI, Anthropic, and Responses-compatible endpoints. No markup on inference - a 5% fee applies only if you route third-party model spend through Cloudflare&apos;s Unified Billing instead of bringing your own keys. Strongest if you&apos;re already on Cloudflare; weakest if you need the deepest guardrail and compliance tooling.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;a&gt;Portkey&lt;/a&gt;&lt;/strong&gt; - gateway as security control plane. Routing was never the whole product = observability, a prompt store, and governance guardrails came bundled, aimed at enterprises that need policy enforcement as much as uptime. That&apos;s what Palo Alto Networks bought in May, folding it in as the foundational gateway under Prisma AIRS, on the argument that once agents act autonomously, the gateway is the last place you can inspect a bad decision before it executes. Pricing is usage-based on logged requests, with retention gated by tier. Built from the ground up for governing what agents are allowed to do, not just which model answers.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;a&gt;Bifrost&lt;/a&gt; &lt;/strong&gt;- an open-source gateway written in Go by Maxim AI, unifying 1,000+ models across 23+ providers behind one OpenAI-compatible API. Benchmarked at roughly 11 microseconds of overhead per request at 5,000 RPS. Covers the same ground as the rest - automatic failover, adaptive load balancing across keys and providers, semantic caching, hierarchical budgets, native MCP for agentic tool use - and plugs into Maxim&apos;s evaluation and observability platform. Open-core: OSS gateway free and self-hosted; Enterprise adds private networking, security integrations, and support.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p&gt;If you don&apos;t have a gateway yet, you&apos;ll probably want one soon. What pushes you there varies - a finance question, an outage, a compliance review, etc. Whichever reason gets you to build it, you tend to pick up the rest on the way, because they all live in the same place: once every request passes through one service, spend attribution, failover, and PII redaction stop being separate projects. And as with everything else in software, what you should protect is your ability to leave. The gateway exists to keep you from being locked into a single model provider, so don&apos;t trade it for getting locked into the gateway instead. Ideally, switching from one to another is a base URL change and nothing more.&lt;/p&gt;
</content:encoded><category>ai gateway</category><category>bitfrost</category><category>cloudflare</category><category>litellm</category><category>llm</category><category>openrouter</category><category>portkey</category></item><item><title>Lead with Context</title><link>https://tomron.net/2026/07/20/lead-with-context/</link><guid isPermaLink="true">https://tomron.net/2026/07/20/lead-with-context/</guid><description>In recent weeks, I completed Northwestern University’s Organizational Leadership Specialization on Coursera. While the courses span different topics-…</description><pubDate>Mon, 20 Jul 2026 14:18:41 GMT</pubDate><content:encoded>
&lt;p&gt;In recent weeks, I completed Northwestern University’s Organizational Leadership Specialization on Coursera. While the courses span different topics- storytelling, social influence, negotiation, and more- two recurring themes stood out to me.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Preparation changes everything&lt;br /&gt;&lt;/strong&gt;Effective leadership and communication rarely happen “in the moment.” Preparation matters - even when you don’t yet know the formal frameworks or terminology.&lt;/p&gt;



&lt;p&gt;Whether it’s thinking through your BATNA (Best Alternative to a Negotiated Agreement), identifying your ZOPA (Zone of Possible Agreement), or simply anticipating objections, the key habit is stepping into the other side’s perspective before the interaction happens. Strong outcomes are usually built long before the conversation begins.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. The audience is the message&lt;br /&gt;&lt;/strong&gt;People are driven by different motivations, constraints, and perceptions. That means the same message can land very differently depending on how - and to whom - it is delivered.&lt;/p&gt;



&lt;p&gt;Leadership is not just about what you say, but how you tailor it: language, framing, medium, and emphasis all matter. This is something I first learned as a scout leader, and it has stayed with me for nearly 25 years. It remains one of the most consistently useful leadership principles I’ve encountered.&lt;/p&gt;



&lt;p&gt;At the same time, I’ve often seen a common anti-pattern: leaders trying to motivate others based on what motivates them, rather than what actually drives the person in front of them. Good intent, misaligned execution.&lt;/p&gt;



&lt;p&gt;Ultimately, both lessons point to the same idea: leadership is less about projecting your intent and more about deeply understanding context - both the situation and the people in it.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2026/07/chatgpt-image-jul-20-2026-03_09_49-pm.png&quot; alt=&quot;&quot; class=&quot;wp-image-2184&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
</content:encoded><category>leadership</category><category>LearnInPublic</category></item><item><title>Old leadership lessons, new context</title><link>https://tomron.net/2026/07/09/old-leadership-lessons-new-context/</link><guid isPermaLink="true">https://tomron.net/2026/07/09/old-leadership-lessons-new-context/</guid><description>Ron Wallace started as a UPS driver in rural Idaho in 1966 and retired 36 years later as President of UPS International, running operations in 200+ countries.…</description><pubDate>Thu, 09 Jul 2026 17:16:45 GMT</pubDate><content:encoded>
&lt;p&gt;Ron Wallace started as a UPS driver in rural Idaho in 1966 and retired 36 years later as President of UPS International, running operations in 200+ countries. His book, &quot;Leadership Lessons from a UPS Driver,&quot; turns that climb into a handful of blunt, unglamorous principles. Here are four insights that stayed with me -&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;1. Best 5 vs 5 best.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Five average players who move as a unit beat five stars who don&apos;t. With AI blurring roles - PMs writing code, engineers writing specs - how well a team moves together matters more than any one person&apos;s skill ceiling.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2. Manage yourself before you manage others.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;You can&apos;t ask for discipline you don&apos;t have. When everyone has an agent doing part of their job, self-management - what to delegate, what to check, what to own - is the whole game.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;3. 10% planning, 90% execution.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;That ratio assumed execution was the bottleneck. Agents and other tools now handle much of the execution. Does the split flip? Not sure - bad planning just produces fast, wrong output at scale. But the balance is shifting, and finding the new ratio is one of the more interesting problems before us.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;4. Change is inevitable; growth is optional.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;UPS survived by repeatedly outgrowing its own identity. Feels like the line of the year - nobody&apos;s job description is stable, and adapting is a choice, not a default.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2026/07/images.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-2179&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
</content:encoded><category>bookclub</category><category>leadership</category><category>LearnInPublic</category><category>reading</category></item><item><title>Token Saving &amp; Compression: A Practitioner&apos;s Review</title><link>https://tomron.net/2026/07/06/token-saving-compression-a-practitioners-review/</link><guid isPermaLink="true">https://tomron.net/2026/07/06/token-saving-compression-a-practitioners-review/</guid><description>AI coding agents burn tokens on things they don&apos;t need to see in full - verbose logs, entire files read for one function, repeated context across turns. A wave…</description><pubDate>Mon, 06 Jul 2026 20:34:15 GMT</pubDate><content:encoded>
&lt;p&gt;AI coding agents burn tokens on things they don&apos;t need to see in full - verbose logs, entire files read for one function, repeated context across turns. A wave of tools now attacks this from different angles: some rewrite noisy output before it reaches the model, some compress what&apos;s already in context, some change what the agent generates or reads in the first place. Here is a short survey about the different tools.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;rtk&lt;/strong&gt; — &lt;a&gt;github.com/rtk-ai/rtk&lt;/a&gt;&lt;br /&gt;A CLI proxy that hooks into Bash tool calls and rewrites common commands (&lt;code&gt;git status&lt;/code&gt;, &lt;code&gt;cargo test&lt;/code&gt;, &lt;code&gt;kubectl&lt;/code&gt;, etc.) into compact equivalents before output hits context - a noisy &lt;code&gt;git push&lt;/code&gt; becomes &lt;code&gt;ok main&lt;/code&gt;. Claims 60–90% savings on covered operations, plausible since the approach is narrow and mechanical.&lt;br /&gt;&lt;em&gt;Watch for:&lt;/em&gt; only intercepts Bash calls - native &lt;code&gt;Read&lt;/code&gt;/&lt;code&gt;Grep&lt;/code&gt; tool usage bypasses it entirely, so real-world savings depend heavily on how your agent works. &lt;em&gt;Best for:&lt;/em&gt; teams whose agents lean on shell commands for everything (git, test runners, infra CLIs); less useful if the agent mostly reads files directly.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Caveman&lt;/strong&gt; — &lt;a&gt;getcaveman.dev&lt;/a&gt;&lt;br /&gt;A family of products: a compression skill, a standalone token-budgeted coding agent, a persistent memory layer, and a compression proxy (beta). Claims ~65% token reduction.&lt;br /&gt;&lt;em&gt;Watch for:&lt;/em&gt; thin evidence - the site leans on stars and HN placement rather than a reproducible benchmark; the four products make it unclear which piece drives the number. Best for: teams wanting a single umbrella tool across several angles at once, and willing to validate the number themselves before committing.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Ponytail&lt;/strong&gt; — alphamatch.ai/blog/ponytail-ai-coding-skill-2026&lt;br /&gt;Attacks generation, not context: forces the model through a &quot;does this need to exist&quot; ladder before writing code, preferring stdlib/native/existing-dependency solutions. Own benchmark shows LOC cut to ~46% of baseline and cost down by 47–77%, but token usage itself drops only by ~16%.&lt;br /&gt;&lt;em&gt;Watch for&lt;/em&gt;: it&apos;s solving a different problem than the others — don&apos;t expect it to shrink context windows; the win is fewer lines and less rework, not less reading. Best for: codebases with a lot of unnecessary custom code; less relevant if your token spend is mostly context/tool output, not generation.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Headroom&lt;/strong&gt; — &lt;a&gt;headroom-docs.vercel.app/docs&lt;/a&gt;&lt;br /&gt;Compresses everything an agent reads — tool output, file reads, API/DB responses — via type-specific compressors, with a reversible retrieve path back to full detail. Vendor case study: 87.6% fewer input tokens in a log-heavy scenario.&lt;br /&gt;&lt;em&gt;Watch for&lt;/em&gt;: numbers are vendor case studies on scenarios they chose; the retrieval mechanism adds a round trip when the model needs detail back. &lt;em&gt;Best for&lt;/em&gt;: agents that use tools heavily against verbose sources (logs, API responses, DB queries); less relevant for short, code-only sessions.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Graphify&lt;/strong&gt; — &lt;a&gt;github.com/Graphify-Labs/graphify&lt;/a&gt;&lt;br /&gt;Avoids re-reading altogether: builds a local knowledge graph of the codebase, then the agent queries it instead of repeatedly grepping files.&lt;br /&gt;Watch for: it&apos;s not compression — savings materialize only over a session with repeated lookups in a large, stable codebase; non-code content (docs, PDFs) still requires API calls to extract. Best for: large, mature repos with frequent navigation; little benefit for small projects or one-off tasks.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tool&lt;/th&gt;&lt;th&gt;Mechanism&lt;/th&gt;&lt;th&gt;What it targets&lt;/th&gt;&lt;th&gt;Claimed savings&lt;/th&gt;&lt;th&gt;Evidence&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;rtk&lt;/td&gt;&lt;td&gt;Rewrites known-noisy CLI output&lt;/td&gt;&lt;td&gt;Bash tool output only&lt;/td&gt;&lt;td&gt;60–90% on covered ops&lt;/td&gt;&lt;td&gt;Vendor, narrow scope&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Caveman&lt;/td&gt;&lt;td&gt;Compression skill + memory layer + proxy&lt;/td&gt;&lt;td&gt;Prompts, outputs, cross-turn context&lt;/td&gt;&lt;td&gt;~65% tokens&lt;/td&gt;&lt;td&gt;Vendor, thin (stars/HN)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Ponytail&lt;/td&gt;&lt;td&gt;Decision ladder before writing code&lt;/td&gt;&lt;td&gt;Code generation, not context&lt;/td&gt;&lt;td&gt;~16% tokens; 47–77% cost; 3–6x speed&lt;/td&gt;&lt;td&gt;Vendor benchmark (5 tasks × 3 models)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Headroom&lt;/td&gt;&lt;td&gt;Type-aware compression + reversible cache&lt;/td&gt;&lt;td&gt;All tool/context input&lt;/td&gt;&lt;td&gt;87.6% input tokens (case study)&lt;/td&gt;&lt;td&gt;Vendor case study&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Graphify&lt;/td&gt;&lt;td&gt;Knowledge graph instead of re-reading files&lt;/td&gt;&lt;td&gt;Repeated file reads/greps&lt;/td&gt;&lt;td&gt;Not quantified&lt;/td&gt;&lt;td&gt;Vendor, mechanism differs from compression&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p&gt;&lt;strong&gt;I want more. Can we stack them on one another?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Each method targets different layers, so most combinations aren&apos;t mutually exclusive.&lt;/strong&gt; Ponytail acts at generation time (what code gets written), Graphify acts at retrieval time (avoiding re-reads), and rtk/Caveman/Headroom all act at the context-shaping layer, i.e., what enters the prompt. In principle, we can run all method at once without them fighting each other structurally.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Where it gets tricky is the overlap among the context-shaping tools.&lt;/strong&gt; rtk and Headroom both intercept and rewrite content before it reaches the model, just at different points - rtk hooks Bash tool calls while Headroom sits more generally across tool outputs, file reads, and API responses. Stacked, we&apos;re likely to get diminishing returns rather than additive savings: once rtk has already collapsed a &lt;code&gt;git status&lt;/code&gt; to one line, there&apos;s little left for Headroom to compress on that same output. Caveman&apos;s compression skill/proxy likely overlaps with both in the same way—three tools converging on the same noisy CLI output mostly means redundant passes, not three times the savings. Worse case: extra latency for near-zero extra token reduction.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Ponytail and Graphify are the cleaner additions.&lt;/strong&gt; Ponytail&apos;s effect is upstream of everything else (less code gets written and read in the first place), so it should compound with anything downstream rather than compete with it. Graphify&apos;s effect is about not re-fetching content at all - if the agent never re-reads a file, there&apos;s nothing left for rtk/Caveman/Headroom to compress on that read, which sidesteps the overlap problem entirely rather than creating one.&lt;/p&gt;



&lt;p&gt;The more promising stack is probably Ponytail (write less) + Graphify (re-read less) + &lt;em&gt;one&lt;/em&gt; of rtk/Caveman/Headroom (compress what&apos;s left) — rather than running all three context-shaping tools together, which likely adds overhead with little additional token savings.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p&gt;Reducing token cost is an issue every firm currently deals with, and it isn&apos;t one problem - it&apos;s at least three: noisy tool output, unnecessary code generation, and repeated re-reading of the same content. rtk, Caveman, and Headroom all attack the first at different points in the pipeline, with real but overlapping coverage. Ponytail attacks the second, upstream of everything else. Graphify sidesteps the third by building a queryable map instead of re-fetching files. None of these are competing solutions to the same problem so much as partial answers to different pieces of it - which means the right setup is probably a small combination, not a single winner, and probably depends more on where your own token spend actually goes (shell noise vs. generated code vs. repeat lookups) than on any vendor&apos;s headline number. All of the figures cited here are self-reported, and the stacking behavior is reasoned from mechanism rather than measured - so treat this as a map of what to test, not a verdict on what to use.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
</content:encoded><category>caveman</category><category>Graphify</category><category>headroom</category><category>llm</category><category>ponytail</category><category>tokens</category></item><item><title>Spec-Driven Development</title><link>https://tomron.net/2026/05/12/spec-driven-development/</link><guid isPermaLink="true">https://tomron.net/2026/05/12/spec-driven-development/</guid><description>I recently read Spec-Driven Development by Haim Michale, and it resonated with some day-to-day thoughts about SDD. The problem SDD aims to solve isn&apos;t new…</description><pubDate>Tue, 12 May 2026 06:59:05 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;span style=&quot;margin:0px;padding:0px&quot;&gt;I recently read &lt;strong&gt;&lt;a&gt;Spec-Driven Development&lt;/a&gt;&lt;/strong&gt; by Haim Michale, and it resonated with some day-to-day thoughts about SDD.&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The problem SDD aims to solve isn&apos;t new&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Missing, incomplete, and ambiguous requirements that evolve over time have always plagued software delivery, but it is now amplified: the pace is faster, LLMs have a strong tendency to fill gaps by guessing, and they carry zero tribal knowledge - no kitchen-table conversations, no &quot;oh, we tried that in 2022&quot; instincts. &lt;a&gt;EARS syntax&lt;/a&gt; (Easy Approach to Requirements Syntax) is an interesting framework for making requirements more machine-readable, but it still requires a human to steer it. The spec is only as good as the intent behind it.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Legacy code and brownfield projects are the elephant in the room&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Most SDD content assumes you&apos;re starting fresh. But the vast majority of engineering work happens in systems with years of accumulated decisions, undocumented assumptions, and implicit context baked into the codebase. Making that accessible to coding agents, let alone to SDD, is a real and largely unsolved problem. As far as I&apos;m aware, there are no clear best practices or guidelines here yet. This is an area we need to tackle head-on.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;SDD also accelerates a role blur we&apos;re already talking about&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;If specs are first-class artifacts that live in the repo, who writes them? Do PMs start pushing requirements documents directly into codebases, expanding into territory traditionally owned by engineers? Do developers take on deeper responsibility for refining and maintaining specifications? Both are plausible. Neither is cost-free. The boundary is getting blurry fast.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;And drift…&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Drift is what happens when specs and code silently diverge: a requirement changes, but the spec file doesn&apos;t, or a PR lands and the corresponding document isn&apos;t updated. Over time, specs stop describing the system, and that&apos;s arguably worse than having no specs at all, because they create false confidence. My suggestion: drift detection should be treated as a core part of repo gardening. Flag when code changes without a corresponding spec update, and vice versa. Make it visible, not something that accumulates quietly in the background. Expect spec debt terminology coming soon.&lt;/p&gt;



&lt;p&gt;While different SDD methodologies vary in the exact documents they produce, I found the attached screenshot a useful cheat sheet for knowing when to update which document.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2026/05/1000179508.jpg&quot; alt=&quot;&quot; class=&quot;wp-image-2159&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>ai</category><category>bookclub</category><category>software engineering</category><category>LearnInPublic</category><category>llm</category><category>sdd</category><category>reading</category></item><item><title>RAG Made Simple</title><link>https://tomron.net/2026/05/11/rag-made-simple/</link><guid isPermaLink="true">https://tomron.net/2026/05/11/rag-made-simple/</guid><description>📚 Just finished &quot; RAG Made Simple: The Complete Visual Guide to Retrieval-Augmented Generation &quot; by Nir Diamant, and it happened to be one of those rare cases…</description><pubDate>Mon, 11 May 2026 07:35:12 GMT</pubDate><content:encoded>
&lt;p&gt;📚 Just finished &quot;&lt;a&gt;RAG Made Simple: The Complete Visual Guide to Retrieval-Augmented Generation&lt;/a&gt;&quot; by Nir Diamant, and it happened to be one of those rare cases where the book actually matches how I learn. What worked especially well for me are the summaries - when to use each technique, when it&apos;s overkill, and what the trade-offs are. That comparative lens - grounding new methods against what came before is exactly what I need to internalize something. If you only have time for a sneak peek, read the appendix on debugging and choosing the right approach.&lt;/p&gt;



&lt;p&gt;Theory vs. practice - in real production systems, no single RAG method is enough. Different techniques address different failure modes, and a stable, reliable system almost always requires combining several of them. &lt;/p&gt;



&lt;p&gt;Three techniques worth calling out:&lt;/p&gt;



&lt;p&gt;🔮 HyDE (Hypothetical Document Embeddings) - my most surprising find. The idea is to generate a fake answer to the query, then use it to retrieve real documents. Elegant solution to the structural mismatch between how questions are phrased and how answers are written. &quot;Fake it &apos;til you make it&quot; as a retrieval strategy.&lt;/p&gt;



&lt;p&gt;🎯 Dartboard Retrieval - most useful for me personally. A problem I&apos;ve bumped into repeatedly - in RAG and in recommendation systems + where you need to balance precision with coverage across varying distance thresholds.&lt;/p&gt;



&lt;p&gt; 🖼️ Multi-modal RAG - most overlooked, and massively underrated, usually skipped when building an MVP. Especially for internal knowledge bases: being able to retrieve diagrams, tables, screenshots, and slides alongside text is genuinely transformative. In my experience, much of an organization&apos;s information is in decks, charts, images, etc.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;div class=&quot;wp-block-coblocks-gallery-offset&quot;&gt;&lt;ul class=&quot;coblocks-gallery has-no-alignment has-caption-style-dark has-small-images has-small-gutter&quot;&gt;&lt;li class=&quot;coblocks-gallery--item&quot;&gt;&lt;figure class=&quot;wp-block-coblocks-gallery-offset__figure&quot;&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2026/05/rag_made_simple.jpeg&quot; alt=&quot;&quot; class=&quot;wp-image-2155&quot; /&gt;&lt;figcaption class=&quot;coblocks-gallery--caption&quot;&gt;RAG made Simple cover&lt;/figcaption&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>bookclub</category><category>HyDe</category><category>llm</category><category>RAG</category><category>reading</category></item><item><title>Kill Skill</title><link>https://tomron.net/2026/03/18/kill-skill/</link><guid isPermaLink="true">https://tomron.net/2026/03/18/kill-skill/</guid><description>Three recent incidents that should make all of us pause: → A hallucinated npx command spread through a single LLM-generated skill file to 237 repositories.…</description><pubDate>Wed, 18 Mar 2026 10:20:53 GMT</pubDate><content:encoded>
&lt;p&gt;Three recent incidents that should make all of us pause:&lt;/p&gt;



&lt;p&gt;→ A hallucinated npx command spread through a single LLM-generated skill file to 237 repositories. Real agents executed it. A researcher claimed the package name before an attacker could.&lt;br /&gt;&lt;br /&gt;→ 230+ malicious skills uploaded to OpenClaw&apos;s ClawHub in days. The #1-ranked skill was silently exfiltrating data and injecting prompts to bypass safety guidelines. Thousands of downloads before anyone noticed.&lt;/p&gt;



&lt;p&gt;→ An audit of 2,890+ OpenClaw skills found 41.7% contain serious security vulnerabilities. &lt;/p&gt;



&lt;p&gt;This isn&apos;t a niche problem. If you use Claude Code, Cursor, Copilot, or any modern coding agent, you&apos;re likely installing multiple skills a week. They are recommended by colleagues, appear in blog posts, and are bundled into project templates. The install command is one line. The trust is implicit.&lt;/p&gt;



&lt;p&gt;Skills blur the line between configuration and code, but we treat them like documentation. A SKILL.md file can contain natural-language instructions, executable scripts, and package dependencies. There&apos;s no clear boundary where &quot;docs&quot; ends and &quot;code&quot; begins. No lockfile. No integrity checks. No verified publisher identity. The skills CLI has a package-lock.json for its own dependencies - just not for the skills you install.&lt;/p&gt;



&lt;p&gt;So what should we do today? At a minimum, read the skill files before installing. It takes 2 minutes and is the equivalent of reviewing a PR. Beyond that, copy and commit your skills folder to git - your repo becomes your lockfile. Treat any skill update like a dependency upgrade: review the diff before merging, also for testing and quality purposes.&lt;/p&gt;



&lt;p&gt;The tools are coming - Longer term, this ecosystem needs what npm took 6 years to build: lockfiles, signed packages, verified publishers, and scanners that flag malicious instructions before they reach your agent. Cisco developed an open-source skill file scanner.&lt;/p&gt;



&lt;p&gt;Links -&lt;/p&gt;



&lt;p&gt;Snyk Finds Prompt Injection in 36%, 1467 Malicious Payloads in a ToxicSkills Study of Agent Skills Supply Chain Compromise - &lt;a&gt;https://snyk.io/blog/toxicskills-malicious-ai-agent-skills-clawhub/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Update #40: Agent Skill Security Issues - &lt;a&gt;https://maxcorbridge.substack.com/p/update-40-agent-skill-security-issues&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Agent Skills Are Spreading Hallucinated npx Commands - &lt;a&gt;https://www.aikido.dev/blog/agent-skills-spreading-hallucinated-npx-commands&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Over 41% of Popular OpenClaw Skills Found to Contain Security Vulnerabilities - &lt;a&gt;https://www.esecurityplanet.com/threats/over-41-of-popular-openclaw-skills-found-to-contain-se&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Skill Scanner - &lt;a&gt;https://github.com/cisco-ai-defense/skill-scanner&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>coding agents</category><category>security</category><category>skills</category></item><item><title>Make PRs Logical Again</title><link>https://tomron.net/2026/02/24/make-prs-logical-again/</link><guid isPermaLink="true">https://tomron.net/2026/02/24/make-prs-logical-again/</guid><description>The day-to-day work of software engineers is shifting - less time is spent on implementation, and more on specifying, planning, and reviewing. As AI coding…</description><pubDate>Tue, 24 Feb 2026 08:52:45 GMT</pubDate><content:encoded>
&lt;p&gt;The day-to-day work of software engineers is shifting -  less time is spent on implementation, and more on specifying, planning, and reviewing. As AI coding tools improve, the bottleneck moves upstream and downstream: writing clear specs, structuring changes well, and conducting thoughtful reviews become the highest-leverage skills.&lt;/p&gt;



&lt;p&gt;One surprisingly weak point in that workflow is GitHub PR file order. Files are shown in alphabetical order that rarely reflects the logical flow of the change. Good reviews are narrative: start with the contract, then the core logic, then the edges and tests. When the order is wrong, reviewers waste cognitive energy reconstructing the story instead of evaluating the change.&lt;/p&gt;



&lt;p&gt;That realization pushed me to build a small Chrome extension that lets you reorder files in a PR so the review reads in the &lt;em&gt;right&lt;/em&gt; order. Check it out &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2026/02/screenshot-2026-02-16-at-22.01.16-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-2144&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;It was also a personal reminder of the joy of doing something for the first time - I never built a Chrome extension before. My first attempt was messy and unsuccessful, so I wiped everything and restarted using Spec-Driven Development (SDD) with &lt;a&gt;OpenSpec&lt;/a&gt;. The second iteration was dramatically smoother, more structured, and consumed fewer tokens. In a world where implementation is getting cheaper, clarity in specs, understanding of trade-offs, and the review experience are quickly becoming the real craft of engineering.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>chrome extension</category><category>github</category><category>openspec</category><category>pull request</category><category>spec driven development</category></item><item><title>7 Lessons I Learned from Rugby Sevens About Engineering Leadership</title><link>https://tomron.net/2026/02/16/7-lessons-i-learned-from-rugby-sevens-about-engineering-leadership/</link><guid isPermaLink="true">https://tomron.net/2026/02/16/7-lessons-i-learned-from-rugby-sevens-about-engineering-leadership/</guid><description>Fun fact about me - I played Rugby Sevens for years, including on a national team. It taught me more about engineering leadership than I expected. Small teams,…</description><pubDate>Mon, 16 Feb 2026 09:41:00 GMT</pubDate><content:encoded>
&lt;p&gt;Fun fact about me - I played Rugby Sevens for years, including on a national team. It taught me more about engineering leadership than I expected. Small teams, huge space, high speed - Sevens and modern engineering run on the same dynamics.&lt;/p&gt;



&lt;p&gt;Here are 7 lessons Sevens taught me about engineering leadership.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;1️⃣ It’s Not About Weight - It’s About Teamwork&lt;/h4&gt;



&lt;p&gt;The first lesson I learned came from scrumming with a weight disadvantage but a huge coordination advantage. In Rugby (in 15s even more than in 7s), you don’t win scrums because your players are heavier. A team wins because: you bind together, you push at the same moment, you trust the rhythm.  In lineouts, timing matters more than height, and coordination matters more than individual strength.&lt;/p&gt;



&lt;p&gt;In engineering, this shows up everywhere:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A brilliant engineer misaligned with the team slows progress.&lt;/li&gt;



&lt;li&gt;A “lighter” team moving in sync outperforms a group of heavy hitters pulling in different directions.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Velocity is not the sum of individual forces. It’s a synchronized force.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Coordination multiplies talent.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://youtu.be/9VlRCQCjQDU?si=fUxT2T-oINQpoEcE
&lt;/div&gt;&lt;/figure&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;2️⃣ Communication should be Constant and Loud&lt;/h4&gt;



&lt;p&gt;In Rugby Sevens, silence is dangerous. Players shout constantly:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;“Inside!”&lt;/li&gt;



&lt;li&gt;“Switch!”&lt;/li&gt;



&lt;li&gt;“Up!”&lt;/li&gt;



&lt;li&gt;“Blind!”&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;It’s not noise - it’s alignment. There’s too much space and speed to assume others know what you’re thinking.&lt;/p&gt;



&lt;p&gt;In an office, you get accidental alignment:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Body language&lt;/li&gt;



&lt;li&gt;Whiteboard moments&lt;/li&gt;



&lt;li&gt;Corridor clarifications&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In remote work, silence becomes ambiguity. If communication isn’t explicit and frequent, gaps appear.&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;margin:0px;padding:0px&quot;&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Constant communication creates alignment.&lt;/span&gt; &lt;span style=&quot;margin:0px;padding:0px&quot;&gt;Alignment&lt;/span&gt; brings results.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;3️⃣ You Can Only Pass Backwards&lt;/h4&gt;



&lt;p&gt;In rugby, you’re only allowed to pass the ball backwards.&lt;/p&gt;



&lt;p&gt;If you want to move forward, you must either run forward yourself  or align with teammates who are already in motion&lt;/p&gt;



&lt;p&gt;You can’t throw the ball ahead and hope someone figures it out. The constraint forces structure.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;To gain ground, teams spread wide.&lt;/li&gt;



&lt;li&gt;They create overlap.&lt;/li&gt;



&lt;li&gt;They run support lines before they’re needed.&lt;/li&gt;



&lt;li&gt;They time short, precise passes.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;You go forward by passing backward - and that only works with discipline. In engineering, this principle shows up everywhere. You can’t “pass forward” sloppily:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Product can’t throw half-defined specs over the wall&lt;/li&gt;



&lt;li&gt;Engineering can’t push messy code to QA&lt;/li&gt;



&lt;li&gt;Leadership can’t announce strategy without alignment&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;When work is tossed ahead without positioning and support, the play breaks. Real velocity doesn’t come from heroic sprints. It comes from synchronized movement.&lt;/p&gt;



&lt;p&gt;Too many handoffs? You lose momentum.&lt;br /&gt;Too few? You get isolated and tackled.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Sustainable forward progress requires structured alignment. Coordination creates speed.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;4️⃣ Reset Between Games&lt;/h4&gt;



&lt;p&gt;In Sevens tournaments, you play multiple games on the same day.&lt;/p&gt;



&lt;p&gt;Win big? Reset.&lt;br /&gt;Lose badly? Reset.&lt;/p&gt;



&lt;p&gt;The next kickoff has no memory.&lt;/p&gt;



&lt;p&gt;Engineering teams often carry emotional baggage:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;A big launch → complacency&lt;/li&gt;



&lt;li&gt;An outage → overreaction&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Strong teams don’t ignore outcomes - they process them quickly.&lt;br /&gt;They celebrate briefly, learn fast, and show up focused for the next “game.”&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Don’t let yesterday’s result dictate today’s execution.&lt;/p&gt;





&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;5️⃣ Scoring Under the Posts vs Securing the Try&lt;/h4&gt;



&lt;p&gt;In rugby, when a player breaks through, they often try to run closer to the center before grounding the ball.&lt;/p&gt;



&lt;p&gt;Why? Because it makes the conversion kick easier.&lt;/p&gt;



&lt;p&gt;But that extra effort increases the risk of being tackled and losing the try entirely.&lt;/p&gt;



&lt;p&gt;In engineering:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Do we ship now?&lt;/li&gt;



&lt;li&gt;Or optimize a bit more?&lt;/li&gt;



&lt;li&gt;Refactor first?&lt;/li&gt;



&lt;li&gt;Polish the UI further?&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Sometimes we optimize the conversion and lose the try.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Secure value first. Optimize second.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;6️⃣ You Don’t Always Need More Resources - Just a Change of Angle&lt;/h4&gt;



&lt;p&gt;In Sevens, attacking the wide-open side is obvious. Great teams exploit the blind side instead.&lt;/p&gt;



&lt;p&gt;You don’t need more force.&lt;br /&gt;You need better perspective.&lt;/p&gt;



&lt;p&gt;In engineering:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Reframing a product problem&lt;/li&gt;



&lt;li&gt;Reorganizing teams instead of hiring more&lt;/li&gt;



&lt;li&gt;Solving a process issue instead of pushing harder&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Sometimes the breakthrough isn’t scaling effort - it’s shifting angle.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson:&lt;/strong&gt; Strategy beats brute force.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;7️⃣ Commit Fast - Adjust Faster&lt;/h4&gt;



&lt;p&gt;In Rugby Sevens, hesitation kills. &lt;br /&gt;&lt;br /&gt;Pause before a tackle, you miss. &lt;br /&gt;Delay the pass, the overlap&apos;s gone. &lt;br /&gt;Half-commit to a line break, and you get isolated.&lt;br /&gt;&lt;br /&gt; The game rewards decisiveness.&lt;/p&gt;



&lt;p&gt;Engineering leadership is the same. Over-analysis drains momentum. Once you pick a direction, the team needs full commitment - not tentative buy-in where everyone&apos;s still hedging. &lt;br /&gt;&lt;br /&gt;But here&apos;s the nuance: when a defender overcommits, great players side-step. Decisiveness doesn&apos;t mean rigidity. You commit fully, and when new information shows up or the situation shifts, you adjust fast - without ego, without drama.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Lesson&lt;/strong&gt;: Commit hard. Adjust harder.&lt;/p&gt;


</content:encoded><category>leadership</category><category>LearnInPublic</category><category>rugby</category><category>rugby sevens</category></item><item><title>5 interesting things (12/02/2026)</title><link>https://tomron.net/2026/02/12/5-interesting-things-12-02-2026/</link><guid isPermaLink="true">https://tomron.net/2026/02/12/5-interesting-things-12-02-2026/</guid><description>The Quarterback Paradox - while I&apos;m not sure I agree that it is a paradox - i.e., recruiting a critical position to an organization is hard even if you have a…</description><pubDate>Thu, 12 Feb 2026 13:29:37 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;u&gt;&lt;strong&gt;The Quarterback Paradox&lt;/strong&gt;&lt;/u&gt; - while I&apos;m not sure I agree that it is a paradox - i.e., recruiting a critical position to an organization is hard even if you have a lot of data, I love and strongly agree with the suffix of the post - &quot;As in the NFL, in organizations the hardest part is often not finding talent, but creating the conditions in which real potential does not break before it has a chance to become reality.&quot;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://noamwakrat.medium.com/the-quarterback-paradox-e93e4325bac1&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;u&gt;&lt;strong&gt;What LEGO Can Teach Us about Autonomy and Engagement&lt;/strong&gt;&lt;/u&gt; - Who doesn&apos;t like LEGO? We all played with it as children, and some of us still build today. In this post, Pawel Brodzinski describes a neat experiment he runs in training sessions - teams first build a LEGO set under a manager&apos;s direction, then self-organize for a second build, and consistently report higher engagement when given more autonomy. While it shows a clear effect, the experiment has some drawbacks - most notably an order effect: the self-organized build always comes second, so the engagement boost could partly stem from participants being warmed up and more comfortable rather than from autonomy alone. Always nice to read about LEGO as an adult.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://brodzinski.com/2026/01/lego-autonomy-engagement.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Skyll&lt;/u&gt; &lt;/strong&gt;- Skills are markdown instruction files that teach AI coding agents how to perform specific tasks. Today, skills must be manually installed before a session, meaning developers need to know upfront which skills they&apos;ll need. &lt;strong&gt;Skyll&lt;/strong&gt; is an open-source search engine and API that lets any AI agent discover and retrieve skills on demand at runtime, ranked by relevance, without pre-installation. You can think of it as a package manager for agent capabilities, enabling agents to be truly self-extending and autonomous.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/assafelovic/skyll&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Skyhook.io radar&lt;/u&gt;&lt;/strong&gt; - Existing K8s dashboards tend to be either heavyweight, cloud-dependent, or require cluster-side components. Radar&apos;s zero-install, single-binary approach with real-time topology and traffic visualization answers the need of developers and platform teams who want quick, frictionless cluster observability that can even run on their laptop, especially useful for DevEx-focused teams looking to reduce the friction of Kubernetes debugging and operations,&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/skyhook-io/radar&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Babysitter&lt;/u&gt;&lt;/strong&gt; - If you worked with coding agents, you probably experienced this pain: the lack of a structured process control and non-deterministic workflows. Babysitter lets you define iterative workflows (research → spec → TDD loop → quality gate → deploy) that are deterministic, resumable across sessions, and auditable, which is critical for moving AI-assisted development from ad-hoc experimentation toward reliable, production-grade engineering workflows and complex features.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/a5c-ai/babysitter&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>babysitter</category><category>claude code</category><category>github</category><category>k8s</category><category>llm</category><category>radar</category><category>skills</category><category>coding agents</category></item><item><title>Making Money in Uncertain Times</title><link>https://tomron.net/2026/02/10/making-money-in-uncertain-times/</link><guid isPermaLink="true">https://tomron.net/2026/02/10/making-money-in-uncertain-times/</guid><description>With the growing adoption of AI and recent moves like Anthropic’s Cowork plugin marketplace , there’s a popular narrative that traditional SaaS is dead . The…</description><pubDate>Tue, 10 Feb 2026 08:08:32 GMT</pubDate><content:encoded>
&lt;p&gt;With the growing adoption of AI and recent moves like &lt;strong&gt;&lt;a&gt;Anthropic’s Cowork plugin marketplace&lt;/a&gt;&lt;/strong&gt;, there’s a popular narrative that &lt;strong&gt;traditional SaaS is dead&lt;/strong&gt;. The implication is that the combination of AI agents + marketplaces will commoditize software entirely, and the old subscription paradigms won’t survive.&lt;/p&gt;



&lt;p&gt;I tend to believe that’s an overstatement. SaaS isn’t dying - it’s &lt;strong&gt;evolving&lt;/strong&gt;. What &lt;em&gt;is&lt;/em&gt; under threat is SaaS as we’ve known it: long-term seat licenses, one-size-fits-all tiers, and feature-driven pricing. AI makes core functionality easier to replicate and access, pushing raw features toward commodity status. The value and pricing increasingly lie in &lt;strong&gt;outcomes, workflows, integrations, and customer trust&lt;/strong&gt;. More than in the past, pricing is a strategic tool. See a similar conversion in David Ondrej&apos;s &lt;a&gt;post&lt;/a&gt; on Twitter (link in the first comment)&lt;/p&gt;



&lt;p&gt;That’s why understanding the &lt;em&gt;possible pricing models&lt;/em&gt; and their tradeoffs matters more than ever. I’ve been listening to Ulrik Lehrskov-Schmidt’s webinar series on &lt;a&gt;&lt;strong&gt;Agentic AI pricing &lt;/strong&gt;-&lt;strong&gt;“Making Money in Uncertain Times.”&lt;/strong&gt;&lt;/a&gt; In a world where both &lt;strong&gt;cost structures&lt;/strong&gt; (compute, labor, infrastructure) and &lt;strong&gt;capabilities&lt;/strong&gt; (model performance, automation) are shifting rapidly, we can’t anchor pricing to static assumptions. Instead, pricing needs to reflect &lt;em&gt;real value delivery&lt;/em&gt;, signal predictable economics to customers, and align engineering decisions with business outcomes.&lt;/p&gt;



&lt;p&gt;This isn’t just a GTM or sales conversation - it’s also a core product and engineering conversation. How we design systems, how we think about metrics and outcomes, and how we package those outcomes for customers all influence pricing levers.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2026/02/screenshot-2026-02-10-at-8.03.34.png&quot; alt=&quot;&quot; class=&quot;wp-image-2099&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
</content:encoded><category>aieconomy</category><category>LearnInPublic</category><category>SaaS</category></item><item><title>The State of Coding Agents Using Local LLMs — February 2026</title><link>https://tomron.net/2026/02/01/the-state-of-coding-agents-using-local-llms-february-2026/</link><guid isPermaLink="true">https://tomron.net/2026/02/01/the-state-of-coding-agents-using-local-llms-february-2026/</guid><description>Last update: February 1st, 2026 Coding agents are no longer a novelty - they’re everywhere. Over the past year, we’ve seen massive adoption across startups and…</description><pubDate>Sun, 01 Feb 2026 14:41:46 GMT</pubDate><content:encoded>
&lt;p&gt;Last update: February 1st, 2026&lt;/p&gt;



&lt;p&gt;Coding agents are no longer a novelty - they’re everywhere. Over the past year, we’ve seen massive adoption across startups and enterprises, alongside real improvements in autonomy, reasoning depth, and multi-step code execution. Tools like Claude Code, Codex, Copilot, and Kiro are shipping updates at a relentless pace, and teams are increasingly comfortable letting agents refactor modules, write tests, and manage pull requests.&lt;/p&gt;



&lt;p&gt;But there’s a catch: these tools are token eaters. Autonomous agents don’t just answer a prompt - they plan, reflect, re-read the codebase, call tools, retry, and iterate. At scale, that translates into serious API bills.&lt;/p&gt;



&lt;p&gt;That’s why we’re seeing growing interest in a different deployment pattern: running coding agents against local or self-hosted models. Ollama recently announced  &lt;code&gt;ollama launch&lt;/code&gt; a command that sets up and runs coding tools such as Claude Code, OpenCode, and Codex with local or cloud models. vLLM, LiteLLM, and OpenRouter also provide similar integrations. That signals that this is no longer fringe experimentation. For many teams, local LLMs are emerging as a viable path to reduce cost, improve stability, and gain tighter control over privacy.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Deployment models for coding agents&lt;/h3&gt;



&lt;p&gt;When teams talk about “running models locally,” they often mean different things. In practice, there are three distinct deployment patterns - and they differ meaningfully in cost structure, performance profile, and governance posture.&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Local (Developer Machine)&lt;/strong&gt; - the model runs directly on a developer’s laptop or workstation (e.g., via Ollama).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Hosted (Org-Managed Infrastructure / VPC)&lt;/strong&gt; - the organization runs the model on its own infrastructure, either on-premises GPU servers or in a private cloud/VPC (e.g., via vLLM, Kubernetes, or managed GPU clusters).&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Managed LLM API (e.g., Anthropic, OpenAI, etc.)&lt;/strong&gt; - the model runs fully managed by a provider; the organization interacts via API.&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Dimension&lt;/th&gt;&lt;th&gt;Local (Dev Machine)&lt;/th&gt;&lt;th&gt;Hosted (Org VPC / On-Prem)&lt;/th&gt;&lt;th&gt;Managed LLM API&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cost Structure&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;No per-token fees. Hardware cost borne by the developer. Cheap at a small scale; uneven across the team.&lt;/td&gt;&lt;td&gt;No per-token fees. Significant infra + ops cost. Economical at scale if usage is high.&lt;/td&gt;&lt;td&gt;Usage-based (per token / per request). Predictable but can become very expensive with agent loops.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cost at Scale (Agents)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Hard to standardize; limited by laptop GPU/CPU.&lt;/td&gt;&lt;td&gt;Strong cost efficiency at high volume&lt;/td&gt;&lt;td&gt;Token costs compound quickly. Expensive in large org rollouts.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Performance (Latency)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Very low latency locally, but limited by hardware. Large models may be slow or impossible.&lt;/td&gt;&lt;td&gt;Good latency if well-provisioned GPU cluster. Can optimize with batching.&lt;/td&gt;&lt;td&gt;Typically excellent latency and throughput; globally distributed infra.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Model Size / Capability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Limited to smaller models (7B–34B typically; maybe 70B with strong GPUs).&lt;/td&gt;&lt;td&gt;Can run large open models (70B+), depending on infra budget.&lt;/td&gt;&lt;td&gt;Access to frontier SOTA models (often strongest reasoning &amp;amp; coding quality).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Quality (Coding Tasks)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Improving. “Good enough” for many workflows, especially with fine-tuned coding models.&lt;/td&gt;&lt;td&gt;Strong - can choose best open models and fine-tune internally.&lt;/td&gt;&lt;td&gt;Often highest raw reasoning quality and reliability on complex multi-file tasks.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Security / Privacy&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Code never leaves device. Strong for IP protection. Risk: inconsistent security posture across developers.&lt;/td&gt;&lt;td&gt;Code stays inside org boundary. Strong centralized control.&lt;/td&gt;&lt;td&gt;Code leaves org boundary (even with enterprise contracts). Vendor trust required.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Compliance (GDPR, HIPAA, etc.)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Hard to audit across distributed machines.&lt;/td&gt;&lt;td&gt;Strong compliance posture if infra is controlled and logged centrally.&lt;/td&gt;&lt;td&gt;Enterprise compliance available via contract, but still external processing.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Governance &amp;amp; Observability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Weak - hard to monitor usage or enforce policies.&lt;/td&gt;&lt;td&gt;Strong - full logging, auditing, access controls, IAM integration.&lt;/td&gt;&lt;td&gt;Strong observability dashboards from vendor, but limited transparency into internals.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Stability / Availability&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Works offline. Dependent on developer hardware reliability.&lt;/td&gt;&lt;td&gt;Controlled SLAs internally. Requires DevOps maturity.&lt;/td&gt;&lt;td&gt;Vendor-managed SLAs. Risk of outages outside your control.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Standardization Across Team&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Low: “works on my machine” problem possible.&lt;/td&gt;&lt;td&gt;High - central model versions and infra.&lt;/td&gt;&lt;td&gt;Very high - single API endpoint for entire org.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Tools overview&lt;/h3&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;Coding Agents and Model support&lt;/h4&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Coding Agent&lt;/th&gt;&lt;th&gt;Local LLM Support&lt;/th&gt;&lt;th&gt;Hosted Support&lt;/th&gt;&lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✅ via Ollama/vLLM integration&lt;/td&gt;&lt;td&gt;Native Anthropic&lt;/td&gt;&lt;td&gt;&lt;a&gt;Run Claude Code with Local LLMs Using Ollama&lt;/a&gt;&lt;br /&gt;&lt;a&gt;LLM gateway configuration&lt;/a&gt;&lt;br /&gt;&lt;a&gt;LiteLLM Claude Code Quickstart&lt;/a&gt;&lt;br /&gt;&lt;a&gt;OpenRouter integration with Claude Code&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;GitHub Copilot (Agent mode)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✅ via Ollama/vLLM integration&lt;/td&gt;&lt;td&gt;Cloud models (GPT-4o, Claude 3.5, Gemini, etc)&lt;/td&gt;&lt;td&gt;&lt;a&gt;Ollama in VSCode&lt;/a&gt;&lt;br /&gt;&lt;a&gt;GitHub copilot with Open Router&lt;br /&gt;&lt;/a&gt;&lt;a&gt;GitHub copilot LLM Gateway&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Codex (OpenAI)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✅ via Ollama integration&lt;/td&gt;&lt;td&gt;Cloud via OpenAI&lt;/td&gt;&lt;td&gt;&lt;a&gt;Ollama Codex integration&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cursor AI&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;✅ via Ollama integration&lt;/td&gt;&lt;td&gt;Cloud multi-model&lt;/td&gt;&lt;td&gt;&lt;a&gt;Use Local LLM with Cursor and Ollama&lt;/a&gt;&lt;br /&gt;&lt;a&gt;OpenRouter with Cursor&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;AWS Kiro&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;❌ local&lt;/td&gt;&lt;td&gt;AWS hosted&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;Local LLM Frameworks&lt;/h4&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Framework&lt;/th&gt;&lt;th&gt;Primary Role&lt;/th&gt;&lt;th&gt;Notes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Ollama&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Local LLM hosting &amp;amp; runtime&lt;/td&gt;&lt;td&gt;Lightweight CLI + API that serves models locally; integrates with multiple agents (Claude Code, Codex, Droid, OpenCode) and supports on-prem inferencing with moderate hardware. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;vLLM (Serving)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;High-performance LLM server&lt;/td&gt;&lt;td&gt;Optimized for scalable reasoning and long context LLM inference; integrates with agents (e.g., Claude Code) via Anthropic-Messages API compatibility. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Unified LLM API broker&lt;/td&gt;&lt;td&gt;Central API layer for 400+ LLMs including local and cloud endpoints; can route agents to preferred backends with cost/redundancy optimization.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;LiteLLM&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Unified LLM API&lt;/td&gt;&lt;td&gt;Enables developers to use many LLM APIs, such as OpenAI, Anthropic, Gemini, and Ollama, in a single, OpenAI-compatible format.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;Notable models&lt;/h4&gt;



&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Model&lt;/th&gt;&lt;th&gt;Primary Use&lt;/th&gt;&lt;th&gt;Latest Release&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Qwen3-Coder&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Alibaba&apos;s 480B-parameter MoE coding model. SOTA results among open models on agentic coding tasks&lt;/td&gt;&lt;td&gt;&lt;a&gt;July 2025&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;DeepSeek Coder&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;DeepSeek&apos;s open-source code model series (1B–33B params), achieving top performance among open-source code models across major benchmarks.&lt;/td&gt;&lt;td&gt;&lt;a&gt;June 2024&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Code Llama (7B/34B)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Meta&apos;s open-source code-specialized LLMs, fine-tuned from Llama 2 in multiple sizes&lt;/td&gt;&lt;td&gt;&lt;a&gt;January 2024&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;gpt-oss&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;OpenAI&apos;s open-weight LLMs, available in 20B and 120B sizes under Apache 2.0. 120B variant matching o4-mini on reasoning benchmarks&lt;/td&gt;&lt;td&gt;&lt;a&gt;August 2025&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;kimi-k2.5&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Moonshot AI&apos;s open-source, native multimodal agentic model&lt;/td&gt;&lt;td&gt;&lt;a&gt;January 2026&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;📈 &lt;em&gt;Predictions Through 2026&lt;/em&gt;&lt;/h3&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;1. Hybrid Routing Will Become the Standard&lt;/h4&gt;



&lt;p&gt;Cost is the most immediate driver. Autonomous coding agents are token-intensive by design. At enterprise scale, those token costs compound quickly.&lt;/p&gt;



&lt;p&gt;Local inference eliminates per-token fees, which makes it attractive for high-volume, repetitive tasks. But frontier proprietary models still maintain an edge on complex, cross-repository reasoning and edge cases. The likely outcome is not full replacement, but &lt;strong&gt;intelligent routing&lt;/strong&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Simpler or repetitive tasks → local or hosted open models&lt;/li&gt;



&lt;li&gt;High-stakes, complex reasoning → managed frontier APIs&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Tools like OpenRouter and LiteLLM are already enabling this pattern, and by the end of 2026, hybrid routing is likely to be the default deployment strategy for medium- to large-sized engineering organizations.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;2. Standardization Will Lower the Switching Cost&lt;/h4&gt;



&lt;p&gt;Hybrid only works if switching models is frictionless.&lt;/p&gt;



&lt;p&gt;As coding agents like Claude Code, Codex, Copilot, and others converge around shared inference interfaces (Ollama, vLLM, OpenAI-compatible endpoints), swapping models in and out becomes operationally simple. This reduces lock-in and makes experimentation safer. &lt;br /&gt;As interoperability improves, the barrier to trying local models drops dramatically - and adoption follows.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;3. Open-Source Coding Models Will Close the Gap&lt;/h4&gt;



&lt;p&gt;Tool-use fine-tuning is maturing. Code reasoning benchmarks are becoming more rigorous.&lt;/p&gt;



&lt;p&gt;By late 2026, open-weight coding models are likely to be “production-grade” for a substantial share of workflows - especially where cost control and data sovereignty matter more than absolute frontier performance.&lt;/p&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;4. Resilience Will Matter as Much as Cost&lt;/h4&gt;



&lt;p&gt;There’s also a structural pressure building: agent-driven workloads amplify the impact of API outages. When a coding agent is embedded into CI pipelines or developer workflows, downtime is no longer an inconvenience - it’s a blocker.&lt;/p&gt;



&lt;p&gt;As usage scales, reliance on a single managed API becomes a risk vector. This will accelerate investment in redundancy:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Secondary API providers&lt;/li&gt;



&lt;li&gt;Local fallback models&lt;/li&gt;



&lt;li&gt;On-prem capacity for critical workflows&lt;/li&gt;
&lt;/ul&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;Summary&lt;/h4&gt;



&lt;p&gt;In 2026, hybrid won’t just be about cost optimization - it will be about &lt;strong&gt;operational resilience&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;The future is not “local vs cloud.” It’s a composable, policy-driven model infrastructure.&lt;/p&gt;



&lt;p&gt;Organizations that treat model routing, hosting strategy, and redundancy as part of their core engineering architecture - rather than as an afterthought - will have structural advantages in cost control, privacy, and reliability.&lt;/p&gt;



&lt;p&gt;2026 won’t be the year enterprises abandon managed APIs. It will be the year they stop depending on them exclusively.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>ai</category><category>aieconomy</category><category>anthropic</category><category>claude code</category><category>codex</category><category>cursor</category><category>kiro</category><category>LearnInPublic</category><category>litellm</category><category>llm</category><category>ollama</category><category>openai</category><category>vllm</category><category>coding agents</category></item><item><title>Learn In Public - week 04</title><link>https://tomron.net/2026/01/27/learn-in-public-week-04/</link><guid isPermaLink="true">https://tomron.net/2026/01/27/learn-in-public-week-04/</guid><description>A sense of humor is one of the most underestimated leadership skills Following the recommendation in “The Great CEO Within” I listened to “ The One Minute…</description><pubDate>Tue, 27 Jan 2026 21:06:38 GMT</pubDate><content:encoded>
&lt;p&gt;A sense of humor is one of the most underestimated leadership skills&lt;/p&gt;



&lt;p&gt;Following the recommendation in “The Great CEO Within” I listened to “&lt;a&gt;The One Minute Manager&lt;/a&gt;”. In one of the chapters, they mention the usage of Humor as a leadership tool. It is not about becoming a comedian but rather showing up as humans. Humor is a powerful and often overlooked tool.&lt;br /&gt;Why it matters:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Humor helps build trust and rapport - people are more likely to engage and collaborate when they feel comfortable and connected.&lt;/li&gt;



&lt;li&gt;It can reduce stress and tension, boosting well-being and performance.&lt;/li&gt;



&lt;li&gt;Humor makes leaders more approachable and memorable, signaling confidence and emotional intelligence.&lt;/li&gt;



&lt;li&gt;Shared laughter fosters psychological safety, helping teams voice ideas and take risks.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Of course, balance is key - humor should complement clarity and respect, not replace them. Too many jokes or poorly timed humor can actually backfire, so think of it as a strategic leadership tool, not a default setting. It’s about knowing when a light moment can lower defenses, reset the room, or simply remind everyone that work is done by humans, not robots.&lt;/p&gt;



&lt;p&gt;Related resources - &lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Laughter in Leadership &amp;amp; Workplace Performance - &lt;a&gt;https://www.forbes.com/sites/cherylrobinson/2025/03/09/laughter-in-leadership-how-humor-enhances-workplace-performance&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;How Humor Keeps Employees Engaged - &lt;a&gt;https://www.shrm.org/mena/topics-tools/news/employee-relations/how-humor-can-keep-employees-engaged&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Humor Boosts Credibility at Work - &lt;a&gt;https://www.atlassian.com/blog/teamwork/humor-at-work&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>bookclub</category><category>leadership</category><category>LearnInPublic</category><category>reading</category></item><item><title>Tokens as Currency</title><link>https://tomron.net/2026/01/26/tokens-as-currency/</link><guid isPermaLink="true">https://tomron.net/2026/01/26/tokens-as-currency/</guid><description>Half-baked thought: Tokens will become currency. Right now, the direction is obvious - more money buys more tokens. But what if, in the near future, tokens…</description><pubDate>Mon, 26 Jan 2026 08:32:08 GMT</pubDate><content:encoded>
&lt;p&gt;Half-baked thought: Tokens will become currency.&lt;/p&gt;



&lt;p&gt;Right now, the direction is obvious - more money buys more tokens.&lt;/p&gt;



&lt;p&gt;But what if, in the near future, tokens themselves become a medium of exchange?&lt;/p&gt;



&lt;p&gt;Consider this:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Microsoft is allocating tokens to support the maintenance of open-source projects.&lt;/li&gt;



&lt;li&gt;Companies granting tokens in exchange for using their tools or infrastructure.&lt;/li&gt;



&lt;li&gt;Open-source maintainers receiving donations in tokens instead of (or alongside) cash.&lt;/li&gt;



&lt;li&gt;Platforms enabling distributed token usage across multiple accounts, almost like a modern SETI@home&lt;/li&gt;



&lt;li&gt;Gift cards for Anthropic.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;In other words, tokens are not just consumption units, but are tradable, transferable assets within an ecosystem.&lt;/p&gt;



&lt;p&gt;Of course, this is far from trivial. Privacy, security, incentive alignment, and implementation complexity are all major hurdles.&lt;/p&gt;



&lt;p&gt;But if I had to place one slightly outrageous bet for 2026, it would be movement in this direction.&lt;/p&gt;



&lt;p&gt;Are we ready to start thinking of tokens as something you can “round up and donate”?&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>llm</category><category>tokens</category></item><item><title>Learn in Public – week 03</title><link>https://tomron.net/2026/01/20/learn-in-public-week-03/</link><guid isPermaLink="true">https://tomron.net/2026/01/20/learn-in-public-week-03/</guid><description>I finished listening to “ The Great CEO Within ” by Matt Mochary and Alex MacCaw. A few thoughts: 1️⃣ A tactical cheat sheet I view the book as a tactical…</description><pubDate>Tue, 20 Jan 2026 15:27:36 GMT</pubDate><content:encoded>
&lt;p&gt;I finished listening to “&lt;a&gt;The Great CEO Within&lt;/a&gt;” by Matt Mochary and Alex MacCaw. A few thoughts:&lt;br /&gt;&lt;br /&gt;1️⃣ A tactical cheat sheet&lt;br /&gt;I view the book as a tactical cheat sheet: short, practical chapters you can skim for ideas. It’s great for quick exposure, and most chapters include references for deeper dives. For me, this book has excellent value for time.&lt;br /&gt;&lt;br /&gt;2️⃣ Revisit in the LLM era&lt;br /&gt;Two well-known ideas in the book are Getting Things Done and Inbox Zero.&lt;br /&gt;Inbox-zero and productivity advice hit differently today. With LLMs helping triage emails, summarize threads, and highlight what actually matters, the principles remain the same - but the execution is far more automated.&lt;br /&gt;&lt;br /&gt;3️⃣ Optimizing meetings&lt;br /&gt;TL;DR: come prepared, use written communication in advance, and don’t deviate from the planned agenda.&lt;br /&gt;The authors suggest holding all meetings, including 1:1s, on the same day. From my experience, for 1:1s that go beyond status updates and require real attention (e.g., feedback), stacking too many of them on the same day can be overwhelming for most people.&lt;br /&gt;&lt;br /&gt;4️⃣ “The first thing to optimize is yourself”&lt;br /&gt;One of my favorite quotes from the book. It emphasizes founders’ and leaders’ health, mental and physical, something that has historically been overlooked. A good reminder that sustainable leadership starts with managing your own energy.&lt;br /&gt;&lt;br /&gt;The book also mentions principles of conscious leadership: listening to feedback and acting on it, and not being afraid to make (and admit) mistakes.&lt;br /&gt;This week, I also read a blog titled “&lt;a&gt;Reflection is a Crucial Leadership Skill&lt;/a&gt;”, which made these ideas more actionable and down-to-earth.&lt;br /&gt;&lt;br /&gt;What should I read next?&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>bookclub</category><category>LearnInPublic</category><category>reading</category></item><item><title>Learn in Public - week 02</title><link>https://tomron.net/2026/01/14/learn-in-public-week-02/</link><guid isPermaLink="true">https://tomron.net/2026/01/14/learn-in-public-week-02/</guid><description>I started this week with deeplearning.ai’s course on semantic caching , created in collaboration with Redis. That sent me down a rabbit hole, exploring…</description><pubDate>Wed, 14 Jan 2026 10:34:54 GMT</pubDate><content:encoded>
&lt;p&gt;I started this week with &lt;a&gt;deeplearning.ai’s course on semantic caching&lt;/a&gt;, created in collaboration with Redis. That sent me down a rabbit hole, exploring different LLM caching strategies and the products that support them.&lt;/p&gt;



&lt;p&gt;One such product is AWS Bedrock Prompt Caching. If large parts of your prompts are static (specifically, the prefixes), retokenizing the prefix on every request is a waste of time and money. Prompt or context caching lets you process the prefix once and store it, reducing costs and improving performance.&lt;/p&gt;



&lt;p&gt;Sounds great, right? Let&apos;s check the pricing mode. If your requests are more than 5 minutes apart, your cache will be cleared. If your requests are short, caching won’t be activated; if the cache hit rate is low, you will pay an extra, non-usage-based premium for cache writes. I highly recommend reading the “How Much Does Bedrock Prompt Caching Cost?” section in the article “&lt;a&gt;Amazon Bedrock Prompt Caching&lt;/a&gt;”.&lt;/p&gt;
</content:encoded><category>aws</category><category>bedrock</category><category>finops</category><category>LearnInPublic</category></item><item><title>AI Just Took a Big Step Into Digital Health</title><link>https://tomron.net/2026/01/13/ai-just-took-a-big-step-into-digital-health/</link><guid isPermaLink="true">https://tomron.net/2026/01/13/ai-just-took-a-big-step-into-digital-health/</guid><description>🚀 AI is moving deeper into digital health - over the past week, both OpenAI and Anthropic have introduced major features aimed at bringing powerful AI…</description><pubDate>Tue, 13 Jan 2026 09:16:04 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;🚀 AI is moving deeper into digital health - over the past week, both OpenAI and Anthropic have introduced major features aimed at bringing powerful AI capabilities into healthcare and life sciences. Links in the first comment&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;🔹 OpenAI: ChatGPT Health&lt;br /&gt;&lt;/strong&gt; OpenAI has launched &lt;strong&gt;&lt;a&gt;ChatGPT Health&lt;/a&gt;&lt;/strong&gt;, a dedicated health experience that lets users securely connect their &lt;em&gt;medical records&lt;/em&gt; and &lt;em&gt;wellness app data&lt;/em&gt; (e.g., Apple Health, Function, and MyFitnessPal) to get more informed insights about their health and wellness. The feature is designed to help people better interpret test results, prepare for doctor visits, and navigate everyday health questions — &lt;em&gt;not replace clinicians&lt;/em&gt;. Enhanced privacy protections ensure that health chats and data remain isolated and encrypted, and that users retain full control over connections and data.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;🔹 Anthropic: Claude for Healthcare &amp;amp; Life Sciences&lt;br /&gt;&lt;/strong&gt;Following an earlier announcement regarding &lt;a&gt;Claude for Life Sciences&lt;/a&gt;, Anthropic introduced &lt;strong&gt;&lt;a&gt;Claude for Healthcare&lt;/a&gt;&lt;/strong&gt; alongside expanded life science capabilities, bringing its Claude AI into regulated medical and scientific use cases. This includes &lt;em&gt;HIPAA-ready infrastructure&lt;/em&gt; and &lt;em&gt;connectors&lt;/em&gt; to industry data sources (like CMS coverage rules, ICD-10 codes, and NPI registries) to support tasks such as prior authorizations, claims management, and clinical documentation. Claude can also summarize medical histories and explain test results in plain language. On the &lt;em&gt;life sciences&lt;/em&gt; side, new integrations with clinical trial, preprint, and bioinformatics platforms aim to accelerate research workflows and regulatory documentation.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;Both announcements show the AI industry racing into digital health with different focus areas. OpenAI’s move toward personalized health guidance for individuals complements Anthropic’s broader, enterprise-oriented tools for providers and researchers. Together, they raise exciting possibilities &lt;strong&gt;and important questions&lt;/strong&gt; about regulatory standards, data privacy, and the role of AI in care delivery.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;Bonus - &lt;a&gt;GrantFlow&lt;/a&gt; - a grant management platform that automates discovery, planning, and application workflows for researchers and institutions.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>ai</category><category>digital health</category><category>healthcare</category><category>healthtech</category></item><item><title>4 AWS re:Invent announcment to check</title><link>https://tomron.net/2025/12/05/4-aws-reinvent-announcment-to-check/</link><guid isPermaLink="true">https://tomron.net/2025/12/05/4-aws-reinvent-announcment-to-check/</guid><description>AWS re:Invent 2025 took place this week, and as always, dozens of announcements were unveiled . At the macro level, announcing Amazon EC2 Trn3 UltraServers for…</description><pubDate>Fri, 05 Dec 2025 21:20:25 GMT</pubDate><content:encoded>
&lt;p&gt;AWS re:Invent 2025 took place this week, and as always, dozens of announcements were &lt;a&gt;unveiled&lt;/a&gt;. At the macro level, announcing Amazon EC2 Trn3 UltraServers for faster, lower-cost generative AI training can make a significant difference in the market, which is primarily biased towards Nvidia GPUs. At the micro-level, I chose four announcements that I find compelling and relevant for my day-to-day.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;AWS Transform custom&lt;/strong&gt; - AWS Transform enables organizations to automate the modernization of codebases at enterprise scale, including legacy frameworks, outdated runtimes, infrastructure-as-code, and even company-specific code patterns. The custom agent applies those transformation rules defined in documentation, natural language descriptions, or code samples consistently across the organization&apos;s repositories. &lt;/p&gt;



&lt;p&gt;Technical debt tends to accumulate quietly, damaging developer productivity and satisfaction. Transform custom wishes to “crush tech debt” and free up developers to focus on innovation instead. For organizations managing many microservices, legacy modules, or long-standing systems, this could dramatically reduce the maintenance burden and risk and increase employees’ satisfaction and retention over time.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/introducing-aws-transform-custom-crush-tech-debt-with-ai-powered-code-modernization&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Partially complementary, AWS introduced 2 frontier agents in addition to the already existing &lt;a&gt;Kiro&lt;/a&gt; agent - &lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;DevOps agent - an on-call / incident-response agent that integrates across monitoring, code repos, and service tickets to detect root causes and coordinate responses.&lt;br /&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/aws-devops-agent-helps-you-accelerate-incident-response-and-improve-system-reliability-preview/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Security agent - an agent that proactively secures applications throughout the entire development lifecycle by conducting automated design and code reviews, and performing on-demand penetration testing&lt;br /&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/new-aws-security-agent-secures-applications-proactively-from-design-to-deployment-preview/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;AWS Lambda Durable Functions&lt;/strong&gt; - Durable Functions enable building long-running, stateful, multi-step applications and workflows - directly within the serverless paradigm. Durable functions support a checkpoint-and-replay model: your code can pause (e.g., wait for external events or timeouts) and resume within 1 year without incurring idle compute costs during the pause.&lt;/p&gt;



&lt;p&gt;Many real-world use cases, such as approval flows, background jobs, human-in-the-loop automation, and cross-service orchestration, require durable state, retries, and waiting. Previously, these often required dedicated infrastructure or complex orchestration logic. Durable Functions enable teams to build more robust and scalable workflows and reduce overhead.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/build-multi-step-applications-and-ai-workflows-with-aws-lambda-durable-functions&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;AWS S3 Vectors (General Availability)&lt;/strong&gt; - Amazon S3 Vectors was announced about 6 months ago and is now generally available. This adds native vector storage and querying capabilities to S3 buckets. That is, you can store embedding/vector data at scale, build vector indexes, and run similarity search via S3, without needing a separate vector database. The vectors can be enriched with metadata and integrated with other AWS services for retrieval-augmented generation (RAG) workflows. I think of it as “Athena” for embeddings.&lt;/p&gt;



&lt;p&gt;This makes it much easier and cost-effective for teams to integrate AI/ML features - even if they don’t want to manage a dedicated vector DB and reduces the barrier to building AI-ready data backends.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/amazon-s3-vectors-now-generally-available-with-increased-scale-and-performance&lt;/a&gt;&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p&gt;&lt;strong&gt;Amazon SageMaker Serverless Customization - Fine-Tuning Models Without Infrastructure&lt;/strong&gt; - AWS announced a new capability that accelerates model fine-tuning by eliminating the need for infrastructure management. Teams can upload a dataset and select a base model, and SageMaker handles the fine-tuning pipeline, scaling, and optimization automatically - all in a serverless, pay-per-use model. This customized model can also be deployed using Bedrock for Serverless inference. It is a game-changer, as serving a customized model was previously very expensive. This feature makes fine-tuning accessible to far more teams, especially those without dedicated ML engineers.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/new-serverless-customization-in-amazon-sagemaker-ai-accelerates-model-fine-tuning&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;These are just a handful of the (many) announcements from re:Invent 2025, and they represent a small, opinionated slice of what AWS showcased. Collectively, they highlight a clear trend: Amazon is pushing hard into AI-driven infrastructure and developer automation - while challenging multiple categories of startups in the process.&lt;/p&gt;



&lt;p&gt;While Trn3 UltraServers aim to chip away at NVIDIA’s dominance in AI training, the more immediate impact may come from the developer- and workflow-focused releases. Tools like Transform Custom, the new frontier agents, and Durable Functions promise to reduce engineering pain - if they can handle the real, messy complexity of enterprise systems. S3 Vectors and SageMaker Serverless Customization make it far easier to adopt vector search and fine-tuning without adding a new operational burden.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>ai</category><category>aws</category><category>aws lambda</category><category>bedrock</category><category>kiro</category><category>re:invent</category><category>sagemaker</category><category>serverless</category><category>coding agents</category><category>s3</category><category>ec2</category><category>athena</category></item><item><title>5 interesting things (02/11/2025)</title><link>https://tomron.net/2025/11/02/5-interesting-things-02-11-2025/</link><guid isPermaLink="true">https://tomron.net/2025/11/02/5-interesting-things-02-11-2025/</guid><description>Measuring Engineering Productivity - Measuring engineering productivity is a topic that has been discussed as long as the field of engineering has existed.…</description><pubDate>Sun, 02 Nov 2025 14:20:59 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Measuring Engineering Productivity&lt;/u&gt;&lt;/strong&gt; - Measuring engineering productivity is a topic that has been discussed as long as the field of engineering has existed. This post acknowledges the tension of measuring engineering work (where metrics can be easily manipulated). It proposes a pragmatic system of minimal burden, high visibility, and context-sensitive metrics, rather than focusing on lines of code.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://justoffbyone.com/posts/measuring-engineering-productivity/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Stop Avoiding Politics&lt;/strong&gt; - Politics usually have a bad name, but the article argues that avoiding the “politics” of an organization doesn’t remove politics; it just removes your ability to influence outcomes and let others decide for you. This is a helpful reminder that part of seniority is engaging in stakeholder dynamics, not just writing code.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://terriblesoftware.org/2025/10/01/stop-avoiding-politics/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;margin:0px;padding:0px&quot;&gt;&lt;strong&gt;&lt;u&gt;Team Dynamics after AI&lt;/u&gt;&lt;/strong&gt; - This post critiques the rush to utilize AI to scale engineering artifact production and argues that what matters most remains the “illegible” human and team elements: context, feedback loops, diversity of roles, and the social glue that holds work together&lt;/span&gt;. I link it to the &quot;Measuring engineering productivity&quot; post in the sense that simply measuring throughput or artifacts might miss the hidden “team health” or context dimension.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://mechanicalsurvival.com/blog/team-dynamics-after-ai/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Useful Engineering Management Artifacts&lt;/u&gt;&lt;/strong&gt; - This is a practical collection of templates for various purposes, including team charters, career development plans, and decision briefs. It complements the productivity and team dynamics posts by providing actual artifacts you can use to operationalize some of the ideas.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://bjorg.bjornroche.com/management/engineering-management-artifacts/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Stop Caring So Much About Your People&lt;/u&gt;&lt;/strong&gt; - I find this post a bit weird. In the post &quot;Radical Candor&quot; era, it feels obvious that giving feedback is both essential and meaningful. I agree with the author’s point that leaders sometimes over-prioritize team happiness at the expense of organizational health, and I’d extend that further: over-protecting people from discomfort also hurts their own growth. As leaders, giving feedback is often uncomfortable, but it’s one of the most valuable things we can do - to help our people, our teams, our company, and even ourselves evolve.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://avivbenyosef.com/stop-caring-so-much-about-your-people/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>leadership</category></item><item><title>From Demo Hell to Scale: Two Takes on Building Things That Last</title><link>https://tomron.net/2025/09/16/from-demo-hell-to-scale-two-takes-on-building-things-that-last/</link><guid isPermaLink="true">https://tomron.net/2025/09/16/from-demo-hell-to-scale-two-takes-on-building-things-that-last/</guid><description>​​I recently came across two blog posts that made me think, especially in light of a sobering statistic I&apos;ve seen floating around: a recent MIT study reports…</description><pubDate>Tue, 16 Sep 2025 11:03:49 GMT</pubDate><content:encoded>
&lt;p&gt;​​I recently came across two blog posts that made me think, especially in light of a sobering statistic I&apos;ve seen floating around: a recent &lt;a&gt;MIT study&lt;/a&gt; reports that &lt;strong&gt;95% of enterprise generative AI pilots fail to deliver real business impact or move beyond demo mode&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;One &lt;a&gt;post&lt;/a&gt; is a conversation with &lt;strong&gt;Werner Vogels&lt;/strong&gt;, Amazon’s long-time CTO, who shares lessons from decades of building and operating systems at internet scale. The &lt;a&gt;other&lt;/a&gt;, from &lt;strong&gt;Docker&lt;/strong&gt;, outlines nine rules for making AI proof-of-concepts that don’t die in demo land.&lt;/p&gt;



&lt;p&gt;Despite their different starting points, I was surprised by how much the posts resonated with one another. Here’s a short review of where they align and where they differ.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Where They Agree&lt;/strong&gt;&lt;/h2&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Solve real problems, not hype &lt;/strong&gt;- Both warn against chasing the “cool demo.” Docker calls it &lt;em&gt;“Solve Pain, Not Impress”&lt;/em&gt;, while Vogels is blunt: &lt;em&gt;“Don’t build for hype.”&lt;/em&gt; This advice sounds obvious, but it’s easy to fall into the trap of chasing novelty. Whether you’re pitching to executives or building at AWS scale, both warn that if you’re not anchored in a real customer pain, the project is already off track.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Build with the end in mind - &lt;/strong&gt;Neither believes in disposable prototypes. Docker advises to &lt;em&gt;design for production from day zero&lt;/em&gt;—add observability, guardrails, testing, and think about scale early. Vogels echoes with &lt;em&gt;“What you build, you run”&lt;/em&gt;, highlighting that engineers must take ownership of operations, security, and long-term maintainability. Both perspectives converge on the same principle: if you don’t build like it’s going to live in production, it probably never will.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Discipline over speed&lt;/strong&gt; - Both posts emphasize discipline over blind speed. Docker urges teams to embed cost and risk awareness into PoCs, even tracking unit economics from day one. Vogels stresses that “cost isn’t boring—it’s survival” and frames decision-making around reversibility: move fast when you can reverse course, slow down when you can’t. Different wording, same idea: thoughtful choices early save pain later.&lt;/li&gt;
&lt;/ol&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Where They Differ&lt;/strong&gt;&lt;/h2&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Scope: the lab vs. the long haul &lt;/strong&gt;- Docker’s post is tightly focused on how to build POCs in the messy realities of AI prototyping and how to avoid “demo theater” and make something that survives first contact with production. Vogels’ advice is broader, aimed at general engineering, technology leadership, infrastructure, decision-making at scale, and organization-level priorities. Vogels speaks from decades of running Amazon-scale systems, where the horizon is years, not weeks.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Tactics vs. culture&lt;/strong&gt; - Docker’s advice is concrete and technical: use remocal workflows, benchmark early, add prompt testing to CI/CD. Vogels is less about specific tools and more about culture: engineers owning what they build, organizations learning to move fast on reversible decisions, and leaders setting clarity as a cultural value. Docker tells you what to do. Vogels tells you how to think.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Organizational Context and Scale &lt;/strong&gt;- Docker speaks to teams fighting to get from zero to one—making PoCs credible beyond the demo stage. Vogels speaks from AWS’s point of view,  where the challenge is running infrastructure that millions rely on. Docker’s post is about survival; Vogels is about resilience at scale.&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p&gt;What strikes me about these two perspectives is how perfectly they complement each other. Docker&apos;s advice isn&apos;t really about AI - it&apos;s about escaping demo hell by building prototypes with production DNA from day one. Vogels tackles what happens when you actually succeed: keeping systems reliable when thousands depend on them. They&apos;re describing the same journey from different ends. Set up your prototypes with the right foundations, and you dramatically increase the odds that your product will one day face the kinds of scale and resilience questions Vogels addresses.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>ai</category><category>aws</category><category>demo</category><category>docker</category><category>genai</category><category>technology</category></item><item><title>AI, Paradigm Shifts, and the Future of Building Companies</title><link>https://tomron.net/2025/08/25/ai-paradigm-shifts-and-the-future-of-building-companies/</link><guid isPermaLink="true">https://tomron.net/2025/08/25/ai-paradigm-shifts-and-the-future-of-building-companies/</guid><description>Over the past few months, I have been constantly reading conversations about how Generative AI will reshape software engineering. On LinkedIn, Twitter, or in…</description><pubDate>Mon, 25 Aug 2025 14:09:52 GMT</pubDate><content:encoded>
&lt;p&gt;Over the past few months, I have been constantly reading conversations about how Generative AI will reshape software engineering. On LinkedIn, Twitter, or in closed professional groups, engineers and product leaders debate how tools like Cursor, GitHub Copilot, or automated testing frameworks will impact the way software is built and teams are organized.&lt;/p&gt;



&lt;p&gt;But the conversation goes beyond just engineering practices. If we zoom out, AI will not only transform the workflows of software teams but also the structure of companies and even the financial models on which they are built. This kind of change feels familiar - it echoes a deeper historical pattern in how science and technology evolve.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Kuhn’s Cycle of Scientific Revolutions&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;During my bachelor’s, I read Thomas Kuhn’s &lt;em&gt;The Structure of Scientific Revolutions.&lt;/em&gt; Kuhn argued that science does not progress in a linear, step-by-step manner. Instead, it moves through cycles of stability and disruption. The &lt;strong&gt;Kuhn Cycle&lt;/strong&gt;&lt;sup class=&quot;fn&quot;&gt;&lt;a&gt;1&lt;/a&gt;&lt;/sup&gt;, as reframed by later scholars, breaks this process into several stages:&lt;/p&gt;



&lt;figure class=&quot;wp-block-image alignright size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2025/08/kuhncycle_basiccycle.png&quot; alt=&quot;&quot; class=&quot;wp-image-2008&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Pre-science&lt;/strong&gt; - A field without consensus; multiple competing ideas.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Normal Science&lt;/strong&gt; - A dominant paradigm sets the rules of the game, guiding how problems are solved.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Model Drift&lt;/strong&gt; - Anomalies accumulate, and cracks in the model appear.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Model Crisis&lt;/strong&gt; - The old framework fails; confidence collapses.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Model Revolution&lt;/strong&gt; - New models emerge, challenging the old order.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Paradigm Change&lt;/strong&gt; - A new model wins acceptance and becomes the new normal.&lt;br /&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;The Kuhn Cycle Applied to Software Development&lt;/strong&gt;&lt;/h3&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Normal Science&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;For decades, software engineering has operated under a shared set of practices and beliefs:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Clean Code &amp;amp; Best Practices&lt;/strong&gt; - DRY, SOLID, Unit Testing, Peer Reviews.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Agile &amp;amp; Scrum&lt;/strong&gt; - Iterative sprints and ceremonies as the “right” way to build products.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;DevOps &amp;amp; CI/CD&lt;/strong&gt; - Automation of builds, deployments, and testing.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Organizational Structure&lt;/strong&gt; – Specialized roles (frontend, backend, QA, DevOps, PM) and a belief that more engineers equals more output.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;The underlying assumption is &lt;em&gt;hire more engineers + refine practices → better and quicker software&lt;/em&gt;.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Model Drift&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;Over time, cracks began to show.&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The &lt;strong&gt;talent gap&lt;/strong&gt; - demand for software far outstrips available developers.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Velocity mismatch&lt;/strong&gt; - Agile rituals can’t keep pace with market demands.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Complexity overload&lt;/strong&gt; - Microservices and massive codebases create systems that are too complex for a single person to comprehend fully.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Knowledge silos&lt;/strong&gt; - onboarding takes months, and institutional knowledge remains fragile.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;These anomalies signaled that “hire more engineers and improve processes” was no longer a sustainable model.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Model Crisis&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;The strain became obvious:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Even tech giants with thousands of engineers struggle with code sprawl and coordination overhead.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;Brooks’ Law bites - adding more people to a project often makes it slower.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;Business pressure grows - leaders demand faster iteration, lower costs, and higher adaptability than human-only teams can deliver.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;Early AI tools, such as GitHub Copilot and ChatGPT, reveal something provocative - machines can generate boilerplate, tests, and documentation in seconds - tasks once thought to be unavoidably human.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;This is where many organizations sit today - patching the old paradigm with AI, but without a coherent new model.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Model Revolution&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;A new way of working begins to take shape. Here are some already visible in experimenting, we can all see around us - &lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;AI-first engineering&lt;/strong&gt; - using AI agents for scaffolding code, generating tests, or refactoring large systems. Humans act as curators, reviewers, and high-level designers.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Smaller, AI-augmented teams&lt;/strong&gt;&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;New roles and workflows&lt;/strong&gt; - QA shifts toward system-level validation; PMs focus less on ticket grooming and more on problem framing and prompting.&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Org structures evolve&lt;/strong&gt; - less siloing by specialization, more “AI-augmented full-stack builders.”&lt;br /&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Economics shift&lt;/strong&gt; - productivity is no longer headcount-driven but iteration-driven. Cost models change when iteration is nearly free.&lt;/li&gt;
&lt;/ul&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h4 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Paradigm Change&lt;/strong&gt;&lt;/h4&gt;



&lt;p&gt;In the coming years, some of the ideas above, and probably additional ideals, could stabilize as the “normal science” of software development and organizational building. But we are not yet there. Once we get there, today’s experiments will feel as obvious as Agile sprints or pull requests do now.&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p&gt;We are in the midst of &lt;strong&gt;model drift tipping into crisis&lt;/strong&gt;, with glimpses of revolution already underway. Kuhn’s lesson is that revolutions are not just about better tools - they’re about shifts in worldview. For AI, the shift might be that companies will no longer be limited by headcount and manual processes but by their ability to &lt;strong&gt;ask the right questions, frame the correct problems, and adapt their models of value creation&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;We are moving toward a future where the shape of companies, not just their software stacks, will look radically different, and that’s an exciting era to be a part of.&lt;/p&gt;





&lt;p&gt;&lt;/p&gt;
</content:encoded><category>ai</category><category>engineering management</category><category>leadership</category><category>kuhn</category><category>llm</category><category>technology</category></item><item><title>LLM Debt: The Double-Edged Sword of AI Integration</title><link>https://tomron.net/2025/08/17/llm-debt-the-double-edged-sword-of-ai-integration/</link><guid isPermaLink="true">https://tomron.net/2025/08/17/llm-debt-the-double-edged-sword-of-ai-integration/</guid><description>Have you noticed how half the posts on LinkedIn these days feel like they were written by an LLM - too many words for too little substance ? Or how product…</description><pubDate>Sun, 17 Aug 2025 11:11:21 GMT</pubDate><content:encoded>
&lt;p&gt;Have you noticed how half the posts on LinkedIn these days feel like they were written by an LLM - &lt;em&gt;too many words for too little substance&lt;/em&gt;? Or how product roadmaps suddenly include “AI features” that nobody asked for, just because it sounds good in a pitch deck? Or those meetings where someone suggests “let’s use GPT for this,” when a simple SQL query, an if-statement, or a much simpler ML model would do the job?&lt;/p&gt;



&lt;p&gt;Laurence Tratt recently coined the term &lt;a&gt;&lt;strong&gt;LLM inflation&lt;/strong&gt;&lt;/a&gt; to describe how humans use LLMs to expand simple ideas into verbose prose, only for others to shrink them back down. That concept got me thinking about a related phenomenon: &lt;strong&gt;LLM debt&lt;/strong&gt;.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;LLM debt is the growing cost of misusing LLMs — by adding them where they don’t belong and neglecting them where they could help.&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;We’re all familiar with technical debt, product debt, and design debt&lt;sup class=&quot;fn&quot;&gt;&lt;a&gt;1&lt;/a&gt;&lt;/sup&gt; — the shortcuts or missed opportunities that slow us down over time. Similarly, organizations are quietly accumulating LLM debt.&lt;/p&gt;



&lt;p&gt;So, what does LLM debt look like in practice? It’s a &lt;strong&gt;double-edged liability&lt;/strong&gt;:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Overuse:&lt;/strong&gt; Integrating LLMs where they’re unnecessary adds latency, complexity, cost, and stochasticity to systems that could be simpler, faster, and more reliable without them. For example, sending every API request through a multimillion-parameter model when a simple regex or deterministic logic would suffice.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Underuse:&lt;/strong&gt; Failing to adopt LLM-based tools where they could genuinely help results in wasted effort and missed opportunities. Think of teams manually triaging support tickets, writing repetitive documentation, or analyzing text data by hand when an LLM could automate much of the work.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Like product or technical debt, a small amount of LLM debt can be strategic: it allows experimentation, faster prototyping, or proof-of-concept development. However, left unmanaged, it compounds, creating systems that are over-engineered in some areas and under-leveraged in others, which slows product evolution and innovation. Same as other types of debt, it should be owned and managed.&lt;/p&gt;



&lt;p&gt;LLMs are powerful, but they come with costs. Just as we track and manage technical debt, we need to recognize, measure, and pay down our &lt;strong&gt;LLM debt&lt;/strong&gt;. That means asking tough questions before adding LLMs to the stack, and also being bold enough to leverage them where they could provide real value.&lt;/p&gt;



&lt;p&gt;If LLM inflation showed us how words can expand and collapse in unhelpful cycles, LLM debt shows us how our systems can quietly accumulate inefficiencies that slow us down. Recognizing it early is the key to keeping our products lean, intelligent, and future-ready.&lt;/p&gt;


</content:encoded><category>ai</category><category>engineering management</category><category>leadership</category><category>llm</category><category>tech debt</category></item><item><title>Things I recently built with my daughter</title><link>https://tomron.net/2025/08/04/things-i-recently-built-with-my-daughter/</link><guid isPermaLink="true">https://tomron.net/2025/08/04/things-i-recently-built-with-my-daughter/</guid><description>My daughter just finished first grade and is about to turn seven. One day, she noticed me playing a math puzzle on a news site and asked if she could join. I…</description><pubDate>Mon, 04 Aug 2025 14:04:31 GMT</pubDate><content:encoded>
&lt;p&gt;My daughter just finished first grade and is about to turn seven. One day, she noticed me playing a math puzzle on a news site and asked if she could join. I told her that when an easy one came along, I’d be happy to solve it with her.&lt;/p&gt;



&lt;p&gt;A few days passed. She asked again.&lt;/p&gt;



&lt;p&gt;I didn’t want to say no, so I offered to sketch a similar game on paper. But designing a good puzzle turned out to be more challenging than expected. I scribbled a lightweight version instead—and that sparked an idea. I asked if she’d like to build a game together.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;1. &lt;strong&gt;Math Grid&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;🔗 &lt;a&gt;Play Math Grid&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;This was our first game. It’s a visual puzzle: players are given a grid with some numeric constraints on rows and columns, and the goal is to fill it in correctly. Inspired by logic puzzles like Sudoku and Kakuro, the constraints are simplified for early elementary-level arithmetic, so it stays approachable while still encouraging reasoning.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;2. &lt;strong&gt;Number Detector&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;🔗 &lt;a&gt;Play Number Detector&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Later, while solving exercises from her school workbook, we came across number riddles. This inspired our second app. In &lt;em&gt;Number Detector&lt;/em&gt;, the player is given partial clues (like a number’s sum of digits or a multiple constraint) and has to figure out the correct number from a limited set.&lt;/p&gt;



&lt;p&gt;We added randomness and regeneration to keep things fresh, making the practice repeatable and varied.&lt;/p&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;3. &lt;strong&gt;Triangle Tactics&lt;/strong&gt;&lt;/h3&gt;



&lt;p&gt;🔗 &lt;a&gt;Play Triangle Tactics&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;A month later, while playing a pen-and-paper strategy game, she casually said: “Let’s make it into an app—like we did in the old days.” :)&lt;/p&gt;



&lt;p&gt;Her request blew my mind.&lt;/p&gt;



&lt;p&gt;We built &lt;em&gt;Triangle Tactics&lt;/em&gt;, a simple turn-based game where players connect dots to form triangles, and the player who forms the most triangles wins. What surprised me most was the technical challenge—not in the game logic, but in rendering the dots and lines correctly. It was solved only after switching to a different LLM model than the default. &lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Reflections&lt;/h3&gt;



&lt;p&gt;These experiments turned into more than just games. They became opportunities to:&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Understand the importance of English:&lt;/strong&gt; We worked in English—despite it not being our native language—and talked about why fluency matters, especially when working with tools, prompts, or documentation.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Explore computers as collaborators:&lt;/strong&gt; “What do you mean it misunderstood the prompt?”, “How should we ask to get the result we want?”&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Practice QA thinking:&lt;/strong&gt; “Why isn’t this button working?”, “Is it behaving the way we expected?”&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Enjoy quality time:&lt;/strong&gt; A fun excuse to step outside our usual routines and build something together.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>base44</category><category>parenting</category><category>vibecoding</category><category>coding agents</category></item><item><title>AWS has entered the building</title><link>https://tomron.net/2025/07/16/aws-has-entered-the-building/</link><guid isPermaLink="true">https://tomron.net/2025/07/16/aws-has-entered-the-building/</guid><description>AWS has released several notable announcements within the LLM ecosystem over the last few days. Introducing Amazon S3 Vectors (preview) - Amazon S3 Vectors is…</description><pubDate>Wed, 16 Jul 2025 20:01:00 GMT</pubDate><content:encoded>
&lt;p&gt;AWS has released several notable announcements within the LLM ecosystem over the last few days.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;strong&gt;Introducing Amazon S3 Vectors (preview)&lt;/strong&gt;&lt;/a&gt; - Amazon S3 Vectors is a durable, cost-efficient vector storage solution that natively supports large-scale AI-ready data with subsecond query performance, reducing storage and query costs by up to 90%.&lt;br /&gt;&lt;br /&gt;Why I find it interesting - &lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Balancing cost and performance - i.e., storing on a database is more expensive but yields better results. If you know what the &quot;hot vectors&quot; are, you can store them in the database and store the rest in S3.&lt;/li&gt;



&lt;li&gt;Designated buckets - it started with &lt;a&gt;table buckets&lt;/a&gt; and has now evolved to vector buckets. Interesting direction.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;a&gt;&lt;strong&gt;Launch of Kiro&lt;/strong&gt;&lt;/a&gt; - the IDE market is on fire with OpenAI’s acquisition falling apart, Claude code and cursor competition, and now Amazon reveals Kiro with the promise - &quot;helps you do your best work by bringing structure to AI coding with spec-driven development&quot;&lt;/p&gt;



&lt;p&gt;Why I find it interesting - &lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;At first, I wondered why AWS entered this field, but I assume it is a must-have these days, and might lead to higher adoption of their models or Amazon Q.  &lt;/li&gt;



&lt;li&gt;The different IDEs and CLI tools are influenced by each other so it will be interesting to see how a new player influences this space.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;span style=&quot;margin:0px;padding:0px&quot;&gt;&lt;a&gt;&lt;strong&gt;Strand agents are now at v1.0.0&lt;/strong&gt;&lt;/a&gt; - Strand Agents are an AWS open-source SDK that enables building and running AI agents across multiple environments and models, with many pre-built tools that are easy to use.&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;Why I find it interesting - &lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;The bedrock agents interface was limiting for a production-grade agent, specifically in terms of deployment modes, model support, and observability. Strand agents open many more doors.&lt;/li&gt;



&lt;li&gt;There are many agent frameworks out there (probably two more were released while you read this post). Many of them experience different issues when working with AWS Bedrock. If you are using AWS as your primary cloud provider, it should be a leading candidate.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>kiro</category><category>llm</category><category>s3 vectors</category><category>strand agents</category><category>coding agents</category><category>s3</category><category>bedrock</category></item><item><title>5 interesting things (11/05/2025)</title><link>https://tomron.net/2025/05/11/5-interesting-things-11-05-2025/</link><guid isPermaLink="true">https://tomron.net/2025/05/11/5-interesting-things-11-05-2025/</guid><description>Agents app design pattern - this is a back-to-basics adaptation. How would we read this 14 years from now? Would the ideas he mentioned there be a standard?…</description><pubDate>Sun, 11 May 2025 09:34:24 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Agents app design pattern&lt;/u&gt;&lt;/strong&gt; - this is a back-to-basics adaptation. How would we read this 14 years from now? Would the ideas he mentioned there be a standard?&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/humanlayer/12-factor-agents&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;The original document &quot;12 factors app&quot; is also worth reading (note that it was first published 2011+-) -&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://12factor.net&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;When the Agents Go Marching In: Five Design Paradigms Reshaping Our Digital Future&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;This post complements the previous one, covering the same topics. If you are in a hurry, jump to the &quot;The Reinvention of UX: Five Emerging Paradigms&quot; section. I feel that I cope with all those aspects, e.g., building trust, transparency, cognitive load distribution, etc., on a daily basis. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/cyberark-engineering/when-the-agents-go-marching-in-five-design-paradigms-reshaping-our-digital-future-a219009db198&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Using Alembic to create and seed a database&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;Seeding a database is essential for testing, development, and ensuring consistent application behavior across different environments. Alembic is a lightweight database migration tool for Python, designed to work seamlessly with SQLAlchemy.&lt;/p&gt;



&lt;p&gt;We use Alembic to manage our database migrations, and I recently needed to seed our database for consistency across environments. I looked for several solutions and eventually used the solution in this post to create a migration that seeds the database - &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/@fimd/using-alembic-to-create-and-seed-a-database-8f498638c406&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;A Field Guide to Rapidly Improving AI Products&lt;/u&gt;&lt;/strong&gt; - while this post focuses on AI products, specifically ones LLM-based, multiple lessons can also be adapted to non-LLM-based AI products and general products. Conducting an error analysis, generating synthetic data (preferably with domain express), and using a data viewer are good starting points.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://hamel.dev/blog/posts/field-guide/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;I Tried Running an MCP Server on AWS Lambda… Here’s What Happened&lt;/u&gt; &lt;/strong&gt;- this post involves two topics I think a lot about these days - MCP and serverless computing. I think it is clear why I think a lot about MCPs. But why do I think about serverless computing? I think of it as a low-cost solution for early-stage startups. Early-stage startups usually have low traffic, which does not justify the cost of having servers up 24/7. On the other hand, the serverless development experience still needs some refinement, and there are services that one would like to host that do not support running in a serverless manner.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.ranthebuilder.cloud/post/mcp-server-on-aws-lambda&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>ai</category><category>alembic</category><category>aws</category><category>llm</category><category>mcp</category><category>aws lambda</category></item><item><title>5 interesting thing (28/03/2025)</title><link>https://tomron.net/2025/03/28/5-interesting-thing-28-03-2025/</link><guid isPermaLink="true">https://tomron.net/2025/03/28/5-interesting-thing-28-03-2025/</guid><description>PgAI - LLMs have been part of everyday life already for a while. One aspect I think has not been explored well so far is using them as part of ETL. The…</description><pubDate>Fri, 28 Mar 2025 10:51:45 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;mark style=&quot;background-color:#fff&quot; class=&quot;has-inline-color&quot;&gt;PgAI&lt;/mark&gt;&lt;/u&gt;&lt;/strong&gt; - LLMs have been part of everyday life already for a while. One aspect I think has not been explored well so far is using them as part of ETL. The implementations I have seen so far don&apos;t take advantage of batch APIs and are not standardized to enable the easy replacement of a model. Having said that, I believe those hurdles will be overcome soon.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/timescale/pgai&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Related links&lt;/strong&gt;&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;strong&gt;Snowflake cortex complete&lt;/strong&gt; - call llm functions from snowflake &lt;a&gt;https://docs.snowflake.com/en/developer-guide/snowpark-ml/reference/1.5.0/api/model/snowflake.cortex.Complete&lt;/a&gt;)&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;OpenAI Postgres extension&lt;/strong&gt; - allows calling OpenAI or local models using Ollama. &lt;a&gt;https://www.crunchydata.com/blog/accessing-large-language-models-from-postgresql&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Do you use LLMs in your ETL pipelines&lt;/strong&gt; - Reddit discussion regarding using LLMs in ETL pipelines. There are pros and cons of course, specially for cases you need a deterministic answer but there are also other cases -&lt;br /&gt;&lt;a&gt;https://www.reddit.com/r/dataengineering/comments/1h17gjm/do_you_use_llms_in_your_etl_pipelines/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Life Altering PostgreSql Patterns&lt;/u&gt;&lt;/strong&gt; - a back-to-basics post. I agree with most of the points mentioned there, specifically around adding creaetd_at, updated_at, and deleted_at attributes to all tables and saving state data as logs rather than saving only the latest state. I found the section about enum tables interesting. This is the first time I was exposed to this idea, and the ability to add a description or metadata is excellent. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://mccue.dev/pages/3-11-25-life-altering-postgresql-patterns&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Via this post, I learned about the &lt;code&gt;on update cascade&lt;/code&gt; option, you can read more about it here - &lt;a&gt;https://medium.com/geoblinktech/postgresql-foreign-keys-with-condition-on-update-cascade-330e1b25b6e5&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;AI interfaces of the future&lt;/u&gt;&lt;/strong&gt; - I usually don&apos;t share videos, but I think this talk is thought-provoking for several reasons -&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Gen UI patterns - an emerging field, the talk reviews several products and highlights good and destructive patterns. Some of the patterns, like suggestions or auto-complete, are transparent to us but are present in many products we know, and that&apos;s something important to notice when you build such a product.&lt;/li&gt;



&lt;li&gt;Product review: Knowing what is out there is good for inspiration, ideas, and understanding the competitive landscape. However, new products are coming out every day, and it is hard to track all of them. &lt;/li&gt;
&lt;/ul&gt;



&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://www.youtube.com/watch?v=DBhSfROq3wU
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Simplify Your Tech Stack: Use PostgreSQL for Everything&lt;/u&gt;&lt;/strong&gt; - Two widespread tensions, especially in startups, are build vs. buy conflicts and using specialized products or technologies (e.g., different databases) that are top of the breed but not many people can use and maintain vs. more common technology that more people can maintain but can have performance drawbacks or other limitations. Mainly working in startups, I usually prefer to use standard technology to run faster, knowing that the product, focus, and priorities often change. With that being said, I acknowledge that early adoption of new technologies can be life-changing for a startup, but figuring out what to bet on is hard.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/timescale/simplify-your-tech-stack-use-postgresql-for-everything-f77c96026595&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;CDK Monitoring Constructs&lt;/u&gt;&lt;/strong&gt; - if you are using AWS CDK as your IAC tool, CDK monitoring constructs enable you to create cloudwatch alarms and dashboards almost out of the box. I wish they would release and add additional options at a faster pace.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://pypi.org/project/cdk-monitoring-constructs/&lt;/a&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>cdk</category><category>iac</category><category>llm</category><category>postgresql</category><category>snowflake</category><category>startups</category><category>cloudwatch</category></item><item><title>Better Plotly Bar Chart</title><link>https://tomron.net/2024/11/21/better-plotly-bar-chart/</link><guid isPermaLink="true">https://tomron.net/2024/11/21/better-plotly-bar-chart/</guid><description>I&apos;m reading &quot; storytelling with data &quot; by Cole Nussbaumer Knaflic. I plan to write my thoughts and insights from the book once I finish it. For now, I wanted…</description><pubDate>Thu, 21 Nov 2024 21:22:05 GMT</pubDate><content:encoded>
&lt;p&gt;I&apos;m reading &quot;&lt;a&gt;storytelling with data&lt;/a&gt;&quot; by Cole Nussbaumer Knaflic. I plan to write my thoughts and insights from the book once I finish it. For now, I wanted to play with it a bit and create a better bar chart visualization that -&lt;/p&gt;



&lt;ol class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Highlight the category you find most important and assign a special color to it (i.e &lt;code&gt;prominent_color&lt;/code&gt; in the code), while the remaining categories used the same color (i.e. &lt;code&gt;latent_color&lt;/code&gt;)&lt;/li&gt;



&lt;li&gt;Remove grids and make the background and paper colors the same to remove cognitive load.&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2024/11/barchart_stwd.png&quot; alt=&quot;&quot; class=&quot;wp-image-1953&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;The implementation is flexible, so if you feel like changing one of the settings(i.e., show the grid lines or center the title) you can pass it via keyword arguments when calling the function. &lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://gist.github.com/tomron/dffae6ca7c679094894159b26b1d4d6f
&lt;/div&gt;&lt;/figure&gt;
</content:encoded><category>bookclub</category><category>visualization</category><category>plotly</category><category>storytelling</category><category>reading</category></item><item><title>📚 Book club Q2 2024 – 3 Reading recommendations</title><link>https://tomron.net/2024/07/09/1943/</link><guid isPermaLink="true">https://tomron.net/2024/07/09/1943/</guid><description>This quarter, I read 3 books that relate to France and the resistance during the 2nd world War - Code Name Hélène by Ariel Lawhon. This thriller is based on…</description><pubDate>Tue, 09 Jul 2024 08:21:14 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;/p&gt;



&lt;p&gt;This quarter, I read 3 books that relate to France and the resistance during the 2nd world War -&lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;&lt;a&gt;Code Name Hélène&lt;/a&gt; by Ariel Lawhon. This thriller is based on Nancy Wake&apos;s story. It also reminded me of &quot;&lt;a&gt;Agent Sonya&lt;/a&gt;&quot; by Ben Macintyre, which I read a while ago and enjoyed.&lt;/li&gt;



&lt;li&gt;&lt;a&gt;The Paris Architect&lt;/a&gt; by Charles Belfoure - is a touching story with lots of imagination but I was a bit disappointed it was not based on a real story.&lt;/li&gt;



&lt;li&gt;&lt;a&gt;The Dressmaker&apos;s Secret&lt;/a&gt; by Rosalie Ham - this book tells the story of Coco Chanel during WWII from the prism of her personal assistant or more accurately from the granddaughter of her personal assistant who unpacks the story. I didn&apos;t know about her relationships with the Nazis, and it was interesting to learn about them.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I also listened to &quot;&lt;a&gt;Setting the Table&lt;/a&gt;&quot; by Danny Meyer, and it was very insightful, it even made me publish a LinkedIn &lt;a&gt;post&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>bookclub</category><category>reading</category></item><item><title>5 interesting things (31/05/2024)</title><link>https://tomron.net/2024/05/31/5-interesting-things-31-05-2024/</link><guid isPermaLink="true">https://tomron.net/2024/05/31/5-interesting-things-31-05-2024/</guid><description>How we built Text-to-SQL at Pinterest - Text-to-SQL and vice versa became one of the canonical examples of LLM, and every product needs one. The post described…</description><pubDate>Fri, 31 May 2024 08:07:57 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How we built Text-to-SQL at Pinterest&lt;/span&gt;&lt;/strong&gt; - Text-to-SQL and vice versa became one of the canonical examples of LLM, and every product needs one. The post described a very interesting work that can be implemented relatively easily. I relate the most to the closing paragraph, which emphasizes the gap between demos, tutorials, benchmarks, and real-world use cases. - &quot;It would be helpful for applied researchers to produce more realistic benchmarks which include a larger amount of denormalized tables and treat table search as a core part of the problem.&quot;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/pinterest-engineering/how-we-built-text-to-sql-at-pinterest-30bad30dabff&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;(p.s I mentioned post in a recent LinkedIn post - &lt;a&gt;LLMs in the enterprise - looking beyond the hype on what&apos;s possible today&lt;/a&gt;)&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How an empty S3 bucket can make your AWS bill explode&lt;/span&gt; &lt;/strong&gt;- this story completely blew my mind (and gladly not my account). I was happy to see that AWS is looking into this issue and wondered if in bigger accounts, such anomalies could get unnoticed.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Design Philosophy of Great Tables&lt;/u&gt;&lt;/strong&gt; -  great_tables is a Python package for creating wonderful-looking tables. This post shares its visual design philosophy and is worth reading if you create tables even if you will not use this package.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://posit-dev.github.io/great-tables/blog/design-philosophy/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;1-measure-3-1&lt;/span&gt;&lt;/strong&gt; - a variation of the 1-3-1 problem-solving method for making proposals. I found it specifically effective for engineers as it is structured and focused.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.annashipman.co.uk/jfdi/1-measure-3-1.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;On Making Mistakes&lt;/span&gt;&lt;/strong&gt; — I love it when people combine experience or knowledge in one field or domain with another. For example, someone brings her experience as a soccer player to managing a team, or someone uses lessons he learned as a supermarket cashier to software architecture. This post discusses making mistakes and working through them and refers to several domains, including improv, chess, and F1 team management.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://read.perspectiveship.com/p/on-making-mistakes&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>llm</category><category>nl2sql</category><category>s3</category><category>tables</category></item><item><title>📚 Book club Q1 2024 - 3 Reading recommendations</title><link>https://tomron.net/2024/03/31/%F0%9F%93%9A-book-club-q1-2024-3-reading-recommendations/</link><guid isPermaLink="true">https://tomron.net/2024/03/31/%F0%9F%93%9A-book-club-q1-2024-3-reading-recommendations/</guid><description>This year, I track my book reading for the first time. I don&apos;t know if I&apos;ll keep doing it after this year or if I&apos;ll last until the end of the year, but for…</description><pubDate>Sun, 31 Mar 2024 10:18:57 GMT</pubDate><content:encoded>
&lt;p&gt;This year, I track my book reading for the first time. I don&apos;t know if I&apos;ll keep doing it after this year or if I&apos;ll last until the end of the year, but for now, I&apos;m all in. This helps me reflect on my reading and remember the books I enjoyed.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Fundable: Why Some Entrepreneurs Get Funded, And Others Do Not! &lt;/strong&gt;by Sephi Shapira&lt;/p&gt;



&lt;p&gt;This is the best value for my time in a long time. The book is filled with concrete and practical advice, which I immediately found myself using.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://www.amazon.com/Fundable-Some-Entrepreneurs-Funded-Others/dp/B0B4FD6ZV3
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Beartown&lt;/strong&gt; by Fredrik Backman -&lt;/p&gt;



&lt;p&gt;That&apos;s the perfect book for me—it has lots of sports and a human story, some gender tension, and two more books in this series (Us Against You and Winners). &lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://www.amazon.com/Beartown-Novel-Fredrik-Backman-ebook/dp/B01KG5GQDS
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;STFU: The Power of Keeping Your Mouth Shut in an Endlessly Noisy World&lt;/strong&gt; by Dan Lyons&lt;/p&gt;



&lt;p&gt;For long parts of this book, it was a paradox to me - why write 200+ pages to say we should all shut up - just do it.&lt;/p&gt;



&lt;p&gt;I listened to this book after also listening to &lt;a&gt;Disrupted&lt;/a&gt; by Lyons. I like his style and narration. When listening to Disrupted, I thought that it probably damaged his employability, which turned out to be true, as he discussed in STFU.&lt;/p&gt;



&lt;p&gt;The book can sometimes be extreme or refer to an extreme crowd (50 out of 50 in the Talkaholics test). However, I liked the book because it discusses many aspects of our lives - friends and family, work, etc.- and a few things I can immediately adapt. For example, I lowered my cell phone usage near my kids and hope to stick with it.&lt;/p&gt;



&lt;p&gt;In one of the last chapters, he mentions &lt;a&gt;Never Split the Difference&lt;/a&gt; by Chris Voss and Tahl Raz, which I also recently listened to. I listened to Never Split the Difference after a friend told me that she was starting to reread this book, and after listening to it, I completely understood why she wanted to reiterate it.&lt;/p&gt;



&lt;p&gt;I read the book to improve my negotiation skills. I&apos;m not sure there is an immediate effect, but as the two books pointed out - I talk less and actively listen more. So I try to pause before I answer, be succinct and hum, and let the other person talk.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-amazon wp-block-embed-amazon&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://www.amazon.com/STFU-Power-Keeping-Mouth-Talking-ebook/dp/B09X427GK8
&lt;/div&gt;&lt;/figure&gt;
</content:encoded><category>beartown</category><category>bookclub</category><category>fundable</category><category>reading</category><category>stfu</category></item><item><title>5 interesting things (08/03/2024)</title><link>https://tomron.net/2024/03/08/5-interesting-things-08-03-2024/</link><guid isPermaLink="true">https://tomron.net/2024/03/08/5-interesting-things-08-03-2024/</guid><description>(Almost) Every infrastructure decision I endorse or regret after 4 years running infrastructure at a startup - in my current role as a CTO of an early-stage…</description><pubDate>Fri, 08 Mar 2024 10:39:32 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;(Almost) Every infrastructure decision I endorse or regret after 4 years running infrastructure at a startup&lt;/u&gt;&lt;/strong&gt; - in my current role as a CTO of an early-stage startup, I make many choices about tools, programming languages, architecture, vendors, etc. This retrospective view was fascinating not only for the tools themselves but also for the arguments.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://cep.dev/posts/every-infrastructure-decision-i-endorse-or-regret-after-4-years-running-infrastructure-at-a-startup/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Everything You Can Do with Python’s textwrap Module&lt;/u&gt;&lt;/strong&gt; - I have used Python for more than 10 years and never heard of textwrap model. Maybe you, too, haven&apos;t heard of it.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/everything-you-can-do-with-pythons-textwrap-module-0d82c377a4c8&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;It was never about LLM performance&lt;/u&gt;&lt;/strong&gt; - I couldn&apos;t agree more. The performance gaps between different LLMs are becoming neglectable. Now, it is about the experience you build using those models and the guardrails you put in to ensure the experience.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://read.technically.dev/p/it-was-never-about-llm-performance&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;u&gt;&lt;strong&gt;How to build an enterprise LLM application: Lessons from GitHub Copilot&lt;/strong&gt;&lt;/u&gt; - the post ends with a summary of 3 key takeaways - &lt;/p&gt;



&lt;ul class=&quot;wp-block-list&quot;&gt;
&lt;li&gt;Identify a focused problem and thoughtfully discern an AI’s use cases.&lt;/li&gt;



&lt;li&gt;Integrate experimentation and tight feedback loops into the design process&lt;/li&gt;



&lt;li&gt;As you scale, continue to leverage user feedback and prioritize user needs&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Those takeaways are general and correct for almost every product launch I can think of. The post provides more concrete tips for LLM applications. It is interesting to read about a product on such a scale that I use it on a daily basis.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.blog/2023-09-06-how-to-build-an-enterprise-llm-application-lessons-from-github-copilot/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Speaking for Hackers&lt;/span&gt;&lt;/strong&gt; - public speaking is hard. From choosing a topic, submitting a CFP, preparing your talk and slides, and wrapping it all up. Every step can be tricky, and each of us has other things that are harder for us. This site provides excellent materials for all the parts before, during, and after the talk, making it easier to step out of our shells and share the knowledge.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://sfhbook.netlify.app/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>decision making</category><category>infrastructure</category><category>llm</category><category>public_speaking</category><category>python</category><category>textwrap</category></item><item><title>5 interesting things (09/02/2024)</title><link>https://tomron.net/2024/02/09/5-interesting-things-09-02-2024/</link><guid isPermaLink="true">https://tomron.net/2024/02/09/5-interesting-things-09-02-2024/</guid><description>Closing the women’s health gap: A $1 trillion opportunity to improve lives and economies - a McKinsey report that highlights the gender health gap and points…</description><pubDate>Fri, 09 Feb 2024 10:21:02 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Closing the women’s health gap: A $1 trillion opportunity to improve lives and economies&lt;/span&gt;&lt;/strong&gt; - a McKinsey report that highlights the gender health gap and points to the opportunity - potential for a $1 trillion economic gain with additional societal impact. One interesting point is that there are gaps and flaws throughout the value chain - drug effectiveness, therapy access, research functions, etc. This hints that there are many opportunities out there that can make a significant impact.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.mckinsey.com/mhi/our-insights/closing-the-womens-health-gap-a-1-trillion-dollar-opportunity-to-improve-lives-and-economies&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Slashing Data Transfer Costs in AWS by 99%&lt;/span&gt;&lt;/strong&gt; - one of the costs developers often forget or dismiss when considering architecture is the cost of data transfer. The solution described in this post is elegant and demonstrates the effect of deep knowledge and understanding of the domain. Simple to trivial architectural decisions can cost so much.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.bitsand.cloud/posts/slashing-data-transfer-costs&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;3 questions that will make you a phenomenal rubber duck&lt;/span&gt;&lt;/strong&gt; - I &lt;a&gt;previously&lt;/a&gt; mentioned that debugging skills are essential, and it is important to iterate and refine them. I especially liked the 3rd question - &quot;If your hypothesis were wrong, how could we disprove it?&quot; as it forces one to think the other way around and see a slightly bigger picture.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://blog.danslimmon.com/2024/01/18/3-questions-that-will-make-you-a-phenomenal-rubber-duck&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Product Managing to Prevent Burnout&lt;/span&gt;&lt;/strong&gt; - burnout is more common than we think and can have many causes. Moreover, different people would react differently to different cultures and would burn out or not burn out accordingly. The most important takeaway is that managing and controlling burnout is a team sport; it is not only the concern of the direct manager, but product managers can also participate in this effort. (I strongly recommend the honeycomb blog)&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.honeycomb.io/blog/product-managing-prevent-burnout&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;The “errors” that mean you’re doing it right&lt;/span&gt;&lt;/strong&gt; - I was able to identify or witness almost all the errors mentioned in the post. I also think some of those errors, such as Letting someone go soon after hiring, Pivoting a strategy just after creating it, etc, could be attributed to the sunk cost fallacy. And if we want to make the opening sentence more extreme - &quot;If you don’t make mistakes, you’re not working&quot;.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://longform.asmartbear.com/good-problems-to-have&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>burnout</category><category>debugging</category><category>healthtech</category><category>product</category><category>women&apos;s health</category></item><item><title>5 interesting things (15/01/2024)</title><link>https://tomron.net/2024/01/15/5-interesting-things-15-01-2024/</link><guid isPermaLink="true">https://tomron.net/2024/01/15/5-interesting-things-15-01-2024/</guid><description>SQL as API - I saw several efforts to expose RDBMS as API over the years. This post suggests another engel - exposing an API that accepts SQL. Consider this a…</description><pubDate>Mon, 15 Jan 2024 09:58:01 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;SQL as API&lt;/span&gt; &lt;/strong&gt;- I saw several efforts to expose RDBMS as API over the years. This post suggests another engel - exposing an API that accepts SQL. Consider this a brain teaser.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://valentin.willscher.de/posts/sql-api/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;SomeEstimates&lt;/span&gt;&lt;/strong&gt; -  For me, the loss of trust described in the post is the most harassing implication of a culture where estimates are often missed -&lt;/p&gt;



&lt;p&gt;&quot;Another negative outcome is a loss of trust between developers and management since a constant sense of urgency is tantamount to no sense of urgency at all.&quot;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.shaiyallin.com/post/someestimates&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How to Make Anthropic’s Claude Models Consistently Generate Valid JSON&lt;/span&gt;&lt;/strong&gt; - Gettign valid and consistent JSON from LLM is an issue. Prompt engineering, as described in this post, can solve some of those issues; the json_repair package mentioned there can solve additional problems. With the &lt;a&gt;GPT store&lt;/a&gt; announced this week and the evolving models, I believe this will be solved soon in one way or another.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://levelup.gitconnected.com/how-to-make-anthropics-claude-models-consistently-generate-valid-json-d74ce037ca46&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Bonus - &lt;a&gt;https://github.com/mangiucugna/json_repair&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;My PostgreSQL wishlist&lt;/span&gt;&lt;/strong&gt; - Another brain teaser. The items I most relate to are having created_at and updated_at columns created and maintained automatically and being immutable. I&apos;m curious to follow the comments on this post.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://ryanguill.com/postgresql/sql/2024/01/08/postgresql-wishlist.html&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Everyday storytelling for engineers. The CAO Method&lt;/strong&gt;&lt;/span&gt; - Although storytelling has become an overused buzzword in the last few years (I thought it was already over the hill). This post is important not due to the specific method but to the recognition that ICs practice storytelling every day, and mastering this skill can affect your promotion, career path, tasks you get, etc. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://tonyfreed.substack.com/p/everyday-storytelling-for-engineers&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>database</category><category>estimates</category><category>json</category><category>llm</category><category>postgresql</category><category>sql</category><category>storytelling</category></item><item><title>Cannot get geekier</title><link>https://tomron.net/2024/01/06/cannot-get-geekier/</link><guid isPermaLink="true">https://tomron.net/2024/01/06/cannot-get-geekier/</guid><description>I contributed my part and created a connections board - https://connections.swellgarfo.com/game/-NnTsSZ5VzgJeM1OVLDa</description><pubDate>Sat, 06 Jan 2024 15:09:31 GMT</pubDate><content:encoded>
&lt;p&gt;I contributed my part and created a connections board -&lt;/p&gt;



&lt;p&gt;https://connections.swellgarfo.com/game/-NnTsSZ5VzgJeM1OVLDa&lt;/p&gt;
</content:encoded></item><item><title>5 interesting things (13/12/2023)</title><link>https://tomron.net/2023/12/13/5-interesting-things-13-12-2023/</link><guid isPermaLink="true">https://tomron.net/2023/12/13/5-interesting-things-13-12-2023/</guid><description>Engineering Team Lessons from Cycling - having a background in team sports (Rugby) and individual sports (running), I enjoy such posts that bring experience…</description><pubDate>Wed, 13 Dec 2023 20:58:57 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Engineering Team Lessons from Cycling&lt;/span&gt;&lt;/strong&gt; - having a background in team sports (Rugby) and individual sports (running), I enjoy such posts that bring experience from one domain to another.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://benjiweber.co.uk/blog/2023/10/15/engineering-team-lessons-from-cycling/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How to (and how not to) design REST APIs&lt;/span&gt;&lt;/strong&gt; - although I read several posts about REST API best practices, I found this post very insightful, reasoned, and with great examples.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/stickfigure/blog/wiki/how-to-(and-how-not-to)-design-rest-apis&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Handling a Regional Outage: Comparing the Response From AWS, Azure and GCP&lt;/span&gt;&lt;/strong&gt; - luckily for the post author, all the major cloud services had regional outages in the last while, so he can compare their responses. This will not tip the scales when choosing a cloud provider but will let you know what to expect. It is also an interesting thought on handling outages as a provider.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://open.substack.com/pub/pragmaticengineer/p/handling-a-regional-outage-comparing&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Python Errors As Values&lt;/u&gt;&lt;/strong&gt; - it is sometimes tough to move from one technology to another - being a newbie all over again, thinking differently, adapting to a new ecosystem, etc. It also makes you ponder concepts that were previously perceived as obvious. For example, the approach for errors in Python. Without spoilers - there is an elegant Pythonic way to implement it.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.inngest.com/blog/python-errors-as-values&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;croniter&lt;/span&gt;&lt;/strong&gt; - this is a cron utilities package. For example, it helps you find the next time a cronjob should be called given a datetime object. It can also find the previous iteration, validate a cron expression, test if a datetime matches a cron condition, etc.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/kiorky/croniter&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>azure</category><category>cloud</category><category>cron</category><category>gcp</category><category>python</category><category>rest api</category></item><item><title>6 Thoughts on Smart Brevity</title><link>https://tomron.net/2023/10/10/6-thoughts-on-smart-brevity/</link><guid isPermaLink="true">https://tomron.net/2023/10/10/6-thoughts-on-smart-brevity/</guid><description>Another one bites the dust - I just finished hearing &quot; Smart Brevity: The Power of Saying More with Less &quot; by Jim VandeHei, Mike Allen, and Roy Schwartz. One…</description><pubDate>Tue, 10 Oct 2023 21:57:57 GMT</pubDate><content:encoded>
&lt;p&gt;Another one bites the dust - I just finished hearing &quot;&lt;a&gt;Smart Brevity: The Power of Saying More with Less&lt;/a&gt;&quot; by Jim VandeHei, Mike Allen, and Roy Schwartz. One of my chief complaints about engineering training is the dismissal of communication skills - speaking, reading, and writing.&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://twitter.com/tomron696/status/1588241015034388480
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;Effective communication for developers is everywhere -&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Being succinct and accurate in daily meetings&lt;/li&gt;



&lt;li&gt;Opening clear tickets so others can understand, reproduce, and prioritize&lt;/li&gt;



&lt;li&gt;Effectively communicate their work, suggestions, etc.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Here are some thoughts I had while reading the book -&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Using LLMs&lt;/strong&gt; - chatGPT, along with other tools such as Grammarly, Wordtune, and so on, can help you tune the tone of your passage and adjust it to your audience. The book recommends asking a friend for feedback, but in 2023, we can first ask chatGPT.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;CV&lt;/strong&gt; - the book suggests many scenarios for using smart brevity - social media, presentations, etc. I would also like to suggest writing a CV. Many CVs start with a short paragraph about the person. You can use this paragraph wisely.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Spell out your takeaways&lt;/strong&gt; - I understand the rationale while struggling with this advice. This is a rhetoric trick - tell your audience what is the one thing you want them to take from this talk instead of leaving it open.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Amazon 6 pagers&lt;/strong&gt; - the book starts with saying like &quot;words overdose&quot; and &quot;words addicts&quot;. Stating that since we moved to the web instead of print, the number of words is unlimited, and nobody reads them besides the headlines. Then, they refer to Amazon 6 pagers as a good example of a compact way of transferring a message. Six pages is a lot, and there is probably a way to reduce the length.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Culture&lt;/strong&gt; - I find this book very American-centric and complains that people need to be more direct. This is, of course, relative to the Israeli culture I come from. I strongly recommend reading &quot;&lt;a&gt;The Culture Map&lt;/a&gt;&quot;  by Erin Meyer on this topic. &lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Content structure&lt;/strong&gt; - one of the repeating recommendations is to use bullet points to draw attention and help the audience focus. Additional recommendations include using bold fonts to emphasize important points, combining graphs and charts, etc. As a reader, I get this completely. As a writer who tries to distill her words, I want my words to stand out without using those tricks.&lt;/li&gt;
&lt;/ol&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://twitter.com/tomron696/status/1528730823641407488
&lt;/div&gt;&lt;/figure&gt;
</content:encoded><category>reading</category><category>smart brevity</category></item><item><title>5 thoughts on Working Backwards</title><link>https://tomron.net/2023/10/07/5-thoughts-on-working-backwards/</link><guid isPermaLink="true">https://tomron.net/2023/10/07/5-thoughts-on-working-backwards/</guid><description>I had a long day of walking around and waiting a lot, so it was a good chance to listen &quot; Working Backwards &quot; by Colin Bryar and Bill Carr. It was more…</description><pubDate>Sat, 07 Oct 2023 17:24:31 GMT</pubDate><content:encoded>
&lt;p&gt;I had a long day of walking around and waiting a lot, so it was a good chance to listen &quot;&lt;a&gt;Working Backwards&lt;/a&gt;&quot; by Colin Bryar and Bill Carr. It was more insightful than I anticipated. Here are my thoughts about it - &lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Corporates vs. startups&lt;/strong&gt; - whenever I read or hear about best practices and success stories of big organizations (Amazon, Netflix, etc.), I wonder what I can adapt and what I can use for a small startup. Two things sparked my mind -
&lt;ul&gt;
&lt;li&gt;Hiring for diversity - the book mentioned that they cared for diversity, specifically concerning gender, from the early days of Amazon. They say that one of the groups noticed that they had some bias in their hiring process, specifically in CV screening, and wanted to improve it while not changing the bar. To eliminate biases that arise when reading women&apos;s CVs, they modified the hiring process so that every woman who applied to the position would go through a phone interview.&lt;/li&gt;



&lt;li&gt;Diving into the details - in startups, there are always fires to put away, new requests, and urgent tasks. I can improve on diving into the details, and that can put some of the fires away.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;



&lt;li&gt;&quot;Be stubborn on the vision but flexible on the details.&quot; - I love this quote, and I think it is one of the enablers for Amazon&apos;s innovative culture.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Blackberry inspiration&lt;/strong&gt; - the authors mention that when designing Kindle, they were inspired by Blackberry, which was innovative for the time being as it was always synced and available. As in the examples in the Jobs to Be Done book - while the inspiration stands in place, the example is a bit outdated. Maybe I should read &lt;a&gt;this&lt;/a&gt; next.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;6 pagers &lt;/strong&gt;- one of the justifications brought in the book for moving from PowerPoint to six pagers is that it eliminates the differences between a skilled marketing person, a junior developer, and an experienced VP and makes it more equal. I disagree with this argument. It might decrease the dependency on presentation skills, but I still think that there is a gap and experience matters even in writing - choosing the right wording and style and surfacing the relevant doubts, concerns, or benefits of the relevant stakeholders and audience. Writing is also an art, and writing a concise passage is not an easy task. &lt;/li&gt;



&lt;li&gt;&lt;strong&gt;WatchNow subscription&lt;/strong&gt; - when talking about Prime Videos, they mentioned Netflix&apos;s early days when it was called WatchNow, and they offered a subscription to whoever had a DVD subscription. This resonates with jobs to be done advice regarding obstacles to adaptation -  offer the customers a way to try the product (freemium, limited trial, etc) before they buy it.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;AWS&lt;/strong&gt; - as they say, the origin story and other stories about AWS can fill a book independently. I look forward to such a book. Having said that, they talk about the pricing of S3 and whether this should be a subscription or usage-based, what should count for usage - storage size, API calls, etc., and how the pricing was changed once they better understood the usage patterns. This is a great anecdote that even if you walk backward and prepare the PR and Q&amp;amp;A before you develop the product, you will learn new things when users start using it.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;2 pizza teams legend&lt;/strong&gt; - there are a few concepts associated with Amazon, such as the &quot;2 pizza teams&quot; which, after reading the book, I find it is highly misunderstood or very freely interpreted. On the other hand, I didn&apos;t hear many companies or many people discussing the &quot;Working Backwards&quot; process, which I find far more interesting, and I wonder why one concept is so popular while another one stays in the shade.&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>amazon</category><category>reading</category></item><item><title>5 thoughts on Jobs to Be Done</title><link>https://tomron.net/2023/10/06/5-thoughts-on-jobs-to-be-done/</link><guid isPermaLink="true">https://tomron.net/2023/10/06/5-thoughts-on-jobs-to-be-done/</guid><description>After it was mentioned in &quot;Second Brain&quot; and was waiting in my reading list for a long time, I finally listen to &quot; Jobs to Be Done: A Roadmap for…</description><pubDate>Fri, 06 Oct 2023 23:47:31 GMT</pubDate><content:encoded>
&lt;p&gt;After it was mentioned in &quot;Second Brain&quot; and was waiting in my reading list for a long time, I finally listen to &quot;&lt;a&gt;Jobs to Be Done: A Roadmap for Customer-Centered Innovation&lt;/a&gt;&quot; by Stephen Wunker, Jessica Wattman, and David Farber. Here are my thoughts about it -&lt;/p&gt;



&lt;p&gt;1. &lt;strong&gt;Examples relevancy &lt;/strong&gt;- The book was published in 2016 are brings several examples - slack, snapchat, etc. Are those examples still relevant? Do they still emphasize the relevant points? &lt;/p&gt;



&lt;p&gt;This problem is not unique to this book. One often finds an anecdote and uses it to emphasize or justify a theory. As time passes, the perspective also changes, and it sometimes differs from the theory.&lt;/p&gt;



&lt;p&gt;2. &lt;strong&gt;Multiple stakeholders&lt;/strong&gt; - B2B purchasing procedures frequently involve a varied group of stakeholders, each with their unique jobs to be done. This point of view is often not thought of and has great implications for how sales should done.&lt;/p&gt;



&lt;p&gt;3. &lt;strong&gt;Emotional and Social Components&lt;/strong&gt; - jobs to be done are not only functional tasks such as getting from here to there, wearing something, etc. Jobs to be done also have emotional and social components that should be addressed.&lt;/p&gt;



&lt;p&gt;4. &lt;strong&gt;Obstacles to use and obstacles to adoption &lt;/strong&gt;- Obstacles to adoption are challenges that restrict a consumer&apos;s inclination to purchase a product or service. Facilitating the ease with which people can learn about and experiment with your new offering can diminish obstacles to adoption. Obstacles to use refer to impediments that hinder success, ultimately reducing a customer&apos;s probability of ongoing product usage, acquiring supplementary features, or upgrading to more recent editions. I love this insight, and it is an important distinction, especially when one needs to prioritize.&lt;/p&gt;



&lt;p&gt;5. &lt;strong&gt;Effective Brainstorming &lt;/strong&gt;- brainstorming is discussed in long in one of the chapters. Personally, I have many doubts about group brainstorming as a way to encourage creativity. If there is one thing to take from this discussion, such a session should be well-mederated. See more &lt;a&gt;here&lt;/a&gt;. &lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>jobs to be done</category><category>JTBD</category><category>reading</category></item><item><title>5 thoughts on Building a Second Brain</title><link>https://tomron.net/2023/09/27/5-thoughts-on-building-a-second-brain/</link><guid isPermaLink="true">https://tomron.net/2023/09/27/5-thoughts-on-building-a-second-brain/</guid><description>&quot;a wealth of information creates a poverty of attention and a need to allocate that attention efficiently among the overabundance of information sources that…</description><pubDate>Wed, 27 Sep 2023 08:22:34 GMT</pubDate><content:encoded>
&lt;blockquote class=&quot;wp-block-quote&quot;&gt;
&lt;p&gt;&quot;a wealth of information creates a poverty of attention and a need to allocate that attention efficiently among the overabundance of information sources that might consume it.”&lt;/p&gt;
&lt;cite&gt;Herbert A. Simon&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;The quote above appears in &quot;&lt;a&gt;Building a Second Brain&lt;/a&gt;&quot; by Tiago Forte, which I finished reading last week. I strongly relate to it, and that book helps me reflect on my personal knowledge management.  &lt;/p&gt;



&lt;p&gt;TL;DR - find a personal knowledge management method that works for you (e.g., the &lt;a&gt;PARA method&lt;/a&gt;). It does not have to be perfect. You don&apos;t have to shift everything. Just get it started and adjust as you go. &lt;/p&gt;



&lt;p&gt;Here are a few thoughts I had while reading the book -&lt;/p&gt;



&lt;p&gt;1. &lt;strong&gt;Progressive Summarization&lt;/strong&gt; - the progressive summarization technique reminded me of a joke my uncle told me a while back - a student in his first semester asked the lecturer how to prepare best for the exam. She tells him - after every class, summarize your class notes. At the end of each week, summarize all the daily summaries. At the end of each month, summarize the weekly summaries and so on. On the week before the exam, summarize the summary from the day before. They meet just before the exam, and she asks him how it went. He answers - &quot;great, I was able to summarize everything into one word - bullshit.&quot;&lt;/p&gt;



&lt;p&gt;2. &lt;strong&gt;Divergence and Convergence&lt;/strong&gt; - In my first or second semester in the university, I took a class on academic writing. They told us that a good academic essay is built like an hourglass. It starts with a very wide question or statement, then narrows down to a specific claim or private case, and finishes with the broader picture, zoom out, etc. See more &lt;a&gt;here&lt;/a&gt;. Divergence and convergence are the same. You start very scattered, then connect the dots, focus, reach some advancement, and repeat.&lt;/p&gt;



&lt;p&gt;3. &lt;strong&gt;Hemingway&apos;s bridges&lt;/strong&gt; - &quot;The “Hemingway Bridge” is a technique used by author Ernest Hemingway in which he would stop his writing for the day only AFTER he knew what was coming next.&quot; (&lt;a&gt;here&lt;/a&gt;). Each of us has its own hooks that help him or her restart the next time. A few years ago, I read Hila Noga&apos;s &lt;a&gt;post&lt;/a&gt; about getting your programming flow going, and it is Hemingway&apos;s bridge for developers.&lt;/p&gt;



&lt;p&gt;4. &lt;strong&gt;Blog as an interface&lt;/strong&gt; - I initially created the blog so it would be easier for me to search for links I once saw and to share with other people. One can view it as some interface to my second brain. I am still in the process of thinking about which methods are right for me to adapt from the book.&lt;/p&gt;



&lt;p&gt;5. &lt;strong&gt;Listening to an e-book &lt;/strong&gt;- I&apos;m a big fan of highlighting and writing comments in books, papers, etc. The audiobook format is challenging for me in this aspect, and moreover, I usually listen to an e-book while doing other things like walking or driving, which misses some of the second brain practice. I still need to figure out how to tackle this. On the other hand, I use writing and notes of all kinds to unload my brain and as an easier way to access them in the future. I was very happy that the topic of offloading was widely discussed in the book.&lt;/p&gt;
</content:encoded><category>reading</category><category>secondbrain</category></item><item><title>Team Health Check</title><link>https://tomron.net/2023/09/07/team-health-check/</link><guid isPermaLink="true">https://tomron.net/2023/09/07/team-health-check/</guid><description>Today, I heard Dafna Rosenblum’s (see Dafna’s blog here ) talk on the EMIL (Engineering Manager IL) meetup about “Team Health Check”. It was the first time I…</description><pubDate>Thu, 07 Sep 2023 17:12:00 GMT</pubDate><content:encoded>
&lt;p&gt;Today, I heard Dafna Rosenblum’s (see Dafna’s blog &lt;a&gt;here&lt;/a&gt;) talk on the &lt;a&gt;EMIL&lt;/a&gt; (Engineering Manager IL) meetup about “Team Health Check”. It was the first time I heard about the concept, so I read more about it.&lt;/p&gt;



&lt;p&gt;Spotify developed the team health check concept and introduced it in 2014 (&lt;a&gt;here&lt;/a&gt;).  About 6 months ago, Spotify published a new &lt;a&gt;post&lt;/a&gt; about “Getting More from Your Team Health Checks”. The post focuses on improving the team experience in this workshop and suggests the following main ideas -&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Customize wisely&lt;/strong&gt; - tailor the right questions and health checks that fit the team and the organization.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Dig Deep&lt;/strong&gt; - Good facilitation is essential to enable more profound conversations. Good facilitation should help to step outside the team&apos;s day-to-day communication patterns and create a psychologically safe place (see &lt;a&gt;here&lt;/a&gt;) to raise issues. The post suggests a few strategies on how to do it.&lt;/li&gt;



&lt;li&gt;&lt;strong&gt;Follow through&lt;/strong&gt; - you should follow up and reiterate the topics that were raised in the team health check workshop. That can be in 1-1 meetings, scheduling required meetings, checking your priority or attention, etc.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;I found a few online tools to help facilitate team health checks - &lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a&gt;teamhealthcheck.io&lt;/a&gt; - “A free, anonymous, and super simple tool to run a version of the Spotify Health Check Survey. “&lt;/li&gt;



&lt;li&gt;Miro boards - There are multiple miro templates for team health checks - e.g., &lt;a&gt;here&lt;/a&gt;, &lt;a&gt;here&lt;/a&gt;, and &lt;a&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Another tip from Dafna to start meeting (and every meeting) is to start with a quick intake to break the ice and increase engagement. For example, ask the member to describe their mood using an emoji.&lt;/p&gt;
</content:encoded><category>engineering management</category><category>leadership</category><category>spotify</category></item><item><title>5 interesting things (04/09/2023)</title><link>https://tomron.net/2023/09/04/5-interesting-things-04-09-2023/</link><guid isPermaLink="true">https://tomron.net/2023/09/04/5-interesting-things-04-09-2023/</guid><description>12 Debugging tools I wish I knew earlier - it describes more debugging strategies than debugging tools (i.e. minimal reproduction is not a tool). One strategy…</description><pubDate>Mon, 04 Sep 2023 10:08:33 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;12 Debugging tools I wish I knew earlier&lt;/span&gt;&lt;/strong&gt; &lt;img style=&quot;width:20px&quot; src=&quot;https://fonts.gstatic.com/s/e/notoemoji/15.0/1f528/72.png&quot; alt=&quot;🔨&quot; /&gt; -  it describes more debugging strategies than debugging tools (i.e. minimal reproduction is not a tool). One strategy I missed in this post is adding breakpoints. If I were to write this post, I would order it in an escalation order. For example, reading the error message would be in a higher place. However, it is an important post, especially for junior developers. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://careercutler.substack.com/p/12-debugging-tools-i-wish-i-knew&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Consistency Patterns&lt;/u&gt; &lt;/strong&gt;- This post explains the different common consistency patterns - strong, eventual consistency, and weak consistency and the trade-offs. It also mentions the idea of causal consistency, which I find very interesting.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://systemdesign.one/consistency-patterns/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Remote work requires communicating more, less frequently&lt;/span&gt;&lt;/strong&gt; - he had me at &quot;Think of it like gzip compression, but for human-to-human communication. Yes, there’s slightly more processing overhead at the start, but it allows greater communications throughput using fewer “packets” (communicate more using less)&quot;. Seriously, once your organization grows above ten people and you start having clients, you will have people remote (colleagues or clients), and you will have to optimize your communication to pass your message.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://ben.balter.com/2023/08/04/remote-work-communicate-more-with-less/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Git log customization&lt;/span&gt;&lt;/strong&gt; - I&apos;m setting a new computer now for development and looking for a format that would be easy for me to use so this post came exactly on time&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.justinjoyce.dev/customizing-git-log-format/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Structuring your Infrastructure as Code&lt;/span&gt;&lt;/strong&gt; - I like the layers approach of this post and the examples from all 3 public cloud providers. I would like to give more thought to the exact layers and order. Note that this post is written by Pulumi, a solution engineer, so it might not work well with other IaC tools.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://leebriggs.co.uk/blog/2023/08/17/structuring-iac&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>consistency</category><category>debugging</category><category>git</category><category>iac</category><category>pulumi</category><category>remote work</category></item><item><title>5 interesting things (27/07/2023)</title><link>https://tomron.net/2023/07/27/5-interesting-things-27-07-2023/</link><guid isPermaLink="true">https://tomron.net/2023/07/27/5-interesting-things-27-07-2023/</guid><description>Designing Age-Inclusive Products: Guidelines And Best Practices - I have a 91-year-old grandmother who, in the last 10 years, cannot book a doctor&apos;s…</description><pubDate>Thu, 27 Jul 2023 19:54:56 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Designing Age-Inclusive Products: Guidelines And Best Practices&lt;/span&gt;&lt;/strong&gt; - I have a 91-year-old grandmother who, in the last 10 years, cannot book a doctor&apos;s appointment herself as she does not use a smartphone and cannot follow voice navigation. Even without a personal perspective, I am very interested in accessibility, and I try to pay attention to inclusivity and accessibility topics wherever relevant. However, I always wonder if those are general best practices or are limited to specific cohorts. Specifically, in this case, younger people usually have more technology literacy than older people and therefore can achieve their goals with less optimized flows and UI.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.smashingmagazine.com/2023/07/designing-age-inclusive-products-guidelines-best-practices/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;On Becoming VP of Engineering&lt;/u&gt;&lt;/strong&gt; - A two-part blog post series by Emily Nakashima, Honeycomb’s first VP of Engineering. The first part focuses on her path - coming originally from design, frontend, and product engineering and becoming VP of Engineering that also manages the backend and infrastructure. &lt;/p&gt;



&lt;p&gt;The second part talks about the day-to-day work and the shift in focus when moving from a director position to a VP position. I strongly agree with her saying, &quot;Alignment is your most important deliverable,&quot; and also think it is one of the hardest things to achieve.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.honeycomb.io/blog/becoming-vp-of-engineering-pt1&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.honeycomb.io/blog/becoming-vp-of-engineering-pt2&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Project Management for Software Engineers&lt;/span&gt;&lt;/strong&gt; - &quot;This article is a collection of techniques I’ve learned for managing projects over time, that attempts to combine agile best practices with project management best practices.&quot;. While a degree in computer science teaches lots of algorithms, software development, and so on, it does not teach project management and time management. Those skills are usually not required in junior positions but can help you have a more significant impact. Having said that, one should find the exact practices that fit him or her and that can evolve over time.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://sookocheff.com/post/engineering-management/project-management-for-software-engineers/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Designing Pythonic library APIs&lt;/span&gt;&lt;/strong&gt; - A while ago (2 years+-), I looked for a post/tutorial / etc. regarding designing SDK best practices and could not find something I was happy with. I like the examples (both good and bad examples) in this post. If you are in a hurry, all the take aways are summarized in the end (but sometimes hard to understand without context).&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://benhoyt.com/writings/python-api-design/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Fern&lt;/span&gt;&lt;/strong&gt; - &quot;Fern is an open source toolkit for designing, building, and consuming REST APIs. With Fern, you can generate client libraries, API documentation, and boilerplate for your backend server.&quot;. I haven&apos;t tried it myself yet, but if it works, it seems like cookie-cutter on steroids. In the era of LLMs, the next step is to generate all of those from free text.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/fern-api/fern&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>accessibility</category><category>api</category><category>engineering management</category><category>leadership</category><category>inclusion</category><category>project management</category><category>python</category><category>VP</category></item><item><title>5 interesting things (06/07/2023)</title><link>https://tomron.net/2023/07/06/5-interesting-things-06-07-2023/</link><guid isPermaLink="true">https://tomron.net/2023/07/06/5-interesting-things-06-07-2023/</guid><description>Potential impacts of Large Language Models on Engineering Management - this post is an essential starter for a discussion, and I can think of other impacts.…</description><pubDate>Thu, 06 Jul 2023 13:55:30 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Potential impacts of Large Language Models on Engineering Management &lt;/span&gt;&lt;/strong&gt;- this post is an essential starter for a discussion, and I can think of other impacts. For example - how interviewing \ assessing skills of new team members affected by LLMs? What skills should be evaluated those days (focusing on engineering positions)?&lt;/p&gt;



&lt;p&gt;One general caveat for using LLMs is completely trusting them without any doubts. This is crucial for a performance review.  Compared to code, if the code does not work, it is easy to trace and fix. If the performance review needs to be corrected, it might be hard to pinpoint what and where it got wrong, and the person getting it might need more confidence to say something.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.engstuff.dev/p/potential-impacts-of-large-language&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;FastAPI best practices&lt;/span&gt;&lt;/strong&gt; - one of the most reasoned and detailed guides I read. Also, the issues serve as comments to this guide and are worth reading. Ideally, I would like to take most of the ideas and turn them into a cookie-cutter project that is easy to create. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/zhanymkanov/fastapi-best-practices&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How Product Strategy Fails in the Real World&lt;/span&gt;&lt;/strong&gt; — What to Avoid When Building Highly-Technical Products - I saw all in action and hope to do better in the future.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://review.firstround.com/how-product-strategy-fails-in-the-real-world-what-to-avoid-when-building-highly-technical-products&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;1 dataset 100 visualizations&lt;/u&gt;&lt;/strong&gt; - I imagine this project as an assignment in a data visualization/data journalism course.  Yes, there are many ways to display data. Are they all good? Do they convey the desired message?&lt;/p&gt;



&lt;p&gt;There is a risk in being too creative, and there is some visualization there I cannot imagine using for anything reasonable.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://100.datavizproject.com/&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Automating Python code quality&lt;/span&gt;&lt;/strong&gt; - one additional advantage of using tools like Black, isort, etc., is that it reduces the cognitive load when doing a code review. The code reviewer should no longer check for style issues and can focus on deeper issues.&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://blog.fidelramos.net/software/python-code-quality&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt; - more extensive pre-commit template - &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/br3ndonland/template-python/blob/main/.pre-commit-config.yaml&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>visualization</category><category>engineering management</category><category>leadership</category><category>fastapi</category><category>pre-commit</category><category>product</category><category>python</category></item><item><title>Did you Miss me? PyCon IL 2023</title><link>https://tomron.net/2023/07/04/did-you-miss-me-pycon-il-2023/</link><guid isPermaLink="true">https://tomron.net/2023/07/04/did-you-miss-me-pycon-il-2023/</guid><description>Today I talked about working with missing data at PyCon IL . We started with a bit of theory about mechanisms of missing data - MCAR - The fact that the data…</description><pubDate>Tue, 04 Jul 2023 16:20:00 GMT</pubDate><content:encoded>
&lt;p&gt;Today I talked about working with missing data at &lt;a&gt;PyCon IL&lt;/a&gt;. We started with a bit of theory about mechanisms of missing data -&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;MCAR - The fact that the data are missing is independent of the observed and unobserved data.&lt;/li&gt;



&lt;li&gt;MAR - The fact that the data are missing is systematically related to the observed but not the unobserved data.&lt;/li&gt;



&lt;li&gt;MNAR - The fact that the data are missing is systematically related to the unobserved data.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;And deep-dived into an almost real-world example that utilizes the Python ecosystem - pandas, scikit-learn, and missingno.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;My slides are available &lt;a&gt;here&lt;/a&gt; and my code is &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;3 related posts I wrote about working with missing data in Python -&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a&gt;Pandas fillna vs scikit-learn SimpleImputer&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a&gt;pandas read_csv and missing values&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a&gt;Missing data in Python – 5 resources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded><category>missing values</category><category>missingno</category><category>pandas</category><category>pyconil</category><category>python</category><category>scikit-learn</category></item><item><title>Pandas fillna vs scikit-learn SimpleImputer</title><link>https://tomron.net/2023/06/21/pandas-fillna-vs-scikit-learn-simpleimputer/</link><guid isPermaLink="true">https://tomron.net/2023/06/21/pandas-fillna-vs-scikit-learn-simpleimputer/</guid><description>Missing data is prevalent in real-world data and can be missing for various reasons. Gladly, both pandas and scikit-learn several imputation tools to deal with…</description><pubDate>Wed, 21 Jun 2023 11:24:40 GMT</pubDate><content:encoded>
&lt;p&gt;Missing data is prevalent in real-world data and can be missing for various reasons. Gladly, both pandas and scikit-learn several imputation tools to deal with it. Pandas offers a basic yet powerful interface for univariate imputations using &lt;a&gt;&lt;code&gt;fillna&lt;/code&gt;&lt;/a&gt; and more advanced functionality using &lt;a&gt;&lt;code&gt;interpolate&lt;/code&gt;&lt;/a&gt;. scikit-learn offers both &lt;a&gt;&lt;code&gt;SimpleImputer&lt;/code&gt;&lt;/a&gt; for univariate imputations and &lt;a&gt;&lt;code&gt;KNNImputer&lt;/code&gt;&lt;/a&gt; and &lt;a&gt;&lt;code&gt;IterativeImputer&lt;/code&gt;&lt;/a&gt; for multivariate imputations. In this post, we will focus on &lt;code&gt;fillna &lt;/code&gt;and &lt;code&gt;SimpleImputer&lt;/code&gt; functionality and compare them.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Basic Functionality&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;&lt;code&gt;SimpleImputer&lt;/code&gt; offers four strategies to fill in the nan values - mean, median, most_frequet, and constant.&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; numpy &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; np&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pandas &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; sklearn.impute &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; SimpleImputer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;]])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;imp_mean &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; SimpleImputer(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;strategy&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;mean&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pd.DataFrame(imp_mean.fit_transform(df))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;output - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  7.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  3.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  9.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Can we achieve the same with pandas? Yes!&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna(df.mean())&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Want to impute with the most frequent value?&lt;/p&gt;



&lt;p&gt;Asuume - &lt;code&gt;df = pd.DataFrame([&apos;a&apos;, &apos;a&apos;, &apos;b&apos;, np.nan])&lt;/code&gt;&lt;/p&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;With &lt;code&gt;SimpleImputer&lt;/code&gt; -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;imp_mode &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; SimpleImputer(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;    strategy&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;most_frequent&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  imp_mode.fit_transform(df))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;With &lt;code&gt;fillna&lt;/code&gt; -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna(df.mode()[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;And the output of both -&lt;/p&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;&lt;/div&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  a&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  b&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Different Strategies&lt;/h3&gt;



&lt;p&gt;Want to apply different strategies for different columns? using scikit-learn you will need several imputers, one per each strategy. Using &lt;code&gt;fillna&lt;/code&gt; you can pass a dictionary, for example - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;]])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna({&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10000&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: df[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;].mean()})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;        1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  7.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10000.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  9.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;h3 class=&quot;wp-block-heading&quot;&gt;Advanced Usage&lt;/h3&gt;



&lt;p&gt;Want to impute values drawn from a normal distribution, no brainer - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;mean &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;scale &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;]])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;        (np.random.normal(mean, scale, df.shape))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;         1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;         2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.000000&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  3.857513&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.407452&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  6.000000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.000000&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  9.000000&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;Missing indicator&lt;/h2&gt;



&lt;p&gt;Using SimpleImputer, one can add indicator columns that obtain &lt;code&gt;1&lt;/code&gt; if the original column was missing, and &lt;code&gt;0&lt;/code&gt; otherwise. This can also be done using &lt;a&gt;MissingIndicator&lt;/a&gt;&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;]])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;mean_imp &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; SimpleImputer(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;strategy&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;mean&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;add_indicator&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;mean_imp.fit_transform(df)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pd.DataFrame(mean_imp.fit_transform(df))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  7.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  3.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  6.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  9.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Note that a missing column (i.e., columns 3 and 4 in the example above) corresponds only to columns with missing values. Therefore there is no missing indicator column corresponding to the column &lt;code&gt;0&lt;/code&gt;. If you are converting back and forth to pandas dataframes you should note this nuance.&lt;/p&gt;



&lt;p&gt;Another nuance to note when working with SimpleImputer is that columns that contain only missing values are dropped by default -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, np.nan], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan]])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;mean_imp &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; SimpleImputer(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;strategy&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;mean&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pd.DataFrame(mean_imp.fit_transform(df))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  7.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  3.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  9.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;This behavior is controllable using setting &lt;code&gt;keep_empty_features=True&lt;/code&gt;. While it is manageable, tracing columns might be challenging - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;mean_imp &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; SimpleImputer(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;    strategy&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;mean&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;    keep_empty_features&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;    add_indicator&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pd.DataFrame(mean_imp.fit_transform(df))&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  7.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  3.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  6.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  9.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  0.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;There is an elegant way to achieve similar behavior in pandas - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, np.nan], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;     [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan]])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pd.concat(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [df.fillna(df.mean()), &lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;     df.isnull().astype(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;).add_suffix(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;_ind&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)], &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;axis&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;  0_ind&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;  1_ind&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;  2_ind&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;  3_ind&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  7.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; NaN      &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  3.5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  6.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; NaN      &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  9.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; NaN      &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Working with dates&lt;/strong&gt;&lt;/h2&gt;



&lt;p&gt;Want to work with dates and fill several columns with different types? No problem with pandas - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;date&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;        datetime(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;), np.nan,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;        datetime(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;), datetime(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;     &quot;values&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: [np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan]})&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna(df.mean())&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;Before -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;        date  values&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;     NaN&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;        NaT     &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;     NaN&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;After -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;        date  values&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     2.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;18&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     3.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt; 2023&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;16&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     2.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Working with dates is an advantage that fillna has over SimpleImputer.&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;Backward and forward filling&lt;/h2&gt;



&lt;p&gt;So far, we treated the records and their order as independent. That is, we could have shuffled the records and that would not affect the expected imputed value. However, there are cases, for example, when representing time series when the order matters and we would like to impute based on later values (backfill) or earlier values (forward fill). This is done by setting the &lt;code&gt;method&lt;/code&gt; property. &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;    [[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan], [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;     [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;], [np.nan, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;]])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;method&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;bfill&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   9.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;   NaN  &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;One can also limit the number of consecutive values which are imputed -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;method&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;bfill&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;limit&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;      0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   7.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   4.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  NaN   &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;6.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   9.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;   NaN  &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  10.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Note that when using &lt;code&gt;bfill&lt;/code&gt; or &lt;code&gt;ffill&lt;/code&gt; and moreover, when specifying &lt;code&gt;limit&lt;/code&gt; to value other than &lt;code&gt;None&lt;/code&gt; it is possible that not all the values would be imputed.&lt;/p&gt;



&lt;p&gt;For me, that&apos;s a killer feature of &lt;code&gt;fillna&lt;/code&gt; comparing to &lt;code&gt;SimpleImputer&lt;/code&gt;&lt;/p&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;Treat Infinite values as na&lt;/h2&gt;



&lt;p&gt;Setting &lt;code&gt;pd.options.mode.use_inf_as_na = True&lt;/code&gt; will treat infinite values (i.e. &lt;code&gt;np.inf, np.INF, np.NINF&lt;/code&gt;) values as missing values, for example -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame([&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.inf, np.nan])&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.fillna(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;&lt;code&gt;pd.options.mode.use_inf_as_na = False&lt;/code&gt;&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  inf&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1000.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;&lt;code&gt;pd.options.mode.use_inf_as_na = True&lt;/code&gt;&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;     0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  2.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1000.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  1000.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Note that &lt;code&gt;inf&lt;/code&gt; and &lt;code&gt;na&lt;/code&gt; are not treated the same for other use cases, e.g. - &lt;code&gt;df[0].value_counts(dropna=False)&lt;/code&gt;-&lt;/p&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot; style=&quot;flex-basis:100%&quot;&gt;
&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;NaN    &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;NaN    &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;h2 class=&quot;wp-block-heading&quot;&gt;Summary&lt;/h2&gt;



&lt;p&gt;Both pandas and scikit-learn offer a basic functionality to deal with missing values. Assuming you are working with pandas Dataframe, pandas &lt;code&gt;fillna&lt;/code&gt; functionality can achieve everything &lt;code&gt;SimpleImputer&lt;/code&gt; can do and more - working with dates, back and forward fill, etc. Additionally, there are some edge cases and specific behaviors to pay attention to when choosing what to use. For example when using &lt;code&gt;bfill&lt;/code&gt; or &lt;code&gt;ffill&lt;/code&gt; method some values may not be imputed if there are the last ones or first ones respectively.&lt;/p&gt;
</content:encoded><category>fillna</category><category>imputations</category><category>missing values</category><category>pandas</category><category>python</category><category>scikit-learn</category><category>SimpleImputer</category><category>numpy</category></item><item><title>Few thoughts on Cloud FinOps Book</title><link>https://tomron.net/2023/06/05/few-thoughts-on-cloud-finops-book/</link><guid isPermaLink="true">https://tomron.net/2023/06/05/few-thoughts-on-cloud-finops-book/</guid><description>I just completed “ Cloud FinOps ” book by J.R. Storment and Mike Fuller, and here are a few thoughts - At first, I wondered whether I should read the 1st…</description><pubDate>Mon, 05 Jun 2023 08:29:42 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;/p&gt;



&lt;p&gt;I just completed “&lt;a&gt;Cloud FinOps&lt;/a&gt;” book by J.R. Storment and Mike Fuller, and here are a few thoughts -&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;At first, I wondered whether I should read the 1st edition, which I had easy access to, or the 2nd, which I had to buy. After reading a sample, I decided to buy the 2nd edition and am glad. This domain and community move quickly; a 2019 version would have been outdated and misleading.&lt;/li&gt;



&lt;li&gt;FinOps involves a paradigm shift - developers should consider not only the performance of their architecture (i.e., memory and CPU consumption, speed, etc.) but the cost associated with the resources they will use. Procurement is not done and approved by the finance team anymore. Developers’ decisions can have a significant influence on the cloud bill. FinOps teams bridge the engineering and finance teams (and more) and speak the language of all parties, along with additional skill sets and an overview of the entire organization. &lt;/li&gt;



&lt;li&gt;A general rule of thumb regarding commitments -
&lt;ol&gt;
&lt;li&gt;Longer commitment period (3 years → 1 year) = lower price (higher discount)&lt;/li&gt;



&lt;li&gt;More upfront (full upfront → partial upfront → no upfront )= lower price (higher discount)&lt;/li&gt;



&lt;li&gt;More specific (RI → Convertible RI → SP, region, etc.) = lower price (higher discount)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;



&lt;li&gt;The FinOps team should be up-to-date about the new cloud technologies updates and cost reduction options. I have been familiar with reserve and spot instances for a long time, but there are many other cost reduction options bits and bytes to pay attention to. For example, the following 2 points -
&lt;ol&gt;
&lt;li&gt;When purchasing saving plans (SP), which are monetary as appose to resource units commitments, the spend amount you commit to is post discount. Moreover, AWS will apply the SP to the resources that yield the highest discount. This implies that the discount rate diminishes when committing to more money.&lt;/li&gt;



&lt;li&gt;CloudFront security savings bundle (&lt;a&gt;here&lt;/a&gt;) is a saving plan that ties together the usage of CloudFront and WAF. The book predicts that such plans, e.g., combining multiple product usage, will become common soon.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;



&lt;li&gt;Commitments (e.g., SP, RI) are one of many ways to reduce costs. Removing idle resources (e.g., unattached drives), using correct storage classes (e.g., infrequent access, glacier), or making architecture changes (e.g., rightsizing, moving from servers to serverless, going via VPC endpoints, etc.) can help avoid and reduce cost. Those activities can happen in parallel - centralized FinOps team to manage commitments (aka cost reduction) and decentralized engineering teams optimize the resources they use (aka cost avoidance). Ideally, it is a tango. Each team moves a little step at a time to optimize their part.&lt;/li&gt;



&lt;li&gt;The FinOps domain-specific knowledge goes even further. For example, costs that engineers tend to miss or wrongly estimate e.g. network traffic cost, number of events, data storage events.&lt;/li&gt;



&lt;li&gt;The inform phase is part of the FinOps lifecycle - making the data available to the relevant participants. The Prius effect, i.e., real-time feedback, instantly influences behavior even without explicit recommendations or guidance. Visualizations (done right) can help understand and react to the data better. A point emphasized multiple times in the book - put the data in the path of the engineers or any other stakeholder. Don’t ask them to log in to a different system to review the data; integrate with existing systems they use regularly.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;Few resources I find helpful - &lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;FinOps foundation website - includes many resources and community knowledge - &lt;a&gt;https://www.finops.org/introduction/what-is-finops/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;



&lt;ol&gt;
&lt;li&gt;FinOps podcast - &lt;a&gt;https://www.finops.org/community/finops-podcast/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Infracost lets engineers see a cost breakdown and understand costs before making changes in the terminal, VS Code, or pull requests. &lt;a&gt;https://www.infracost.io/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Cloud Custodian - “Cloud Custodian is a tool that unifies the dozens of tools and scripts most organizations use for managing their public cloud accounts into one open source tool” - &lt;a&gt;https://cloudcustodian.io/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;FinOut - A Holistic Cost Management Solution For Your Cloud. I recently participated in a demo and that looks super interesting. &lt;a&gt;https://www.finout.io/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Startup guide to data cost optimization - my post summarizing AWS’s ebook about data cost optimization for startups - &lt;a&gt;https://tomron.net/2023/06/01/startup-guide-to-data-cost-optimization-summary/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;Twitter thread I wrote in Hebrew about the book - &lt;a&gt;https://twitter.com/tomron696/status/1657686198327062529&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><category>aws</category><category>cloud</category><category>finops</category><category>cloudfront</category></item><item><title>Startup guide to data cost optimization - summary</title><link>https://tomron.net/2023/06/01/startup-guide-to-data-cost-optimization-summary/</link><guid isPermaLink="true">https://tomron.net/2023/06/01/startup-guide-to-data-cost-optimization-summary/</guid><description>I read a lot about FinOps and cloud cost optimization those days and I came across AWS short ebook about data cost optimization . Cost optimization is part of…</description><pubDate>Thu, 01 Jun 2023 12:44:29 GMT</pubDate><content:encoded>
&lt;p&gt;I read a lot about FinOps and cloud cost optimization those days and I came across AWS short ebook about &lt;a&gt;data cost optimization&lt;/a&gt;. &lt;/p&gt;



&lt;p&gt;Cost optimization is part of AWS’s &lt;a&gt;well-architected framework&lt;/a&gt;. When we think about cost optimization, we usually only consider computing resources, while there are significant optimizations that can go beyond that - storage optimization, network, etc.&lt;/p&gt;



&lt;p&gt;Below is a combination of the six sections that appear in the e-books with some comments -&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Optimize the cost of information infrastructure&lt;/strong&gt; - the main point in this section is to use Graviton instances where applicable.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Decouple storage data from compute data &lt;/strong&gt;- 5 suggestions here which are pretty standard -&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Compress data when applicable, and use optimal data structures for your task.&lt;/li&gt;



&lt;li&gt;Consider data temperature when choosing data store and storage class - use the suitable s3 storage class and manage it using a life-cycle policy.&lt;/li&gt;



&lt;li&gt;Use low-cost compute resources, such as Spot Instances, when applicable - I have some dissonance here since I’m not sure that spot instances are attractive those days (see &lt;a&gt;here&lt;/a&gt;), specifically with the overhead of taking care of preempted instances. &lt;/li&gt;



&lt;li&gt;Deploy compute close to data to reduce data transfer costs - trivial.&lt;/li&gt;



&lt;li&gt;Use Amazon S3 Select and Amazon S3 Glacier Select to reduce data retrieval - Amazon S3 Select has several limitations (see &lt;a&gt;here&lt;/a&gt;), so I’m not sure it is worth the effort and better query via Athena.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Plan and provision capacity for predictable workload usage&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Choosing the right instance type based on workload pattern and growth  - is common sense. You&apos;ll save a little less if you purchase convertible reserve instances. However, in a fast-changing startup environment, there is a higher chance the commitment won’t be underutilized.&lt;/li&gt;



&lt;li&gt;Deploying rightsizing based on average or medium workload usage - this contradicts best practices described in &lt;a&gt;Cloud FinOps &lt;/a&gt;book, so I’m a bit hesitant here.&lt;/li&gt;



&lt;li&gt;Using automatic scaling capabilities to meet peak demand - is the most relevant advice in this section. Use auto-scaling groups or similar to accommodate for both performance and cost.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Access capacity on demand for unpredictable workloads&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Use Amazon Athena for ad hoc SQL workloads - as mentioned above, I prefer Athena over AWS S3 Select.&lt;/li&gt;



&lt;li&gt;Use AWS Glue instead of Amazon EMR for infrequent ETL jobs - I don’t have a strong opinion here, but if you have a data strategy in mind, I will try to adjust to it. Additionally, I feel that other AWS can be even easier and cost-effective to work with—for example,  Apache Spark in Amazon Athena, step functions, etc.&lt;/li&gt;



&lt;li&gt;Use on-demand resources for transient workloads or short-term development and testing needs - having said that, you should still keep an eye on your production services, ensure they are utilized correctly and rightsize them if needed.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Avoid data duplication with a centralized storage layer&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Implement a central storage layer to share data among tenants - I would shorten it to saying, “have a data strategy” - where you are, where you want to go, etc., which is not trivial in early startup days.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Leverage up to $100,000 in AWS Activate credits&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;This might be a bit contracting to the rest of the document since it feels like free money and delays your concern about cloud costs.&lt;/p&gt;
</content:encoded><category>aws</category><category>data strategy</category><category>finops</category><category>s3</category><category>athena</category><category>glue</category><category>emr</category><category>step functions</category></item><item><title>5 interesting things (16/05/2023)</title><link>https://tomron.net/2023/05/16/5-interesting-things-16-05-2023/</link><guid isPermaLink="true">https://tomron.net/2023/05/16/5-interesting-things-16-05-2023/</guid><description>Women’s health research lacks funding – these charts show how - not a proper tech link but - I liked the infographic very much (it missed some hovering…</description><pubDate>Tue, 16 May 2023 13:58:16 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Women’s health research lacks funding&lt;/span&gt;&lt;/strong&gt; – these charts show how - not a proper tech link but - I liked the infographic very much (it missed some hovering features) and believe this is an important topic.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.nature.com/immersive/d41586-023-01475-2/index.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Farewell to the Era of Cheap EC2 Spot Instances&lt;/span&gt;&lt;/strong&gt; - spot instances were the holy grail of cloud cost reduction and required a suitable architecture to accommodate it. While the cloud vendors suggest more and more ways to reduce cost, this well seems to dry out and it is backed with data about 5.5 million spot instances they spun over almost seven months. I don&apos;t know if it is the end of spot instances, but something goes on.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://pauley.me/post/2023/spot-price-trends/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Uptime Guarantees&lt;/span&gt;&lt;/strong&gt; — A Pragmatic Perspective - great down-to-earth analysis of uptime and the meaning of each additional nine -&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://world.hey.com/itzy/uptime-guarantees-a-pragmatic-perspective-736d7ea4&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Evidence&lt;/span&gt;&lt;/strong&gt; - Business Intelligence as Code - this project intrigued me. Developers often struggle with creating visualizations, the UI of most of the tools is confusing and complex for sporadic use, maybe evidence will unleash it for developers -&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/evidence-dev/evidence&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How to Debug&lt;/span&gt;&lt;/strong&gt; - &quot;The missing Semester of your CS education&quot; (&lt;a&gt;here&lt;/a&gt;) influenced how I think of juniors and recently graduated employees. Debugging is a skill you usually don&apos;t learn during formal studies and is essential in the industry. This post is a good starting point in the journey of debugging - &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://philbooth.me/blog/how-to-debug&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>debugging</category><category>ec2</category><category>finops</category><category>women&apos;s health</category></item><item><title>5 interesting things (25/04/2023)</title><link>https://tomron.net/2023/04/25/5-interesting-things-25-04-2023/</link><guid isPermaLink="true">https://tomron.net/2023/04/25/5-interesting-things-25-04-2023/</guid><description>Load balancing - excellent explanations and visualizations about load balancing and different approaches. I wish for follow-up posts about caching and…</description><pubDate>Tue, 25 Apr 2023 10:19:54 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Load balancing&lt;/u&gt;&lt;/strong&gt; - excellent explanations and visualizations about load balancing and different approaches. I wish for follow-up posts about caching and stickiness that influence performance and practical setups - how to set loaded balancers in AWS under those considerations.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://samwho.dev/load-balancing/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;visitdata&lt;/u&gt;&lt;/strong&gt;  - A terminal interface for exploring and arranging tabular data. I played with this tool a bit, it is very promising and, at the same time, has a stiff learning curve (think vi) that might keep people away.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.visidata.org/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Software accessibility for users with Attention Deficit Disorder (ADHD)&lt;/u&gt; &lt;/strong&gt;- software accessibility is a topic that I always try to keep in mind. The usual software accessibility patterns refer to visual impairment, e.g., color contrast, font size, etc. This post tackles the accessibility topic from the prism users with ADHD, and I find it groundbreaking. I find that the suggested patterns (e.g., recently opened subscription reminders, etc.) are primarily suitable UX for all users, not just those with ADHD.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://uxdesign.cc/software-accessibility-for-users-with-attention-deficit-disorder-adhd-f32226e6037c&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Minimum Viable Process&lt;/span&gt;&lt;/strong&gt; - I liked the post very much and the following point was the one I relate the most to - Minimum Viable Process process is iterative - processes and procedures must be constantly refined. Processes should evolve along with the company and serve the company rather then the company serve the process.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://mollyg.substack.com/p/minimum-viable-process&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Interactive Calendar Heatmaps with Python — The Easiest Way You’ll Find&lt;/span&gt;&lt;/strong&gt; - always wanted to create a GitHub-like activity visualization? Great, use plotly-calplot for that. See the example here - &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://python.plainenglish.io/interactive-calendar-heatmaps-with-plotly-the-easieast-way-youll-find-5fc322125db7&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>accessibility</category><category>load balancing</category><category>plotly</category><category>python</category><category>visualization</category></item><item><title>Thoughts on Tech Debt</title><link>https://tomron.net/2023/02/26/thoughts-on-tech-debt/</link><guid isPermaLink="true">https://tomron.net/2023/02/26/thoughts-on-tech-debt/</guid><description>I have been thinking about tech debt for a while now and how to address it daily. Few dilemmas for example - Should we update our Python version or a version…</description><pubDate>Sun, 26 Feb 2023 13:18:40 GMT</pubDate><content:encoded>
&lt;p&gt;I have been thinking about tech debt for a while now and how to address it daily. Few dilemmas for example - &lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Should we update our Python version or a version of one of the packages we use?&lt;/li&gt;



&lt;li&gt;We thought of a more efficient implementation for one of our functions. Should we invest time in it? When?&lt;/li&gt;



&lt;li&gt;What task should we prioritize for the next sprint? &lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;How do we measure our technical debt? Are we getting better, and what does better means? Or at least not worse?&lt;/p&gt;



&lt;p&gt;So I have compiled a small reading list that I can share with my team and align on terminology and ideas. Feel free to add your thoughts.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The 4 main types of technical debt&lt;/strong&gt; - this is an explanation of Martin Fowler&apos;s Technical Debt Quadrant. This is a first step towards establishing a common language about technical debt.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://blog.codacy.com/4-types-technical-debt/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The different types of technical debt&lt;/strong&gt; - Another piece in the puzzle to use a common terminology. While the split into categories makes sense, I don&apos;t entirely agree with the fixes and impacts.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://techdebtguide.com/types-of-technical-debt&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;The 25 Percent Rule for Tackling Technical Debt&lt;/strong&gt; - a post from Shopify engineering blog about their pillars of tech debt and a recommendation on how to invest time on those topics. That made me think about whether the discussion about tech debt should differ between different stages or sizes of companies&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://shopify.engineering/technical-debt-25-percent-rule&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;A Framework for Prioritizing Tech Debt&lt;/strong&gt; - this post tries to get the analogy closer to real debt and examine the interest rate. If I took this analogy one step further, I would say that it is a loan, and the prioritization and the remediations are the terms that we choose on loan, and sometimes those terms change either because we recycle the loan, win a big sum and can pay back, etc. Or because something external changed, e.g., interest rate.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.maxcountryman.com/articles/a-framework-for-prioritizing-tech-debt&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Tech Debt Isn&apos;t a Burden, It&apos;s a Strategic Lever for Success&lt;/strong&gt; - the approach here is closer to the loan analogy - &quot;&lt;strong&gt;view tech debt as a strategic lever&lt;/strong&gt; for your organization&apos;s success over time&quot;. That, together with other points in this post, made me think about the relations and interactions of product debt and tech debt - are they correlated or independent, and what influences them? are there any patterns in this duo or maybe trio (with business debt). I didn&apos;t yet find something to read about the topic that I was happy with.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.reforge.com/blog/managing-tech-debt&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;7 Top Metrics for Measuring Your Technical Debt&lt;/strong&gt; - this post suggests several metrics to measure technical debt, such as code churn, cycle time, code quality, and tools for measuring technical debt. One issue is that it does not cover infrastructure debt or process debt. For example - the complexity of deploy process, duplication between repositories, etc. Additionally, the underlying assumption in this post is that &quot;tech debt is bad,&quot; while I view it as a strategy or a trade-off. I also don&apos;t believe that one size fits all - if you want to measure, choose the one thing that is most important and informative for you, and don&apos;t worry if it changes over time.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://dev.to/alexomeyer/8-top-metrics-for-measuring-your-technical-debt-5bnm&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>management</category><category>tech debt</category></item><item><title>Exploratory Data Analysis Course - Draft</title><link>https://tomron.net/2022/12/30/exploratory-data-analysis-course-draft/</link><guid isPermaLink="true">https://tomron.net/2022/12/30/exploratory-data-analysis-course-draft/</guid><description>Last week I gave an extended version of my talk about box plots in Noa Cohen &apos;s Introduction to Data Science class at Azrieli College of Engineering Jerusalem.…</description><pubDate>Fri, 30 Dec 2022 11:27:27 GMT</pubDate><content:encoded>
&lt;p&gt;Last week I gave an extended version of my talk about &lt;a&gt;box plots&lt;/a&gt; in &lt;a&gt;Noa Cohen&lt;/a&gt;&apos;s Introduction to Data Science class at Azrieli College of Engineering Jerusalem. Slides can be found &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;The students are 3rd and 4th-year students, and some will become data scientists and analysts. Their questions and comments and my experience with junior data analysts made me understand that a big gap they have in purchasing those positions and performing well is doing EDA - exploratory data analysis. This reminded me of the &lt;a&gt;missing semester of your CS education&lt;/a&gt; - skills that are needed and sometimes perceived as common knowledge in the industry but are not taught or talked about in academia. &lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&quot;Exploratory Data Analysis (EDA) is the crucial process of using summary statistics and graphical representations to perform preliminary investigations on data in order to uncover patterns, detect anomalies, test hypotheses, and verify assumptions.&quot; (see more &lt;a&gt;here&lt;/a&gt;). EDA plays an important role in everyday life of anyone working with data - data scientists, analysts, and data engineers. It is often also relevant for managers and developers to solve the issues they face better and more efficiently and to communicate their work and findings.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;I started rolling in my head how would a EDA course would look like -&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Module 1 - Back to basics (3 weeks)&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Data types of variables, types of data&lt;/li&gt;



&lt;li&gt;Basic statistics and probability, correlation&lt;/li&gt;



&lt;li&gt;Anscombe&apos;s quartet&lt;/li&gt;



&lt;li&gt;Hands on lab - Python basics (pandas, numpy, etc.)&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Module 2 - Data visualization (3 weeks)&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Basic data visualizations and when to use them - pie chart, bar charts, etc.&lt;/li&gt;



&lt;li&gt;Theory of graphical representation (e.g  Grammar of graphics or something more up-to-date about human perception)&lt;/li&gt;



&lt;li&gt;Beautiful lies - graphical caveats (e.g. box plot)&lt;/li&gt;



&lt;li&gt;Hands-on lab - python data visualization packages (matplotlib, plotly, etc.).&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Module 3 - Working with non-tabular data (4 weeks)&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Data exploration on textual data &lt;/li&gt;



&lt;li&gt;Time series - anomaly detection&lt;/li&gt;



&lt;li&gt;Data exploration on images &lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;Module 4 - Missing data (2 weeks)&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Missing data patterns&lt;/li&gt;



&lt;li&gt;Imputations&lt;/li&gt;
&lt;/ol&gt;



&lt;ul&gt;
&lt;li&gt;Hands-on lab - a combination of missing data \ non-tabular data&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Extras if time allows-&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;
&lt;li&gt;Working with unbalanced data&lt;/li&gt;



&lt;li&gt;Algorithmic fairness and biases&lt;/li&gt;



&lt;li&gt;Data exploration on graph data&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;I&apos;m very open to exploring and discussing this topic more. Feel free to reach out - &lt;a&gt;twitter&lt;/a&gt;, &lt;a&gt;LinkedIn&lt;/a&gt;. &lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>visualization</category><category>EDA</category><category>matplotlib</category><category>pandas</category><category>plotly</category><category>python</category><category>teaching</category><category>numpy</category></item><item><title>5 interesting things (03/11/2022)</title><link>https://tomron.net/2022/11/03/5-interesting-things-03-11-2022/</link><guid isPermaLink="true">https://tomron.net/2022/11/03/5-interesting-things-03-11-2022/</guid><description>How to communicate effectively as a developer . - writing effectively is the second most important skill after reading effectively and one of the skills that…</description><pubDate>Thu, 03 Nov 2022 20:52:01 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How to communicate effectively as a developer&lt;/span&gt;&lt;/strong&gt;. - writing effectively is the second most important skill after reading effectively and one of the skills that can differentiate you and push you forward. If you read only one thing today, read this - &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.karlsutt.com/articles/communicating-effectively-as-a-developer/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;26 AWS Security Best Practices to Adopt in Production&lt;/span&gt;&lt;/strong&gt; - this is a periodic reminder to pay attention to our SecOps. This post is very well written and the initial table of AWS security best practices by service is great. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://sysdig.com/blog/26-aws-security-best-practices/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;EVA Video Analytics System&lt;/span&gt;&lt;/strong&gt; - &quot;EVA is a new database system tailored for video analytics -- think MySQL for videos.&quot;. Looks cool on first glance and I can think off use cases for myself, yet I wonder if it could become a production-level grade.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/georgia-tech-db/eva&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;I see it as somehow complementary to - &lt;a&gt;https://github.com/impira/docquery&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Forestplot&lt;/span&gt;&lt;/strong&gt; - &quot;This package makes publication-ready forest plots easy to make out-of-the-box.&quot;. I like it when academia and technology meet and this is really usable, also for data scientists&apos; day-to-day work. The next step would probably be deep integration with scikit-learn to pandas.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/lsys/forestplot&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Bonus - Python DataViz cookbook&lt;/strong&gt; - easy way to navigate between the different common python visualization practices (i.e via pandas vs using matplotlib / plotly /  seaborn). I would like to see it going to the next step - controlling the colors, grid, etc. from the UI and then switching between the frameworks but that&apos;s a starting point.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://dataviz.dylancastillo.co/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;roadmap.sh&lt;/span&gt;&lt;/strong&gt; - it is not always clear how to level up your skills, what you should learn next (best practices, technology - which, etc). Roadmap.sh attempts to create such roadmaps. While I don&apos;t agree with everything there, I think that the format and references are nice and it is a good inspiration.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://roadmap.sh/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Shameless plug - &lt;a&gt;Growing A Python Developer (2021)&lt;/a&gt;, I plan to write a small update in the near future.&lt;/p&gt;
</content:encoded><category>aws</category><category>communication</category><category>personal growth</category><category>python</category><category>security</category><category>visualization</category><category>pandas</category><category>matplotlib</category><category>seaborn</category><category>plotly</category><category>scikit-learn</category></item><item><title>Think outside of the Box Plot</title><link>https://tomron.net/2022/09/15/think-outside-of-the-box-plot/</link><guid isPermaLink="true">https://tomron.net/2022/09/15/think-outside-of-the-box-plot/</guid><description>Earlier today, I spoke at DataTLV conference about box plots - what they expose, what they hide, and how they mislead. My slides can be found here , and the…</description><pubDate>Thu, 15 Sep 2022 20:25:05 GMT</pubDate><content:encoded>
&lt;p&gt;Earlier today, I spoke at &lt;a&gt;DataTLV&lt;/a&gt; conference about box plots - what they expose, what they hide, and how they mislead. My slides can be found &lt;a&gt;here&lt;/a&gt;, and the code used to generate the plots is &lt;a&gt;here&lt;/a&gt;. &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Boxplots show 5 number statistics - min, max, median, q1 and,q3.&lt;/li&gt;



&lt;li&gt;The flaws of Box Plots can be divided into two - data that is not present in the visualization (e.g. number of samples, distribution) and the visualization being counter-intuitive (e.g. quartiles is hard to grasp the concept).&lt;/li&gt;



&lt;li&gt;I choose solutions that are easy to implement, either by leveraging existing packages code or by adding small tweaks. I used plotly.&lt;/li&gt;



&lt;li&gt;Aside of those adjustment I many times box plot is just not the right graph for the job.&lt;/li&gt;



&lt;li&gt;If the statistical literacy of your audience is not well founded I would try avoiding using box plot.&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Topics I didn&apos;t talk about and worth mentioning&lt;/strong&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;Mary Eleanor Hunt Spear -  data visualization specialize who pioneered the development of the bar chart and box plot. I had a slide about her but went too fast, and skipped it. See &lt;a&gt;here&lt;/a&gt;.&lt;/li&gt;



&lt;li&gt;How percentiles are calculated - Several methods exist, and different Python packages use different default methods. Read more -&lt;a&gt;http://jse.amstat.org/v14n3/langford.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;strong&gt;Resources I used to prepare the talk&lt;/strong&gt;&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a&gt;https://blog.minitab.com/en/statistics-and-quality-data-analysis/how-to-think-outside-the-boxplot&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a&gt;https://www.statisticshowto.com/probability-and-statistics/descriptive-statistics/box-plot/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a&gt;https://asklexph.com/thinking-outside-the-box-plot&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a&gt;https://nightingaledvs.com/ive-stopped-using-box-plots-should-you/&lt;/a&gt;&lt;/li&gt;



&lt;li&gt;&lt;a&gt;https://www.greenbook.org/mr/market-research-news/replacing-boxplots-and-histograms-with-rugs-violins-and-bean-plots/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>box plot</category><category>datatlv</category><category>python</category><category>visualization</category><category>plotly</category></item><item><title>5 interesting things (29/08/2022)</title><link>https://tomron.net/2022/08/29/5-interesting-things-29-08-2022/</link><guid isPermaLink="true">https://tomron.net/2022/08/29/5-interesting-things-29-08-2022/</guid><description>Human genetics 101 - a new blog about genetics by Nadav Brandes, who works at UCSF as part of the Ye lab. Reading is very accessible even to non-biologist…</description><pubDate>Mon, 29 Aug 2022 20:49:31 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Human genetics 101&lt;/span&gt;&lt;/strong&gt; - a new blog about genetics by Nadav Brandes, who works at UCSF as part of the Ye lab. Reading is very accessible even to non-biologist (like me :).&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://incrementally.net/2022/07/16/human-genetics-101/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;It&apos;s probably time to stop recommending Clean Code&lt;/span&gt;&lt;/strong&gt; - that&apos;s a relatively old post (from 2020) discussing a book that was published in 2008. It is a very common recommendation in the industry, and therefore, I think this post is so important. It is detailed and gives good examples, and reminds us that everything has to be taken with a grain of salt. I agree with the concluding paragraphs - experienced developers will gain almost nothing from reading the book, and inexperienced developers would have a hard time separating the wheat from the chaff.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://qntm.org/clean&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Bonus - &lt;a&gt;https://gordonc.bearblog.dev/dry-most-over-rated-programming-principle/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;The many flavors of hashing&lt;/span&gt;&lt;/strong&gt; - I like to be back to basic from time to time.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://notes.volution.ro/v1/2022/07/notes/1290a79c/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Five Lessons Learned From Non-Profit Management That Apply to Tech Management&lt;/span&gt;&lt;/strong&gt; - I like those mixes when practices and ideas from one domain of someone&apos;s life emerge in another domain. Those intersections are usually very productive and insightful.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/management-matters/5-lessons-learned-from-non-profit-management-that-apply-to-tech-management-add47980498a&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Demystifying the Parquet File Format&lt;/span&gt;&lt;/strong&gt; - I finally feel I understand how the parquet format works (although there are many more optimizations).&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/demystifying-the-parquet-file-format-13adb0206705&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>clean code</category><category>genetics</category><category>hashing</category><category>parquet</category><category>healthtech</category></item><item><title>5 interesting things (22/07/2022)</title><link>https://tomron.net/2022/07/22/5-interesting-things-22-07-2022/</link><guid isPermaLink="true">https://tomron.net/2022/07/22/5-interesting-things-22-07-2022/</guid><description>I analyzed 1835 hospital price lists so you didn&apos;t have to - this post had a few interesting things. First, learning about CMS&apos;s price transparency law. In…</description><pubDate>Fri, 22 Jul 2022 08:37:38 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;I analyzed 1835 hospital price lists so you didn&apos;t have to&lt;/span&gt;&lt;/strong&gt; - this post had a few interesting things. First, learning about CMS&apos;s price transparency law. In Israel this is a non-issue since the healthcare system works differently, and most of the procedures are covered by the HMOs so there is no such concern. I would be interested in further analysis about the missing or non-missing prices. I.e., for which CPT codes most hospitals have prices, for which CPT codes most hospitals don&apos;t have prices, can we cluster them (e.g. cardio codes? women&apos;s health? procedures usually done on elder people?). This dataset has great potential, and I agree with most of the points in the &quot;Dead On Arrival: What the CMS law got wrong&quot; section.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.dolthub.com/blog/2022-07-01-hospitals-compliance/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How to design better APIs&lt;/span&gt; &lt;/strong&gt;- there are several things I liked in this post - first, it is written very clearly and gives both positive and negative examples. Second, it is language agnostic. That last tip - &quot;Allow expanding resources&quot; was mind-blowing to me, so simple to think of and I never thought of adding such an argument. Now I miss a cookie-cutter template to implement all that good advice.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://r.bluethl.net/how-to-design-better-apis&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;min(DALL-E)&lt;/u&gt;&lt;/strong&gt; - &quot;This is a fast, minimal port of Boris Dayma&apos;s DALL·E Mega. It has been stripped down for inference and converted to PyTorch. The only third-party dependencies are NumPy, requests, pillow, and torch&quot;. Now you can easily generate images using min-dalle on your machine (but it might take a while),&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/kuprel/min-dalle&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Bonus - &lt;a&gt;https://openai.com/blog/dall-e-2-pre-training-mitigations/&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;4 Things I Learned From Analyzing Menopause Apps Reviews&lt;/span&gt;&lt;/strong&gt; - Dalya Gartzman, She Knows Health CEO, writes about 4 lessons she learned from analyzing Menopause Apps Reviews. I think it is interesting in 2 ways - app reviews are first, as a product-market fit strategy, to see what users are telling, asking, or complaining about in related.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/sheknows-health/4-things-i-learned-from-analyzing-menopause-apps-reviews-2cabf9ca9226&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Inconsistent thoughts on database consistency&lt;/span&gt;&lt;/strong&gt; - this post discusses the many aspects and definitions of consistency and how it is used in different contexts. I absolutely love those topics. Having said that, I wonder if people hold those discussions in real life and not just use common cloud-managed solutions encapsulating some of those concerns.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.alexdebrie.com/posts/database-consistency/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>api</category><category>cpt</category><category>dall-e</category><category>databases</category><category>healthtech</category></item><item><title>Playing with DALL·E mini</title><link>https://tomron.net/2022/06/24/playing-with-dall-e-mini/</link><guid isPermaLink="true">https://tomron.net/2022/06/24/playing-with-dall-e-mini/</guid><description>DALL·E 2 is a multimodal AI system that generates images from text. OpenAI announced the model in April 2022. OpenAI is known for GPT-3, an autoregressive…</description><pubDate>Fri, 24 Jun 2022 19:40:18 GMT</pubDate><content:encoded>
&lt;p&gt;DALL·E 2 is a multimodal AI system that generates images from text. OpenAI announced the model in April 2022. OpenAI is known for GPT-3, an autoregressive language model with 175 billion parameters. DALL·E 2 uses a smaller version of GPT-3. Read more &lt;a&gt;here&lt;/a&gt;, &lt;a&gt;here&lt;/a&gt;, and &lt;a&gt;here&lt;/a&gt; (the last one also slightly discusses Google&apos;s image).&lt;/p&gt;



&lt;p&gt;While the results look impressive at first sight, there are some caveats and limitations, including word order and compositionality issues, e.g., &quot;A yellow book and a red vase&quot; from &quot;A red book and a yellow vase&quot; are indistinguishable. Moreover, as one can see in the &quot;A yellow book and a red vase&quot; example below the images or more of the same, another drawback is that the system cannot handle negation, e.g., &quot;A room without an elephant&quot; will create, well, see below. Read more &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Since I don&apos;t have access to DALL·E 2, I used DALL·E mini via &lt;a&gt;Hugging Face&lt;/a&gt; for all the examples in this post. However, the two models experience the same issues.&lt;/p&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-36-59.png&quot; alt=&quot;&quot; class=&quot;wp-image-1680&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;A yellow book and a red vase&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-34-13-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-1678&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;A room without an elephant&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;The model might have biases for example check all those software developers who write code, all men (also note that the face are very blurry in contrast to other surfaces in the images) -&lt;/p&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-47-29-2.png&quot; alt=&quot;&quot; class=&quot;wp-image-1688&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;software developer writing code&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_20-25-23.png&quot; alt=&quot;&quot; class=&quot;wp-image-1714&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;A CTO giving a talk&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;I decided to troll that a bit to find more limitations or point-out blind spots. Check out the following examples -&lt;/p&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-56-9.png&quot; alt=&quot;&quot; class=&quot;wp-image-1693&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Object Oriented Programming&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-56-14.png&quot; alt=&quot;&quot; class=&quot;wp-image-1694&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;OOP&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-54-57-1.png&quot; alt=&quot;&quot; class=&quot;wp-image-1692&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Object Disoriented Programming&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-57-58.png&quot; alt=&quot;&quot; class=&quot;wp-image-1698&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Exploratory Data Analysis&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_19-57-39.png&quot; alt=&quot;&quot; class=&quot;wp-image-1699&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;EDA&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;The examples above demonstrate that model does not handle abbreviations well. I can think of several reasons for that, but that emphasizes the need to use precise wording and might need to try several times to get the desired result.&lt;/p&gt;



&lt;p&gt;Trying negation again (in this case, the abbreviation worked okish) - &lt;/p&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_20-6-40.png&quot; alt=&quot;&quot; class=&quot;wp-image-1702&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;SQL&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_20-6-44.png&quot; alt=&quot;&quot; class=&quot;wp-image-1703&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;NoSQL&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_20-6-57.png&quot; alt=&quot;&quot; class=&quot;wp-image-1705&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Structured Query Language&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Which of course reminds all of us of this one -&lt;/p&gt;



&lt;figure class=&quot;wp-block-image aligncenter size-large is-resized&quot;&gt;&lt;img src=&quot;https://img.ifunny.co/images/59bc1310f1032f32e1675cfed70b9d89aa34395fa15214a960f4448169d05d49_1.webp&quot; alt=&quot;&quot; width=&quot;417&quot; height=&quot;506&quot; /&gt;&lt;/figure&gt;



&lt;p&gt;And a few more -&lt;/p&gt;



&lt;div class=&quot;wp-block-columns&quot;&gt;
&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_20-12-31.png&quot; alt=&quot;&quot; class=&quot;wp-image-1709&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;SOLID principles&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_20-12-21.png&quot; alt=&quot;&quot; class=&quot;wp-image-1710&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Clean Code&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;



&lt;div class=&quot;wp-block-column&quot;&gt;
&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/dallemini_2022-6-24_20-14-54.png&quot; alt=&quot;&quot; class=&quot;wp-image-1712&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Computer Vision&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;To conclude, I cannot see a straightforward production-grade usage of this model (and it is anyhow not publically available yet) but maybe one use it for brainstorming and ideation. For me it feels like NLP in the days of TF-IDF there is yet a lot to come. Going forward I would love to have some more tunning possibilities like a color scheme or control the similarity between different results (mainly allow more diversity rather than more of the same).&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>dall-e</category><category>imagen</category><category>openai</category></item><item><title>5 interesting things (20/06/2022)</title><link>https://tomron.net/2022/06/20/5-interesting-things-20-06-2022/</link><guid isPermaLink="true">https://tomron.net/2022/06/20/5-interesting-things-20-06-2022/</guid><description>Visualizing multicollinearity in Python - I like the network one although it is not very intuitive at first sight. The others you can also get using…</description><pubDate>Mon, 20 Jun 2022 21:17:00 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Visualizing multicollinearity in Python&lt;/span&gt;&lt;/strong&gt; - I like the network one although it is not very intuitive at first sight. The others you can also get using pandas-profiling.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/@kenanekici/visualizing-multicollinearity-in-python-b5feedc9b3f1&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Advanced Visualisations for Text Data Analysis&lt;/span&gt;&lt;/strong&gt; - besides the suggested charts themselves, it is nice to get to know &lt;a&gt;nxviz&lt;/a&gt;. I would actually like to see those charts as part of plotly as well.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/advanced-visualisations-for-text-data-analysis-fc8add8796e2&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Data Tales: Unlikely Plots&lt;/span&gt;&lt;/strong&gt; - bar chart is boring (but informative :), but sometimes we need to think out of the box plot&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/mlearning-ai/data-tales-unlikely-plots-1882c2a903da&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;XKCDs I send a lot&lt;/span&gt;&lt;/strong&gt; - Is XKCD already an industry standard?&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/codex/xkcds-i-send-at-least-once-a-month-1f6e9f9b6b89&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;5 Tier Problem Hierarchy&lt;/span&gt;&lt;/strong&gt; - I use this framework to think of tickets I write, what is the expected input, output, and complexity, what I expect from each of my team members, etc.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://typeshare.co/kimsiasim/posts/5-tier-problem-hierarchy-4718&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>nxvis</category><category>visualization</category><category>xkcd</category></item><item><title>Prioritize your Priority Score</title><link>https://tomron.net/2022/06/17/prioritize-your-priority-score/</link><guid isPermaLink="true">https://tomron.net/2022/06/17/prioritize-your-priority-score/</guid><description>A while ago, a friend asked me about a topic she needed to tackle – her team had many support tickets to prioritize, decide what to work on, and further…</description><pubDate>Fri, 17 Jun 2022 09:23:45 GMT</pubDate><content:encoded>
&lt;p&gt;A while ago, a friend asked me about a topic she needed to tackle – her team had many support tickets to prioritize, decide what to work on, and further communicate it to the relevant stakeholders.&lt;/p&gt;



&lt;p&gt;They started as everyone starts – tier 1 and tier 2 support teams in their company stated the issue severity (low, medium, high) in the ticket, and they prioritized accordingly.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image aligncenter size-large is-resized&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/screen-shot-2022-06-17-at-10.20.24.png&quot; alt=&quot;&quot; class=&quot;wp-image-1659&quot; width=&quot;232&quot; height=&quot;226&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;But that was not good enough. It was not always clear how to set the severity level – was it the client size or lifecycle stage, the feature importance, or anything else. Additionally, it was not granular enough to decide what to work on first.&lt;/p&gt;



&lt;p&gt;We brainstormed, and she told me two important things for her: feature importance and client size. Both can be reduced to “t-shirt” size estimation, i.e., small client, medium client, large client, and extra-large client, and features of low/medium/high/crucial importance. Super, we can now generalize the single dimension axis system we previously had to two dimensions.&lt;/p&gt;



&lt;p&gt;The priority score is now - $latex \sqrt{x^2+y^2}$&lt;/p&gt;



&lt;figure class=&quot;wp-block-image aligncenter size-large is-resized&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/screen-shot-2022-06-17-at-10.20.30.png&quot; alt=&quot;&quot; class=&quot;wp-image-1658&quot; width=&quot;432&quot; height=&quot;302&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;That worked great until they had a few tickets that got the same priority score, and they needed to decide what to work on and explain it outside of their team. The main difference between those tickets was the time it would take to fix each one. One would take several hours, one would take 1-2 days, and the last one would take two weeks and has high uncertainty. No problem, I told her – let’s add another axis – the expected time to fix. Time to fix can also be binned – up to 1 day, up to 1 week, up to 1 sprint (2 weeks), and longer. Be cautious here; the ax order is inverted – the longer it takes, the lower priority we want to give it.&lt;/p&gt;



&lt;p&gt;The priority score is now - $latex \sqrt[\leftroot{-2}\uproot{2}3]{x_1^3+x_2^3+x_3^3}$&lt;/p&gt;



&lt;figure class=&quot;wp-block-image aligncenter size-large is-resized&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/06/screen-shot-2022-06-17-at-10.20.35.png&quot; alt=&quot;&quot; class=&quot;wp-image-1660&quot; width=&quot;468&quot; height=&quot;398&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;p&gt;Then, when I felt we were finally there, she came and said – remember the time to fix dimension? Well, it is not as important as the client size and the feature importance. Is there anything we can do about it?&lt;/p&gt;



&lt;p&gt;Sure I said, let’s add weights. The higher the weight is, the more influential the feature is. To keep things simple in our example, let’s reduce the importance of the time to fix compared to the other dimensions - $latex \sqrt[\leftroot{-2}\uproot{2}3]{x_1^3+x_2^3+0.5 x_3^3}$&lt;/p&gt;



&lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;



&lt;p&gt;&lt;strong&gt;To wrap things up&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;&lt;li&gt;This score can be generalized to include as many dimensions as one would like - $latex \sqrt[\leftroot{-2}\uproot{2}n]{\sum_{i=1}^n w_i x_i^n}$.&lt;/li&gt;&lt;li&gt;I recommend keeping the score as simple and minimal as possible since it is easier to explain and communicate.&lt;/li&gt;&lt;li&gt;Math is fun and we can use relatively simple concepts to obtain meaningful results.&lt;/li&gt;&lt;/ol&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>priority</category><category>scores</category><category>thoughts</category></item><item><title>CSV to radar plot</title><link>https://tomron.net/2022/05/31/csv-to-radar-plot/</link><guid isPermaLink="true">https://tomron.net/2022/05/31/csv-to-radar-plot/</guid><description>I find a radar plot a helpful tool for visual comparison between items when there are multiple axes. It helps me sort out my thoughts. Therefore I created a…</description><pubDate>Tue, 31 May 2022 19:58:26 GMT</pubDate><content:encoded>
&lt;p&gt;I find a radar plot a helpful tool for visual comparison between items when there are multiple axes. It helps me sort out my thoughts. Therefore I created a small script that helps me turn CSV to a radar plot.  See the gist below, and read more about the usage of radar plots &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;So how does it works? you provide a csv file where the columns are the different properties and each record (i.e line) is a different item you want to create a scatter for.&lt;/p&gt;



&lt;p&gt;The following figure was obtained based on this csv - &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://gist.github.com/tomron/e5069b63411319cdf5955f530209524a#file-examples-csv&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;The data in the file is based on - &lt;a&gt;https://www.kaggle.com/datasets/shivamb/company-acquisitions-7-top-companies&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;And I used the following command - &lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;python csv_to_radar.py examples.csv &lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;fill toself &lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;show_legend &lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;title &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;Merger and Acquisitions by Tech Companies&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic&quot;&gt; --&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;output_file merger.jpeg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/05/merger.jpeg&quot; alt=&quot;Radar plot&quot; class=&quot;wp-image-1635&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://gist.github.com/tomron/e5069b63411319cdf5955f530209524a
&lt;/div&gt;&lt;/figure&gt;
</content:encoded><category>plotly</category><category>radar plot</category><category>visualization</category></item><item><title>Acing the Code Assignment Interview – Tips for Interviewers and Candidates￼</title><link>https://tomron.net/2022/04/29/acing-the-code-assignment-interview-tips-for-interviewers-and-candidates%EF%BF%BC/</link><guid isPermaLink="true">https://tomron.net/2022/04/29/acing-the-code-assignment-interview-tips-for-interviewers-and-candidates%EF%BF%BC/</guid><description>One of the most common practices today as part of the interview process are take-home assignments. However, though practical and valuable, this practice is…</description><pubDate>Fri, 29 Apr 2022 13:36:55 GMT</pubDate><content:encoded>
&lt;p&gt;One of the most common practices today as part of the interview process are take-home assignments. However, though practical and valuable, this practice is tricky and needs to be used wisely to be beneficial. On the candidate&apos;s side, it is not enough to only solve the tasks, as there are a few more things you can do to make your submission shine and impress the reviewers. On the employer&apos;s side, companies have the challenge of creating a good assignment that will help assess the candidates and make the company attractive in the eyes of the candidate.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;This week I took part in &lt;a&gt;DevDays Europe Conference&lt;/a&gt;!&lt;br /&gt;I was honored to participate in 2 sessions:&lt;/p&gt;



&lt;p&gt;I moderated a &quot;Leadership for Engineering Teams in Remote Work Era&quot; session. The recording can be found &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;The session ended up with a few reading recommendations - &lt;a&gt;Radical Candor&lt;/a&gt;, &lt;a&gt;Six Simple Rules&lt;/a&gt;, &lt;a&gt;Conscious Business&lt;/a&gt;, and  &lt;a&gt;The Promises of Giants&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;I also talked about &quot;Acing the Code Assignment Interview - Tips for Interviewers and Candidates&quot;, sharing my experience from our recruitment process at &lt;a&gt;Lynx.MD&lt;/a&gt;. The recording can be found &lt;a&gt;here&lt;/a&gt; and the slides are &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;A summary of my tips -&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;For candidates&lt;/strong&gt; - plan ahead, document your work, and polish it by proofreading and linting just before handing it over, use version control tools and write tests to emphasize the added value you bring.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;For companies&lt;/strong&gt; - make the test relevant for the position and the candidate, respect the candidate&apos;s time and be available for her. Know your biases both when giving the assignment and when evaluating and giving feedback.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2022/04/ron.png&quot; alt=&quot;&quot; class=&quot;wp-image-1623&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
</content:encoded><category>devdays</category><category>interviews</category><category>lynxmd</category><category>public_speaking</category></item><item><title>5 interesting things (18/02/2022)</title><link>https://tomron.net/2022/02/18/5-interesting-things-18-02-2022/</link><guid isPermaLink="true">https://tomron.net/2022/02/18/5-interesting-things-18-02-2022/</guid><description>What to Do When You Are Less Productive Than Your Teammates? I know Miri for a while and she has a very unique and sensitive point of view. This post is worth…</description><pubDate>Fri, 18 Feb 2022 15:49:54 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;What to Do When You Are Less Productive Than Your Teammates?&lt;/span&gt;&lt;/strong&gt; I know Miri for a while and she has a very unique and sensitive point of view. This post is worth reading even if you don&apos;t share this feeling. It has some advice I find practical and it can help you better understand your colleagues and friends that might feel this way.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/@miryeh/what-to-do-when-you-are-less-productive-than-your-teammates-c5369423de8f&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Wordle — What Is Statistically the Best Word to Start the Game With? &lt;/span&gt;&lt;/strong&gt;Wordle conquered the world in the last few months therefore there must be a data science aspect to it.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/@noa.kel/wordle-what-is-statistically-the-best-word-to-start-the-game-with-a05e6a330c13&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Bonus - &lt;a&gt;https://mobile.twitter.com/bertiearbon/status/1484948347890847744&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How I Discovered Thousands of Open Databases on AWS&lt;/span&gt;&lt;/strong&gt; - In the last few months I have been training my security muscle to be more security aware both from infrastructure and code perspective and this is a great reminder why.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://infosecwriteups.com/how-i-discovered-thousands-of-open-databases-on-aws-764729aa7f32&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Top 10 Tips You Should Know As A Modern Software Architect&lt;/span&gt;&lt;/strong&gt; - lately I tried to avoid such posts because I find&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://ankurkumarz.medium.com/top-10-tips-you-should-know-as-a-modern-software-architect-8e602c6c998f&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Optimizing Workspace for Productivity, Focus, &amp;amp; Creativity&lt;/strong&gt; &lt;/span&gt;- I think one of the things covid19 enabled us is to better question and adjust our workspace to our needs. This post shares some research, advice, and tips about the topic. The low ceiling vs high ceiling hooked me and I&apos;m going to use those effects to better navigate discussions. After years of talking about it, I ordered a standup desk last week and I&apos;m eager for it to arrive.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/@juanpabloaranovich/optimizing-workspace-for-productivity-focus-creativity-fcc0f28b6fa9&lt;/a&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://medium.com/@juanpabloaranovich/optimizing-workspace-for-productivity-focus-creativity-fcc0f28b6fa9
&lt;/div&gt;&lt;/figure&gt;
</content:encoded><category>Productivity</category><category>security</category><category>Wordle</category></item><item><title>5 interesting things (29/12/2021)</title><link>https://tomron.net/2021/12/29/5-interesting-things-29-12-2021/</link><guid isPermaLink="true">https://tomron.net/2021/12/29/5-interesting-things-29-12-2021/</guid><description>7 PyTest Features and Plugins That Will Save You Tons of Time - I read many tutorials and posts about PyTest and this is the first time I run into those flags…</description><pubDate>Wed, 29 Dec 2021 21:57:49 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;7 PyTest Features and Plugins That Will Save You Tons of Time&lt;/span&gt;&lt;/strong&gt;- I read many tutorials and posts about PyTest and this is the first time I run into those flags (features 1-5) which I find very useful. As always - if you can use your superpowers to read the documentation directly. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://betterprogramming.pub/7-pytest-features-and-plugins-that-will-save-you-tons-of-time-74808b9d4756&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Patterns for Authorization in Microservices&lt;/span&gt;&lt;/strong&gt; - I find this post interesting since I currently face a similar problem of setting authorization and authentication architecture in the product I work on that can have complex access patterns such as a user can access multiple resources on different access levels owned by different organizations.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;a&gt;https://www.osohq.com/post/microservices-authorization-patterns&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Related bonus - &lt;a&gt;https://blog.miguelgrinberg.com/post/api-authentication-with-tokens&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Database Indexing Anti-Patterns&lt;/span&gt;&lt;/strong&gt; - I find this post slightly too high level. Yes, it state possible issues with indexing but a more effective post would be how to detect those anti-patterns on specific databases. E.g measure Mongo index usage on Mongo - &lt;a&gt;https://docs.mongodb.com/manual/tutorial/measure-index-use/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;This link is part of this post as a periodic reminder to think and take care of those topics before they become issues.&lt;br /&gt;&lt;a&gt;https://towardsdatascience.com/database-indexing-anti-patterns-dccb1b8ecef&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;How to safely think in systems.&lt;/u&gt;&lt;/strong&gt; - &quot;Effective systems thinking comes from the tension between model and reality, without a healthy balance you’ll always lose the plot.&quot;. I&apos;m not sure if this post should be in the parenting category or in the career \ professional \ management category. &lt;br /&gt;&lt;a&gt;https://lethain.com/how-to-safely-think-in-systems/&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How Improvised Stand-up Comedy Taught Me to Interview Better&lt;/span&gt;&lt;/strong&gt; - &quot;After all, questions in an interview are mostly a means for getting to know the candidate better, just as pulling words out of a hat is just the framework for a show.&quot;. Great post that connects two domains that usually aren&apos;t brought up together.&lt;br /&gt;&lt;a&gt;&lt;br /&gt;https://nogamann.medium.com/how-improvised-stand-up-comedy-taught-me-to-interview-better-9f0168be0726&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>authorization</category><category>databases</category><category>pytest</category></item><item><title>We raised 12M$ seed funding</title><link>https://tomron.net/2021/12/24/we-raised-12m-seed-funding/</link><guid isPermaLink="true">https://tomron.net/2021/12/24/we-raised-12m-seed-funding/</guid><description>In the last year and 3 months, I work for Lynx.md. We develop a medical data science platform that bridges the gap between data owners and data consumers while…</description><pubDate>Fri, 24 Dec 2021 11:24:31 GMT</pubDate><content:encoded>
&lt;p&gt;In the last year and 3 months, I work for Lynx.md. We develop a medical data science platform that bridges the gap between data owners and data consumers while taking care of de-identifications, privacy, and security aspects of sharing data.&lt;/p&gt;



&lt;p&gt;10 days ago we announced that we raised a 12M$ seed funding and we are &lt;a&gt;hiring&lt;/a&gt; - DevOps engineers, data engineers, data scientists, backend \ full-stack \ frontend developers, product managers. Our tech stack includes - Python mainly using FastAPI, Django, pandas, etc., AWS (but will soon add Azure too), Postgres, elastic search, Redis, Docker. Super interesting challenges with added value. Feel free to &lt;a&gt;reach out&lt;/a&gt; if you want to learn more.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;Read more about us - &lt;a&gt;https://www.calcalistech.com/ctech/articles/0,7340,L-3924888,00.html&lt;/a&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-image&quot;&gt;&lt;img alt=&quot;&quot; /&gt;&lt;/figure&gt;
</content:encoded><category>hiring</category><category>lynxmd</category></item><item><title>5 interesting things (1/12/21)</title><link>https://tomron.net/2021/12/01/5-interesting-things-1-12-21/</link><guid isPermaLink="true">https://tomron.net/2021/12/01/5-interesting-things-1-12-21/</guid><description>Tests aren’t enough: Case study after adding type hints to urllib3 - I read those posts as thrillers (and some of them are the same length :). This post…</description><pubDate>Wed, 01 Dec 2021 21:49:29 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Tests aren’t enough: Case study after adding type hints to urllib3&lt;/span&gt;&lt;/strong&gt; - I read those posts as thrillers (and some of them are the same length :). This post describes the effort of adding type hints to urllib3 and what the maintainers&apos; team learned during this process. Super interesting.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://sethmlarson.dev/blog/2021-10-18/tests-arent-enough-case-study-after-adding-types-to-urllib3&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Why you shouldn&apos;t invoke setup.py directly&lt;/span&gt;&lt;/strong&gt; - post by Paul Ganssle, python core developer &lt;code&gt;setuptool&lt;/code&gt;. TL;DR of the TL;DR in the post - &quot;The setuptools team no longer wants to be in the business of providing a command-line interface and is actively working to become just a library for building packages&quot;. See the table in the &lt;a&gt;summary&lt;/a&gt; section for a quick how-to guide.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Python pathlib Cookbook: 57+ Examples to Master It (2021)&lt;/u&gt;&lt;/strong&gt; - I had a post about pathlib for a while in my drafts and now I can delete it since this guide is much more extensive. In short, &lt;code&gt;pathlib&lt;/code&gt; is part of the Python standard library since Python 3.4 and it provides an abstraction for filesystem paths over different operating systems. If you still work with &lt;code&gt;os&lt;/code&gt; for paths this is a good time to switch.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://miguendes.me/python-pathlib&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;10 Tips For Using OKRs Effectively&lt;/span&gt;&lt;/strong&gt; - I think a lot about OKRs for my team and moreover on personal OKRs and how to grow both the team and the product. I found this post (and the associated links) insightful.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://rushabhdoshi.com/posts/2020-06-18-10-tips-for-making-okrs-effective/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;How to Choose the Right Structure for Your Data Team&lt;/u&gt; &lt;/strong&gt;- I started with those posts and soon enough read many more posts by y Bar Moses, Co-Founder, and CEO, Monte Carlo. Her posts have two dimensions that are relevant for me - team building (specifically around data-intensive products) and data engineering. If you find at least one of those topics interesting I believe you&apos;ll enjoy her posts.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/how-to-choose-the-right-structure-for-your-data-team-be6c1b66a067&lt;br /&gt;&lt;/a&gt;&lt;a&gt;https://towardsdatascience.com/7-questions-to-ask-when-building-your-data-team-at-a-hypergrowth-company-dce0c0f343b4&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>OKR</category><category>pathlib</category><category>python</category><category>setuptools</category><category>type hints</category><category>urllib3</category></item><item><title>Other pie chart</title><link>https://tomron.net/2021/10/22/other-pie-chart/</link><guid isPermaLink="true">https://tomron.net/2021/10/22/other-pie-chart/</guid><description>This morning I read &quot; 20 ideas for better data visualization &quot;. I liked it very much and specially I found 8th idea - &quot;Limit the number of slices displayed in…</description><pubDate>Fri, 22 Oct 2021 09:56:56 GMT</pubDate><content:encoded>
&lt;p&gt;This morning I read &quot;&lt;a&gt;20 ideas for better data visualization&lt;/a&gt;&quot;. I liked it very much and specially I found 8th idea - &quot;Limit the number of slices displayed in a pie chart&quot; very relevant for me. So I jumped into the plotly express code and created a figure of type &lt;code&gt;other_pie&lt;/code&gt; which given a number (&lt;code&gt;n&lt;/code&gt;) and a label (&lt;code&gt;other_label&lt;/code&gt;) created a pie chart with &lt;code&gt;n&lt;/code&gt; sectors. &lt;code&gt;n-1&lt;/code&gt; of those sectors are the top values according to the `values` column and the other section is the sum of the other rows.&lt;/p&gt;



&lt;p&gt;A gist of the code can be found &lt;a&gt;here&lt;/a&gt; (check &lt;a&gt;here&lt;/a&gt; how to build plotly)&lt;/p&gt;



&lt;p&gt;I used the following code to generate standard pie chart and pie chart with 5 sectors -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; plotly.express &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;as&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; px&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; px.data.gapminder().query(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;year == 2007&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;).query(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;continent == &apos;Europe&apos;&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.loc&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6A737D;--shiki-dark:#6A737D&quot;&gt;#091;df&amp;amp;#091;&apos;pop&apos;] &amp;lt; 2.e6, &apos;country&apos;] = &apos;Other countries&apos; # Represent only large countries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pie_fig &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; px.pie(df, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;pop&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;names&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;country&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;Population of European continent&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;otherpie_fig &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; px.other_pie(df, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;pop&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;names&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;country&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;Population of European continent&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;other_label&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;others&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;And this is how it looks like - &lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2021/10/pie.png&quot; alt=&quot;Pie chart&quot; class=&quot;wp-image-1574&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Pie chart&lt;/figcaption&gt;&lt;/figure&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2021/10/other_pie.png&quot; alt=&quot;&quot; class=&quot;wp-image-1575&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;Other pie chart&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>pie chart</category><category>plotly</category><category>visualization</category></item><item><title>5 interesting things (21/10/21)</title><link>https://tomron.net/2021/10/21/5-interesting-things-21-10-21/</link><guid isPermaLink="true">https://tomron.net/2021/10/21/5-interesting-things-21-10-21/</guid><description>4 Things Tutorials Don&apos;t Tell You About PyPI - this hands-on experience together with the explanations is priceless. Even if you don&apos;t plan to upload a package…</description><pubDate>Thu, 21 Oct 2021 09:33:20 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;4 Things Tutorials Don&apos;t Tell You About PyPI&lt;/u&gt;&lt;/strong&gt; - this hands-on experience together with the explanations is priceless. Even if you don&apos;t plan to upload a package to PyPI anytime soon those glimpses of how PyPI works are interesting.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://blog.paoloamoroso.com/2021/09/4-things-tutorials-dont-tell-you-about.html&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Responsible Tech Playbook&lt;/span&gt;&lt;/strong&gt; - I totally agree with Martin Fowler statement that &quot;Whether asked to or not, we have a duty to ensure our systems don’t degrade our society&quot;. This post promotes the text book about Responsible Tech published by Fowler and his colleagues from Thoughtworks. It also references additional resources such as &lt;a&gt;Tarot Cards of Tech Ethical Explorer&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://martinfowler.com/articles/2021-responsible-tech-playbook.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;A Perfect Match&lt;/span&gt;&lt;/strong&gt; - A Python 3.10 Brain Teaser - Python 3.10 was released earlier this month and the most talked about feature is Pattern Matching. Read this post to make sure you get it correctly.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/pragmatic-programmers/a-perfect-match-ef552dd1c1b1&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;How I got my career back on track&lt;/strong&gt;&lt;/span&gt; - careers is not a miracle. That&apos;s totally ok if you don&apos;t want to have one but if you do and have aspirations you have to own it and manage your way there. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://rinaarts.com/how-i-got-my-career-back-on-track&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;PyCatFlow&lt;/u&gt;&lt;/strong&gt; -  A big part of current data is time series data combined with categorical data. E.g., change in the mix of medical diagnosis \ shopping categories over time etc. PyCatFlow is a visualization tool which allows the representation of temporal developments, based on categorical data. Check their &lt;a&gt;Jupyter Notebook&lt;/a&gt; with interactive widgets that can be run online.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/@bumatic/pycatflow-visualizing-categorical-data-over-time-b344102bcce2&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>career</category><category>PyCatFlow</category><category>pypi</category><category>python</category><category>python 3.10</category><category>responsible tech</category><category>visualization</category><category>jupyter</category></item><item><title>Growing A Python Developer (2021)</title><link>https://tomron.net/2021/10/15/growing-a-python-developer-2021/</link><guid isPermaLink="true">https://tomron.net/2021/10/15/growing-a-python-developer-2021/</guid><description>I recently run into a team lead question regarding how to grow a backend Python Developer in her team. Since I also iterated around this topic with my team I…</description><pubDate>Fri, 15 Oct 2021 10:00:00 GMT</pubDate><content:encoded>
&lt;p&gt;I recently run into a team lead question regarding how to grow a backend Python Developer in her team. Since I also iterated around this topic with my team I already had few ideas in mind.&lt;/p&gt;



&lt;p&gt;Few disclaimers before we start. First, I believe that the developer also has a share in the process and should express her interest and aspirations. The team lead or tech lead can direct and light blind spots but does not hold all the responsibility. It is also ok to dive into an idea are a tool that is not required at the moment. They might come in handy in the future and they can inspire you. Second, my view is limited to the areas I work in. Different organizations or products have different needs and focus. Third, build habits to constantly learn and grow - read blogs and books, listen to podcasts, take online or offline courses, watch videos, whatever works for you as long as you keep moving.&lt;/p&gt;



&lt;p&gt;Consider the links below as appetizers. Each subject below has many additional resources besides the ones that I posted. Most likely I&apos;m just not familiar with them, please feel free to add them and I&apos;ll update the post. Some subjects are so broad and product dependent, e.g. cloud so I didn&apos;t add links at all. Additionally, when using a specific product \ service \ package read the documentation and make it your superpower. Know Python standard library well (e.g &lt;a&gt;itertools&lt;/a&gt;, &lt;a&gt;functools&lt;/a&gt;, &lt;a&gt;collections&lt;/a&gt;, &lt;a&gt;pathlib&lt;/a&gt;, etc), it can save you a lot of time, effort, and bugs.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;General ideas and concepts&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;&lt;li&gt;Clean code - &lt;a&gt;book&lt;/a&gt;, &lt;a&gt;book summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Design patterns - &lt;a&gt;refactoring book&lt;/a&gt;, &lt;a&gt;refactoring guru&lt;/a&gt;, &lt;a&gt;python design patterns GitHub repo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Distributed design patterns - &lt;a&gt;Patterns of Distributed Systems&lt;/a&gt;&lt;/li&gt;&lt;li&gt;SOLID principles - &lt;a&gt;SOLID coding in Python&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Cloud&lt;/li&gt;&lt;li&gt;Deployment - &lt;a&gt;CI\CD&lt;/a&gt;, &lt;a&gt;docker&lt;/a&gt;, &lt;a&gt;Kubernetes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Version control - &lt;a&gt;git guide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Databases - &lt;a&gt;Using Databases with Python&lt;/a&gt;, &lt;a&gt;databases tutorials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Secure Development - &lt;a&gt;Python cheat sheet by Snyk&lt;/a&gt;, &lt;a&gt;OWASP&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Python specific&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;&lt;li&gt;Webservices - &lt;a&gt;flask&lt;/a&gt;, &lt;a&gt;Django&lt;/a&gt;, &lt;a&gt;FastAPI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Testing - &lt;a&gt;Unit Testing in Python — The Basics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Packaging -  &lt;a&gt;Python Packaging User Guide&lt;/a&gt;, &lt;/li&gt;&lt;li&gt;Data analysis - &lt;a&gt;pandas&lt;/a&gt;, &lt;a&gt;NumPy&lt;/a&gt;, &lt;a&gt;sci-kit-learn&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Visualization - &lt;a&gt;plotly&lt;/a&gt;, &lt;a&gt;matlpotlib&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Concurrency - &lt;a&gt;Speed Up Your Python Program With Concurrency&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Debugging - &lt;a&gt;debugging with PDB&lt;/a&gt;, &lt;a&gt;Python debugging in VS Code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Dependency management - &lt;a&gt;Comparison of Pip, Pipenv and Poetry dependency management tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Type annotation - &lt;a&gt;Type Annotations in Python&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Python 3.10 - &lt;a&gt;What’s New in Python 3.10?&lt;/a&gt;, &lt;a&gt;Why you can’t switch to Python 3.10 just yet&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Additional resources&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;ol&gt;&lt;li&gt;&lt;a&gt;Podcast.__init__ &lt;/a&gt;- The weekly podcast about Python and its use in machine learning and data science.&lt;/li&gt;&lt;li&gt;&lt;a&gt;The real python podcast&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a&gt;Top 8 Python Podcasts You Should Be Listening to&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a&gt;Python 3 module of the week&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a&gt;Lazy programmer&lt;/a&gt; - courses on Udemy mainly AI and ML using Python&lt;/li&gt;&lt;li&gt;&lt;a&gt;cloudonaut&lt;/a&gt; - podcast and blog about AWS&lt;/li&gt;&lt;/ol&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>personal growth</category><category>python</category><category>pandas</category><category>numpy</category><category>plotly</category><category>flask</category><category>fastapi</category><category>django</category><category>pathlib</category></item><item><title>5 tips to ace coding interview assignments</title><link>https://tomron.net/2021/10/14/5-tips-to-ace-coding-interview-assignments/</link><guid isPermaLink="true">https://tomron.net/2021/10/14/5-tips-to-ace-coding-interview-assignments/</guid><description>Now days, it is a very common practice to give a coding home tests as part of interview process. Beside solving the task you are ask to I believe there are few…</description><pubDate>Thu, 14 Oct 2021 08:39:36 GMT</pubDate><content:encoded>
&lt;p&gt;Now days, it is a very common practice to give a coding home tests as part of interview process. Beside solving the task you are ask to I believe there are few additional things you can do in order to impress the reviewers and ace this step of the process.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;1. &lt;strong&gt;Push the code to a private repository and share it with the reviewers&lt;/strong&gt; - this creates a two fold advantage. First, it demonstrates the reviewers that you are familiar with version control tools and second it shows your working process and that you keep track of your work. Don&apos;t forget to write &lt;a&gt;meaningful commit messages&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;2. &lt;strong&gt;Write README file&lt;/strong&gt; - the readme file gives a context to the entire project and reflects the way you understand the assignment. One of the annoting things as a reviewer is to guess how to run the code, what are the requirments and so on. Beside packaging or building the code in a way the runs smoothly (e.g in Python if using pip add a requirements.txt) a README file should help me find my way inside the project. In such assignments where you don&apos;t have a direct communication with the reviewers the README files also serves as a place to document your decisions and thoughts.&lt;/p&gt;



&lt;p&gt;What should you include in the README file? Short introduction explaining the project purpose and scre.  How to install and run or use it, preferably with some snippet that one can just copy-paste. How to run the tests (see next section :). Additional sections can include explainations about choices you made architecture wise or implementation wise, charts, performance evaluation, future ideas, dependencies, etc. This will help the reviewers get into your code quickly and run, understand your thinking and show that you are eager to share your knowledge with your peers.&lt;/p&gt;



&lt;p&gt;For ease of use, check the template suggested &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;3. &lt;strong&gt;Write tests&lt;/strong&gt; - usually unit tests are enough for this scope. This will help you debug your code and make sure it works properly. It will also signal the reviewers that you care about the quality of your code and know your job.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;4. &lt;strong&gt;Run linters, spell check and do a proof reading for everything&lt;/strong&gt; - make sure your code uses the common conventions and style for the tools you are using (e.g PEP-8 for python). Bonus points if you add the linters as &lt;a&gt;pre-commit hooks&lt;/a&gt; to your repository. This make your code smoother and easier for the reviewers to read. The formatted code indicates that you are used to sharing your code with others and the hooks signal that you are productive and &lt;a&gt;lazy&lt;/a&gt; by automating stuff.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;5. &lt;strong&gt;Document everything&lt;/strong&gt; - the idea behind this tip is not to annoy the reviewers by letting them guess what you meant. That is document what each module, function and parameter does. For example, in Python, use type annotation and docstrings.&lt;/p&gt;
</content:encoded><category>interviews</category></item><item><title>5 interesting things (22/09/21)</title><link>https://tomron.net/2021/09/22/5-interesting-things-22-09-21/</link><guid isPermaLink="true">https://tomron.net/2021/09/22/5-interesting-things-22-09-21/</guid><description>Writing a Great CV for Your First Technical Role - a series of 3 parts about best practices, mistakes, and pitfalls in CV showing both good and bad examples. I…</description><pubDate>Wed, 22 Sep 2021 12:09:22 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Writing a Great CV for Your First Technical Role&lt;/u&gt;&lt;/strong&gt; - a series of 3 parts about best practices, mistakes, and pitfalls in CV showing both good and bad examples. I find the posts relevant not just for first rolls but also as a good reminder when updating your CV.&lt;/p&gt;&lt;p&gt;
&lt;/p&gt;&lt;p&gt;&lt;a&gt;https://naomikriger.medium.com/writing-a-great-cv-for-your-first-technical-role-part-1-75ffc372e54e&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Patterns in confusing explanations&lt;/span&gt;&lt;/strong&gt; - writing and technical writing are superpowers. Being able to communicate your ideas in a clear way that others can engage with is a very impactful skill. In this post, Julia Evans describes 13 patterns of bad explanation and accompanies that with positive examples.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://jvns.ca/blog/confusing-explanations/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;How We Design Our APIs at Slack&lt;/u&gt;&lt;/strong&gt; - not only that I agree with those advices and had some bad experiences with similar issues both as a API supplier and consumer. Many times when big companies describe their architecture and process they are irrelevant to small companies due to cost, lack of data or resources or other reasons ,but the great thing about this post is that it also fits small companies and relatively easy to implement.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://slack.engineering/how-we-design-our-apis-at-slack/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Python Anti-Pattern&lt;/span&gt;&lt;/strong&gt; - this post describes a bug that is at the intersection of Python and AWS lambda functions. One can say that it is an extreme case but I tend to think it is more common than one would think and may spend hours debugging it. It is well written and very important to know if you are using lambda functions.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://valinsky.me/articles/python-anti-pattern/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Architectural Decision Records&lt;/span&gt;&lt;/strong&gt; - sharing knowledge is hard. Sometimes what is clear for you is not clear for others, sometimes it is not taken into account in the time estimation or takes longer than expected, other times you just want to move on and deliver. Having templates and conventions make it easier both for the writers and the readers. ADRs answer specific need.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://adr.github.io/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>ADR</category><category>aws lambda</category><category>CV</category><category>debugging</category><category>python</category></item><item><title>5 interesting things (19/08/2021)</title><link>https://tomron.net/2021/08/19/5-interesting-things-19-08-2021/</link><guid isPermaLink="true">https://tomron.net/2021/08/19/5-interesting-things-19-08-2021/</guid><description>The 7 Branches of Software Gardening - &quot;A small refactoring a day keeps the tech debt away &quot; (paraphrasing^2). Great examples of small activities and…</description><pubDate>Thu, 19 Aug 2021 10:39:45 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;The 7 Branches of Software Gardening&lt;/span&gt;&lt;/strong&gt; - &quot;A small refactoring a day keeps the tech debt away &quot; (paraphrasing^2). Great examples of small activities and improvments every developer can make on a daily basis and would pile up to big impact.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://martinthoma.medium.com/the-6-branches-of-software-gardening-a90b3c0d6220&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;What is the right level of specialization? For data teams and anyone else&lt;/span&gt;&lt;/strong&gt; - I like Erik Bernhardsson&apos;s posts, I linked to them more than once in the past. Bernhardsson highlights the tensions between being very professional and specific (&quot;I only ETL process on Wednesdays 15:03-16:42 on Windowss Machines&quot;) versus being less proficient in more concepts and technologies . And this leads us to the next item.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://erikbern.com/2021/07/23/what-is-the-right-level-of-specialization.html&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;7 Key Roles and Responsibilities in Enterprise MLOps&lt;/span&gt;&lt;/strong&gt; - in this post Domino Data Lab introduce their view about the different roles and responsibilities in MLOps \ Data teams. For sure it is more suitable in enterprises, small and even medium companies cannot afford themselves and sometimes don&apos;t need all those roles and as suggested in Erik Bernhardsson&apos;s post, very specific specializaion make it harder to move people between teams according to the organization needs. Having said that, title is a signal (inside and outside the organizaiton) of what a person likes to do and which capabilities (no necessarily specific tools) s\he are probable to have.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://blog.dominodatalab.com/7-roles-in-mlops/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;The Limitations of Chaos Engineering&lt;/span&gt;&lt;/strong&gt; - I decided to read a bit about Chaos engineering as I never experienced with it before and came across this post which is almost 4 years old. While it is important to validate the reselience of our architecture and its&apos; implementation de facto, the common practice of fault injection also has its limitations which is good to know.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://sharpend.io/the-limitations-of-chaos-engineering/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;It&apos;s Time to Retire the CSV&lt;/span&gt;&lt;/strong&gt; - if you ever worked with CSV you probably see this title and yell &quot;&lt;a&gt;Hell Yes!&lt;/a&gt;&quot;. If you want to gain an historic view and few more arguments have a look here -&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.bitsondisk.com/writing/2021/retire-the-csv/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>chaos engineering</category><category>csv</category><category>mlops</category></item><item><title>pandas read_csv and missing values</title><link>https://tomron.net/2021/08/15/pandas-read_csv-and-missing-values/</link><guid isPermaLink="true">https://tomron.net/2021/08/15/pandas-read_csv-and-missing-values/</guid><description>I read Domino Lab post about &quot; Data Exploration with Pandas Profiler and D-Tale&quot; where they load diagnostic mammograms used in the diagnostic of breast cancer…</description><pubDate>Sun, 15 Aug 2021 08:58:03 GMT</pubDate><content:encoded>
&lt;p&gt;I read Domino Lab post about &quot;&lt;a&gt;Data Exploration with Pandas Profiler and D-Tale&quot;&lt;/a&gt; where they load diagnostic mammograms used in the diagnostic of breast cancer from UCI website. Instead of missiing values the data contains &lt;code&gt;?&lt;/code&gt;. When reading the data using pandas &lt;code&gt;read_csv&lt;/code&gt; function naively interpret the value as string value and change the column type to be object instead of float in this case.&lt;/p&gt;



&lt;p&gt;In the post mentioned above the authors dealt with the issue in the following way - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;masses &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; masses.replace(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;?&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, np.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;NAN&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;masses.loc&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6A737D;--shiki-dark:#6A737D&quot;&gt;#091;:,names&amp;amp;#091;:-1]] = masses.loc&amp;amp;#091;:,names&amp;amp;#091;:-1]].apply(pd.to_numeric)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;That is, they first replaced the &lt;code&gt;?&lt;/code&gt; values in all the columns with &lt;code&gt;np.NAN&lt;/code&gt; and then convert all the columns to numeric. Let&apos;s call this method the manual method.&lt;/p&gt;



&lt;p&gt;If we know the know the non default missing values in advance, can we do something better? The answer is yes!&lt;/p&gt;



&lt;p&gt;See code &lt;a&gt;here&lt;/a&gt; &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Use &lt;code&gt;na_values&lt;/code&gt; parameter&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.read_csv(url, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;names&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;names, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;na_values&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&amp;amp;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#6A737D;--shiki-dark:#6A737D&quot;&gt;#091;&quot;?&quot;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;code&gt;na_values&lt;/code&gt; parameter can get scalar, string, list-like or dict parameters. If you pass a scalar, string or list-like parameter all columns are treated the same way. If you pass dict you can specify different set of NaN values per column.&lt;/p&gt;



&lt;p&gt;The advantage of this method over the manual method is that you don&apos;t need to convert the columns after replacing the nan values. In the manual method the column types are specified (in the given case they are all numeric), if there are multiple columns types you need to know it and specify it in advance.&lt;/p&gt;



&lt;p&gt;Side note - likewise, for non trivial boolean values you can use &lt;code&gt;true_values&lt;/code&gt; and &lt;code&gt;false_values&lt;/code&gt; parameters.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Use &lt;code&gt;converters&lt;/code&gt; parameter&lt;/strong&gt;&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.read_csv(url, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;names&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;names, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;converters&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;BI-RADS&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;lambda&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; x: x &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; x&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;!=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;?&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; else&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; np.&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;NAN&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;This is usually used to convert values of specific columns. If you would like to convert values in all the columns in the same way this is not the preferred method since you will have to add an entry for each column and if new column is added you won&apos;t take care of it by default (this can be both advantage and disadvantage). However, for other use-cases, &lt;code&gt;converters&lt;/code&gt; can help with more complex conversions.&lt;/p&gt;



&lt;p&gt;Note that the result here is different then the result in the other methods since we only converted the values in one column.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Pandas provides several ways to deal with non-trivial missing values. If you know the non-trivial value in advance you are good to go and &lt;code&gt;na_values&lt;/code&gt; is most likely the best way to go.&lt;/p&gt;



&lt;p&gt;Performance wise (time) all methods perform roughly the same for the given dataset but that can change as a function on the dataset size (columns and rows), row types, number of non-trivial missing values.&lt;/p&gt;



&lt;p&gt;On top of it, make reading documentation your superpower. It can use your tools smarter and more efficient and it can save you a lot of time. &lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;See pandas &lt;code&gt;read_csv&lt;/code&gt; documentation &lt;a&gt;here&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>missing values</category><category>pandas</category><category>python</category></item><item><title>Things I learned today (04/08/2021)</title><link>https://tomron.net/2021/08/04/things-i-learned-today-04-08-2021/</link><guid isPermaLink="true">https://tomron.net/2021/08/04/things-i-learned-today-04-08-2021/</guid><description>AWS Lambda functions can now mount an Amazon Elastic File System (Amazon EFS) AWS announcement What is AWS Lambda? AWS Lambda is FaaS (function as a service)…</description><pubDate>Wed, 04 Aug 2021 12:39:01 GMT</pubDate><content:encoded>
&lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;AWS Lambda functions can now mount an Amazon Elastic File System (Amazon EFS)&lt;/p&gt;&lt;cite&gt;&lt;a&gt;AWS announcement&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;&lt;strong&gt;What is AWS Lambda?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;AWS Lambda is FaaS (function as a service) offering. It is an event-driven, serverless computing platform which integrates with many other AWS services. For example you can trigger lambda function from API gateway, S3 event notification, etc.&lt;/p&gt;



&lt;p&gt;AWS Lambda runtime includes Python, Node.js. ruby, Java, Go and C#.&lt;/p&gt;



&lt;p&gt;It is very useful and cost-effective when you have infrequent and relatively short executions so you don&apos;t need to provision any infrastructure. Lambda has it&apos;s limitations, mainly it&apos;s running time - max 15 minutes. Storage was also a limitation up to this announcement but this is breakthrough. &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;What is Amazon EFS?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Amazon Elastic File System (EFS) is a cost-optimized file storage (not setup costs, just pay as you use) that can automatically scale from gigabytes to petabytes of data without needing to provision storage. It also allow multiple instances to connect to it simultaneously.&lt;/p&gt;



&lt;p&gt;EFS are accessible from EC2 instances, ECS containers, EKS and AWS Fargate and AWS lambda.&lt;/p&gt;



&lt;p&gt;Comparing to EBS, EFS is usually more expensive. However, the use case is different. EFS is a NFS file system (which means that it is not supported on Windows instances) and EBS is block storage and is usually not multi-attached (there are some EC2 + EBS configurations which allow multi-attach but that&apos;s not the main use case). &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Why does it matter?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;By default, lambda can &lt;code&gt;/tmp&lt;/code&gt; storage of up to 512Mb this enables working with larger files. This means that you can import large machine learning models or packages. This also means that you can use an up-to-date version of files since it is easy to share.&lt;/p&gt;



&lt;p&gt;Additional you can share information or state across invocations since EFS is a shared drive. I would not say it is optimal and generally I would rather to decouple it but it is possible and it is faster than S3.&lt;/p&gt;



&lt;p&gt;In some cases it can also enable moving data intensive workloads (in AWS or on-premise) to AWS lambda and save cost.&lt;/p&gt;



&lt;p&gt;See more here&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;Announcement - &lt;a&gt;https://aws.amazon.com/blogs/aws/new-a-shared-file-system-for-your-lambda-functions/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Comparing Lambda data storage options - &lt;a&gt;https://aws.amazon.com/blogs/compute/choosing-between-aws-lambda-data-storage-options-in-web-apps/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Lambda limitations - &lt;a&gt;https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>efs</category><category>aws lambda</category><category>s3</category><category>ec2</category><category>ecs</category><category>eks</category><category>fargate</category><category>api gateway</category></item><item><title>AWS Certified Solutions Architect – Associate</title><link>https://tomron.net/2021/08/04/aws-certified-solutions-architect-associate/</link><guid isPermaLink="true">https://tomron.net/2021/08/04/aws-certified-solutions-architect-associate/</guid><description>That&apos;s me :) Took the exam yesterday and passed. I learned many news things on the way (e.g here , here , here and here ) and I believe this knowledge…</description><pubDate>Wed, 04 Aug 2021 12:00:24 GMT</pubDate><content:encoded>
&lt;p&gt;That&apos;s me :)&lt;/p&gt;



&lt;p&gt;Took the exam yesterday and passed. I learned many news things on the way (e.g &lt;a&gt;here&lt;/a&gt;, &lt;a&gt;here&lt;/a&gt;, &lt;a&gt;here&lt;/a&gt; and &lt;a&gt;here&lt;/a&gt;) and I believe this knowledge (combined with the hands-on experience) would be very handful for me in the future.&lt;/p&gt;



&lt;p&gt;Badge available here - &lt;a&gt;https://www.credly.com/badges/8f7a4dec-70c7-407f-a2fc-775918f0cd64/public_url&lt;/a&gt;&lt;/p&gt;





&lt;p&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>solution architect associate</category></item><item><title>Things I learned today (26/07/2021)</title><link>https://tomron.net/2021/07/26/today-i-learned-26-07-2021/</link><guid isPermaLink="true">https://tomron.net/2021/07/26/today-i-learned-26-07-2021/</guid><description>ElastiCache for Redis is HIPAA compliant while ElastiCache for Memcached is not https://www.hipaaguide.net/wp-content/uploads/2018/05/hipaa-facts.png What is…</description><pubDate>Mon, 26 Jul 2021 11:35:52 GMT</pubDate><content:encoded>
&lt;p&gt;ElastiCache for Redis is HIPAA compliant while ElastiCache for Memcached is not&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-embed wp-block-embed-embed&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://www.hipaaguide.net/wp-content/uploads/2018/05/hipaa-facts.png
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;&lt;br /&gt;&lt;strong&gt;What is ElastiCache?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;ElastiCache is &quot;Fully managed in-memory data store, compatible with Redis or Memcached. Power real-time applications with sub-millisecond latency&quot; (&lt;a&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Most common use cases for ElastiCache are session store, general cache to increase throughput and decrease the load of other services or database, deployment of machine learning models and real time analytics.&lt;br /&gt;&lt;br /&gt;AWS offers two flavours of ElastiCache - ElastiCache for Redis and ElastiCache for Memcached. To understand the difference better and recommendation on how to choose an engine see &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;strong&gt;What is HIPAA?&lt;/strong&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;&quot;The Healthcare Insurance Portability and Accountability Act (HIPAA) is an act of legislation passed in 1996 which originally had the objective of enabling workers to carry forward healthcare insurance and healthcare rights between jobs. &quot;&lt;/p&gt;&lt;cite&gt;&lt;em&gt;&lt;a&gt;https://www.hipaajournal.com/hipaa-explained/&lt;/a&gt;&lt;/em&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;&lt;br /&gt;Over the years and specifically after 2013 HIPAA rules were updated to fit to the technology development and expand the requirements to include business associates, where previously only covered entities were held to uphold the HIPAA restrictions.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Why does it matter?&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Better safe than sorry - If you develop a product that needs to be HIPAA compliant it is better to choose in advance the right and compliant services rather than replacing it later&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;To read more - &lt;/p&gt;



&lt;ul&gt;&lt;li&gt;AWS HIPAA Compliance - &lt;a&gt;https://aws.amazon.com/compliance/hipaa-compliance/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;AWS HIPAA Eligible Services - &lt;a&gt;https://aws.amazon.com/compliance/hipaa-eligible-services-reference/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Difference between ElastiCache for Redis -  &lt;a&gt;https://aws.amazon.com/elasticache/redis-vs-memcached/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Choose an engine - &lt;a&gt;https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/SelectEngine.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;ElastiCache compliance - &lt;a&gt;https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/elasticache-compliance.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;HIPAA compliance for developers - &lt;a&gt;https://github.com/truevault/hipaa-compliance-developers-guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>compliance</category><category>elasticache</category><category>HIPAA</category><category>memcached</category><category>redis</category></item><item><title>Things I learned today (23/07/2021)</title><link>https://tomron.net/2021/07/23/today-i-learned-23-07-2021/</link><guid isPermaLink="true">https://tomron.net/2021/07/23/today-i-learned-23-07-2021/</guid><description>S3 events notifications supports standard SNS topics and standard SQS queues as destinations but don&apos;t support SNS FIFO and SQS FIFO. S3 events notifications…</description><pubDate>Fri, 23 Jul 2021 10:04:45 GMT</pubDate><content:encoded>
&lt;p&gt;S3 events notifications supports standard SNS topics and standard SQS queues as destinations but don&apos;t support SNS FIFO and SQS FIFO.&lt;/p&gt;



&lt;p&gt;S3 events notifications enables you to be notified whenever a specific event happens in your bucket. To receive the notification you must define the events you are interested in and the destination. The notifications are usually triggered in seconds but sometimes can take longer.&lt;/p&gt;



&lt;p&gt;The events are -&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;New object creation&lt;/li&gt;&lt;li&gt;Object removal (versioned and non-versioned objects)&lt;/li&gt;&lt;li&gt;Object restore (e.g from Glacier)&lt;/li&gt;&lt;li&gt;Object lost on a reduced redundancy storage&lt;/li&gt;&lt;li&gt;Object Replication&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;The possible destinations include -&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;SQS - as mentioned above standard queues only and not FIFO queues&lt;/li&gt;&lt;li&gt;SNS- as mentioned above standard topics only and not FIFO topics&lt;/li&gt;&lt;li&gt;Lambda&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;If when processing the events you write back to S3 be careful not to create an execution loop&lt;/p&gt;



&lt;p&gt;See more here - &lt;a&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;Bonus for the weekend - bumped into this and I cannot deny (of service) that it can happen to me too&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-embed wp-block-embed-embed&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://i.pinimg.com/originals/b1/46/c1/b146c11c3eb743ec2db7d40267ef2dab.jpg
&lt;/div&gt;&lt;/figure&gt;
</content:encoded><category>aws</category><category>FIFO</category><category>s3</category><category>sns</category><category>sqs</category><category>aws lambda</category></item><item><title>Things I learned today (21/07/2021)</title><link>https://tomron.net/2021/07/21/things-i-learned-today-21-07-2021/</link><guid isPermaLink="true">https://tomron.net/2021/07/21/things-i-learned-today-21-07-2021/</guid><description>You can use Amazon SNS FIFO (first in, first out) topics and Amazon Simple Queue Service (Amazon SQS) FIFO queues together to provide strict message ordering…</description><pubDate>Wed, 21 Jul 2021 14:20:00 GMT</pubDate><content:encoded>
&lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;You can use Amazon SNS FIFO (first in, first out) topics and Amazon Simple Queue Service (Amazon SQS) FIFO queues together to provide strict message ordering and message deduplication&lt;/p&gt;&lt;cite&gt;&lt;a&gt;AWS documentation&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;&lt;br /&gt;While, SQS FIFO queues &lt;a&gt;were introduced&lt;/a&gt; in 2016, SNS FIFO capabilities were introduced only on October 2020.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;This capability is important for cases in which the order matters. E.g. bank transactions were you commit a transaction only if the balance remains non-negative.&lt;/p&gt;



&lt;p&gt;Messages are grouped and ordered according to the &lt;code&gt;message group ID&lt;/code&gt;. When sending a message you must specify a message group ID otherwise the action fails. If all the messages have the same message group ID then all the messages are sent and received in strict order. The message group id can be any value, e.g 12, &quot;hello&quot;, &quot;user_id-123&quot;, etc.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;Note that as in the SQS case, the topic name must end with &lt;code&gt;.fifo&lt;/code&gt;, a limitation that counts to the 80 characters restriction as well. &lt;/p&gt;



&lt;p&gt;For further reading -&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/introducing-amazon-sns-fifo-first-in-first-out-pub-sub-messaging/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a&gt;https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/new-for-amazon-simple-queue-service-fifo-queues-with-exactly-once-delivery-deduplication/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
</content:encoded><category>aws</category><category>FIFO</category><category>sns</category><category>sqs</category></item><item><title>Things I learned today (20/07/2021)</title><link>https://tomron.net/2021/07/20/things-i-learned-today-20-07-2021/</link><guid isPermaLink="true">https://tomron.net/2021/07/20/things-i-learned-today-20-07-2021/</guid><description>Delay queues let you postpone the delivery of new messages to a queue for a number of seconds AWS documentation This means that all the messages which are…</description><pubDate>Tue, 20 Jul 2021 09:36:00 GMT</pubDate><content:encoded>
&lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;Delay queues let you postpone the delivery of new messages to a queue for a number of seconds&lt;/p&gt;&lt;cite&gt;&lt;a&gt;AWS documentation&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;This means that all the messages which are pushed to this queue would be visible to the consumer after the delay period. The minimum delay which is also the default delay is 0 and the maximum is 15 minutes.&lt;/p&gt;



&lt;p&gt;Note that when changing the delay of a queue the behaviour of FIFO queues and standard queues is different - &lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;&lt;br /&gt;For standard queues, the per-queue delay setting is not retroactive—changing the setting doesn&apos;t affect the delay of messages already in the queue.&lt;/p&gt;&lt;p&gt;For FIFO queues, the per-queue delay setting is retroactive—changing the setting affects the delay of messages already in the queue.&lt;/p&gt;&lt;cite&gt;&lt;a&gt;AWS documentation&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;If you need to delay the visibility of specific messages and not all messages in the queue you can use message timers and add an initial invisibility period for a message. This is only supported by standard queues.Note that setting a message timer for individual messages overrides the delay period of the delay queue.&lt;/p&gt;



&lt;p&gt;See the image below to understand message timeline in a queue -&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-embed wp-block-embed-embed&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-delay-queues-diagram.png
&lt;/div&gt;&lt;/figure&gt;



&lt;p&gt;See more here -&lt;br /&gt;&lt;a&gt;https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-delay-queues.html&lt;br /&gt;&lt;/a&gt;&lt;a&gt;https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-message-timers.html&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>delay queue</category><category>FIFO</category><category>message timer</category><category>sqs</category></item><item><title>Things I learned today (19/07/2021)</title><link>https://tomron.net/2021/07/19/things-i-learned-today-19-07-2021/</link><guid isPermaLink="true">https://tomron.net/2021/07/19/things-i-learned-today-19-07-2021/</guid><description>[AWS] independently map Availability Zones too names for each account AWS documentation This means that eu-west-1a in my account is not necessarily the same as…</description><pubDate>Mon, 19 Jul 2021 09:03:50 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;[AWS] independently map Availability Zones too names for each account&lt;/p&gt;&lt;cite&gt;&lt;a&gt;AWS documentation&lt;/a&gt;&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;&lt;br /&gt;This means that &lt;code&gt;eu-west-1a&lt;/code&gt; in my account is not necessarily the same as &lt;code&gt;eu-west-1a&lt;/code&gt; in your account.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;Why does this matter? for example if you want to share subnets across accounts. Or maybe you want to ensure that services in different accounts are not in the same availability zone.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;So how can you achieve this? use availability zone ids which are unique and consistent identifiers for availability zones.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;See more here - &lt;a&gt;https://docs.aws.amazon.com/ram/latest/userguide/working-with-az-ids.html&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>availability zones</category><category>aws</category></item><item><title>5 interesting things (02/07/2021)</title><link>https://tomron.net/2021/07/02/5-interesting-things-02-07-2021/</link><guid isPermaLink="true">https://tomron.net/2021/07/02/5-interesting-things-02-07-2021/</guid><description>Conducting a Successful Onboarding Plan and Onboarding Process - I believe that onboarding is important for the entire employment period. It helps setting…</description><pubDate>Fri, 02 Jul 2021 14:28:00 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Conducting a Successful Onboarding Plan and Onboarding Process&lt;/span&gt;&lt;/strong&gt; - I believe that onboarding is important for the entire employment period. It helps setting expectations, getting to the code and being meaningful faster and assure both sides they made the right choice (and if not know it in an early stage). One thing I miss in this plan is the social part which I think is also important - having lunch \ coffee \ etc with not just the mentor.&lt;br /&gt;I look forward to the next part &quot;Conducting a Successful Offboarding Plan and Offboarding Process&quot;. It might sound like a joke, but it is not. Good offboarding process can help the organization learn and grow and leave the employee with a good taste so she might come back in the future or recommend her friends to join \ use the product.&lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://blog.usejournal.com/conducting-a-successful-onboarding-plan-and-onboarding-process-6ec1b01ec2ae&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;The challenges of AWS Lambda in production&lt;/span&gt;&lt;/strong&gt; - serverless is gaining popularity in the last years and specifically AWS lambda. While many times it sounds like a magic solution for scalability and isolation it also has its issues to know. In this post Lucas De Mitri from Sinch presents problems they run into and possible solutions. For a high level view on Lambda functions just read the conclusion part.&lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://medium.com/wearesinch/the-challenges-of-aws-lambda-in-production-fc9f14b182be&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;My Arsenal Of AWS Security Tools&lt;/span&gt;&lt;/strong&gt; - In a preview &lt;a&gt;post&lt;/a&gt; I pointed out on ElectricEye a tool to continuously monitor your AWS services for configurations that can lead to degradation of confidentiality, integrity or availability. This github repo aggregates open source tools for AWS security: defensive, offensive, auditing, DFIR, etc. &lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://github.com/toniblyx/my-arsenal-of-aws-security-tools&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;3 Problems to Stop Looking For in Code Reviews&lt;/span&gt;&lt;/strong&gt; - I find the post title inaccurate but I like the attitude. As a reviewer you should not be bothered by tiny issues that can be enforced by tooling. Few tools are mentioned in the post and I would also add to that githooks which I find very powerful.I also agree with the insight that code reviews usually happen too late in the development process and constantly looking for the balance between letting developers progress and move forward and on the other hand give feedback on the right time.&lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://medium.com/swlh/3-problems-to-stop-looking-for-in-code-reviews-981bb169ba8b&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;The Power of Product Thinking&lt;/u&gt;&lt;/strong&gt; - In a previous &lt;a&gt;post&lt;/a&gt; I mentioned that understanding the cost structure and trade-offs between different architecture (cost wise but also performance and feature wise) is a way to become a more valuable team member. Product thinking is another skill that can make you a more valuable and influential team member. This post explains what product thinking is (and isn&apos;t) and completes it by suggesting several practices on how to develop product thinking. Totally liked it and am going to adopt some of the suggested practices .&lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://future.a16z.com/product-thinking/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>aws lambda</category><category>code review</category><category>onboarding</category><category>product thinking</category><category>security</category></item><item><title>AWS tagging best practices - 5  things to know</title><link>https://tomron.net/2021/06/30/aws-tagging-best-practices-5-things-to-know/</link><guid isPermaLink="true">https://tomron.net/2021/06/30/aws-tagging-best-practices-5-things-to-know/</guid><description>I read AWS tagging best practices whitepaper which was published in December 2018 and distilled 5 takeaways. 1. Use cases - tags have several use-cases…</description><pubDate>Wed, 30 Jun 2021 13:06:00 GMT</pubDate><content:encoded>
&lt;p&gt;I read &lt;a&gt;AWS&lt;/a&gt;&lt;a&gt; tagging best practices whitepaper&lt;/a&gt; which was published in December 2018 and distilled 5 takeaways.&lt;/p&gt;



&lt;p&gt;1. &lt;strong&gt;Use cases&lt;/strong&gt; - tags have several use-cases including:&lt;/p&gt;



&lt;ul&gt;&lt;li&gt;Cost allocation - using AWS Cost Explorer you can break down AWS costs by tag&lt;/li&gt;&lt;li&gt;Access Control - AM policies support tag-based conditions&lt;/li&gt;&lt;li&gt;Automation - for example tags can be used to opt into or out of automated task&lt;/li&gt;&lt;li&gt;AWS Console Organization and Resource Groups - e.g. create a custom console that organizes and consolidates AWS resources based on one or more tags&lt;/li&gt;&lt;li&gt;Security Risk Management - use tags to identify resources that require heightened security risk management practices&lt;/li&gt;&lt;li&gt;Operations Support - I find this use case tightly related to the automation use case&lt;/li&gt;&lt;/ul&gt;



&lt;p&gt;2. &lt;strong&gt;Standardized tag names and tag values&lt;/strong&gt; - &lt;br /&gt;&lt;/p&gt;



&lt;blockquote class=&quot;wp-block-quote&quot;&gt;&lt;p&gt;There are only two hard things in Computer Science: cache invalidation and naming things.&lt;/p&gt;&lt;cite&gt;Phil Karlton (&lt;a&gt;check here&lt;/a&gt;)&lt;/cite&gt;&lt;/blockquote&gt;



&lt;p&gt;A good practice as suggested in the whitepaper is to gather tagging requirements from all stakeholders and only then start implementing but a minimal step can be to define a convention for tags names and values that everyone can follow, see example from the document below.&lt;/p&gt;



&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2021/06/screen-shot-2021-06-23-at-13.50.55.png&quot; alt=&quot;&quot; class=&quot;wp-image-1443&quot; /&gt;&lt;/a&gt;&lt;figcaption&gt;tag names example&lt;/figcaption&gt;&lt;/figure&gt;



&lt;p&gt;&lt;br /&gt;3. &lt;strong&gt;Cost allocation tags delay&lt;/strong&gt; - this is something I experienced personally - &quot;Cost allocation tags appear in your billing data only after you have (1) specified them in the Billing and Cost Management Console and (2) tagged resources with them&quot;. And even then it can take around 24 hours to appear, take it into account.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;4. &lt;strong&gt;Tag everything&lt;/strong&gt; - sounds trivial but sometimes organizations tag only some of the resources, tag everything you can to get a more comprehensive and accurate data of your expenses. A nice feature in the Billing and Cost Management Console is the ability to find resources the don&apos;t have a specific tags so you can easily find out what you missed. &lt;/p&gt;



&lt;p&gt;&lt;br /&gt;5. &lt;strong&gt;Tags limitations&lt;/strong&gt; - until 2016 AWS allowed up to 10 tags for a given resource. The current limit is 50. It definitely allows much more but it is still a limit to bear in mind when creating a tagging strategy. One way to avoid it is by using compound values, e.g. &quot;anycompany:technical-contact = Susan Jones;sue.jones@anycompany.com; +12015551213&quot; rather than a tag for each attribute (e.g. &quot;anycompany:technical-contact-name = Susan Jones&quot;).&lt;/p&gt;
</content:encoded><category>aws</category><category>billing</category><category>cost control</category></item><item><title>4 interesting things (24/06/2021) - Hebrew</title><link>https://tomron.net/2021/06/24/4-interesting-things-24-06-2021/</link><guid isPermaLink="true">https://tomron.net/2021/06/24/4-interesting-things-24-06-2021/</guid><description>5 years ago I published a blog post about 5 blogs I read in Hebrew. three of those are still live and kicking and I enjoy them ( reversim , software archiblog…</description><pubDate>Thu, 24 Jun 2021 11:37:00 GMT</pubDate><content:encoded>
&lt;p&gt;5 years ago I published a &lt;a&gt;blog post&lt;/a&gt; about 5 blogs I read in Hebrew. three of those are still live and kicking and I enjoy them (&lt;a&gt;reversim&lt;/a&gt;, &lt;a&gt;software archiblog&lt;/a&gt;, &lt;a&gt;the bloggerit&lt;/a&gt;) the other two are no longer active. Additionally, in those 5 years podcasts became much more popular so I also included 2 podcasts I listen to.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Maya writes algorithms&lt;/span&gt;&lt;/strong&gt; - Maya started this blog while studying for job interviews. In the first posts she presented questions she bumped into and her solutions (and the stream of thought that brought her to those solutions). Later posts also include writing about specific tools (e.g &lt;a&gt;kubectl&lt;/a&gt;, &lt;a&gt;git hooks&lt;/a&gt;) or interpersonal skills like &lt;a&gt;talking in conferences&lt;/a&gt;, &lt;a&gt;being prepared for a code review&lt;/a&gt;, etc.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;a&gt;https://algoritmim.co.il/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Internet Israel&lt;/span&gt;&lt;/strong&gt; - Ran Bar Zik is a very experienced Full stack developer and Tech journalist who is also well known for his dad jokes. He writes mostly about Front End and security (but not only) and published several books about software development in &lt;a&gt;Hebrew&lt;/a&gt; (those are usually very hard to find).&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;a&gt;https://internet-israel.com/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Big Picture&lt;/span&gt;&lt;/strong&gt; (podcast) - a podcast about tech and strategy. Each episode is a deep dive into the strategy of one company such as snapchat, spotify, twilio, etc.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://bigpicture.buzzsprout.com/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;No Tarbut&lt;/span&gt;&lt;/strong&gt; (podcast)- podcast about the daily life of software engineering teams. The topics range from more tech related episodes such as  monitoring, tools, etc. to so-called softer topics such as performance review, leading without authority, salary discussion, creating an inclusive culture. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;http://notarbut.co/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>blog</category><category>hebrew</category><category>podcast</category></item><item><title>5 interesting things (20/06/2021)</title><link>https://tomron.net/2021/06/20/5-interesting-things-20-06-2021/</link><guid isPermaLink="true">https://tomron.net/2021/06/20/5-interesting-things-20-06-2021/</guid><description>9 Steps to Software Project Handovers - handover is always a challenge and especially when a person leaves the organization and is no longer available for…</description><pubDate>Sun, 20 Jun 2021 07:54:45 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;9 Steps to Software Project Handovers&lt;/u&gt;&lt;/strong&gt; - handover is always a challenge and especially when a person leaves the organization and is no longer available for questions or able to access the resources. Similar issues can also arise when you leave the project for a while and then come back - you don&apos;t alway remember all the tricks you used to run the code or the tiny bits of each function. This post suggests practical steps and behaviours that many of them can be TL;DRed with the Zen of Python - &quot;Explicit is better than implicit.&quot;.&lt;br /&gt;&lt;a&gt;https://betterprogramming.pub/9-steps-to-software-project-handovers-9325fbb72cfc&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;How to make an awesome Python package in 2021&lt;/span&gt;&lt;/strong&gt; - this post is a walk through building a python package. My main issue with it is the dependency management. I would put it in a different file, separate the development and usage dependency and lock the version - or shortly would rather use &lt;a&gt;pipenv&lt;/a&gt; or &lt;a&gt;poetry&lt;/a&gt; instead of pip but this could also be achieved with pip.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://antonz.org/python-packaging/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;A Simple Framework for Software Engineering Management&lt;/span&gt;&lt;/strong&gt; - the suggested framework is indeed easy - 3 types of responsibilities (people management, delivery leadership and technical system ownership) vs 3 ranks of priorities (issues, things that are ok, ideas and aspirations). This framework is a good starting point for engineering leaders but also for engineers that can switch the people management with colleagues relations or similar or for personal growth. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/swlh/a-simple-framework-for-software-engineering-management-f70b216540f2&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Full Cycle Data Science (FCDS)&lt;/span&gt;&lt;/strong&gt; - this is a heavy read but worth it both for data practitioners  and managers. Data science projects fail often. Sometimes it is because the problem is not defined well, other times because there is not enough data, data is not relevant, etc. FCDS tries to cast light and solve some of those problems - &quot;In a nutshell, FCDS is a way of life that enables a single data practitioner to close the full product lifecycle and independently deliver end-to-end products, focusing only on where they bring added value&quot;.&lt;br /&gt;&lt;a&gt;https://towardsdatascience.com/fcds-b2d2e6b08d34&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Endorse People Publicly, and Other Actions for Allies&lt;/span&gt;&lt;/strong&gt; -  Better Allies is an approach of making everyday actions to create inclusive and engaging workplaces. This post is a weekly newsletter where &lt;a&gt;Karen Catlin&lt;/a&gt; (Advocate for Inclusive Workplaces) shares five simple actions to create a more inclusive workplace and be a better ally. This is a weekly reminder to be aware of biases and gaps and ideas to small and consistent changes that can make us and the people around us more comfortable and help everyone be the best version of themselves.&lt;br /&gt;&lt;a&gt;https://code.likeagirl.io/endorse-people-publicly-and-other-actions-for-allies-9352915c0956&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>data science</category><category>diversity</category><category>inclusive</category><category>packaging</category><category>python</category><category>software engineering</category></item><item><title>5 interesting things - AWS edition (18/06/21)</title><link>https://tomron.net/2021/06/18/5-interesting-things-aws-edition-18-06-21/</link><guid isPermaLink="true">https://tomron.net/2021/06/18/5-interesting-things-aws-edition-18-06-21/</guid><description>As I collect items for my posts and wait until I have time to write about them I noticed I have many items related to AWS and decided to have a special…</description><pubDate>Fri, 18 Jun 2021 09:37:01 GMT</pubDate><content:encoded>
&lt;p&gt;As I collect items for my posts and wait until I have time to write about them I noticed I have many items related to AWS and decided to have a special edition.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;12 Common Misconceptions about DynamoDB&lt;/span&gt;&lt;/strong&gt; - many times our beliefs about certain tools or technology are based on hearing more than doing or doing but not getting into the depth of things and when running into a problem solving it with a solution we already know. This post describes features and qualities of DynamoDB that are sometimes ignored.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://dynobase.dev/dynamodb-11-common-misconceptions/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Related Bonus&lt;/strong&gt; - I really liked the link to Alex DeBrie post about single table design with DynamoDB&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://www.alexdebrie.com/posts/dynamodb-single-table/&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;AWS Chalice&lt;/span&gt;&lt;/strong&gt; - it is not an official offering but rather a python code package for writing serverless applications. The syntax is very similar to Flask while there is a native support for local testing, AWS SAM and Terraform integration, etc. Disclaimer - if you are on multi-cloud I would not move from Flask or FastAPI to Chalice. Also note the used services (AWS lambda, AWS API Gateway, etc.) limits and make sure they don&apos;t limit your app.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://aws.github.io/chalice/index&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Related Bonus&lt;/strong&gt; - auth0 tutorial on How to Create CRUD REST API with AWS Chalice&lt;br /&gt;&lt;a&gt;https://auth0.com/blog/how-to-create-crud-rest-api-with-aws-chalice/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt; &lt;/p&gt;



&lt;br /&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;ElectricEye&lt;/span&gt;&lt;/strong&gt; - &quot;ElectricEye is a set of Python scripts (affectionately called Auditors) that continuously monitor your AWS infrastructure looking for configurations related to confidentiality, integrity and availability that do not align with AWS best practices.&quot;. It is hard to know and follow all AWS best practices and this bundle of scripts is supposed to help uncover those. I have not tried it myself yet but it seems promising.&lt;br /&gt;&lt;a&gt;https://github.com/jonrau1/ElectricEye&lt;/a&gt;&lt;/p&gt;



&lt;br /&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;My Comprehensive Guide to AWS Cost Control&lt;/span&gt;&lt;/strong&gt; - computing and cloud costs take a big portion of every tech organization those days. Being a more valuable team member also means being aware of the costs and choosing wisely between the different alternatives.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://corey.tech/aws-cost/&lt;/a&gt;&lt;/p&gt;



&lt;br /&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;The Best Way To Browse 6K+ Quality AWS GitHub Repositories&lt;/span&gt;&lt;/strong&gt; - most of the time we are not inventing the wheel and someone probably already did something very similar to what we are doing. Let&apos;s browse github to find it and accelerate our process.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://app.polymersearch.com/discover/aws&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Bonus - AWS snowball&lt;/strong&gt; - I found out that this service exists only this week and it blew my mind - &lt;a&gt;https://aws.amazon.com/snowball/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>aws</category><category>snowball</category><category>chalice</category><category>cost control</category><category>dynamodb</category><category>aws lambda</category><category>api gateway</category></item><item><title>5 interesting things (06/05/2021)</title><link>https://tomron.net/2021/05/06/5-interesting-things-06-05-2021/</link><guid isPermaLink="true">https://tomron.net/2021/05/06/5-interesting-things-06-05-2021/</guid><description>How Hashicorp works - Hashicorp develops open-source products that are widely used in the industry including Terraform, Vault, Consul, etc. &quot;How HashiCorp…</description><pubDate>Thu, 06 May 2021 12:15:46 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;How Hashicorp works&lt;/u&gt;&lt;/strong&gt; - Hashicorp develops open-source products that are widely used in the industry including Terraform, Vault, Consul, etc. &quot;How HashiCorp Works&quot; provides a glimpse of Hashicorp&apos;s culture and practices. I appreciate this kind of transparency and chance to learn. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://works.hashicorp.com/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Make boring plans&lt;/span&gt;&lt;/strong&gt; - a more accurate title would be &quot;make predictable plans&quot;. That is, the next tasks should be predictable based on the team&apos;s knowledge regarding the product pains, bug, customers&apos; requests, etc.A possible good way to measure how boring the plans are is to ask the team to prioritize the top-k tasks we should work on in the next period (quarter \ sprint, etc.) and check if the tasks overlap. Disclaimer - each team member has its&apos; own view, pain points, and features they would like to develop and might be biased towards it.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://skamille.medium.com/make-boring-plans-9438ce5cb053&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Explainable AI Cheat Sheet&lt;/span&gt;&lt;/strong&gt;  - cheat sheet, video and resources regarding XAI. This is a very good way to get into this field.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://ex.pegg.io/&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;I’ve code reviewed over 750 pull requests at Amazon. Here’s my exact thought process&lt;/span&gt;&lt;/strong&gt; - code review is an art and is a way personal relations manifest themselves. One day I might write a longer post about code reviews but for now I want to focus on the last 2 points in this post - &quot;I approve when the PR is good, not perfect&quot; and &quot;I seek feedback for whether I’m reviewing well&quot;. &quot;Good not perfect&quot; - this depends on the team standards, DoD, the PR scope, etc. Specifically, in startups when the time and money are limited each delay has its&apos; costs. &quot;I seek feedback&quot; - how is the quality of my CR is measured? what are the goals of CR (familiarity with the code, finding bugs, enforcing standards, something else?)?. I would like to see or find ways to assess the quality of the CR and give feedback to the code reviewer.&lt;br /&gt;&lt;a&gt;&lt;br /&gt;&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://curtiseinsmann.medium.com/ive-code-reviewed-over-750-pull-requests-at-amazon-here-s-my-exact-thought-process-cec7c942a3a4&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;My Clean and Tidy Checklist for Clean and Tidy Data&lt;/span&gt;&lt;/strong&gt; - it is commonly believed that &quot;Data scientists spend 80% of their time cleaning data&quot;. This post provides a conceptual framework to clean data so the time data scientist spend on cleaning data might drop to 79% ;-)&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/my-clean-and-tidy-checklist-for-clean-and-tidy-data-fbdeacb3736c&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>5 interesting things (23/04/21)</title><link>https://tomron.net/2021/04/23/5-interesting-things-23-04-21/</link><guid isPermaLink="true">https://tomron.net/2021/04/23/5-interesting-things-23-04-21/</guid><description>You Are Probably Not Making The Most of Pandas “read_csv” Function - this might seems trivial and everything can be found in the documentation but it is well…</description><pubDate>Fri, 23 Apr 2021 09:06:43 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;You Are Probably Not Making The Most of Pandas “read_csv” Function&lt;/span&gt;&lt;/strong&gt; - this might seems trivial and everything can be found in the documentation but it is well served here with many examples.&lt;br /&gt;&lt;a&gt;https://towardsdatascience.com/you-are-probably-not-making-the-most-of-pandas-read-csv-function-51bcf069e646&lt;u&gt;&lt;br /&gt;&lt;/u&gt;&lt;/a&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Disasters I&apos;ve seen in a microservices world&lt;/span&gt;&lt;/strong&gt; - I experienced most of the disasters described in this post and totally agree with the bottom line - &quot;These edge cases become the new normal at a certain scale, and we should cope with them.&quot;&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://world.hey.com/joaoqalves/disasters-i-ve-seen-in-a-microservices-world-a9137a51&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Chess2Vec&lt;/span&gt;&lt;/strong&gt; - while there are many x2Vec works in recent years this work is passion-based. The writer informatics profess that wanted to apply the algorithm to a hobby of his - chess. I think this is a great example of side project and I would love to see more such combinations.&lt;br /&gt;&lt;a&gt;https://towardsdatascience.com/chess2vec-map-of-chess-moves-712906da4de9&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Driving Cultural Change Through Software Choices&lt;/span&gt;&lt;/strong&gt; - there are several approaches on who to drive changes this post presents a somehow more immediate approach, straight-forward and role model approach. The author&apos;s idea is that if you choose or provide the tools that reflect your values your team will also adopt them.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://skamille.medium.com/driving-cultural-change-through-software-choices-bf69d2db6539&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Letter to (new) managers&lt;/strong&gt; - an insightful post for managers and people who strive to become managers. Two quotes I liked - &quot;Trust is consistency over time&quot; and &quot;We start managing others the way we manage ourselves, but to do better, we need to learn new tools and use them adaptively.&quot;. Managing others the way we manage ourselves is one of the most common mistakes I saw managers do and I try to be super aware to it myself.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://productlessons.substack.com/p/letter-to-new-managers&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>5 tips for using Pandas</title><link>https://tomron.net/2020/12/14/6-tips-for-using-pandas/</link><guid isPermaLink="true">https://tomron.net/2020/12/14/6-tips-for-using-pandas/</guid><description>Recently, I worked closely with Pandas and found out a few things that are might common knowledge but were new to me and helped me write more efficient code in…</description><pubDate>Mon, 14 Dec 2020 14:45:55 GMT</pubDate><content:encoded>
&lt;p&gt;Recently, I worked closely with Pandas and found out a few things that are might common knowledge but were new to me and helped me write more efficient code in less time.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;1. &lt;strong&gt;Don&apos;t drop the na&lt;/strong&gt; &lt;/p&gt;



&lt;p&gt;Count the number of unique values including Na values. &lt;/p&gt;



&lt;p&gt;Consider the following pandas DataFrame -&lt;br /&gt;&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; pd.DataFrame({&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;userId&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;))&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;                   &quot;purchaseId&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;range&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;13&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;                   &quot;discountCode&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;None&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt; +&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;]})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Result&lt;/p&gt;



&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2020/12/screen-shot-2020-12-14-at-14.23.17.png&quot; alt=&quot;&quot; class=&quot;wp-image-1396&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;



&lt;p&gt;If I want to count the discount codes by type I might use -  &lt;code&gt;df[&apos;discountCode&apos;].value_counts()&lt;/code&gt; which yields - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;This will miss the purchases without discount codes. If I also care about those, I should do -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;discountCode&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;].value_counts(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;dropna&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;False&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;which yields - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;NaN    &lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;2.0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;    3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;This is also relevant for &lt;code&gt;nuniqiue&lt;/code&gt;. For example, if I want to count the number of unique discount codes a user used - &lt;code&gt;df.groupby(&quot;userId&quot;).agg(count=(&quot;discountCode&quot;, lambda x: x.nunique(dropna=False)))&lt;/code&gt;&lt;/p&gt;



&lt;p&gt;See more here - &lt;a&gt;https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.nunique.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;2. &lt;strong&gt;Margin on Row \ columns  only&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt; Following the above example, assume you want to know for each discount code which users used it and for each user which discount code she used. Additionally you want to know has many unique discount codes each user used and how many unique users used each code, you can use pivot table with margins argument - &lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;df.pivot_table(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;userId&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;columns&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;discountCode&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;               aggfunc&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;nunique&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;fill_value&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;               margins&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;True&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Result -&lt;/p&gt;



&lt;div class=&quot;wp-block-image&quot;&gt;&lt;figure class=&quot;aligncenter size-large&quot;&gt;&lt;a&gt;&lt;img src=&quot;https://tomron.net/wp-content/uploads/2020/12/screen-shot-2020-12-14-at-14.40.11.png&quot; alt=&quot;&quot; class=&quot;wp-image-1399&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;



&lt;p&gt;It would be nice to have the option to get margins only for rows or only for columns. The dropna option does not act as expected  - the na values are taken into account in the aggregation function but not added as a column or an index in the resulted Dataframe.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;3. &lt;strong&gt;plotly backend&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;Pandas plotting capabilities is nice but you can go one step further and use plotly very easy by setting plotly as pandas plotting backend.  Just add the following line after importing pandas (no need to import plotly, you do need to install it) -&lt;/p&gt;



&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pd.options.plotting.backend &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; &quot;plotly&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;Note that plotly still don&apos;t support all pandas plotting options (e.g subplots, hexbins) but I believe it will improve in the future. &lt;/p&gt;



&lt;p&gt;&lt;br /&gt;See more here - &lt;a&gt;https://plotly.com/python/pandas-backend/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;4. &lt;strong&gt;Categorical dtype and qcut&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Categorical variables are common - e.g., gender, race, part of day, etc. They can be ordered (e.g part of day) or unordered (e.g gender). Using categorical data type one can validate data values better and compare them in case they are ordered (see user guide &lt;a&gt;here&lt;/a&gt;). qcut allows us to customize binning for discrete and categorical data.&lt;/p&gt;



&lt;p&gt;See documentation &lt;a&gt;here&lt;/a&gt; and the post the caught my attention about it here - &lt;a&gt;https://medium.com/datadriveninvestor/5-cool-advanced-pandas-techniques-for-data-scientists-c5a59ae0625d&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;5. &lt;strong&gt;&lt;a&gt;tqdm&lt;/a&gt; integration&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;tqdm is a progress bar that wraps any Python iterable, you can also use to follow the progress of pandas apply functionality using &lt;code&gt;progress_apply&lt;/code&gt; instead of &lt;code&gt;apply&lt;/code&gt; (you need to initialize tqdm before by doing &lt;code&gt;tqdm.pandas()&lt;/code&gt;).&lt;/p&gt;



&lt;p&gt;See more here - &lt;a&gt;https://github.com/tqdm/tqdm#pandas-integration&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>dropna</category><category>pandas</category><category>plotly</category><category>python</category><category>tqdm</category></item><item><title>5 interesting things (04/12/2020)</title><link>https://tomron.net/2020/12/04/5-interesting-things-04-12-2020/</link><guid isPermaLink="true">https://tomron.net/2020/12/04/5-interesting-things-04-12-2020/</guid><description>How to set compensation using commonsense principles - yet another artwork by Erik Bernhardsson. I like his analytics approach and the way he models his ideas.…</description><pubDate>Fri, 04 Dec 2020 12:03:46 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;u&gt;How to set compensation using commonsense principles&lt;/u&gt;&lt;/strong&gt; - yet another artwork by Erik Bernhardsson. I like his analytics approach and the way he models his ideas. His manifest regarding compensation systems (Good/bad compensation systems) is brilliant. I believe most of us agree with him while he put it into words. His modeling has some drawbacks that he is aware of. For example, assuming certainty in employee productivity, almost perfect knowledge of the market. Yet, it is totally worth your time.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://erikbern.com/2020/06/08/how-to-set-compensation-using-commonsense-principles.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;7 Over Sampling techniques to handle Imbalanced Data&lt;/span&gt;&lt;/strong&gt; - imbalanced data is a common real world scenario, specifically in healthcare where most of the patients don&apos;t have a certain condition one is looking for. Over-sampling is a method to handle imbalanced data, this post describes several techniques to handle it. Interestingly, at least in this specific example, most of the techniques do not bring significant improvement. I would therefore compare several techniques and won&apos;t just try one of them. &lt;br /&gt;&lt;a&gt;https://towardsdatascience.com/7-over-sampling-techniques-to-handle-imbalanced-data-ec51c8db349f&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;This post uses a the following package which I didn&apos;t know before (it would be great if it could become part of scikit-learn) - &lt;a&gt;https://imbalanced-learn.readthedocs.io/en/stable/index.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;It would be nice to see a similar post fo downsampling techniques.&lt;/p&gt;



&lt;p&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Python&apos;s do&apos;s and don&apos;t do&lt;/u&gt;&lt;/strong&gt; - very nicely and written with good examples - &lt;br /&gt;&lt;a&gt;https://towardsdatascience.com/10-quick-and-clean-coding-hacks-in-python-1ccb16aa571b&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Every Complex DataFrame Manipulation, Explained &amp;amp; Visualized Intuitively&lt;/span&gt;&lt;/strong&gt; - can&apos;t remember how pandas function work? great, you are not alone. You can use this guide to quickly remind you how melt, explode, pivot and others work.&lt;br /&gt;&lt;a&gt;https://medium.com/analytics-vidhya/every-dataframe-manipulation-explained-visualized-intuitively-dbeea7a5529e&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;u&gt;Causal Inference that’s not A/B Testing: Theory &amp;amp; Practical Guide&lt;/u&gt;&lt;/strong&gt; - Causality is often overlooked in the industry. Many times you developed a model that is &quot;good enough&quot; and move on. However, this might increase bias and lead to unfavourable results. This post suggests a hands-on approach to causality accompanied by code samples.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/causal-inference-thats-not-a-b-testing-theory-practical-guide-f3c824ac9ed2&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>causal inference</category><category>imbalanced data</category><category>pandas</category><category>python</category><category>scikit-learn</category></item><item><title>Plotly back to back horizontal bar chart</title><link>https://tomron.net/2020/11/11/plotly-back-to-back-horizontal-bar-chart/</link><guid isPermaLink="true">https://tomron.net/2020/11/11/plotly-back-to-back-horizontal-bar-chart/</guid><description>Yesterday I read Boris Gorelik post - Before and after: Alternatives to a radar chart (spider chart) and I also wanted to used this visualization but using…</description><pubDate>Wed, 11 Nov 2020 20:44:57 GMT</pubDate><content:encoded>
&lt;p&gt;Yesterday I read Boris Gorelik post - &lt;a&gt;Before and after: Alternatives to a radar chart (spider chart)&lt;/a&gt; and I also wanted to used this visualization but using Plotly.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;



&lt;p&gt;So I created the following gist -&lt;/p&gt;



&lt;figure class=&quot;wp-block-embed is-type-rich is-provider-embed wp-block-embed-embed&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
https://gist.github.com/tomron/8b2f5872a28101445a9205d9e735099d
&lt;/div&gt;&lt;/figure&gt;
</content:encoded><category>bar chart</category><category>plotly</category><category>python</category><category>visualization</category></item><item><title>How to manage remote teams - 3 insights from GitLab&apos;s course in Coursera</title><link>https://tomron.net/2020/10/21/how-to-manage-remote-teams-3-insights-from-gitlabs-course-in-coursera/</link><guid isPermaLink="true">https://tomron.net/2020/10/21/how-to-manage-remote-teams-3-insights-from-gitlabs-course-in-coursera/</guid><description>I have recently listened to GitLab&apos;s &quot; Remote management course &quot; in Coursera. While there are companies that are remote-first and were built like that or…</description><pubDate>Wed, 21 Oct 2020 11:12:15 GMT</pubDate><content:encoded>
&lt;p&gt;I have recently listened to GitLab&apos;s &quot;&lt;a&gt;Remote management course&lt;/a&gt;&quot; in Coursera. While there are companies that are remote-first and were built like that or chose to adopt this structure (or other remote work structures) with the outbreak of COVID-19 many companies were forced to change and adopt remote work. This course timing is relevant than ever.  Here are few insights -&lt;/p&gt;



&lt;ol&gt;&lt;li&gt;This course is a great PR for GitLab they present a well-studied background and ideas of remote work, including pros, cons, and trade-offs. They present their take on remote work and how it is implemented in GitLab and refer to their own &lt;a&gt;handbook&lt;/a&gt; and &lt;a&gt;resources&lt;/a&gt;. Additionally, course lecturers are very diverse, which I believe can be attractive to many candidates. &lt;/li&gt;&lt;li&gt;Physical health and specifically mental health are mentioned multiple times during the course. Working remotely raises mental health challenges which are important to mention and I&apos;m glad they did it.  Specifically during the pandemic where interactions with other decreases and many employees didn&apos;t choose this form of work in advance.&lt;/li&gt;&lt;li&gt;What is a vital capability for remote employees? communication. They preach to value strong communication skills and emphasize that it is crucial in an asynchronous work environment where your colleagues are in different time zones, have varied cultural backgrounds and it might take them hours or days to answer. Well, I think it is also important for colocated employees.  Interactions with others shape our days, sometimes more than our actual tasks and it is important to be in an environment where we feel comfortable and even if we have disagreements (and I would be worried if there aren&apos;t) they can be discussed and settled. Generally, I find many of their ideas also relevant for colocated work.&lt;/li&gt;&lt;/ol&gt;



&lt;p&gt;Personally, I like working remotely as it saves the commute and allows me flexible working hours. However, in the past, I had the experience of being the only remote employee and that didn&apos;t work well. Many of the communication was in the coffee corner and was not accessible to me, promotion paths were blocked, etc.&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;If you are looking for a remote position, I strongly suggest this great resource - &lt;a&gt;Established remote companies&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>coursera</category><category>GitLab</category><category>remote work</category></item><item><title>Getting started with Fairness in ML - 5 resources</title><link>https://tomron.net/2020/07/26/getting-started-with-fairness-in-ml-5-resources/</link><guid isPermaLink="true">https://tomron.net/2020/07/26/getting-started-with-fairness-in-ml-5-resources/</guid><description>Mirror Mirror - Reflections on Quantitative Fairness - this is one of the first pieces I read about algorithmic fairness and caught my attention. It surveys…</description><pubDate>Sun, 26 Jul 2020 10:14:19 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Mirror Mirror - Reflections on Quantitative Fairness&lt;/span&gt;&lt;/strong&gt; - this is one of the first pieces I read about algorithmic fairness and caught my attention. It surveys the most common definitions of fairness together with relevant examples in a readable format.&lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://shiraamitchell.github.io/fairness/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Fairness in Machine Learning book&lt;/span&gt; -&lt;/strong&gt; a WIP of an online textbook about fairness and machine learning by very notable researchers in this field - Solon Barocas, Moritz Hardt, Arvind Narayanan.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://fairmlbook.org/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Equality of Opportunity in Supervised Learning&lt;/span&gt;&lt;/strong&gt; - if you want to read a research paper about fairness this paper by Moritz Hardt, Eric Price and Nathan Srebro is a good starting point. It is central and relatively easy to read. It defines &quot;Equalized odd&quot; and &quot;Equal opportunity&quot; fairness measures which are commonly used and also gives a geometric intuition.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://arxiv.org/abs/1610.02413&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Responsible Data Science course&lt;/span&gt;&lt;/strong&gt; - a wider view than just fairness. This course is given by Julia Stoyanovich at New York University and includes topics in data cleaning, anonymity explainability, etc. If you look for a pertinent reading list you can find it there.&lt;br /&gt;&lt;br /&gt;&lt;a&gt;https://dataresponsibly.github.io/courses/spring20/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;AIF360&lt;/span&gt;&lt;/strong&gt; - A tooling containing metrics for datasets and models to test for biases and algorithms to mitigate bias in datasets and models. The package is available in both Python and R. &lt;br /&gt;AIF360 was originally developed by IBM and was &lt;a&gt;recently&lt;/a&gt; donated to Linux Foundation AIAmong the currently available software tools, I find this the most baked and stable one. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://github.com/Trusted-AI/AIF360&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>fairness</category></item><item><title>5 interesting things (8/6/2020)</title><link>https://tomron.net/2020/06/08/5-interesting-things-8-6-2020/</link><guid isPermaLink="true">https://tomron.net/2020/06/08/5-interesting-things-8-6-2020/</guid><description>DBScan practitioners guide - DBScan is a density-based clustering method. One important advantage comparing to K-means is DBScan&apos;s ability to identify noise…</description><pubDate>Mon, 08 Jun 2020 08:57:31 GMT</pubDate><content:encoded>
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;DBScan practitioners guide&lt;/span&gt;&lt;/strong&gt; - DBScan is a density-based clustering method. One important advantage comparing to K-means is DBScan&apos;s ability to identify noise and outliers. I feel that  DBScan is often under-estimated. See this guide to learn more on how DBScan works, how to choose hyperparameters and more.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/a-practical-guide-to-dbscan-method-d4ec5ab2bc99&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Fourier Transform for Data Science&lt;/span&gt;&lt;/strong&gt; - When I was in undergrad school I learned FFT out of context, it was just an algorithm in the textbook and I didn&apos;t understand what it was good for. Later I was asked about it in an oral in grad school and was able to mumble something. Much later I tried to pull some analysis on ECG waves and then I finally understood what it was about.Read this post if you want to demystify Fourier transform. &lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://medium.com/swlh/fourier-transformation-for-a-data-scientist-1f3731115097&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Bonus - OpenCV tutorial on Fourier Transform&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_transforms/py_fourier_transform/py_fourier_transform.html&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Dataset shift&lt;/span&gt;&lt;/strong&gt; - dataset shift happens when the test set and the train set come from different distributions. There are multiple expressions of this phenomenon, such as covariate shift, concept shift, prior distribution shift. I believe that every data scientist working in the industry came across at least one of those manifestations. This post provides a very good introduction to the topic and useful links if you want to delve.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://towardsdatascience.com/understanding-dataset-shift-f2a5a262a766&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;A Practical Framework for AI Adoption: A Five-Step Process&lt;/span&gt;&lt;/strong&gt; - having several years of experience as a data scientist I have noticed that data products are often not deployed, do not meet stakeholders&apos; expectations, not used as the data scientist intended, etc. This post introduces a framework that tries to remedy some of those problems.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://datascientia.blog/2020/05/23/framework-for-ai-adoption-a-five-step-process/&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Diagrams as code&lt;/span&gt;&lt;/strong&gt; - a code-based tool to draw system diagrams, possibly easier than fighting draw.io. It contains many icons including several cloud providers (AWS, GCP, Azure, etc). common servicers (K8S, Elastic, spark), etc. All in all, seems very promising.&lt;/p&gt;



&lt;p&gt;&lt;a&gt;https://diagrams.mingrammer.com/&lt;/a&gt;&lt;/p&gt;
</content:encoded><category>ai adoption</category><category>dataset shift</category><category>dbscan</category><category>diagrams as code</category><category>fft</category></item><item><title>Connected Papers is Here</title><link>https://tomron.net/2020/06/03/connected-papers-is-here/</link><guid isPermaLink="true">https://tomron.net/2020/06/03/connected-papers-is-here/</guid><description>Almost a year ago I published a blog post about &quot; 5 ways to follow publications in your field &quot;. Yesterday I was exposed to a new tool - Connected Papers .…</description><pubDate>Wed, 03 Jun 2020 11:57:00 GMT</pubDate><content:encoded>
&lt;p&gt;Almost a year ago I published a blog post about &quot;&lt;a&gt;5 ways to follow publications in your field&lt;/a&gt;&quot;. Yesterday I was exposed to a new tool - &lt;a&gt;Connected Papers&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Connected Papers present graph of papers that are similar to each other. However, note that this is not a citation tree. Each paper is a node and there is an edge between papers if they are similar.  The similarity matrix is based on co-citation and co-references.&lt;br /&gt; The node&apos;s colour represent the publication year and the node&apos;s size correspond to the number of citation. The graphs are built on the fly given a link or title.&lt;/p&gt;



&lt;p&gt;The interface presents the papers&apos; abstract which makes it easier to browse and jump between the different graphs.&lt;br /&gt;&lt;br /&gt;Two small features I can think of is to filter papers according to a publication year and an option to download citation (i.e. bibtex, APA). &lt;/p&gt;



&lt;p&gt;I believe that I&apos;ll used it extensively when working on related work.&lt;/p&gt;



&lt;p&gt;&lt;/p&gt;
</content:encoded><category>connected papers</category></item><item><title>5 interesting things (11/3/2020)</title><link>https://tomron.net/2020/03/11/5-interesting-things-11-3-2020/</link><guid isPermaLink="true">https://tomron.net/2020/03/11/5-interesting-things-11-3-2020/</guid><description>Never attribute to stupidity that which is adequately explained by opportunity cost - if you have a capacity for only 10 words, those are the 10 words you…</description><pubDate>Wed, 11 Mar 2020 10:59:10 GMT</pubDate><content:encoded>&lt;div&gt;

&lt;strong&gt;&lt;u&gt;Never attribute to stupidity that which is adequately explained by opportunity cost&lt;/u&gt;&lt;/strong&gt; - if you have a capacity for only 10 words, those are the 10 words you should take - &quot;prioritization is the most value creating activity in any company&quot;. One general, I really like Erik Bernhardsson writing and ideas, I find his posts insightful.
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://erikbern.com/2020/03/10/never-attribute-to-stupidity-that-which-is-adequately-explained-by-opportunity-cost.html&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Causal inference tutorials thread&lt;/u&gt;&lt;/strong&gt; - check this thread if you are interested in causal inference.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://twitter.com/juli_schuess/status/1177155098306318336&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;The (Real) 11 Reasons I Don&apos;t Hire you&lt;/u&gt;&lt;/b&gt; - I follow Charity Major&apos;s blog since I heard here in ״&lt;a&gt;Distributed Matters&lt;/a&gt;&quot; in 2015. Besides being a very talented engineer, she also writes about being a founder and manager. Hiring and is hard for both sides and although it is hard to believe it is not always personal and a candidate has to be a good match for the presented company, for the future company, to the team. The company would like to have exciting and challenging tasks for the candidate so she will be happy and grow in the company, And of course, we are all human and make mistakes from time to time. Read Charity&apos;s post in order to examine the not hiring decision from the employer&apos;s point of view.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://charity.wtf/2019/10/18/the-real-11-reasons-i-dont-hire-you/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;strong&gt;&lt;u&gt;The 22 Most-Used Python Packages in the World&lt;/u&gt;&lt;/strong&gt; - an analysis of the most downloaded Python packages on PyPI over the past 365 days. Some of the results are surprising - I expected pip to be the most used package and it is only the fourth after urllib3, six and boto core, and requests to be ranked a bit higher. Some of the packages are internals we are not even aware of such as &lt;a&gt;idna&lt;/a&gt; and &lt;a&gt;pyasn1&lt;/a&gt;. Interesting reflection.
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://medium.com/better-programming/the-22-most-used-python-packages-in-the-world-7020a904b2e&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;Time-based cross-validation&lt;/b&gt;&lt;/span&gt; - it might seem obvious when reading but there are few things to notice when training a model that has time dependency. This post also includes Python code to support the suggested solutions.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://towardsdatascience.com/time-based-cross-validation-d259b13d42b8&lt;/a&gt;&lt;/div&gt;</content:encoded><category>causal inference</category><category>python</category></item><item><title>DevSkiller 2019 report - few comments</title><link>https://tomron.net/2020/03/05/devskiller-2019-report-few-comments/</link><guid isPermaLink="true">https://tomron.net/2020/03/05/devskiller-2019-report-few-comments/</guid><description>I read a blog post about DevSkiller report analyzing some trends and I read the original report and I have some comments to make. “Companies from Israel are…</description><pubDate>Thu, 05 Mar 2020 20:29:01 GMT</pubDate><content:encoded>&lt;span style=&quot;font-weight:400&quot;&gt;I read a &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;blog post&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; about DevSkiller report analyzing some trends and I read the original &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;report&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; and I have some comments to make.&lt;/span&gt;

&lt;b&gt;&lt;i&gt;“Companies from Israel are the most selective”&lt;/i&gt;&lt;/b&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;According to the post, companies in Israel are considered the most selective since they consider only 12.26% of the developers they test. Another point of view is that Israeli companies give less weight to résumés and would rather test the applicant skills. This can increase the diversity and give a chance to more people. I think that it is a good practice for an industry that lacks more than 10,000 professionals (see &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;)&lt;/span&gt;

&lt;b&gt;&lt;i&gt;“72% of companies are looking for JavaScript developers and JS is the most popular IT skill developers are tested in (40%)”&lt;/i&gt;&lt;/b&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;JavaScript is used both front-end (e.g. react) and back-end tool (e.g. node.js) and I think that the popularity &lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;. I think grouping it together is too broad. Also, the SQL skill is somehow a side requirement of many positions and is almost worthless on its own. The big gap between JavaScript (40%) and HTML\CSS (20%) is weird, specifically when they compare it to the &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;StackOverflow 2019 report&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; where they were JavaScript had 67.8% and HTML\CSS have 63.5% and they were one after the other. The numbers themselves do not matter, just the gap and the order.&lt;/span&gt;

 

&lt;span style=&quot;font-weight:400&quot;&gt;On a side comment, interpersonal skills such as team player, leadership, responsibility are ignored in this report and that’s a shame. They are sometimes more important when hiring someone. &lt;/span&gt;

&lt;b&gt;&lt;i&gt;“React, Spring, ASP.NET, MySQL, HTML, Data Analysis, and Laravel are the most popular technologies in their respective tech stacks”&lt;/i&gt;&lt;/b&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;CSS is a tech stack? Weird analysis from my point of view, maybe web development would have been a better title.&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;Is it a surprise that HTML and CSS are tested together? I find it hard to believe that an employer looks for an employee that is skilled only with one of those, they are tightly coupled.&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;In this section in the post, I miss a mention of NoSQL technologies.&lt;/span&gt;

&lt;b&gt;General comments&lt;/b&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;Obviously, they use their data which is great but there might be a selection bias to pay attention to. For example, companies that look for JavaScript developers are not able to screen for themselves and therefore use their services. Comparing to companies the loop for Python developers. In the section about technologies tested together, they point out that the most common combination last year was Java+SQL and this year it is JavaScript + CSS. Maybe their screening service for Java+SQL is not as good as their screening for JavaScript + CSS and therefore companies do not use it.&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;The completion rate of the test is impressive (93%).&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;There is a detailed analysis of the geography of the hiring companies and the candidates’ origins. I am also interested in demographics such as age, gender, marital status. I know that not everything is legal to have or ask. But I wonder if parents are more likely or less likely to complete the tests (or even start them). Are women as likely as men to pass the tests? Are there feminine and masculine technologies?&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;Data about years of experience and the correlation to technologies used and the probability passing the tests would also be interesting.&lt;/span&gt;

 </content:encoded></item><item><title>How To Capitalize All Words in a String in Python - The Easy way</title><link>https://tomron.net/2020/03/03/how-to-capitalize-all-words-in-a-string-in-python-the-easy-way/</link><guid isPermaLink="true">https://tomron.net/2020/03/03/how-to-capitalize-all-words-in-a-string-in-python-the-easy-way/</guid><description>I run into this medium post today - &quot; How To Capitalize All Words in a String in Python &quot;. It explains how to c onvert “hello world” to “Hello World” but it…</description><pubDate>Tue, 03 Mar 2020 08:39:06 GMT</pubDate><content:encoded>I run into this medium post today - &quot;&lt;a&gt;How To Capitalize All Words in a String in Python&lt;/a&gt;&quot;.

It explains how to c&lt;span style=&quot;color:var(--color-text)&quot;&gt;onvert “hello world” to “Hello World” but it does it the hard way. An easier solution would be to use &lt;em&gt;title&lt;/em&gt; function.&lt;/span&gt;
&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;x &lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt; &quot;hello world&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;print&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;(x.title())&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#6A737D;--shiki-dark:#6A737D&quot;&gt;#Hello World&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
See more documentation &lt;a&gt;here&lt;/a&gt;</content:encoded><category>python</category><category>title</category></item><item><title>argparse choices</title><link>https://tomron.net/2020/02/23/argparse-choices/</link><guid isPermaLink="true">https://tomron.net/2020/02/23/argparse-choices/</guid><description>I saw this post in Medium regarding argparse, which suggests the following - parser.add_argument(&quot;--model&quot;, help=&quot;choose model architecture from: vgg19 vgg16…</description><pubDate>Sun, 23 Feb 2020 08:56:36 GMT</pubDate><content:encoded>I saw this &lt;a&gt;post&lt;/a&gt; in Medium regarding argparse, which suggests the following -
&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;parser.add_argument(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;--model&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;help&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;choose model architecture from: vgg19 vgg16 alexnet&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
I think the following variant is better -
&lt;pre class=&quot;shiki shiki-themes github-light github-dark&quot; style=&quot;--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;parser.add_argument(&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;--model&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;help&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;choose model architecture from: vgg19 vgg16 alexnet&quot;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#005CC5;--shiki-dark:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;choices&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;vgg19&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;vgg16&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;alexnet&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;], &lt;/span&gt;&lt;span style=&quot;--shiki-light:#E36209;--shiki-dark:#FFAB70&quot;&gt;default&lt;/span&gt;&lt;span style=&quot;--shiki-light:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--shiki-light:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&apos;alexnet&apos;&lt;/span&gt;&lt;span style=&quot;--shiki-light:#24292E;--shiki-dark:#E1E4E8&quot;&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
If an illegal parameter is given, for example &lt;em&gt;--model vgg20&lt;/em&gt;, the desired behavior of almost every program is to throw an exception. This won&apos;t happen in the first case. If the user mistypes the model name the script will use Alexnet pre-trained instead of throwing an exception (implemented later in the script). Using the choices argument will solve this. Adding &lt;em&gt;default=&apos;alexent&apos;, &lt;/em&gt;takes care in the case where the user does not choose a model actively. For the example presented in the original post this is the desired behavior.

See more here -
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;Python documentation&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Python module a week&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;argparse cookbook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>argparse</category><category>python</category></item><item><title>Missing data in Python - 5 resources</title><link>https://tomron.net/2020/02/16/missing-data-in-python-5-resources/</link><guid isPermaLink="true">https://tomron.net/2020/02/16/missing-data-in-python-5-resources/</guid><description>Bonus - R-miss-tastic - theoretical background and resources which relate to R missing values package. I recommend the lecture notes.…</description><pubDate>Sun, 16 Feb 2020 11:47:22 GMT</pubDate><content:encoded>Bonus - &lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;R-miss-tastic&lt;/strong&gt;&lt;/span&gt; - theoretical background and resources which relate to R missing values package. I recommend the lecture notes.
&lt;a&gt;https://rmisstastic.netlify.com/lectures/ &lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Working with missing data in Pandas&lt;/strong&gt;&lt;/span&gt; - pandas is the swiss knife of data scientists, Pandas allows dropping records with missing values, fill missing values, interpolation of missing data points, etc.

&lt;a&gt;https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Missing data visualization&lt;/strong&gt;&lt;/span&gt; - provides several levels and types of visualizations - per sample, per feature, features heat map and dendrogram in order to gain a better understanding of missing values in a dataset.

&lt;a&gt;https://github.com/ResidentMario/missingno&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;FancyImput&lt;/strong&gt;&lt;/span&gt; - Multivariate imputation and matrix completion algorithms implemented. This package was partially merged to scikit-learn. This package focus on viewing the data as a matrix and not a composition of columns, unfortunately, it is no longer actively maintained but maybe in the future.

&lt;a&gt;https://github.com/iskandr/fancyimpute&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Missingpy&lt;/strong&gt;&lt;/span&gt; - scikit-learn consistent API for data imputation. Implements KNN imputation (also implemented in FancyImput) and Random Forest imputation (MissForest). Seems unmaintained.

&lt;a&gt;https://github.com/epsilon-machine/missingpy&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;MDI - Missing Data Imputation Package&lt;/strong&gt;&lt;/span&gt; - accompanying code to Missing Data Imputation for Supervised Learning (&lt;a&gt;https://arxiv.org/abs/1610.09075&lt;/a&gt;)

&lt;a&gt;https://github.com/rafaelvalle/MDI&lt;/a&gt;</content:encoded><category>imputation</category><category>mar</category><category>mcar</category><category>missing values</category><category>missingno</category><category>mnar</category><category>python</category><category>pandas</category><category>scikit-learn</category></item><item><title>3 follow-up notes on 3 python list comprehension tricks</title><link>https://tomron.net/2020/01/26/3-follow-up-notes-on-3-python-list-comprehension-tricks/</link><guid isPermaLink="true">https://tomron.net/2020/01/26/3-follow-up-notes-on-3-python-list-comprehension-tricks/</guid><description>I saw the following post about list comprehension tricks in Python . I really like python comprehension functionality - dict, set, list, I don’t discriminate.…</description><pubDate>Sun, 26 Jan 2020 10:00:27 GMT</pubDate><content:encoded>I saw the following post about &lt;a&gt; list comprehension tricks in Python&lt;/a&gt;. I really like python comprehension functionality - dict, set, list, I don’t discriminate. So 3 follow up notes about this post -
&lt;p style=&quot;padding-left:40px&quot;&gt;&lt;strong&gt;1. Set Comprehension&lt;/strong&gt;&lt;/p&gt;
&lt;span style=&quot;font-weight:400&quot;&gt;Beside dictionary and lists, comprehensions also work for sets -&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
{s for s in [1, 2, 1, 0]}
#set(0,1,2))
{s**2 for s in [1,2,1,0,-1]}
#set(0,1,4)
[/sourcecode]
&lt;p style=&quot;padding-left:40px&quot;&gt;&lt;strong&gt;2. Filtering (and a glimpse to generators)&lt;/strong&gt;&lt;/p&gt;
&lt;span style=&quot;font-weight:400&quot;&gt;In order to filter a list, one can iterate over the list or generator, apply the filter function and output a list or can use the build-in &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;filter&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; function and receive a generator that is more efficient as described further in the original post.&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
words = [&apos;deified&apos;, &apos;radar&apos;, &apos;guns&apos;]
palindromes = filter(lambda w: w==w[::-1], words)
list(palindromes)
#[&apos;deified&apos;, &apos;radar&apos;]
[/sourcecode]

&lt;span style=&quot;font-weight:400&quot;&gt;Additional nice to know the build-in function is the &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;map&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; function, that for example can yield the words’ lengths as generators - &lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
words = [&apos;deified&apos;, &apos;radar&apos;, &apos;guns&apos;]
lengths = map(lambda w: len(w), words)
list(lengths)
#[7, 5, 4]
[/sourcecode]

&lt;p style=&quot;padding-left:40px&quot;&gt;&lt;strong&gt;3. Generators&lt;/strong&gt;&lt;/p&gt;
&lt;span style=&quot;font-weight:400&quot;&gt;Another nice usage of generators is to create an infinite sequence - &lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]

def infinite_sequence():

    num=0

    while True:

        yield num

        num+=1


gen = infinite_sequence()

next(gen)

#0

next(gen)

#1

next(gen)

#2

[/sourcecode]

Generators can be piped, return multiple outputs, and more. I recommend this &lt;a&gt;post&lt;/a&gt;to a better understand generators.</content:encoded><category>list-comprehension</category><category>python</category></item><item><title>3 interesting features of NetworkX</title><link>https://tomron.net/2020/01/17/3-interesting-features-of-networkx/</link><guid isPermaLink="true">https://tomron.net/2020/01/17/3-interesting-features-of-networkx/</guid><description>“ NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.” NetworkX lets the user…</description><pubDate>Fri, 17 Jan 2020 20:54:59 GMT</pubDate><content:encoded>&lt;span style=&quot;font-weight:400&quot;&gt;“&lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;NetworkX&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.”&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;NetworkX lets the user create a graph and then study it. For example - find the shortest path between nodes, find node degree, find the maximal clique, find coloring of a graph and so on. In this post, I’ll present a few features I find interesting and are maybe less known.&lt;/span&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;Multigraphs&lt;/b&gt;&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;Multigraph is a graph that can store multiedges. Multiedges are multiple edges between two nodes (it is different from hypergraph where an edge can connect any number of nodes and no just two). NetworkX has 4 &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;graph types&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - the well-known commonly used directed and undirected graph and 2 multigraphs -  nx.MultiDiGraph for directed multigraph and nx.MultiGraph for undirected multigraph.&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;In the example below, we see that if the graph type is not defined correctly, functionalities such as degree calculation may yield the wrong value -&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
import networkx as nx
G = nx.MultiGraph() G.add_nodes_from([1, 2, 3]) G.add_edges_from([(1, 2), (1, 3), (1, 2)]) print(G.degree()) #[(1, 3), (2, 2), (3, 1)] H = nx.Graph() H.add_nodes_from([1, 2, 3]) H.add_edges_from([(1, 2), (1, 3), (1, 2)]) print(H.degree()) #[(1, 2), (2, 1), (3, 1)] [/sourcecode]

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;Create a graph from pandas dataframe&lt;/b&gt;&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;Pandas is the swiss knife of every data scientist, so naturally, it would be a good idea to create a graph from pandas dataframe. The other way around is also possible. See the documentation &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;. The example below shows how to create a multigraph from a pandas dataframe where each edge has a weight property.&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
import pandas as pd
df = pd.DataFrame([[1, 1, 4], [2, 1, 5], [3, 2, 6], [1, 1, 3]], columns=[&apos;source&apos;, &apos;destination&apos;, &apos;weight&apos;]) print(df) # source destination weight # 0 1 1 4 # 1 2 1 5 # 2 3 2 6 # 3 1 1 3 G = nx.from_pandas_edgelist(df, &apos;source&apos;, &apos;destination&apos;, [&apos;weight&apos;], create_using=nx.MultiGraph) print(nx.info(G)) # Name: # Type: MultiGraph # Number of nodes: 3 # Number of edges: 4 # Average degree: 2.6667 [/sourcecode]

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;Graph generators&lt;/b&gt;&lt;/span&gt;

O&lt;span style=&quot;font-weight:400&quot;&gt;ne of the features I find the most interesting and powerful. The &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;graph generator&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; interface allows creating several types we just one line of code. Some of the graphs are deterministic given a parameter (e.g complete graph of k nodes) while some are random (e.g. binomial graph). Below are a few examples of deterministic graphs and random graphs. The examples below are the tip of the iceberg of the graph generator capabilities.&lt;/span&gt;

&lt;b&gt;Complete graph&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - creates a graph with n nodes and an edge between every two nodes.&lt;/span&gt;

&lt;b&gt;Empty graph&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - creates a graph with n nodes and no edges.&lt;/span&gt;

&lt;b&gt;Star graph - &lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt;create a graph with one central node connected to n external nodes.&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
G = nx.complete_graph(n=9)
print(len(G.edges()), len(G.nodes()))
# 36 9
H = nx.complete_graph(n=9, create_using=nx.DiGraph)
print(len(H.edges()), len(H.nodes()))
# 72 9
J = nx.empty_graph(n=9)
print(len(J.edges()), len(J.nodes()))
# 0 9
K = nx.star_graph(n=9)
print(len(K.edges()), len(K.nodes()))
# 9 10
[/sourcecode]

&lt;b&gt;Binomial Graph&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - create a graph with n nodes and each edge is created with probability p (alias for gnp_random_graph and erdos_renyi_graph).&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
G1 = nx.binomial_graph(n=9, p=0.5, seed=1)
G2 = nx.binomial_graph(n=9, p=0.5, seed=1)
G3 = nx.binomial_graph(n=9, p=0.5)
print(G1.edges()==G2.edges(), G1.edges()==G3.edges())
# True False
[/sourcecode]

&lt;b&gt;Random regular graph&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - creates a graph with n nodes, edges are created randomly and each node has degree d.&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
G = nx.random_regular_graph(d=4, n=10)
nx.draw(G)
plt.show()
[/sourcecode]

&lt;img class=&quot;alignnone size-medium wp-image-1323&quot; src=&quot;https://tomron.net/wp-content/uploads/2020/01/random_graph-e1579287139674.png&quot; alt=&quot;Random regula graph&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;

&lt;b&gt;Random tree&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - create a uniformly random tree of n nodes.&lt;/span&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
G = nx.random_tree(n=10)
nx.draw(G)
plt.show()
[/sourcecode]

&lt;img class=&quot;alignnone size-medium wp-image-1324&quot; src=&quot;https://tomron.net/wp-content/uploads/2020/01/random_tree.png&quot; alt=&quot;random_tree&quot; width=&quot;300&quot; height=&quot;225&quot; /&gt;

All the code in this post can be found &lt;a&gt;here&lt;/a&gt;

&lt;b&gt;Additional Resource&lt;/b&gt;

&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Official site&lt;/span&gt;&lt;/a&gt;

&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;SO questions&lt;/span&gt;&lt;/a&gt;

&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;https://www.datacamp.com/community/tutorials/networkx-python-graph-tutorial&lt;/span&gt;&lt;/a&gt;

&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;https://www.geeksforgeeks.org/directed-graphs-multigraphs-and-visualization-in-networkx/amp/&lt;/span&gt;&lt;/a&gt;</content:encoded><category>graphs</category><category>networkx</category><category>python</category><category>pandas</category></item><item><title>5 interesting things (23/09/2019)</title><link>https://tomron.net/2019/09/23/5-interesting-things-23-09-2019/</link><guid isPermaLink="true">https://tomron.net/2019/09/23/5-interesting-things-23-09-2019/</guid><description>All the best engineering advice I stole from non-technical people - the length of this post could definitely be cut into half. However, I find the idea that…</description><pubDate>Mon, 23 Sep 2019 10:35:42 GMT</pubDate><content:encoded>&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;All the best engineering advice I stole from non-technical people&lt;/b&gt;&lt;/span&gt; - the length of this post could definitely be cut into half. However, I find the idea that useful, meaningful advice and insights can pop around and you just need to listen importantly. There is something to learn from everyone, and we just need to be willing to do that.
&lt;div&gt;&lt;a&gt;https://medium.com/@bellmar/all-the-best-engineering-advice-i-stole-from-non-technical-people-eb7f90ca2f5f&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;strong&gt;&lt;u&gt;The Ultimate Guide to Acing Your First Coding Interview&lt;/u&gt;&lt;/strong&gt; - looking for a job and especially your first job as a junior developer is a hard job. Read Dana&apos;s tips here -
&lt;div&gt;(full disclosure - I know Dana and helped to edit the post a bit)
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://medium.com/@dana.blanc/the-ultimate-guide-to-acing-your-first-coding-interview-5cd78748ca6d&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Python Libraries for Interpretable Machine Learning&lt;/u&gt;&lt;/strong&gt; - Interpretability in machine learning becomes an important topic lately. While I have my doubts about it and what interpretability really is, this post presents the main Python packages for interpretability -&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://towardsdatascience.com/python-libraries-for-interpretable-machine-learning-c476a08ed2c7&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Bonus point - missing package SHAP(SHapley Additive exPlanations)  -  &lt;a&gt;https://github.com/slundberg/shap&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Document Embedding techniques&lt;/u&gt;&lt;/strong&gt; - (another) excellent post by Shay Palachy which reviews the main and prominent approaches regarding document embedding including many references to the relevant literature.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://towardsdatascience.com/document-embedding-techniques-fed3e7a6a25d&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Style Pandas Dataframe Like a Master&lt;/u&gt;&lt;/strong&gt; - while I always knew I can do better with my styling I didn&apos;t know how far I can take it. Check this post for a quick ramp-up on the topic.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://towardsdatascience.com/style-pandas-dataframe-like-a-master-6b02bf6468b0&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 ways to follow publications in your field</title><link>https://tomron.net/2019/08/07/5-ways-to-follow-publications-in-your-field/</link><guid isPermaLink="true">https://tomron.net/2019/08/07/5-ways-to-follow-publications-in-your-field/</guid><description>This post was published on Medium An important part of the data scientists and researchers’ life is to keep track of publications in their field. Depends on…</description><pubDate>Wed, 07 Aug 2019 12:12:41 GMT</pubDate><content:encoded>&lt;p&gt;This post was published on &lt;a&gt;Medium&lt;/a&gt;&lt;/p&gt;


&lt;hr /&gt;
&lt;p class=&quot;jr js dc bc jt b ju jv jw jx jy jz ka kb kc kd ke&quot;&gt;An important part of the data scientists and researchers’ life is to keep track of publications in their field. Depends on your field and needs publications range from papers in academic conferences and proceedings (some of them you can find as youtube videos), new technology and code packages, blog posts, etc. This post focus on who to keep track of academic research and innovation.&lt;/p&gt;

&lt;ol&gt;
	&lt;li class=&quot;jr js dc bc jt b ju jv jw jx jy jz ka kb kc kd ke kf kg kh&quot;&gt;&lt;strong class=&quot;jt ki&quot;&gt;Follow the relevant conferences, journals &lt;/strong&gt;— make sure you are familiar with the main conferences in your field (ee.g.&lt;a&gt;List of Machine Learning and Deep Learning conferences in 2019 / 2020&lt;/a&gt;) and follow their publications. You can usually read the accepted papers in the conference website when the paper acceptance is published. Talk slides and videos are usually accessible a short while after the conference. Identifying the relevant conferences may require some initial effort but once you identified it, it is easy to get it going.&lt;/li&gt;
	&lt;li class=&quot;jr js dc bc jt b ju kn jw ko jy kp ka kq kc kr ke kf kg kh&quot;&gt;&lt;strong class=&quot;jt ki&quot;&gt;Google scholar e-mail alerts&lt;/strong&gt; — track authors and \ or keywords you find relevant for you. E.g if you are interested in causal inference you would probably want to follow Judea Pearl. You can track new articles, citations and new articles related by author or keywords. I prefer to track only new articles because I found the benefit from citations and related articles low. You can also get email alerts by more complex queries. Set your alerts&lt;a&gt; here&lt;/a&gt;.&lt;/li&gt;
	&lt;li class=&quot;jr js dc bc jt b ju kn jw ko jy kp ka kq kc kr ke kf kg kh&quot;&gt;&lt;strong class=&quot;jt ki&quot;&gt;arXiv E-Mail Alerting Service&lt;/strong&gt; — arXiv provides a daily digest of new submissions by subject, it is less granular and less focused than google scholar but can give you access to the newest, hottest submissions. Subscribe to arXiv E-Mail Alerting Service&lt;a&gt; here&lt;/a&gt;).&lt;/li&gt;
	&lt;li class=&quot;jr js dc bc jt b ju kn jw ko jy kp ka kq kc kr ke kf kg kh&quot;&gt;&lt;strong class=&quot;jt ki&quot;&gt;Follow blogs and publications of companies and research institutes which interest you — &lt;/strong&gt;those are usually softer publications that give you a taste of the company’s recent advances and research. If this lights up your imagination, move on to reading the full paper. Examples of such blogs &lt;a&gt;— facebook research blog&lt;/a&gt;,&lt;a&gt; OpenAI blog&lt;/a&gt;,&lt;a&gt; Google AI blog&lt;/a&gt;&lt;strong class=&quot;jt ki&quot;&gt;.&lt;/strong&gt;&lt;/li&gt;
	&lt;li class=&quot;jr js dc bc jt b ju kn jw ko jy kp ka kq kc kr ke kf kg kh&quot;&gt;&lt;strong class=&quot;jt ki&quot;&gt;Social media&lt;/strong&gt; — follow researchers which are relevant to your field in twitter, see the papers they publish and recommend, read the discussions they are involved in. Join facebook groups that discuss the topics you are interested in.&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;jr js dc bc jt b ju jv jw jx jy jz ka kb kc kd ke&quot;&gt;Now, you can lean back and enjoy the new ideas coming to you. The next challenge is to wisely invest your time and to pick the papers which will be most beneficial for you.&lt;/p&gt;</content:encoded><category>data science</category><category>research</category></item><item><title>Junior Data Science — Choosing your first job</title><link>https://tomron.net/2019/07/26/junior-data-science-choosing-your-first-job/</link><guid isPermaLink="true">https://tomron.net/2019/07/26/junior-data-science-choosing-your-first-job/</guid><description>This post was publish on Medium While there are many people who would like to become a data scientist and are looking for their first position, junior data…</description><pubDate>Fri, 26 Jul 2019 19:19:13 GMT</pubDate><content:encoded>This post was publish on &lt;a&gt;Medium&lt;/a&gt;

&lt;hr /&gt;

&lt;article&gt;
&lt;div&gt;&lt;section class=&quot;gd ge gf gg gh&quot;&gt;
&lt;div class=&quot;t kr r s n o&quot;&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;While there are many people who would like to become a data scientist and are looking for their first position, junior data science positions are rare. Data science positions range from very research oriented positions in companies which also publish in scientific conferences (quite rare) to positions which are more hands-on and involve lots of coding. (Junior) Data scientists also come from diverse backgrounds: recent grads (bsc, msc and PhDs in different fields), experienced developers which would like to learn new skills, retraining and so on.&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;While the junior data science positions are rare, it is important to make an accurate choice and avoid common pitfalls. This post was triggered by Ori Cohen’s post “&lt;a&gt;Data-Science Recruitment — Why You May Be Doing It Wrong&lt;/a&gt;” which was oriented to the recruiting side. This post is for the data scientist who is looking for their first job. Here are few insights.&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;&lt;strong class=&quot;gu me&quot;&gt;Don’t be the first data scientist in the company&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;This sounds like a very sexy position — you recently graduated from the university and you were able to impress a small startup with your skills. They offer you to be the first data scientist in the company, boom! You will be able to shape the methods, process and tools the right way, like you always envisioned!&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;&lt;em class=&quot;mf&quot;&gt;״In theory, theory and practice are the same. In practice, they are not״&lt;/em&gt;(&lt;a&gt;Benjamin Brewster&lt;/a&gt;).&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;Many practical tasks are not like in the textbook or in Andrew Ng’s course. You will most probably need guidance and advice from an experienced data scientist who already made her mistakes, is familiar with the data and with the product’s constraints and is simply more experienced. The skills you want to learn varies over time but it always a good idea always have someone around that you can learn from.&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;An additional issue is that small companies usually have little data, usually not enough to train models, and the data quality might also be an issue. This will require changes in the product which should be defined and implemented. As a junior data scientist it might be complicated to do both the technical part and the politics which is required for such a change.&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;How would you know you are interviewing for the first data science position:&lt;/p&gt;

&lt;ol&gt;
	&lt;li class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf mg mh mi&quot;&gt;You will be told so explicitly — “you will be our first data scientist”&lt;/li&gt;
	&lt;li class=&quot;gs gt da aq gu b gv mj gx mk lu ml lw mm ly mn hf mg mh mi&quot;&gt;None of your interviewers is a data scientist and the questions they ask don’t reflect a deep understanding of the topic.&lt;/li&gt;
&lt;/ol&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;&lt;strong class=&quot;gu me&quot;&gt;People Don’t Quit Jobs — They Quit Bosses&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;And before quitting — people work for bosses.&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;Interviews are two-sided. The company interviews you, but you also interview the company. Does the product excites you? Do you think the company has the right values and culture fit for you? Would you like to work for this manager?&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;Most likely you will work closely with your manager and teammates. Did they impress you? Would you value their feedback?&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;In order to learn and improve, a lot of feedback and communication is required, especially when you are in a junior position. Are there regular 1:1s? Is there an on boarding plan? Do they participate in conferences \ is there an education budget? Does the company have the work-life-balance you are looking for?&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;During an interview, the interviewer might want to please you so if you’ll ask these questions directly they might answer what you expect to hear. Talking with teammates and other co-workers in the company can give you additional insights about the team and the company.&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;&lt;strong class=&quot;gu me&quot;&gt;Tools and Technologies&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;If you mainly focus on research you might find this point secondary. However, for your next position, hands on experience may be required. Be sure to choose a place which uses reasonable technologies and not a niche, esoteric technologies. E.g using assembly for machine learning, working in mainframe environment, etc.&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;Current reasonable technology stack for data scientist includes : python (maybe scala, maybe &lt;a&gt;R&lt;/a&gt; depends on your risk aversion) and scientific python packages (pandas, numpy, scipy, etc), cloud environment, some kind of database (postgres \ mysql \ elasticsearch \ mongodb).&lt;/p&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;Last but not least — choose something you are passionate about so you will be happy to go to work in the morning and dream about your code at night :)&lt;/p&gt;

&lt;/div&gt;
&lt;/section&gt;

&lt;hr class=&quot;mo fs kb mp mq kk mr ms mt mu mv&quot; /&gt;

&lt;section class=&quot;gd ge gf gg gh&quot;&gt;
&lt;div class=&quot;t kr r s n o&quot;&gt;
&lt;p class=&quot;gs gt da aq gu b gv ls gx lt lu lv lw lx ly lz hf&quot;&gt;Special thanks to &lt;a&gt;Liad Pollak&lt;/a&gt; and &lt;a&gt;Idit Cohen&lt;/a&gt; who made this text readable&lt;/p&gt;

&lt;/div&gt;
&lt;/section&gt;&lt;/div&gt;
&lt;/article&gt;
&lt;div class=&quot;mw nz iv hu iw ix iy iz ja e&quot;&gt;
&lt;div class=&quot;af ce&quot;&gt;
&lt;div class=&quot;jb jc jd af&quot;&gt;
&lt;div class=&quot;af ag&quot;&gt;
&lt;div class=&quot;hi u bs&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div class=&quot;du&quot;&gt;
&lt;div class=&quot;bd hj hk hl hm hn ho di hp hq&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;hr u&quot;&gt;
&lt;div class=&quot;hs&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (23/07/2019)</title><link>https://tomron.net/2019/07/23/5-interesting-things-23-07-2019/</link><guid isPermaLink="true">https://tomron.net/2019/07/23/5-interesting-things-23-07-2019/</guid><description>Five Talks from spaCy-IRL Worth Watching - great summarisation of 5 talks from spaCy-IRL conference which took place in Berlin in the beginning of July. The…</description><pubDate>Tue, 23 Jul 2019 13:22:55 GMT</pubDate><content:encoded>&lt;div class=&quot;mail-message expanded&quot;&gt;
&lt;div class=&quot;mail-message-content collapsible zoom-normal  &quot;&gt;
&lt;div class=&quot;clear&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Five Talks from spaCy-IRL Worth Watching&lt;/u&gt;&lt;/strong&gt; - great summarisation of 5 talks from spaCy-IRL conference which took place in Berlin in the beginning of July. The summarisations are very exact - not too deep, not too shallow and makes you want to watch the talks. From the meta perspective - a very nice connection between academia and industry leveraging ideas from academia to solve industry problems.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div class=&quot;clear&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;a&gt;https://medium.com/@noa.kel/five-talks-from-spacy-irl-worth-watching-e6e505e0e272&lt;/a&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;King - Man + Woman = King ?&lt;/u&gt;&lt;/strong&gt; In 2016 &quot;&lt;a&gt;Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings&lt;/a&gt;&quot; was published and showed that the pre-trained word2vec model which was trained on Google News articles exhibited gender stereotypes to, “a disturbing extent.”. Apparently, according to &quot;&lt;a&gt;Fair is Better than Sensational:Man is to Doctor as Woman is to Doctor&lt;/a&gt;&quot; at least some of the bias stems from optimisations \ restrictions done in order to present better results. Most significant one the answer to &quot;a to b is like c to ..?&quot; cannot be b. This does not mean that there is no bias, it only means that it was not measured and formalised correctly. This emphasises once again the need to understand the algorithms we use and their limitations.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://blog.esciencecenter.nl/king-man-woman-king-9a7fd2935a85&lt;/a&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Bonus - linear digression episode - &lt;a&gt;Revisiting Biased Word Embeddings&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
 
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;10 tips for code review&lt;/u&gt;&lt;/strong&gt; - code review can be a stressful task for both the reviewer and the person her work is being reviewed. This post is from the reviewer point of view, how to make this process more efficient and constructive to both sides. A good follow up post would be how to listen and reach to code review. From my experience, many times it is a boiling point for relationships inside teams and can break teams when not done correctly.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://developers.redhat.com/blog/2019/07/08/10-tips-for-reviewing-code-you-dont-like/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;b&gt;&lt;u&gt;How to label data&lt;/u&gt;&lt;/b&gt; - if you ever did a data science project you know that obtaining tagged data is a real hassle. You often discover that you don&apos;t have enough data, the tagging is not what you need, etc. This guide will help you avoid pitfalls when issuing a labelling project.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://www.lighttag.io/how-to-label-data/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Data-Science Recruitment — Why You May Be Doing It Wrong&lt;/u&gt;&lt;/strong&gt; - post by data science team lead in Zencity regarding do&apos;s and don&apos;t do in the interviewing process for data scientists. In the last few years I widnessed many of this flaws - asking non relevant riddles, given a very long home exercise, not well defined with doubtful data. I would like to emphasise for candidates, specially junior candidates, that if  you have doubts during the interview process consider looking for another place.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://towardsdatascience.com/data-science-recruitment-why-you-may-be-doing-it-wrong-b8e9c7b6dae5&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (26/06/2019)</title><link>https://tomron.net/2019/06/26/1296/</link><guid isPermaLink="true">https://tomron.net/2019/06/26/1296/</guid><description>Checklist for debugging neural networks - well written trouble shooting for neural networks models which is not language or framework specific!…</description><pubDate>Wed, 26 Jun 2019 13:22:54 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Checklist for debugging neural networks&lt;/u&gt;&lt;/strong&gt; - well written trouble shooting for neural networks models which is not language or framework specific!
&lt;a&gt;https://towardsdatascience.com/checklist-for-debugging-neural-networks-d8b2a9434f21&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;Why Software Projects Take Longer Than You Think A Statistical Model&lt;/b&gt;&lt;/span&gt; - great post about a problem we all face. Usually we try to solve it using &quot;instrumental changes&quot; - changing methods \ processes \ ... . This post tries to show that there is more to it than just the behavioural change.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://erikbern.com/2019/04/15/why-software-projects-take-longer-than-you-think-a-statistical-model.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;(and linear digressions episode about it - &lt;a&gt;http://lineardigressions.com/episodes/2019/4/21/using-statistics-to-understand-why-your-software-projects-are-always-running-late&lt;/a&gt;)&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Google What-If-Tool (WIT)&lt;/u&gt;&lt;/b&gt; - A nice tool by Google that was released few month ago. The terminology is actually a bit misleading and counterfactuals don&apos;t carry the meaning they have in causal inference. It is more like matching with two possible distance matrices - L1 and L2.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://ai.googleblog.com/2018/09/the-what-if-tool-code-free-probing-of.html&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;causallib&lt;/u&gt;&lt;/strong&gt; - New python causal inference package from IBM&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://github.com/IBM/causallib&lt;/a&gt;&lt;b&gt;&lt;u&gt;
&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;There is also a python causal inference package from Microsoft which was released about a year ago - &lt;a&gt;https://github.com/Microsoft/dowhy&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;A Visual Intro to NumPy and Data Representation&lt;/u&gt;&lt;/b&gt; - What can I say, I really like Jay&apos;s guides -&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://jalammar.github.io/visual-numpy/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;</content:encoded></item><item><title>4 insights from BDHW19</title><link>https://tomron.net/2019/05/28/4-insights-from-bdhw19/</link><guid isPermaLink="true">https://tomron.net/2019/05/28/4-insights-from-bdhw19/</guid><description>This week I attended BDHW19 - Big data in Health Care which was hosted by the Weizmann Institute of Science in collaboration with Nature Medicine. The…</description><pubDate>Tue, 28 May 2019 10:54:09 GMT</pubDate><content:encoded>&lt;div&gt;This week I attended &lt;a&gt;BDHW19&lt;/a&gt; - Big data in Health Care which was hosted by the Weizmann Institute of Science in collaboration with Nature Medicine. The conference had a great line up of speakers - leading researchers in the field from academia, industry and HMO&apos;s.&lt;/div&gt;
&lt;div&gt;There were few ideas and themes that were mentioned several times from different angles and I would highlight few of them.&lt;/div&gt;
&lt;div&gt;(all sessions were recorded and I&apos;ll add a link once they are online)&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;EHR data in Israel&lt;/u&gt;&lt;/b&gt; - By law, every Israeli resident must be registered with one of the HMO&apos;s. The HMO&apos;s in Israel are in a special position were the where they are run as non-for-profit organizations and are prohibited by law from denying any Israeli resident membership. Israelies HMO&apos;s hold EHR data from the mid nineties which means that the biggest HMO (Clalit) have longitudinal data of over 20 years for 4.5m heterogenic patients. Together with greater researchers and collaboration with the academia this enables amazing research which hopefully later propagates and influence our daily life.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;See more in - &lt;a&gt;Clalit publications&lt;/a&gt;, &lt;a&gt;Maccabi publications&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;The Israeli AI Healthcare Startup Landscape of 2018 - &lt;a&gt;https://www.startuphub.ai/israeli-ai-healthcare-startups-2018&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Deployment of HC model&lt;/u&gt;&lt;u&gt;s&lt;/u&gt;&lt;/strong&gt; - while there are great result and tools developed on research the way to deploy those models, use the new ideas is long and contains many obstacles. Only very few models really turned into health care products - alert system, treatment guide lines, bio markers, personalized medicine, etc. Few caveats in the way are interpretability, robust machine learning and causality. We must keep in mind that eventually our research should affect the end users - clinicians, patients, etc.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;More on this -&lt;/div&gt;
&lt;div&gt;Suchi Saria - &quot;&lt;a&gt;Tutorial : Safe and Reliable Machine Learning&lt;/a&gt;&quot; from FAT* 2019.&lt;/div&gt;
&lt;div&gt;Ziad Obermeyer - &quot;Using machine learning to understand and improve physician decision making&quot;.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Collaboration&lt;/u&gt;&lt;/strong&gt; - there are many efforts done in the field by many parties and in order to get good result and to move from journals to the field we need to cooperate. We need to ask the right questions and design good RCT or emulate them correctly. We need high quality data (or at least be aware to the quality of our data) so biobanks and dataset owners and researchers need to cooperate in order to get the most of the data. In order to see if our models generalizes well we should run them on different datasets. In order to see that our models make sense from medical perspective clinicians must be part of the process. We need everyone on board.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;More on this -&lt;/div&gt;
&lt;div&gt;Rachel Ramoni - &quot;Mine is Big ? Ours is Bigger: Million Veteran Program and the Case for Coordinated Collaboration&quot;&lt;/div&gt;
&lt;div&gt;Nigam Shah - &quot;Good machine learning for better healthcare&quot;. See also &lt;a&gt;Clinical Informatics Consult&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Causality&lt;/u&gt;&lt;/strong&gt; - The C word. Causal graph, counterfactuals, confounders, treatment effect.. It was present almost in every talk implicitly or explicitly.  Naturally some studies are more causal by nature such as &quot;which drug is better&quot;, &quot;do X cause Y&quot; and some need to take into account causal mechanisms, identify confounding, etc. There is a shift from prediction tasks to causal tasks.&lt;/div&gt;
&lt;div&gt;One key insight from Hernan&apos;s tutorial - we don&apos;t compare treatments, we compare strategies. I.e, studies in this field should move from comparing point interventions to comparing sustained treatment strategies. Moving to treatment strategies we should to be aware to treatment confounder loop.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;More on this -&lt;/div&gt;
&lt;div&gt;Uri Shalit - &quot;Predicting individual-level treatment effects in patients: challenges and proposed best practices&quot;.&lt;/div&gt;
&lt;div&gt;Miguel Hernan - &quot;How do we learn what works? A two-step algorithm for causal inference from healthcare data&quot; and tutorial &quot;Comparative Effectiveness of Dynamic Treatment Strategies: The renaissance of the g-formula&quot;.&lt;/div&gt;</content:encoded><category>bdhw19</category></item><item><title>5 &gt; 11</title><link>https://tomron.net/2019/01/17/5-11/</link><guid isPermaLink="true">https://tomron.net/2019/01/17/5-11/</guid><description>But it takes 11 minutes to read the tutorial...</description><pubDate>Thu, 17 Jan 2019 09:22:48 GMT</pubDate><content:encoded>&lt;img class=&quot;alignnone size-full wp-image-1290&quot; src=&quot;https://tomron.net/wp-content/uploads/2019/01/image_208.jpg&quot; alt=&quot;image_208&quot; width=&quot;1440&quot; height=&quot;1152&quot; /&gt;

But it takes 11 minutes to read the tutorial...</content:encoded></item><item><title>5  interesting things (17/01/2019)</title><link>https://tomron.net/2019/01/17/5-interesting-things-17-01-2019/</link><guid isPermaLink="true">https://tomron.net/2019/01/17/5-interesting-things-17-01-2019/</guid><description>How to Grow Neat Software Architecture out of Jupyter Notebooks - jupyter notebooks is a very common tool used by data scientist. However, the gap between this…</description><pubDate>Thu, 17 Jan 2019 08:39:13 GMT</pubDate><content:encoded>&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;How to Grow Neat Software Architecture out of Jupyter Notebooks&lt;/strong&gt;&lt;/span&gt; - jupyter notebooks is a very common tool used by data scientist. However, the gap between this code to production or to reusing it is sometimes big. How can we over come this gap? See some ideas in this post.

&lt;a&gt;https://github.com/guillaume-chevalier/How-to-Grow-Neat-Software-Architecture-out-of-Jupyter-Notebooks&lt;/a&gt;

&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;High-performance medicine: the convergence of human and artificial intelligence&lt;/span&gt;&lt;/strong&gt; - a very extensive survey of machine learning use cases in healthcare.

&lt;a&gt;https://www.nature.com/articles/s41591-018-0300-7&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;New Method for Compressing Neural Networks Better Preserves Accuracy&lt;/strong&gt;&lt;/span&gt; - a paper by Amazon Alexa team (mainly). Deep learning models can be huge and the incentive of compressing them is clear, this paper show how to compress the networks while not reducing the accuracy too much (1% vs 3.5% of previous works). This is mainly achieved by compressing the embedding matrix using SVD.

&lt;a&gt;https://developer.amazon.com/blogs/alexa/post/a7bb4a16-c86b-4019-b3f9-b0d663b87d30/new-method-for-compressing-neural-networks-better-preserves-accuracy&lt;/a&gt;

&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Translating Between Statistics and Machine Learning&lt;/span&gt;&lt;/strong&gt; - different paradigms sometimes use different terminology for the same ideas. This guide tries to bridge the terminology gap between statistics and machine learning.

&lt;a&gt;https://insights.sei.cmu.edu/sei_blog/2018/11/translating-between-statistics-and-machine-learning.html&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Postmake&lt;/strong&gt;&lt;/span&gt; - &quot;A directory of the best tools and resources for your projects&quot;. I&apos;m not sure how best is defined but samplig few categories it seems good (e.g. development categorty is pretty messy including github, elasticsearch and sublime together). I liked the website design and the trajectory. I do miss some category of task managment ( couldn&apos;t find Jira and any.do is not really a calender). It is at least good resource for inspiration.

&lt;a&gt;https://postmake.io&lt;/a&gt;</content:encoded></item><item><title>5 interesting things (4/11/2018)</title><link>https://tomron.net/2018/11/04/5-interesting-things-4-11-2018/</link><guid isPermaLink="true">https://tomron.net/2018/11/04/5-interesting-things-4-11-2018/</guid><description>Deep density networks and uncertainty in recommender systems - Yoel Zeldes and Inbar Naor from Taboola engineering team published a series of posts (4 so far)…</description><pubDate>Sun, 04 Nov 2018 18:45:28 GMT</pubDate><content:encoded>&lt;div&gt;
&lt;div&gt;

&lt;b&gt;&lt;u&gt;Deep density networks and uncertainty in recommender systems&lt;/u&gt;&lt;/b&gt; - Yoel Zeldes and Inbar Naor from Taboola engineering team published a series of posts (4 so far) about uncertainty in models - where this uncertainty comes from, how one can explore and use this uncertainty, etc. This post series relates to a paper they present in the workshop in this year KDD conference.
&lt;div&gt;&lt;/div&gt;
First post - &lt;a&gt;https://engineering.taboola.com/using-uncertainty-interpret-model/&lt;/a&gt;
&lt;div&gt;Paper - &lt;a&gt;https://arxiv.org/abs/1711.02487&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Decision tree visualization&lt;/u&gt;&lt;/strong&gt; - this post will be part of &lt;a&gt;The Mechanics of Machine Learning&lt;/a&gt; by Terence Parr and Jeremy Howard. The post discusses the creating of &lt;a&gt;dtreeviz&lt;/a&gt; from several aspects - considerations regarding visualizing decisions trees, comparison to current tools, implementation details, etc. Fascinating read.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;a&gt;http://explained.ai/decision-tree-viz/index.html&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;The Tale of 1001 Black Boxes&lt;/u&gt;&lt;/strong&gt; - many words were already spilled about the model Amazon used trying to automate their HR system. I like this one as I believe it explains the pitfalls clearly even to someone how is not an ML professional and it tries to grow from this point.&lt;/div&gt;
&lt;br /&gt;&lt;div&gt;&lt;a&gt;https://towardsdatascience.com/the-tale-of-1001-black-boxes-62d12b5886aa&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;Bonus point - &lt;a&gt;https://twitter.com/kldivergence/status/1050119653849092096?s=21&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Lessons Learned from Applying Deep Learning for NLP Without Big Data&lt;/u&gt;&lt;/strong&gt; - in the last 2 years everyone are doing deep learning but to be honest one of the very common issues in the industry is not having enough labeled data and thus deep learning can not always being applied. This post suggest few techniques to overcome not having enough data for NLP tasks.&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;a&gt;https://towardsdatascience.com/lessons-learned-from-applying-deep-learning-for-nlp-without-big-data-d470db4f27bf&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Machine Learning for Health Care course&lt;/u&gt;&lt;/strong&gt; - a paper a day keeps the doctor away. Not &lt;a&gt;this&lt;/a&gt; doctor ;-)&lt;/div&gt;
&lt;/div&gt;
Syllabus of Princeton Machine Learning for Health Care course (COS597C) given by Barbara Engelhardt. The reading list is very varied (from NLP to vision through reinforcement learning) and interesting. I definitely add at least some of those papers to my queue.

&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;

&lt;a&gt;http://www.cs.princeton.edu/~bee/courses/cos597c.html
&lt;/a&gt;

&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (13/08/2018)</title><link>https://tomron.net/2018/08/13/5-interesting-things-13-08-2018/</link><guid isPermaLink="true">https://tomron.net/2018/08/13/5-interesting-things-13-08-2018/</guid><description>JQ cook book - I find myself using JQ quite often and sometimes to more complex things than just filtering fields. https://github.com/stedolan/jq/wiki/Cookbook…</description><pubDate>Mon, 13 Aug 2018 08:49:59 GMT</pubDate><content:encoded>&lt;strong&gt;JQ cook book&lt;/strong&gt; - I find myself using JQ quite often and sometimes to more complex things than just filtering fields.
&lt;p class=&quot;p3&quot;&gt;&lt;span class=&quot;s1&quot;&gt; &lt;a&gt;&lt;span class=&quot;s2&quot;&gt;https://github.com/stedolan/jq/wiki/Cookbook&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;Bonus point - list of text-based file formats and command line tools for manipulating each - &lt;a&gt;&lt;span class=&quot;s2&quot;&gt;https://github.com/dbohdan/structured-text-tools&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;&lt;strong&gt;Missingno&lt;/strong&gt; - Missing data visualization module for Python. This package offers a variety of visualization to understand the missing data in your data set and the correlations between the absent of different properties.&lt;/p&gt;
&lt;p class=&quot;p3&quot;&gt;&lt;a&gt;https://github.com/ResidentMario/missingno&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;p3&quot;&gt;&lt;strong&gt;Add time order in Recommendation system&lt;/strong&gt; - the meaning of time order in this context is item x should be followed by item y. E.g for tv series - chapter 1 should be viewed before chapter 2. I don’t know if it is state of the art work in this domain but it is nice and should be relatively easy to implement when the prerequisite graph is unknown.&lt;/p&gt;
&lt;p class=&quot;p3&quot;&gt;&lt;a&gt;https://medium.com/@jujukala/how-to-use-time-order-in-machine-learning-recommendations-for-education-97091d2ab138&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;p3&quot;&gt;&lt;strong&gt;Cognitive bias are everywhere&lt;/strong&gt; - and this time who they affect you management performance. Referring to the last 2 points in the summary - “Establish trust and openness with your peers and reports” - I’m a big believer in 1:1s, I found this resource bundle &lt;a&gt;here.&lt;/a&gt; “Understand motivational theory, especially intrinsic motivation” - maybe the most important thing I learned being a scout leader is that every person have different motivation, you cannot lead others by what motivate you. Understanding this made a big change on how I view the world.&lt;/p&gt;
&lt;p class=&quot;p3&quot;&gt;&lt;a&gt;https://medium.freecodecamp.org/cognitive-bias-and-why-performance-management-is-so-hard-8852a1b874cd&lt;/a&gt;&lt;/p&gt;
&lt;p class=&quot;p3&quot;&gt;&lt;strong&gt;Want to Improve Your Productivity at Work? Take a Cooking Class&lt;/strong&gt; - on general I really like when interdisciplinary ideas mix and this is an interesting thought about the topic. The point that was most interesting for me was “Set your mise-en-place”. I see it a bit different \ wider from the writer - as a manager you should sometimes prepare the “mise-en-place” for your team. If they need to integrate with external service - take care of the NDA, API documentation, etc. Requirements and design can also sometimes viewed as “mise-en-place” for developers.&lt;/p&gt;
&lt;p class=&quot;p3&quot;&gt;&lt;span class=&quot;s3&quot;&gt;&lt;a&gt;https://medium.com/forbes/want-to-improve-your-productivity-at-work-take-a-cooking-class-37ac08bf2f26&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title>Bayesian machine learning in Python: A\B testing</title><link>https://tomron.net/2018/08/06/bayesian-machine-learning-in-python-ab-testing/</link><guid isPermaLink="true">https://tomron.net/2018/08/06/bayesian-machine-learning-in-python-ab-testing/</guid><description>I have recently took &quot;Bayesian machine learning in Python: A\B testing&quot; course in Udemy . My notes from the course can be found here . It is mainly written for…</description><pubDate>Mon, 06 Aug 2018 14:14:49 GMT</pubDate><content:encoded>I have recently took &quot;Bayesian machine learning in Python: A\B testing&quot; course in &lt;a&gt;Udemy&lt;/a&gt;. My notes from the course can be found &lt;a&gt;here&lt;/a&gt;.

It is mainly written for myself for easier future access and some links I browsed while taking the course, I hope it will be beneficial to others as well.

 </content:encoded></item><item><title>Geekness killed the cat (and others)</title><link>https://tomron.net/2017/12/04/geekness-killed-the-cat-and-others/</link><guid isPermaLink="true">https://tomron.net/2017/12/04/geekness-killed-the-cat-and-others/</guid><description>https://mathwithbaddrawings.com/2017/11/29/epitaphs-in-the-graveyard-of-mathematics/ And a follow up -…</description><pubDate>Mon, 04 Dec 2017 19:03:37 GMT</pubDate><content:encoded>&lt;a&gt;https://mathwithbaddrawings.com/2017/11/29/epitaphs-in-the-graveyard-of-mathematics/
&lt;/a&gt;
And a follow up -
&lt;a&gt;https://gorelik.net/2017/12/02/epitaphs-in-the-graveyard-of-mathematics/&lt;/a&gt;</content:encoded></item><item><title>Fun Facts: Automatic Trivia Fact Extraction from Wikipedia</title><link>https://tomron.net/2017/10/21/fun-facts-automatic-trivia-fact-extraction-from-wikipedia/</link><guid isPermaLink="true">https://tomron.net/2017/10/21/fun-facts-automatic-trivia-fact-extraction-from-wikipedia/</guid><description>Authors: David Tsurel , Dan Pelleg , Ido Guy , Dafna Shahaf Article can be found here Trivia facts can drive users engagement, But what are trivia fact? Is the…</description><pubDate>Sat, 21 Oct 2017 11:49:10 GMT</pubDate><content:encoded>Authors: &lt;a&gt;David Tsurel&lt;/a&gt;, &lt;a&gt;Dan Pelleg&lt;/a&gt;, &lt;a&gt;Ido Guy&lt;/a&gt;, &lt;a&gt;Dafna Shahaf&lt;/a&gt;
Article can be found &lt;a&gt;here&lt;/a&gt;

Trivia facts can drive users engagement, But what are trivia fact?

Is the fact “Barack Obama is part of the Obama family” a trivia fact?&lt;br /&gt;
Is the fact “Barack Obama is Grammy Award winner” a trivia fact?

This paper tackle the problem of automatically extracting trivia facts from Wikipedia.
In this paper Tsurel et al. focussed on exploiting Wikipedia categories structure (i.e. X is a Y). Categories represent set of articles with common theme such as “Epic films based on actual events”, “Capitals in Europe”, “Empirical laws”. An article can have several categories. The main motivation to use categories and not free text is that categories are cleaner than sentences and capture the essence of the sentence better.

According to Miriam-Webster dictionary a trivia is:
&lt;ul&gt;
	&lt;li&gt;unimportant facts or details&lt;/li&gt;
	&lt;li&gt;facts about people, events, etc., that are not well-known&lt;/li&gt;
&lt;/ul&gt;
The first path Tsurel et al. tested was to look for a small categories a”presumably, a small category indicates a rare and unique property if an entity, and would be an interesting trivia fact”. This path proved to be too specific e.g “Muhammad Ali is an alumni of Central High School in Louisville, Kentucky”.

[TR] As commented in the paper this fact is is not a good trivia fact because the specific high school has no importance to the reader and or to Ali’s character. But, as stated later - when coming to personalizing trivia facts there maybe readers which find this fact interesting (e.g other alumni’s of this high school).

This led Tsurel et al. to the first required property of trivia fact - surprise.

&lt;b&gt;Surprise&lt;/b&gt;
Surprise reflects how unusual the article with respect to the category. So they would like to define similarity matrix between article &lt;i&gt;a &lt;/i&gt;and category &lt;i&gt;C. &lt;/i&gt;A category is a set of articles therefore the similarity is defined as:
&lt;p style=&quot;text-align:center&quot;&gt;$latex similarity(a, C) = \sigma(a, C)=\frac{1}{|C|-1}\sum_{a \neq a&apos; \in C}\sigma(a, a&apos;)$&lt;/p&gt;
Surprise is defined as the inverse of the average similarity -
&lt;p style=&quot;text-align:center&quot;&gt;$latex surp(a, C)=\frac{1}{\sigma(a, C)}$&lt;/p&gt;
Example of results for this measure for Hedy Lamarr -

&lt;img class=&quot; size-full wp-image-1109 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/10/surprise.png&quot; alt=&quot;surprise&quot; width=&quot;328&quot; height=&quot;93&quot; /&gt;

As you can see in the example above the surprise factor itself is not enough as it does not capture other aspects in Hedy Lamarr’s life (e.g. she invented radio encryption!).

Examining those categories and seeing that they are very spread led the team to the define the cohesiveness of category.

&lt;b&gt;Cohesiveness&lt;/b&gt;

Cohesiveness of a category measures the similarity between items in the same category. Intuitively if an item is not similar to the other items in the category it might indicate that it is a trivia fact (or as mention later in the paper - detect anomalies).

Practically speaking the cohesiveness if category C is defined as the average similarity between each pair of articles in the category.
&lt;p style=&quot;text-align:center&quot;&gt;$latex cohesive(C)=\frac{1}{{|C| \choose 2}}\sum_{a \neq a&apos;} \sigma(a, a&apos;)$&lt;/p&gt;
Hedy Lamarr&apos;s results w.r.t to cohesiveness -

&lt;img class=&quot; size-full wp-image-1114 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/10/after.png&quot; alt=&quot;after&quot; width=&quot;326&quot; height=&quot;79&quot; /&gt;

&lt;b&gt;Tying it together&lt;/b&gt;

The trivia score of article a to category C is define as:
&lt;p style=&quot;text-align:center&quot;&gt;$latex trivia(a, C)=cohesive(C) \cdot surp(a, C) = \frac{cohesive(C)}{\sigma(a, c)}$&lt;/p&gt;
&lt;span style=&quot;font-weight:400&quot;&gt;Interpret trivia score:&lt;/span&gt;
&lt;ul&gt;
	&lt;li&gt;Around one - this means that $latex cohesive(C) \approx \sigma(a, C)$. Meaning - the article is typical for the category, i.e. similar to other articles in the category.&lt;/li&gt;
	&lt;li&gt;Much lower than one - “the article is more similar to other articles in the category than the average”. That means the article is a very good representative of the category.&lt;/li&gt;
	&lt;li&gt;Higher than one - the article is not similar to the category, i.e is an “outsider” which make it a good trivia candidate.&lt;/li&gt;
&lt;/ul&gt;
&lt;img class=&quot; size-full wp-image-1117 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/10/cohesivenessvssurprise.png&quot; alt=&quot;cohesivenessVsSurprise&quot; width=&quot;334&quot; height=&quot;345&quot; /&gt;

&lt;strong&gt;Article similarity&lt;/strong&gt;

Standard similarities methods don&apos;t fit this case from 2 mains reasons -
&lt;ol&gt;
	&lt;li&gt;The authors look for &lt;strong&gt;broad similarity &lt;/strong&gt;and not details similarities.&lt;/li&gt;
	&lt;li&gt;Term frequency vector capture semantic similarity which sometimes get lost even after using normalization techniques.&lt;/li&gt;
&lt;/ol&gt;
Algorithm
&lt;ul&gt;
	&lt;li&gt;Describe each article by the top &lt;em&gt;K TF-IDF&lt;/em&gt; in the text. The TF-IDF is trained on a sample of 10,000 wikipedia articles after stemming, stop-words removal and case folding. K=10 in their settings. The table below show the results for the articles &quot;Sherlock Holmes&quot;, &quot;Dr. Watson&quot; and &quot;Hercule Poirot&quot;. As one can see it captures the spirit of the things but there are not exact matches.&lt;/li&gt;
&lt;/ul&gt;
&lt;img class=&quot;  wp-image-1195 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/10/tfidf.png&quot; alt=&quot;tfidf&quot; width=&quot;434&quot; height=&quot;271&quot; /&gt;
&lt;ul&gt;
	&lt;li&gt;To answer the exact match problem the authors used &lt;a&gt;Word2Vec&lt;/a&gt; pre-trained model from Google News.
&lt;ul&gt;
	&lt;li&gt;$latex T_1$ and $latex T_2$ are the set of the top K TF-IDF term for articles $latex a_1, a_2$ respectively.&lt;/li&gt;
	&lt;li&gt;For each term in $latex T_1$ find the most similar term in $latex T_2$ based on Word2Vec pre-trained model (and vice versa) and sum those similarities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align:center&quot;&gt;$latex \sigma(a_1, a_2)=\frac{1}{Z}\sum_{i=1}^K w_{i}\cdot(max_{1 \leq j \leq K}\sigma(T_1[i], T_2[j]) +max_{1 \leq j \leq K}\sigma(T_2[i], T_1[j]))$&lt;/p&gt;
where $latex w_i=K-i+1$ and $latex Z=2 \cdot  { K+1 \choose 2}$

Further optimization on the computation such as caching, comparing only to subset of articles and parallel computation can be done when coming to implement this algorithm in production settings.

&lt;strong&gt;Evaluation&lt;/strong&gt;

The authors evaluated their algorithm empirically against -
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;Wikipedia Trivia Miner&lt;/a&gt; - &quot;A ranking algorithm over wikipedia sentences which learns the notion of interstingness using domain-independent linguistic and entity based features.&quot;&lt;/li&gt;
	&lt;li&gt;Top Trivia - highest ranking category according to the paper algorithm.&lt;/li&gt;
	&lt;li&gt;Middle-ranked Trivia - middle-of-the-pach ranked categories according to the paper algorithm.&lt;/li&gt;
	&lt;li&gt;Bottom Trivia - lowest ranked categories according to the paper algorithm.&lt;/li&gt;
&lt;/ul&gt;
The authors crawled wikipedia and created a dataset of trivia facts for 109 articles. For each article they created a trivia fact for each algorithm. The textual format was &quot;a is in the group C&quot;.

&lt;strong&gt;Trivia Evaluation Study&lt;/strong&gt;

Using the trivia facts above each fact was presented to 5 crown workers yielding 2180 evaluations.

The respondents were asked to agree \ disagree the facts according to the following statements or note that they don&apos;t understand the fact:
&lt;ol&gt;
	&lt;li&gt;Trivia worthiness - &quot;This is a good trivia fact&quot;.&lt;/li&gt;
	&lt;li&gt;Surprise - &quot;This fact is surprising&quot;&lt;/li&gt;
	&lt;li&gt;Personal knowledge - &quot;I knew this fact before reading it here&quot;&lt;/li&gt;
&lt;/ol&gt;
The score of a fact was determined by the majority vote.

Result -
&lt;ul&gt;
	&lt;li&gt;The top trivia facts are significantly better than the WTM facts&lt;/li&gt;
	&lt;li&gt;The consensus on the trivia worthiness of the top facts compared to the WTM facts is higher (32.8% vs 11.9%).&lt;/li&gt;
&lt;/ul&gt;
[caption id=&quot;attachment_1155&quot; align=&quot;aligncenter&quot; width=&quot;344&quot;]&lt;img class=&quot; size-full wp-image-1155 alignleft&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/10/goodfact.png&quot; alt=&quot;goodFact&quot; width=&quot;344&quot; height=&quot;237&quot; /&gt; Is it trivia worthy fact?[/caption]

[caption id=&quot;attachment_1163&quot; align=&quot;aligncenter&quot; width=&quot;329&quot;]&lt;img class=&quot; size-full wp-image-1163 alignleft&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/10/surprisingfact.png&quot; alt=&quot;surprisingFact&quot; width=&quot;329&quot; height=&quot;231&quot; /&gt; Is it a surprising fact?[/caption]

[caption id=&quot;attachment_1166&quot; align=&quot;aligncenter&quot; width=&quot;300&quot;]&lt;img class=&quot;  wp-image-1166 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/10/knewbeforefact.png&quot; alt=&quot;knewBeforeFact&quot; width=&quot;300&quot; height=&quot;210&quot; /&gt; Did you know this fact before?[/caption]

&lt;strong&gt;Engagement Study&lt;/strong&gt;

In this part the team used google ad to tie trivia facts to searches and analyzed the bounce rate and time on page for the collected clicks (almost 500).

Results -
&lt;ul&gt;
	&lt;li&gt;CTR was not significantly different than reported results in the market (0.8) - i.e does not indicate willingness of users to explore trivia facts.&lt;/li&gt;
	&lt;li&gt;Bounce rate (time of page &amp;lt; 5 seconds) for bottom trivia was 52%, for WTM facts 47% and for top trivia 37%.&lt;/li&gt;
	&lt;li&gt;Average time on page was significantly better in top trivia comparing to bottom trivia (48.5 seconds vs 30.7) but was not significant comparing to WTM (43.1 seconds).&lt;/li&gt;
	&lt;li&gt;One reason for people to spend time on WTM fact pages was because the presented sentences ware longer than the sentences presented for the top trivia and had a higher change of being confusing so people take time to understand them.&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;Discussion and Further work&lt;/strong&gt;

Limitation - the algorithm works well for human entities but worse on other domain such as movies and cities.

Future work -
&lt;ul&gt;
	&lt;li&gt;Better phrasing of the trivia facts - instead of “X is a member of group Y” —&amp;gt; “Obama won Best Spoken word Album Grammy Awards for abridged audiobook versions of Dreams from My Father in February 2006 and for the Audacity of Hope in February 2008”.&lt;/li&gt;
	&lt;li&gt;Turning trivia facts to trivia questions - for the example above generate a question of the form - “Which US presider is a Grammy award winner?” And not “Who won a Grammy award” or “What did Barack Obama win?”&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;padding-left:30px&quot;&gt;[TR] - this would require additional notation of a good trivia question. The “good” question in this example is interesting since it involves a contrast between two categories.&lt;/p&gt;
Other applications -
&lt;ul&gt;
	&lt;li&gt;Anomaly detection - surprising facts are sometimes surprising because they are wrong. Using this algorithm we can clean those and improve Wikipedia reliability.&lt;/li&gt;
	&lt;li&gt;Predict most surprising article in a given category&lt;/li&gt;
	&lt;li&gt;Improve search experience by enriching result with trivia facts&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;padding-left:30px&quot;&gt;[TR] - Improve learning experience on learning platforms by enriching the UI with trivia facts.&lt;/p&gt;
&lt;span style=&quot;font-weight:400&quot;&gt;Extensions -&lt;/span&gt;
&lt;ul&gt;
	&lt;li&gt;Personalized trivia score - as commented above, different reader can find different facts more \ less interesting (see &lt;a&gt;here&lt;/a&gt;) so the score should be personalized and take into account different properties of the reader such as demographic and even more temporal like mood.&lt;/li&gt;
	&lt;li&gt;[TR] - Additional extensions involve trivia facts between entities such as &quot;Michelle Obama and Melania Trump are in the same height&quot;, &quot;X and Y were born in the same date&quot;.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Map Spark UDAF (Java)</title><link>https://tomron.net/2017/07/10/map-spark-udaf-java/</link><guid isPermaLink="true">https://tomron.net/2017/07/10/map-spark-udaf-java/</guid><description>I run Spark code on Java. I had data with the following schema - [code language=&quot;bash&quot;] root |-- userId: string (nullable = true&lt;/span&gt; |-- dt: string…</description><pubDate>Mon, 10 Jul 2017 17:06:46 GMT</pubDate><content:encoded>I run Spark code on Java. I had data with the following schema -

[code language=&quot;bash&quot;]
root
|-- userId: string (nullable = true&amp;lt;/span&amp;gt;
|-- dt: string (nullable = true)&amp;lt;/span&amp;gt;
|-- result: map (nullable = true)&amp;lt;/span&amp;gt;
|    |-- key: string
|    |-- value: long (valueContainsNull = true)
[/code]

And I wanted to get a single record for a user which has the following schema -

[code language=&quot;bash&quot;]
root
|-- userId: string (nullable = true)&amp;lt;/span&amp;gt;
|-- result: map (nullable = true)
|    |-- key: string
|    |-- value: map (valueContainsNull = true)
|    |    |-- key: string
|    |    |-- value: long (valueContainsNull = true)
[/code]

Attached the user defined aggregation function I wrote to achieve it. Before that -

[code language=&quot;bash&quot;]
MergeMapUDAF mergeMapUDAF = new MergeMapUDAF();
df.groupBy(&quot;userId&quot;).agg(mergeMapUDAF.apply(df.col(&quot;dt&quot;), df.col(&quot;result&quot;)).as(&quot;result&quot;));
[/code]

https://gist.github.com/tomron/36fd3c1b41169fc40acaeb4dbe95067d</content:encoded></item><item><title>Code Challenges Anti-Patterns</title><link>https://tomron.net/2017/03/01/code-challenges-anti-patterns/</link><guid isPermaLink="true">https://tomron.net/2017/03/01/code-challenges-anti-patterns/</guid><description>Code challenges are a common tool to evaluate candidate ability to develop software. Of course there are other indicators such as - blog posting, open source…</description><pubDate>Wed, 01 Mar 2017 18:03:14 GMT</pubDate><content:encoded>Code challenges are a common tool to evaluate candidate ability to develop software. Of course there are other indicators such as - blog posting, open source involvement, github repository, personal recommendations, etc. Yet, code challenges are frequently used.

I recently got to check some code challenges and was surprised from some of the things I found there. Here are my anti-patterns to code challenges -

 
&lt;h3&gt;&lt;strong&gt;Call a file \ process on your local machine&lt;/strong&gt;&lt;/h3&gt;
[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
for line in open(&apos;/Users/user/code/data.csv&apos;):
    print (&apos;No, No, No!&apos;)
[/sourcecode]

 

The person how check your code challenge cannot just run the code since she will get a file not found error or similar and will have to find where you call the file and why.

If you need to call some resource (file, database, etc.) you can pass it as a command line argument, put it in a config file, use environment variable.
&lt;h3&gt;Reinvent the wheel&lt;/h3&gt;
Write everything by yourself. Why you crowd wisdom or mature project which are already debugged and tested when you can write everything by yourself the way you like it with your own unique bugs?

Unless you were told otherwise many times there is already a package \ library \ API \ design pattern which is doing part of what you need. E.g if you need to fetch data from Twitter there is Twitter API and there Twitter clients in different languages. You definitely don&apos;t need to crawl twitter and process the HTML.
&lt;h3&gt;Don&apos;t write a README file&lt;/h3&gt;
No need to write a README file. Whoever is reading your code is a professional in the tech stack you chose and will immediately know how to start your project, which dependencies are there, which environment variables are needed, etc.

The goal of README in this context is to explain how to run the code, what is inside the package and further considerations \ assumptions \ choices you did while working on this challenge.

A detailed README is always priceless and specially in this context when you don&apos;t always have a direct communication with the candidate. System diagram \ architecture chart is also recommended when relevant.

If you have further notes such as ideas on how to expand this system, what would you do next, etc. I would put it in IDEAS files (e.g. IDEAS.md) and also link the README from it.
&lt;h3&gt;Don&apos;t write tests&lt;/h3&gt;
This is actually the part which highlight your genius. You don&apos;t need to test your code because it is perfect.

&lt;img class=&quot; size-full wp-image-983 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/03/15eb8d8feabb0d6c2eb517142c6c9df2.jpg&quot; alt=&quot;15eb8d8feabb0d6c2eb517142c6c9df2&quot; width=&quot;555&quot; height=&quot;369&quot; /&gt;

Seriously, testing plays a big role in software development and making sure the code you wrote work as expected. As a viewer from the side it also give me a clue how pedant you are and how much you care about the quality of your work. This is my first impression of your work, don&apos;t make it your last.
&lt;h3&gt;ZIP you code&lt;/h3&gt;
This is how we deploy and manage versions in our company - I just send my boss a zip file, preferably via slack.

I expect to get a link to a git repository (if you want to be cautious you can use private repos e.g. by bitbucket). In this link I can see the progress you made while working on the challenge, your commit messages (also a signal on how pedant you are). As a candidate you also get to demonstrate your skills in version control system in addition to your coding skills.

 
&lt;h3&gt;Wrap Up&lt;/h3&gt;
There are of course many other things I can point to such as general software development practices - magic numbers, meaningful names, spaghetti code, etc. But as said - those are general software development skills that one should use everyday, the anti-patterns stated above are IMO specially important in the case of code challenges.</content:encoded></item><item><title>SO end of year surveys</title><link>https://tomron.net/2017/02/16/so-end-of-year-surveys/</link><guid isPermaLink="true">https://tomron.net/2017/02/16/so-end-of-year-surveys/</guid><description>Recently Stack Overflow published few posts comparing the usage of Stack Overflow between different segments \ scenarios: How Do Students Use Stack Overflow?…</description><pubDate>Thu, 16 Feb 2017 15:17:15 GMT</pubDate><content:encoded>&lt;span style=&quot;font-weight:400&quot;&gt;Recently Stack Overflow published  few posts comparing the usage of Stack Overflow between different segments \ scenarios:&lt;/span&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;How Do Students Use Stack Overflow?&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;What Programming Languages Are Used Most on Weekends?&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;&lt;a&gt;Women in the 2016 Stack Overflow Survey&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-weight:400&quot;&gt;Few comments regarding those posts - &lt;/span&gt;

&lt;a&gt;&lt;b&gt;&lt;i&gt;How Do Students Use Stack Overflow?&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-weight:400&quot;&gt;&quot;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;font-weight:400&quot;&gt;R and MATLAB are pretty consistent throughout the year&quot;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - those are research related programming languages and it make sense that student to advanced degrees use them all around the year. Python is also used a lot in research and one can see that the decrease during the the summer vacation is smaller than the decrease in Java and C.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a&gt;&lt;img class=&quot; size-full wp-image-955 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/02/hynkr.png&quot; alt=&quot;hynkr&quot; width=&quot;504&quot; height=&quot;504&quot; /&gt;&lt;/a&gt;

 
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Public universities vs Private universities&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - the list of the most common tags in the public universities include beside Microsoft products also - while-loop, methods, input, linked-list, if-statement, loops, etc. Those are all theoretical \ foundation related concepts. On the other hand the private list contain not theoretical concepts beside web-scraping, but stack specific products, e.g - mongodb, iphone, aws, flask, heroku, etc. For me that flags either lecturers on private universities explain better theoretical concepts and therefore the students don&apos;t ask questions about them or that private universities invest more on preparing the students to the labor market and therefore use more industry products.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a&gt;&lt;img class=&quot;alignnone size-full wp-image-959&quot; src=&quot;https://tomron.net/wp-content/uploads/2017/02/sspii.png&quot; alt=&quot;sspii&quot; width=&quot;800&quot; height=&quot;800&quot; /&gt;&lt;/a&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;This post end with a chart of the Universities that asked the most R questions relative to other technologies - &lt;/span&gt;&lt;i&gt;&lt;span style=&quot;font-weight:400&quot;&gt;&quot;The most R-heavy schools ... and some are recognizable as having prominent statistics programs&quot;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-weight:400&quot;&gt;. This brings me to another analysis I would like to see - what are the majors of the students who asked those questions?&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;And of course segmenting it together with the other analysis - e.g. how female students uses stackoverflow versus of male students use it. In which universities students work hardest in the weekends?&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a&gt;&lt;b&gt;&lt;i&gt;What Programming Languages Are Used Most on Weekends?&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Which tag&apos;s weekend activity has decreased the most? As SO suggest the usage of some of the technologies decreased on weekends because the usage of those technologies decreased on general such as SVN and probably RoR3 and visual-studio-2012. &lt;/span&gt;On the other hands, other technologies such as Scala and maybe Azure become more popular and mainstream so it is no longer only geeks technologies used in weekends. To confirm this claim it would be interesting to see if the currently increased weekend technologies (e.g. android-fragments, android-layout, unity3d, etc.) will become mainstream in few years.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;It is also interesting to see if the weekend technologies are also technologies used at after work hours (this is of course timezone dependent).&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;Also interesting to see the difficulty levels of weekend posts versus workdays posts. Does users use weekend to learn new technologies and therefore ask relative basic questions or they dive in to a technology and ask advanced questions. The difficulty of the questions can be evaluated by the time it took the get answer (more complex question -&amp;gt; longer time to get answer), up-votes, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;a&gt;&lt;b&gt;Women in the 2016 Stack Overflow Survey&lt;/b&gt;&lt;/a&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Those surveys are biased to begin with. Having said that, the gap between people who identify ask female and people who identify as male who answered cries out loud. It is even bigger than the gap in the labor market. Where does this gap comes from? Maybe women are just better in search as many of the SO questions are duplicated ;-)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;This is noted also in the post itself. It is also interesting to see which other populations were under represented in the survey.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;An interesting analysis I would like to see is the sentiment (aggressiveness vs calm \ informative in the answers) segmented by the repliers gender. Maybe also as a function of the asker gender. I must say the personally never noticed the asker&apos;s gender.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Davies-Bouldin Index</title><link>https://tomron.net/2016/11/30/davies-bouldin-index/</link><guid isPermaLink="true">https://tomron.net/2016/11/30/davies-bouldin-index/</guid><description>TL;DR - Yet another clustering evaluation metric Davies-Bouldin index was suggested by David L. Davies and Donald W. Bouldin in &quot;A Cluster Separation Measure&quot;…</description><pubDate>Wed, 30 Nov 2016 19:06:54 GMT</pubDate><content:encoded>TL;DR - Yet another clustering evaluation metric

Davies-Bouldin index was suggested by David L. Davies and Donald W. Bouldin in &quot;A Cluster Separation Measure&quot; (&lt;i&gt;IEEE Transactions on Pattern Analysis and Machine Intelligence&lt;/i&gt;. PAMI-1 (2): 224–227. doi:&lt;a&gt;10.1109/TPAMI.1979.4766909&lt;/a&gt;, &lt;a&gt;full pdf&lt;/a&gt;)

Just like Silhouette score, Calinski-Harabasz index and Dunn index, Davies-Bouldin index provide an internal evaluation schema. I.e. the score is based on the cluster itself and not on external knowledge such as labels.

The Silhouette score reflects how similar a point is to the cluster it is associated with. I.e .for each point with compute the average distance of the point from the points in the nearest cluster minus the average distance of the point from the points in its own cluster divided by the maximum between those distances. The overall score is the average of the score per point. The Silhouette score is bounded from -1 to 1 and higher score means more distinct clusters.

The Calinski-Harabasz index compares the variance between-clusters to the variance within each cluster. This measure is much simpler to calculate then the Silhouette score however it is not bounded. The higher the score the better the separation is.

The intuition behind Davies-Bouldin index is the ratio between the within cluster distances and the between cluster distances and computing the average overall the clusters. It is therefore relatively simple to compute, bounded - 0 to 1, lower score is better. However, since it measures the distance between clusters&apos; centroids it is restricted to using Euclidean distance function.

Silhouette score and Calinski-Harabasz index were previously implemented and are part of &lt;a&gt;scikit-learn&lt;/a&gt; and I implemented Davies-Bouldin index. Hopefully this will be my first contribution to scikit-learn, my implementation is &lt;a&gt;here&lt;/a&gt;.</content:encoded></item><item><title>5 Berlin Data Native 2016 Highlights</title><link>https://tomron.net/2016/10/31/5-berlin-data-native-2016-highlights/</link><guid isPermaLink="true">https://tomron.net/2016/10/31/5-berlin-data-native-2016-highlights/</guid><description>Super Mario from Microsoft ( Daniel Molnar ) - Data Janitor 101 , one of the best reasoned talks I heard for a long time. Andrew Clegg , data scientist @ Etsy…</description><pubDate>Mon, 31 Oct 2016 11:27:07 GMT</pubDate><content:encoded>&lt;ol&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Super Mario from Microsoft (&lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Daniel Molnar&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;) - &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Data Janitor 101&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;, one of the best reasoned talks I heard for a long time.&lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Andrew Clegg&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;, data scientist @ Etsy gave an historic review on Semantic Similarity and Taxonomic Distance and how it is used in Etsy. Slides are &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Topic Modeling on Github repositories&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - presented by &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Vadim Markovtsev&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; from source{d}. Why is that interesting? Few possible evolutions - code quality, natural language to code. Also interesting direction to have a look on - &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;bigartm&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Data Thinker&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - Is it a new role? Is it just a buzzword? &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Klaas Bollhoefer&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; from the Unbelievable Machine presented their ideas.&lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;a&gt;Databases - The Choice is Yours&lt;/a&gt; - &lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Philipp Krenn&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; from Elastic presented his view on the databases field.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>Data Natives Berlin 2016 (1st day)</title><link>https://tomron.net/2016/10/27/data-natives-berlin-2016-1st-day/</link><guid isPermaLink="true">https://tomron.net/2016/10/27/data-natives-berlin-2016-1st-day/</guid><description>[gallery ids=&quot;889,890&quot; type=&quot;rectangular&quot;] From Philipp Krenn&apos;s, Developer Advocate at Elastic, &quot;Databases - The Choice is Yours&quot; talk.</description><pubDate>Thu, 27 Oct 2016 15:41:26 GMT</pubDate><content:encoded>[gallery ids=&quot;889,890&quot; type=&quot;rectangular&quot;]
&lt;div class=&quot;schedule__title&quot;&gt;From Philipp Krenn&apos;s, Developer Advocate at Elastic, &quot;Databases - The Choice is Yours&quot; talk.&lt;/div&gt;</content:encoded></item><item><title>Detecting Data Errors: Where are we and what needs to be done?</title><link>https://tomron.net/2016/10/02/detecting-data-errors-where-are-we-and-what-needs-to-be-done/</link><guid isPermaLink="true">https://tomron.net/2016/10/02/detecting-data-errors-where-are-we-and-what-needs-to-be-done/</guid><description>My summary and notes for &quot;Detecting Data Errors: Where are we and what needs to be done?&quot; by Ziawasch Abedjan, Xu Chu, Dong Deng, Raul Castro Fernandez, Ihab…</description><pubDate>Sun, 02 Oct 2016 14:10:24 GMT</pubDate><content:encoded>My summary and notes for &quot;Detecting Data Errors: Where are we and what needs to be done?&quot; by Ziawasch Abedjan, Xu Chu, Dong Deng, Raul Castro Fernandez, Ihab F. Ilyas, Mourad Ouzzani, Paolo Papotti, Michael Stonebraker, Nan Tang Proceedings of the VLDB Endowment 9.12 (2016): 993-1004.

Paper can be found - &lt;a&gt;here&lt;/a&gt;

In this paper the group of researchers evaluate several data cleaning tools to detect different types of data errors and suggest a strategy to holistically run multiple tools to optimize the detection efforts. This study focus on automatically detecting the errors and not repair them since automatically repairing is rarely allowed.

&lt;b&gt;Current status&lt;/b&gt; - current data cleaning solutions are usually belong to one or more of the following categories:
&lt;ul&gt;
	&lt;li&gt;Rules based detection algorithms - the user specify set of rules such as: not null, functional dependencies, user defined function that the data must obey and the data cleaner find any violation. Example: &lt;a&gt;NADEEF&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Pattern enforcement and transformation tools - tools in this category discover either syntactic or semantic patterns in the data and detect those errors. Example:&lt;a&gt;OpenRefine&lt;/a&gt;, &lt;a&gt;Data Wrangler&lt;/a&gt;, &lt;a&gt;DataXFormer&lt;/a&gt;, &lt;a&gt;Trifacta&lt;/a&gt;, &lt;a&gt;Katara&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;Quantitative error detection algorithms - find outliers and glitches in the data.&lt;/li&gt;
	&lt;li&gt;Record linkage and de-depulication algorithms - identify data which refer to the same entity and is not consistent \ appear multiple times. Examples: &lt;a&gt;Data Tamer&lt;/a&gt;, &lt;a&gt;TAMR&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Evaluation of tools&lt;/b&gt;
&lt;ol&gt;
	&lt;li&gt;Precision and recall of each tool&lt;/li&gt;
	&lt;li&gt;Errors detected when applying all the tools together&lt;/li&gt;
	&lt;li&gt;How many false positives are detected as we would like to minimize the human effort.&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;Error types&lt;/b&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;i&gt;&lt;b&gt;&lt;i&gt;Outliers&lt;/i&gt;&lt;/b&gt;&lt;i&gt; include data values that deviate from the distribution of values in a column of a table.&lt;/i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;&lt;i&gt;Duplicates&lt;/i&gt;&lt;/b&gt;&lt;i&gt; are distinct records that refer to the same real-world entity. If attribute values do not match, this could signify an error.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;&lt;i&gt;Rule violations&lt;/i&gt;&lt;/b&gt;&lt;i&gt; refer to values that violate any kind of integrity constraints, such as Not Null constraints and Uniqueness constraints.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;&lt;i&gt;Pattern violations&lt;/i&gt;&lt;/b&gt;&lt;i&gt; refer to values that violate syntactic and semantic constraints, such as alignment, for matting, misspelling and semantic data types.&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
(p. 995)

Some errors overlap and fit into more than one category.

[TR] - are those all the error types which exist? What about correlated errors between several records?

&lt;b&gt;Data sets&lt;/b&gt;

[TR] - there are many data sets specific details in the paper. As I am more interested in the ideas those details will be omitted here.

[TR] - the data evaluated relatively small datasets with small number of columns. It would also be interesting to evaluate it bigger and more complex datasets, e.g. wikidata.

[TR]- consider the temporal dimension of the data. I.e some properties may have expiration date which other not (e.g birth place never changes while current location changes).

&lt;b&gt;Data cleaning tools&lt;/b&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;a&gt;DBoost&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;DC-Clean&lt;/td&gt;
&lt;td&gt;OpenRefine&lt;/td&gt;
&lt;td&gt;Traficata&lt;/td&gt;
&lt;td&gt;&lt;a&gt;Pentaho&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a&gt;Knime&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Katara&lt;/td&gt;
&lt;td&gt;TAMR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pattern violation&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constraint violations&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outliers&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicates&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
	&lt;li&gt;DBoost - use 3 common method for outlier detection - histograms, Gaussian and multivariate Gaussian mixtures. The UVP of this tool is decomposing types into their building blocks. For example expanding dates into day, month and year. DBoost require configuration such as number of bins and their width for histograms and mean and standard deviation for Gaussian and GMM.&lt;/li&gt;
	&lt;li&gt;DC-Clean - focus on denial constraints and subsume the majority of the commonly used constraint languages. The collect if denial constraints was designed for each data set.&lt;/li&gt;
	&lt;li&gt;OpenRefine - can digest data in multiple formats. Data exploration is performed through faceting and filtering operations ([TR] - reminds DBoost histograms)&lt;/li&gt;
	&lt;li&gt;Trifacta - commercial product which was developed from DataWrangler. Can predict and apply syntactic data transformation for data preparation and data cleaning. Transformations can also involve business logic.&lt;/li&gt;
	&lt;li&gt;Katara - uses external knowledge bases, e.g. Yago in order to detect errors that violate a semantic pattern. It does it by first identifying the type of the column and the relations between two columns in the data set using a knowledge base.&lt;/li&gt;
&lt;/ul&gt;
         [TR] - assumes that the knowledge base is ground truth. We need to doubt this as well.
&lt;ul&gt;
	&lt;li&gt;Pentaho - provide graphical interface for data wrangling and can orchestrate ETL processes.&lt;/li&gt;
	&lt;li&gt;KNIME - focuses on workflow authoring and encapsulating data processing tasks with some machine learning capabilities.&lt;/li&gt;
	&lt;li&gt;TAMR - uses machine learning models to learn duplicate features through expert sourcing and similarity metrics.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Combination of Multiple tools&lt;/b&gt;
&lt;ul&gt;
&lt;ul&gt;
	&lt;li&gt;Union all and Min-K -
&lt;ul&gt;
	&lt;li&gt;Union all - takes the union of the errors emitted by all tools (i.e k=1)&lt;/li&gt;
	&lt;li&gt;Min-&lt;i&gt;k&lt;/i&gt; - error detected by at least &lt;i&gt;k&lt;/i&gt; tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
	&lt;li&gt;Ordering based on Precision
&lt;ul&gt;
	&lt;li&gt;Cost model -
&lt;ul&gt;
	&lt;li&gt;C - cost of having a human check a detected error&lt;/li&gt;
	&lt;li&gt;V - Value of identifying a real error (V &amp;gt; C otherwise make not sense).&lt;/li&gt;
	&lt;li&gt;P - Number of true positives&lt;/li&gt;
	&lt;li&gt;N - Number of false positives&lt;/li&gt;
&lt;/ul&gt;
Total value should hold - P * V &amp;gt; (P +N) * C =&amp;gt; P/(P+N&amp;gt; &amp;gt; C/V. P/(P+N) is the precision. Therefore if the model precision is less than C/V we should not run it. Model precision can be evaluated by sampling the detected errors.
&lt;i&gt;&quot;We observed that some tools are not worth evaluating even if their precision is higher than the threshold, since the errors they detect may be covered by other tools with higher estimate precision (which would have been run earlier).&quot; &lt;/i&gt;(p. 998)
[TR] - not always the cost and value can be estimated correctly and easily and not all the errors have the same cost and value.
&lt;/li&gt;
	&lt;li&gt;Maximum entropy-based order selection - the algorithm estimate the overlap between the tool results and picks the tool with the highest precision to reduce the entropy. Algorithm steps:
&lt;ol&gt;
	&lt;li&gt;Run individual tool - run each tool and get the detected errors.&lt;/li&gt;
	&lt;li&gt;Estimate precision for each tool by checking samples&lt;/li&gt;
	&lt;li&gt;Pick a tool which maximize the entropy among the unused tools so far - picks the one with the highest estimated precision on the sample and verifies its detected errors on the complete data that have not been verified before.&lt;/li&gt;
	&lt;li&gt;Update - update the errors that were detected by the chosen tool in the last step and repeat last two steps.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;b&gt;Discussion and Improvements&lt;/b&gt;
&lt;ul&gt;
	&lt;li&gt;Using Domain specific tools - for example AddressCleaner. [TR] - only relevant when such a tool exists and is easy \ cheap to use.&lt;/li&gt;
	&lt;li&gt;Enrichment - rule-based systems and duplicate detection strategies can benefit from additional data. Future work would consider data enrichment system.&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Conclusions&lt;/b&gt;
&lt;ol&gt;
	&lt;li&gt;No clear winner - different tools worked well on different data set mainly due to different error types distribution. Therefore a holistic strategy must be used.&lt;/li&gt;
	&lt;li&gt;Since there are errors which overlaps one can order the tools to minimize false positives. However the ordering strategy is data set specific.&lt;/li&gt;
	&lt;li&gt;Yet, not 100% of the errors are detected. Suggested way to improve it is -
&lt;ol&gt;
	&lt;li&gt;Type-specific cleaning - for example date cleaning tools, address cleaning tools etc. Even those tools are limited in their recall.&lt;/li&gt;
	&lt;li&gt;Enrichment of the data from external sources&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;b&gt;Future work&lt;/b&gt;
&lt;ol&gt;
	&lt;li&gt;A holistic combination of tools - algorithms for combining tools. [TR] - reminds ensemble methods from Machine learning.&lt;/li&gt;
	&lt;li&gt;Data enrichment system - adding relevant knowledge and context to the data set.&lt;/li&gt;
	&lt;li&gt;Interactive dashboard&lt;/li&gt;
	&lt;li&gt;Reasoning on real-world data&lt;/li&gt;
&lt;/ol&gt;&lt;/ul&gt;</content:encoded></item><item><title>5 interesting things (28/08/2016)</title><link>https://tomron.net/2016/08/28/5-interesting-things-28082016/</link><guid isPermaLink="true">https://tomron.net/2016/08/28/5-interesting-things-28082016/</guid><description>Joel test for Data Science - the inspiration and adjustment to data science done in Domino, both were interesting reads for me.…</description><pubDate>Sun, 28 Aug 2016 10:57:15 GMT</pubDate><content:encoded>&lt;div&gt;&lt;b&gt;&lt;u&gt;Joel test for Data Science&lt;/u&gt;&lt;/b&gt; - the &lt;a&gt;inspiration&lt;/a&gt; and adjustment to data science done in Domino, both were interesting reads for me.&lt;/div&gt;
&lt;br /&gt;&lt;div&gt;&lt;a&gt;https://blog.dominodatalab.com/joel-test-data-science/
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;What I Wish I Knew About Data For Startups&lt;/u&gt;&lt;/strong&gt; - I speciialy related to documenting and testing events tracking. I was surpsirsed about how little this topic and its best practices are discussed.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;a&gt;http://www.jeannicholashould.com/what-I-wish-I-knew-about-data-for-startups.html
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt; &lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;A Paper a week keeps the doctor a way?&lt;/u&gt;&lt;/strong&gt; Git repository by Shagun Sodhani who summarizes and sometimes comment those papers.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;u&gt;&lt;/u&gt;&lt;span style=&quot;color:#1155cc&quot;&gt;&lt;u&gt;&lt;a&gt;https://github.com/shagunsodhani/papers-I-read&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a&gt; &lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Inside Elasticsearch&lt;/u&gt; &lt;/b&gt;- 3 parts blog series about how elasicsearch work.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;a&gt;https://blog.insightdatascience.com/anatomy-of-an-elasticsearch-cluster-part-i-7ac9a13b05db#.vdqzkhrle
&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Is it brunch time&lt;/u&gt;?&lt;/strong&gt; Someone is finally asking the important questions in life... defining brunch time using on twitter tweets timing. I liked the method  used to define the interval of lunch which requires no more than high school math and also the question. From anthropological point of view it is interesting for me to see if different locations in the world define breakfast \ brunch \ lunch in different time. I.e in Spain people each lunch at 14 while in Israel they eat at 12. Also maybe interesting to compare tweets with pictures to tweets without pictures. My assumptions is that tweet without pictures are people on the way to brunch and would be a bit earlier comparing to tweets with pictures which are tweeted during the brunch.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;a&gt;https://medium.com/@bjacobso/is-it-brunch-time-ffe3adf485d8#.ypfoami7j&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Bonus track&lt;/u&gt;&lt;/b&gt; - Prediction.io is now an Apache project (incubating). After few changes in the last few month - being bought by Sales Force, fork by ActionML, etc. Sales Force donated Predicion.io to ASF. Looking forward for the future of this project.&lt;/div&gt;&lt;br /&gt;
&lt;div&gt;&lt;a&gt;http://predictionio.incubator.apache.org/&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 Python NLP pacakges</title><link>https://tomron.net/2016/06/19/5-python-nlp-pacakges/</link><guid isPermaLink="true">https://tomron.net/2016/06/19/5-python-nlp-pacakges/</guid><description>NLP is a broad term which contains many types of question and challenges such as - language detection, Part-of-Speech tagging, relation extraction, named…</description><pubDate>Sun, 19 Jun 2016 20:42:34 GMT</pubDate><content:encoded>&lt;div&gt;NLP is a broad term which contains many types of question and challenges such as - language detection, Part-of-Speech tagging, relation extraction, named entity recognition, OCR, speech recognition, sentiment extraction and many more.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;There are of course, several Python libraries which try to tackle some of those problems. This post aims to provide a short overview of those packages.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;NLTK&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Probably the oldest and the most known package in this area. Started in 2001 in Penn State Computer Science department the Natural Language Toolkit aims to support scientific research. Last stable release was released at the beginning of April, so the project is live and develops all the time.&lt;/div&gt;
&lt;div&gt;The NLTK package includes wide variety of modules including - text tokenization, pos tagging, text classification, sentiment analysis, etc.&lt;/div&gt;
&lt;div&gt;The downside of this package is that it is many times ungainly, heavy, complicated. It is more of academic level than on industry level. If you have lot&apos;s of text to analyze, specially if it is complicated, expect it to run for ages.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.nltk.org/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.nltk.org/book/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Spacy.io&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Possibly NLTK strongest competitor with the goal of creating production level code.&lt;/div&gt;
&lt;div&gt;Main capabilities include tokenizing, tagging, parsing, entity recognition and pattern matching. For now only supports English and German.&lt;/div&gt;
&lt;div&gt;It is faster and suits more to industrial needs, but the community is still small comparing to NLTK and the features are also behind.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://spacy.io/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt; &lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;gensim
&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&apos;Topic modelling for humans&quot;&lt;/div&gt;
&lt;div&gt;Implements top notch algorithms focusing on topic modeling, documents ranking and significant terms identification, e.g. - tf-idf, word2vec, doc2vec, latent Dirichlet allocation (LDA), latent semantic analysis (LSA). Some of the algorithms can be run in a distributed manner.&lt;/div&gt;
&lt;div&gt;Uses NumPy and SciPy for efficient processing.&lt;/div&gt;
&lt;div&gt;&lt;b&gt; &lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://radimrehurek.com/gensim/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;LDIG&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;While NLTK old the philosophy of &quot;one package rule them all&quot;. LDIG does one thing - language detection for short text, i.e n-grams distribution are based on twitter and meant to analyze texts with at least 3 words. Rather then relatively short texts.&lt;/div&gt;
&lt;div&gt;They 99.1% accuracy over 17 languages. From my experience the accuracy with ldig was a bit lower (around 80%). However, still relatively good specially for Latin languages.&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt; &lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://github.com/shuyo/ldig
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://shuyo.wordpress.com/2012/02/21/language-detection-for-twitter-with-99-1-accuracy/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;scikit-learn&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Scikit-learn is one of the biggest machine learning pacakges in Python. As NLP is one application of machine learning it features also specific modules to deal with text. So once you know the mathematical background of the algorithm you want to use you can use scikit-learn implementation.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;Text feature extraction - &lt;a&gt;http://scikit-learn.org/stable/modules/feature_extraction.html#text-feature-extraction&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;LDA - &lt;a&gt;http://scikit-learn.org/dev/modules/generated/sklearn.decomposition.LatentDirichletAllocation.html&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>PyData Berlin 2016 #pydatabln</title><link>https://tomron.net/2016/05/21/pydata-berlin-2016-pydatabln/</link><guid isPermaLink="true">https://tomron.net/2016/05/21/pydata-berlin-2016-pydatabln/</guid><description>I got a diversity scholarship from Num Focus to attend the PyData Berlin event. Num Focus is an NGO which supports open source data science projects among them…</description><pubDate>Sat, 21 May 2016 18:15:48 GMT</pubDate><content:encoded>I got a diversity scholarship from &lt;a&gt;Num Focus&lt;/a&gt; to attend the PyData Berlin event. Num Focus is an NGO which supports open source data science projects among them - Jupyter, matplotlib, Numpy, pandas etc.
&lt;div&gt;This post is not a summary of the events or of the talks that I attended in but rather hints to a subset of the talks.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Keynote - &lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;Olivier Grisel (Inria)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;Grisel&lt;/a&gt; talked about the Evolution of predictive modeling and scaling predictive modeling. Why do we need to scale predictive modeling -&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
	&lt;li&gt;I\O intensive operations - e.g feature engineering and model serving.&lt;/li&gt;
	&lt;li&gt;CPU intensive operations - e.g hyper-parameters search and cross validation.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;PySpark seems like a very legit tool but it has its&apos; drawbacks -&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;No pure python local mode - impossible to use profiler or ipdb&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;color:#333333;font-family:Lato, sans-serif&quot;&gt;There is latency which is induced by the network architecture (Python driver -&amp;gt; Scala (JVM) -&amp;gt; Python worker)&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;Traceback is sometimes hard to understand as there is a mix of scala and python errors and log data.&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;div&gt;Grisel suggest to use instead &lt;a&gt;Dask&lt;/a&gt; and &lt;a&gt;Distributed&lt;/a&gt; as a native python packages for parallel and distributed computing.&lt;/div&gt;
&lt;div&gt;Being a young project dask also have its&apos; limitation - mainly no distributed shuffles which means it does not support distributed merge, join, groupby and aggregation operations at the moment.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Frontera: open source, large scale web crawling framework (Alexander Sibiryakov, ScrapingHub)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;When I read the talk abstract I was not sure what the difference between &lt;a&gt;Frontera&lt;/a&gt; and Scrapy. Hearing this talk the goal of Frontera is actually different - schedule crawling and crawling strategy. In their architecture they use scrapy for crawling but can use other crawlers as well.&lt;/div&gt;
&lt;div&gt;After introducing Frontera, Sibiryakov showed their result of crawling the Spanish internet and the problems they faced. Some of the solutions were quite trivial - indexing the data differently to avoid hotspot, caching, limiting the depth of crawling \ number of pages per host, etc. I cannot say that I was fully convinced.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Setting up predictive analytics services with Palladium (Andreas Lattner, Otto group)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;The evolution of company tool - 80% development time, 20% deployment overhead which tend to repeat between different projects. So why not make a framework and try to automate it. This is exactly the reason Otto group developed &lt;a&gt;Palladium&lt;/a&gt; - ease the development, deployment and integration predictive analytics services.&lt;/div&gt;
&lt;div&gt;The main limitation of Palladium is that it does no support distributed calculation. Another issue is controlling the results on real time - boosting, filtering, etc. At current time, &lt;a&gt;prediction.io&lt;/a&gt; (not written in Python) is in a more mature state.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;Spotting trends and tailoring recommendations: PySpark on Big Data in fashion (Martina Pugliese, Mallzee)&lt;/b&gt;&lt;/u&gt;&lt;/div&gt;
&lt;div&gt;Mallzee, as stated by Pugliese is &quot;the tinder of fashion&quot;. I.e the applications shows you a stream of fashion items from multiple providers and you swipe them left and right according to your preferences.Their current big challenge is to produce valuable recommendation for each customer.&lt;/div&gt;
&lt;div&gt;Their input on one hand are the items and the items information which they crawl from the providers websites and normalize to fit into their set of tags and properties and of course the brand itself. The second input is the user behaviors - swipes, buy actions, favourite and non favourite brands, etc. Their current choice is creating a random forest for each user based on their actions. This approach can work for users with a lot of signals and specifically positive signal (buy and positive swipes). Possibly the next step will be to cluster the users to learn more about the users with log positive signals.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Practical Word2Vec in Gensim (&lt;/u&gt;&lt;/b&gt;&lt;b&gt;&lt;u&gt;Lev Konstantinovskiy, Gensim)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;a&gt;Gensim&lt;/a&gt; is a &quot;topic modeling for humans&quot;. It implements many interesting algorithm including lda, word2vec and doc2vec, lot&apos;s of potential and interesting to play with.&lt;/div&gt;
&lt;div&gt;But this tutorial was a mess.. the class didn&apos;t fit to a tutorial, not enough space, not tables people can put their computers on and really run the code.&lt;/div&gt;
Konstantinovskiy wanted to present many options and ideas and run too fast between the different algorithms without really explaining them. On the other hand there was not really a focus on running the code and showing the package API. Unfortunately I feel this talked was a bit miss handled.
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Bayesian Optimization and it&apos;s application to Neural Networks (Moritz Neeb, TU Berlin)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;What I would take from this talk is approaching Hyper parameter tuning as an optimization problem. For example when we use grid search for hyper parameter tuning we invest a lot of resources but the experiments are independent from one another and we don&apos;t learn from one another. Instead we can possible introduce a method which have some interactions between the different experiments.&lt;/div&gt;
&lt;div&gt;Neeb introduced an approach which treat it as a Gaussian Process and at each point try to evaluate the point with the maximal possible gain.&lt;/div&gt;
&lt;div&gt;He also mentioned few Python libraries -&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;Spearmint&lt;/a&gt; - designed to automatically run experiments (thus the code name spearmint) in a manner that iteratively adjusts a number of parameters so as to minimize some objective in as few runs as possible.&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;HPOlib&lt;/a&gt; - hyperparameter optimization library&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Hyperopt&lt;/a&gt; -  is a Python library for optimizing over awkward search spaces with real-valued, discrete, and conditional dimensions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Keynote - Wes McKinney (Cloudera)&lt;/u&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;Wes McKinney&lt;/a&gt; is probably Mr. Open Source he involved and leading some of the most known data science open source projects (in python but not only) - pandas, &lt;a&gt;Apache Parquet&lt;/a&gt;, etc.&lt;/div&gt;
&lt;div&gt;His talk had roughly 2 parts - talking about the community, code of conduct, etc. and challenges that he believes will play a major role in data science \ python \ big data communities in the near future. Some of the project \ ideas \ challenges he mentioned -&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;conda-forge&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;manylinux&lt;/a&gt; - Python wheels that work on any linux (almost)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;What&apos;s new in Deep Learning (Dr Kashif Rasul, Zalando SE)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Deep learning survey on speeds.. Survey of several recent papers in deep learning. Beside on mention of Theano and short example of code no strong connection to Python. I would have compromise to less code and slower pace.&lt;/div&gt;
&lt;div&gt;Some of the papers he pointed at -&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;Understanding the difficulty of training deep feedforward neural networks&lt;/a&gt; (Glorot and Bengio) - The term Xavier initialization comes from here. See &lt;a&gt;here&lt;/a&gt; for additional information.&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Delving Deep into Rectifiers:Surpassing Human-Level Performance on ImageNet Classification&lt;/a&gt; (He, Zhang, Ren, Sun - Microsoft research)&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Batch Normalization: Accelerating Deep Network Training byReducing Internal Covariate Shift&lt;/a&gt; (Ioffe and Szegedy - Google) - A method to accelerate the training of deep neural network by modifying the distribution of activations. See tutorial &lt;a&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;A full Machine learning pipeline in Scikit-learn vs in scala-Spark: pros and cons (Jose Quesada, Data Science Retreat)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Jose Quesada presented their experience with teaching and using Python Scikit learn versus Scala Spark. The most interesting points in my opinion were the PySpark limitation and future directions and of course comparison of existing features.&lt;/div&gt;
&lt;div&gt;One of the most important insights was to use spark &lt;a&gt;DataFrames&lt;/a&gt;. &lt;a&gt;spark.ml&lt;/a&gt; is built on the top of dataframes and will replace Spark MLlib in the future.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Data Integration in the World of Microservices (Valentine Gogichashvili, Zalando)&lt;/u&gt;&lt;/b&gt;
&lt;/div&gt;
&lt;div&gt;Gogichashvili is the head of Data Engineering in Zalando and is working there for already 5.5 years which means he was there during business, structural and technological changes the organization went through.&lt;/div&gt;
&lt;div&gt;While he talked about micro-services architecture I think there were two other interesting inputs in the talk -&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;Team structure - every team is responsible for their own components and infrastructure (including naming) while their align to engineering guidelines such as API structure, data types, etc. which are set by cross team guilds.&lt;/li&gt;
	&lt;li&gt;Open source code - whenever a team starts a new project by default the project will grow to be an open source unless they reason about why not. Zalando open source projects can be viewed &lt;a&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;u&gt;Brand recognition in real-life photos using deep learning (Lukasz Czarnecki, Samsung)&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;Czarnecki presented his project from Data Science retreat - brand recognition in Instagram photos where he combined neural networks with SVM. He showed the base line he started from (+ some preprocessing) and the steps he made to improve his results.&lt;/div&gt;
&lt;div&gt;Some of the steps he did -&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;Increase training set from 300 images for brand to 800&lt;/li&gt;
	&lt;li&gt;Multiply the training set by cropping part of the pictures.&lt;/li&gt;
	&lt;li&gt;Looking on the error and adding training examples to make the NN more general&lt;/li&gt;
	&lt;li&gt;Increases threshold of the SVM&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;That&apos;s all for now, until next year :)&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (16/05/2016)</title><link>https://tomron.net/2016/05/16/5-interesting-things-16052016/</link><guid isPermaLink="true">https://tomron.net/2016/05/16/5-interesting-things-16052016/</guid><description>Similar Wikipedia Pages - This post present Wikipedia similar pages chrome extension. Phrasing this in other words it is a recommendation system for Wikipedia…</description><pubDate>Mon, 16 May 2016 18:22:12 GMT</pubDate><content:encoded>&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Similar Wikipedia Pages&lt;/u&gt;&lt;/b&gt; - This post present Wikipedia similar pages chrome extension. Phrasing this in other words it is a recommendation system for Wikipedia pages. They are not the first one to do it &lt;a&gt;Wikiwand&lt;/a&gt; as well as Wikipedia themselves (in Beta) created such a feature. They compare the result a bit and it would have been interesting to have deeper dive to it. One obvious difference between them and Wikipedia is that while Wikipedia can analyze user behavior and use collaborative filtering or a hybrid approach they only have access to the content data. However they can possibly integrate page view data or edit data to inspect trends and to integrate more temporal data in their recommendations.&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://blog.lateral.io/2016/05/similar-pages-wikipedia/
&lt;/a&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;b&gt;&lt;u&gt;Cron best practices&lt;/u&gt;&lt;/b&gt; - while it is a very common to set a cron job it is sometime not fully understood - which user runs the command, where is it run, where to put the scripts, orcehstrating cron jobs and so on. A life hack post.&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://sanctum.geek.nz/arabesque/cron-best-practices/
&lt;/a&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;b&gt;&lt;u&gt;Resume Dreamer&lt;/u&gt;&lt;/b&gt; - since the release of TensorFlow as open source many people experience with TensorFlow in different tasks and settings and share their work. This post by untapt team show their efforts on generating CV using TensorFlow. While the task is amusing and one could think of it as a draft to their own CV I lack some technical details about the process. Sawing that the engine recognized the paragraph structure I wonder how it will deal with dates patterns.&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://www.untapt.com/blog/2016/04/25/neural-network-that-dreams-resumes/&lt;/a&gt;&lt;/div&gt;
 
&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Apache Libcloud&lt;/u&gt;&lt;/b&gt; - Python library for interacting with many of the popular cloud service providers using a unified API. This library have two major use cases as far as I see it - migration between different providers and working with multiple providers on a regular base which I believe is rare. In both cases this package can decrease the &quot;lock-in&quot; to specific provider and that&apos;s good thing.&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;https://libcloud.apache.org/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
 
&lt;div&gt;&lt;b&gt;&lt;u&gt;Graph DataFrames&lt;/u&gt;&lt;/b&gt; -Databricks expose GraphFrames - graph processing library for Apache Spark. The functionality of Apache Spark is extended step by step and now it is time for Graph algorithms. My guess is that the query syntax will change a bit in the future to support user defined functions and so on but that&apos;s a start.&lt;/div&gt;
 
&lt;div&gt;&lt;a&gt;http://graphframes.github.io/user-guide.html
&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (20/04/2016)</title><link>https://tomron.net/2016/04/20/5-interesting-things-20042016/</link><guid isPermaLink="true">https://tomron.net/2016/04/20/5-interesting-things-20042016/</guid><description>Spoiler detector - Get your annotated data set for free! Nice way to get (though not perfect) an annotated data set and create some social good. Would be…</description><pubDate>Wed, 20 Apr 2016 09:48:11 GMT</pubDate><content:encoded>&lt;b&gt;&lt;u&gt;Spoiler detector&lt;/u&gt;&lt;/b&gt; - Get your annotated data set for free! Nice way to get (though not perfect) an annotated data set and create some social good. Would be interesting to expand it to more movies and television shows and to other social networks. Interesting to see how predictive a model which is trained on one social network preforms on other social networks (for this case and on general)

&lt;a&gt;http://www.insightdatascience.com/blog/fanguard.html&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Deep dive to Python virtualenv&lt;/u&gt;&lt;/strong&gt; - although it only addresses python requirements and not more general system requirements (e.g &lt;a&gt;this case&lt;/a&gt;), it is a very important and common tool to make sure that all your python requirements are in place. This post provide some deeper look into virtualenv and pyenv, a python version management tool.

&lt;a&gt;https://realpython.com/blog/python/python-virtual-environments-a-primer/&lt;/a&gt;

&lt;b&gt;&lt;u&gt;6 Lesser Known Python Data Analysis Libraries&lt;/u&gt;&lt;/b&gt; - TL;DR - &lt;a&gt;mrjob&lt;/a&gt;, &lt;a&gt;delorean&lt;/a&gt;, &lt;a&gt;natsort&lt;/a&gt;, &lt;a&gt;tinydb&lt;/a&gt;, &lt;a&gt;prettytable&lt;/a&gt; and &lt;a&gt;vincent&lt;/a&gt;. If I had to write the same blog post I am not sure that those are the packages I would have chosen. mrjob is maintained but I feel it is a bit outdated and there are better way now days to run multi-step mapreduce jobs (e.g Apache Spark). natsort - I understand the need, personally it is easier for me to write the sort function myself and even better avoid sorting as much as possible. prettytable - I prefer pandas printing over this printing. And last but not least - I am not sure that I would really categorize all those packages as &quot;Data Analysis&quot;.

&lt;a&gt;http://jyotiska.github.io/blog/posts/python_libraries.html
&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Python datacleaner&lt;/u&gt;&lt;/strong&gt; - would definitely be a strong candidate when writing a post such of the above. Designated to make the process of cleaning pandas data frames quicker and easier. Interesting to see how this project will evolve.

&lt;a&gt;https://github.com/rhiever/datacleaner
&lt;/a&gt;

&lt;b&gt;&lt;u&gt;Deep Detect&lt;/u&gt;&lt;/b&gt; - &quot;Open Source + Deep Learning + API + Server&quot;. Deep learning version of PredictionIO. It is written in C++11 and uses &lt;a&gt;Caffe&lt;/a&gt; for deep learning. It seems natural to me that predictionIO and DeepDetect will cooperate in the future or someone will develop a deep learning template for predictionIO.

&lt;a&gt;http://www.deepdetect.com/&lt;/a&gt;</content:encoded></item><item><title>Python&apos;s Guide to the Galaxy – SPS16</title><link>https://tomron.net/2016/03/23/pythons-guide-to-the-galaxy-sps16/</link><guid isPermaLink="true">https://tomron.net/2016/03/23/pythons-guide-to-the-galaxy-sps16/</guid><description>My talk from Swiss Python Summit is online - https://www.youtube.com/watch?v=Q9AU_qETVd8</description><pubDate>Wed, 23 Mar 2016 17:26:23 GMT</pubDate><content:encoded>My talk from Swiss Python Summit is online -

https://www.youtube.com/watch?v=Q9AU_qETVd8</content:encoded></item><item><title>5 interesting things (22/03/2016) - Hebrew</title><link>https://tomron.net/2016/03/22/5-interesting-things-22032016-hebrew/</link><guid isPermaLink="true">https://tomron.net/2016/03/22/5-interesting-things-22032016-hebrew/</guid><description>I usually don&apos;t post link to posts in Hebrew because the audience is limited. This time I decided to make Hebrew Special. I appreciate people writing about…</description><pubDate>Tue, 22 Mar 2016 11:51:29 GMT</pubDate><content:encoded>&lt;div&gt;&lt;p&gt;
I usually don&apos;t post link to posts in Hebrew because the audience is limited. This time I decided to make Hebrew Special. I appreciate people writing about technology in Hebrew from several reasons - audience and feedback are limited, not all the terms exists in Hebrew, indentation, etc. It took me a while to write this post. To find 5 blogs I can really recommend on. I hope all those blogs will keep being active and some more will join them.
This time the links are not to specific posts but to blogs.
&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Reversim&lt;/u&gt;&lt;/b&gt; - a podcast for developers but not only for them. Blog \ podcast was founded by Ran Tavori and Ori Lahav and is almost 7 years old now. They also hold an annual summit in Israel. There are several kind of sub-series \ chapter types, my favorite is Bumpers which is a monthly survey of cool things Ran Tavory and friends bumped into that month.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a&gt;http://www.reversim.com/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;Software Archiblog&lt;/u&gt;&lt;/b&gt; - this blog is written by Lior Bar-On which is currently a Chief Architect @ Gett. On one hand there are deep dive post to AWS services, GO language on so on. On the other hand there are softer posts regarding processes, choosing technology stack, time management and so on.
&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a&gt;http://www.softwarearchiblog.com/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;the bloggerit &lt;/u&gt;&lt;/b&gt;- blog by &lt;a&gt;Hadas Sheinfeld&lt;/a&gt;, former VP product at ClickTale. This blogs runs now for almost 8 years. The only female writer in this post. Although Reversim host many people from time to time, I don&apos;t remember the last time they hosted a female guest. She writes about product, organizational culture as well as on other topics from a wider angle.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a&gt;http://www.thebloggerit.com/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;b&gt;&lt;u&gt;Navi Sheker&lt;/u&gt;&lt;/b&gt; - the name of the blog refers to the bible meaning &quot;False prophet&quot; and the subtitle of the blog is &quot;Prophecy was given to fools&quot; which is from Baba Batra one the books in the Mishnah. The posts in this blog mostly analyze twitter chatter and google search in Hebrew, sometimes with correlation to actual events.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a&gt;https://navisheker.wordpress.com/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;I, Code&lt;/u&gt;&lt;/b&gt; - Comparing to the other blogs this one is relatively young one - few months old. Hopefully it will be active in a year from now (and more of course).  The posts in this blog are mostly code samples in Python and CSS. I like the post about &lt;a&gt;how to secure your home in less than 80 lines of code&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://icode.co.il/
&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (12/03/2016)</title><link>https://tomron.net/2016/03/12/5-interesting-things-12032016/</link><guid isPermaLink="true">https://tomron.net/2016/03/12/5-interesting-things-12032016/</guid><description>In memory of Udy Brill pypi analysis - this posts starts with some technical issues, e.g. how to scrape pacakge dependencies from pypi packages and goes on to…</description><pubDate>Sat, 12 Mar 2016 17:22:08 GMT</pubDate><content:encoded>&lt;p&gt;In memory of Udy Brill&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;pypi analysis&lt;/b&gt;&lt;/u&gt; - this posts starts with some technical issues, e.g. how to scrape pacakge dependencies from pypi packages and goes on to showing a graph of dependencies between python packages as well as analysis on the graph structure. What we learned from this analysis - requests, django and six are among the most important packages - PageRank and connectivity degree wise. requests also leads in the&quot;betweenness centrality&quot; matrix. While both django and six does not appear in the top 10 results of this matrix. I believe that the reason is the both django and six are used for more specific use-cases \ applications while requests which is more general. One can see that the top-10 packages in &quot;betweenness centrality&quot; matrix are quite general ones (testing and setup) as well as open stack clients.&lt;/p&gt;
&lt;p&gt;The post includes two more visualizations - adjacency matrix, which exposes existence of cliques in the graph with some details about them and degree distribution in the graph. A long tail distribution as one can easily expect. Most packages are not imported by anyone else and a few packages are imported by many other packages.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;http://kgullikson88.github.io/blog/pypi-analysis.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Estimate user locations in social media&lt;/b&gt;&lt;/u&gt; - in the world of targeting and online advertisment one of the challenges is to learn as much as possible about the user for better targeting. Such data includes - gender, age, marital status, field of interest and of course location. No use in advertising a shop which is 500km from the user. But, no one is perfect and so is data. We don&apos;t always know user location and this post describe two approaches for estimating user location from social media.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;http://www.lab41.org/2-highly-effective-ways-to-estimate-user-location-in-social-media/&lt;/a&gt;&lt;/p&gt;
&lt;b&gt;&lt;u&gt;10 Lessons from 10 Years of Amazon Web Services&lt;/u&gt;&lt;/b&gt; - post by Werner Vogels, Amazon CTO concluding 10 years of AWS. Although I sometimes have criticism they (together with other palyer and technology enhancements) truly changed the world. A very interesting read both for AWS users and non users of AWS.

http://www.allthingsdistributed.com/2016/03/10-lessons-from-10-years-of-aws.html
&lt;b&gt;&lt;u&gt;
Introduction to Boosting&lt;/u&gt;&lt;/b&gt; - TL;DR - think iterative - at each step you improve the model so it will predict well samples which were not predicted correctly so far. Really good overview on the concept of boosting, now I want to use this knowledge and play with it -
&lt;p&gt;&lt;a&gt;https://codesachin.wordpress.com/2016/03/06/a-small-introduction-to-boosting/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;curl vs wget&lt;/b&gt;&lt;/u&gt; - a comparison of the two tools from a contributor to both projects. While (for me) there is not immediate day-to-day implication it is good to look a bit under the hood and to see the pros and cons of each for such a common tools. For me it would be easier to see it as a table.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://daniel.haxx.se/docs/curl-vs-wget.html&lt;/a&gt;&lt;/p&gt;


&lt;hr /&gt;
&lt;p&gt;Udy was a friend and a colleague of mine. He died in a track in New Zealand during his honeymoon. For me he had the perfect mix of curiosity, professionalism, team member and a positive person.&lt;/p&gt;
&lt;p&gt;I&apos;ll remember Udy in everyday moments like eating food with a lot of sauce, reading something about sorting algorithms and hearing Tracy Chapman.&lt;/p&gt;
This is a video we made in a company hackathon we worked together.

https://www.youtube.com/watch?v=jDZs4Mv_nMU</content:encoded></item><item><title>Spark, EMR, Lambda, AWS</title><link>https://tomron.net/2016/02/27/spark-emr-lambda-aws/</link><guid isPermaLink="true">https://tomron.net/2016/02/27/spark-emr-lambda-aws/</guid><description>I know the title of this post looks like a collection of buzz words but there is code behind it. AWS Lambda function is a service which allow you to create an…</description><pubDate>Sat, 27 Feb 2016 15:11:17 GMT</pubDate><content:encoded>I know the title of this post looks like a collection of buzz words but there is code behind it.

&lt;a&gt;AWS Lambda&lt;/a&gt; function is a service which allow you to create an action (in this example add an EMR step) according to all kind of events. Such events can be cron expressions or schedule event (once an hour, once a day, etc.), change in S3 files, change in DynamoDB table, etc.

The goal of the code is to add an &lt;a&gt;EMR&lt;/a&gt; step to an existing EMR cluster. The step can actually be anything- Map Reduce, Spark job, JAR step , etc. This example show how to add a Spark job but it is easy to adjust it to your needs.

The parameters for the Spark job can depend on the specific event - for example, put file event data will include data about the specific file.

In this example there is only a place holder for the script parameters and the spark configuration parameters.

Note - in order to run this Spark job your code should be in Spark master machine. Possible this could be done in the script as well but here we assume it is already in CODE_DIR.

 

https://gist.github.com/tomron/6ebc60cd3450478c7fc4

 </content:encoded></item><item><title>5 interesting things (25/02/2016)</title><link>https://tomron.net/2016/02/25/5-interesting-things-25022016/</link><guid isPermaLink="true">https://tomron.net/2016/02/25/5-interesting-things-25022016/</guid><description>Caffe On Spark - if it pretty clear that on of the next steps for Spark MLLib is to add deep learning. There are several deep learning frameworks out there and…</description><pubDate>Thu, 25 Feb 2016 10:26:26 GMT</pubDate><content:encoded>&lt;b&gt;&lt;u&gt;Caffe On Spark&lt;/u&gt;&lt;/b&gt; - if it pretty clear that on of the next steps for Spark MLLib is to add deep learning. There are several deep learning frameworks out there and I guess few (if not all of them) will try to integrate with Spark on one way or another and in the end &quot;the fittest will survive&quot;, i.e. will be officially supported by Spark. What will that be? my guess is an Apache project, maybe &lt;a&gt;SINGA&lt;/a&gt;, maybe a popular project that will become an Apache project. However, other extensions will continue to exist for specific use-cases and for users who prefer specific frameworks (e.g. reusing already existing code).

&lt;a&gt;https://github.com/yahoo/CaffeOnSpark&lt;/a&gt;

&lt;b&gt;&lt;u&gt;Kibana plugins basics&lt;/u&gt;&lt;/b&gt; - I discovered this post while looking for a way to add a reasonable KPI visualization for elasticsearch. This is actually a series of 4 posts going over how to write and deploy (i.e. register) a custom Kibana plugin. Unfortunately we use AWS Elasticsearch service which does not (currently) support customized plugins and therefore we suspend it for now.
&lt;p&gt;&lt;a&gt;https://www.timroes.de/2015/12/02/writing-kibana-4-plugins-basics/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bonus track - creating traffic light visualization - &lt;a&gt;http://logz.io/blog/kibana-visualizations/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Thoughtsworks radar&lt;/u&gt;&lt;/b&gt; - every few months Thoughtsworks publish their technology rating. There are 4 ratings - adopt, trail, asses and hold. The products / tools / methodology are divided to 4 groups - techinques, tools, platforms and languages and frameworks. It is specially interesting to see how ranks change over time. I found database products to be a little under represented. I guess there is also a bit of bias towards tools and companies they work with but nonetheless it is a interesting read.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://www.thoughtworks.com/radar&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;. files&lt;/u&gt;&lt;/b&gt; - dot files are a common way to set all kind of configurations from .gitignore to .bashrc and everything in the middle. You probably have your configuration that you like and copy it from project to project. You still might find this repository helpful as it collects common configuration settings -&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://github.com/holman/dotfiles&lt;/a&gt;​&lt;/p&gt;
&lt;p&gt;Bonus track - git ignore by programming language&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://github.com/github/gitignore&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;&lt;u&gt;SQL tabs&lt;/u&gt;&lt;/strong&gt; - simple but get the job done. Yet another visualization tool above postgresql. Super simple installation and start up (on mac os environment) even for non technical people.

&lt;a&gt;http://www.sqltabs.com/&lt;/a&gt;</content:encoded></item><item><title>Why not AWS Elasticsearch service</title><link>https://tomron.net/2016/02/19/why-not-aws-elasticsearch-service/</link><guid isPermaLink="true">https://tomron.net/2016/02/19/why-not-aws-elasticsearch-service/</guid><description>Almost 5 month ago AWS exposed a new service - “Elasticsearch service”. So we can now have a managed elasticsearch cluster and we can have Kibana on it without…</description><pubDate>Fri, 19 Feb 2016 22:53:53 GMT</pubDate><content:encoded>&lt;span style=&quot;font-weight:400&quot;&gt;Almost 5 month ago AWS exposed a new service - “Elasticsearch service”. So we can now have a managed elasticsearch cluster and we can have Kibana on it without the hassle of managing it. But then we need to work with it and discover the bleeding edges - &lt;/span&gt;
&lt;ol&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;b&gt;Old version &lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt;- current Elasticsearch version is 2.2.0 and 1.7.* is maintained. Elasticsearch version in AWS is 1.5.2. It is 8 months old version, it is ages in this industry. Kibana current version is 4.4.0 while Kibana version offered on AWS is 4.0.3.  Many enhancements, bug fixes, breaking changes and AWS is behind. This is specially interesting comparing to the recent velocity on EMR images. As there are some breaking changes between 1.* versions and 2.* I would at least expected the option to choose a version. Even more annoying there is currently no data about when and how AWS going to upgrade the &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;versions&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;. &lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;a&gt;&lt;b&gt;Plugins&lt;/b&gt;&lt;/a&gt;&lt;b&gt; not supported&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - adding plugins is relevant for expanding Elasticsearch usability, monitoring and for adding customized Kibana visualisations (e.g for KPI&apos;s). I believe every company which uses Elasticsearch will have this need in some point. AWS currently support only a close set of plugins and don’t enable installing your own plugin and there is no data about &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;future plans&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;. &lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;b&gt;Scripting not supported&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - scripting is relevant for adding data, processing data, interactions between fields, etc. Again a need that I believes that raises in every company after a while. This features also is not enabled in AWS Elasticsearch Service. There are ways to by-pass some of it but why work hard if Elastic already created this functionality? &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;Here too&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;, not clear if there are any future plans to enable it.&lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;b&gt;No VPC support&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - this means that the Elasticsearch endpoint is publicly-accessible. There are &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;few solutions&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; but it is a security issues and more over it does not comply with the other AWS products logic. &lt;/span&gt;&lt;/li&gt;
	&lt;li style=&quot;font-weight:400&quot;&gt;&lt;b&gt;Backup issues&lt;/b&gt;&lt;span style=&quot;font-weight:400&quot;&gt; - no easy way to export data and to control how frequent and when your data is backed up. &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;AWS cloud plugin for Elasticsearch&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; can solved it, but it is not supported..&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;span style=&quot;font-weight:400&quot;&gt;Conclusion - Elasticsearch is a very strong tool and even stronger when combined with Kibana. On the other hand, AWS usually produce very good products.But this time, the combination of those two is not there yet. It seems to me like they might jumped to the water too early (possibly in order to compete with Found \ Elastic Cloud) with a product which is not mature enough.&lt;/span&gt;

&lt;span style=&quot;font-weight:400&quot;&gt;Most of the services AWS offer are based on their own innovation and \ or development and are not coupled so strong with external product (the other product I can think of is &lt;/span&gt;&lt;a&gt;&lt;span style=&quot;font-weight:400&quot;&gt;elasticcache&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-weight:400&quot;&gt; which I have not worked with yet). From a business point of view, it is weird for me to see such a dependency on external product. If there is a high demand for Elasticsearch on AWS I would prefer to have a tutorial explaining how to set a cluster rather than a doubtful product. &lt;/span&gt;</content:encoded></item><item><title>5 interesting things (13/02/2016)</title><link>https://tomron.net/2016/02/13/5-interesting-things-13022016/</link><guid isPermaLink="true">https://tomron.net/2016/02/13/5-interesting-things-13022016/</guid><description>Ads @ stackoverflow - Steve from Stackoverflow ad managment team explains their view about ads on the site. This is a very user centric approach along with…</description><pubDate>Sat, 13 Feb 2016 19:22:22 GMT</pubDate><content:encoded>&lt;p&gt;&lt;b&gt;&lt;u&gt;Ads @ stackoverflow&lt;/u&gt;&lt;/b&gt; - Steve from Stackoverflow ad managment team explains their view about ads on the site. This is a very user centric approach along with strong branding and differentiating themselves. This approach is not scalable for a sites with many topics and diverse audience but it fits their niche.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://blog.stackoverflow.com/2016/02/why-stack-overflow-doesnt-care-about-ad-blockers/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Serverless Python web applications&lt;/u&gt;&lt;/b&gt; - taking scalability and cost effective to the next level. Zappa is a Python web applications where the server is created using AWS Lambda function after an HTTP request came through AWS API Gateway. The python web framework under it is currently Django but it should be customizable to also support Flask, pylons, etc.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://gun.io/blog/announcing-zappa-serverless-python-aws-lambda/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Slack @ Home&lt;/u&gt;&lt;/b&gt; - the interesting thing for me is the transformation between business tools and free time tools \ technologies. Can we use the knowledge, tools, methods we use in work at home and the other way around?&lt;/p&gt;
The first feature for me would be shopping - collecting easily the list of things I need to get in the supermarket, drug store, etc and updating it back to the slack.

Scheduling is also interesting but there a google calendar integration so I think it is pretty easy. And maybe integration with WhatsApp possibly for image backup and sharing.

Of course, it does not necessary have to be slack, any other equivalent, preferred open source tool is good as well.
&lt;p&gt;&lt;a&gt;http://labs.earthpeople.se/2016/02/my-family-uses-slack/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Towards an Open Banking API Standard&lt;/u&gt;&lt;/strong&gt; - one can probably not underestimate this move. I believe that an open banking API will lead many technology driven progress in the personal banking. For example - aggregating data from several account, comparing fees, etc. It will be interesting to see how the banks will adopt this standard as banks are heavily lead by regulations and are slow moving organizations by their nature. This specific effort is directed to UK banking systems but it will be interesting to follow if additional financial organization in and outside of UK will adopt it as well.&lt;/p&gt;

&lt;h2&gt;&lt;/h2&gt;
&lt;a&gt;http://jackgavigan.com/2016/02/10/towards-an-open-banking-api-standard/&lt;/a&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;3.57 Degrees of separation&lt;/u&gt;&lt;/b&gt; - as a matter of fact I find the idea ok six degrees of separation romantic and not very interesting. In the edge of social networks and big data we can actually check it, or evaluate it. This post by Facebook research tries to estimate it. The interesting part for me in this post was the mathematical background and the engineering effort of scaling it. Please note that data is mostly available for first world countries and therefore although it is an estimation it probably need another factor of distance.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://research.facebook.com/blog/three-and-a-half-degrees-of-separation/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Cassandra Day Berlin - 8 things I learnt about Apache Cassandra</title><link>https://tomron.net/2016/02/11/cassandra-day-berlin-8-things-i-learnt-about-apache-cassandra/</link><guid isPermaLink="true">https://tomron.net/2016/02/11/cassandra-day-berlin-8-things-i-learnt-about-apache-cassandra/</guid><description>Since I didn&apos;t know anything about Apache Cassandra (beside being a distributed database) I could probably replace the 8 in the title to any number.. Here is a…</description><pubDate>Thu, 11 Feb 2016 19:09:38 GMT</pubDate><content:encoded>Since I didn&apos;t know anything about &lt;a&gt;Apache Cassandra&lt;/a&gt; (beside being a distributed database) I could probably replace the 8 in the title to any number.. Here is a summary of few things I learned in &lt;a&gt;Cassandra Day&lt;/a&gt; today.
&lt;div&gt;
&lt;ol&gt;
	&lt;li&gt;&lt;u&gt;What is Apache Cassandra&lt;/u&gt; - open source &lt;b&gt;distributed&lt;/b&gt; database donated to Apache foundation by Facebook (actually first to google code and then to ASF). It is &lt;b&gt;decentralized&lt;/b&gt; - meaning all nodes are born equal and there are no masters or slaves. It is &lt;b&gt;schema-full &lt;/b&gt;database see here more about the &lt;a&gt;Myth of Schema-less databases&lt;/a&gt;. It supports &lt;b&gt;replications&lt;/b&gt;, i.e. data redundancy with default replication factor of 3 and multiple data centers (both physical and virtual). and you can control the consistency level (see next). Therefore it is &lt;b&gt;AP&lt;/b&gt; in the CAP theorem. It uses CQL - Cassandra Query Language.&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Controlling consistency&lt;/u&gt; - having the data replicated in several nodes one can read and write data in 3 ways. The higher consistency level the longer the latency is.
&lt;ul&gt;
	&lt;li&gt;&lt;b&gt;One&lt;/b&gt; - reading or writing to one node is enough.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;Quorum&lt;/b&gt; - i.e. value was written \ retrieved at least from half of the relevant nodes. Latest win - when retrieving the data from several nodes the value with the latest time-stamp counts.&lt;/li&gt;
	&lt;li&gt;&lt;b&gt;All&lt;/b&gt; - need to write \ retrieve data from all the relevant nodes. T Note that all mode is dangerous  since it cancels the high available. If one of the replicas is not available we will get no answer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;Data Modelling is important&lt;/u&gt;&lt;b&gt; &lt;/b&gt;- Isn&apos;t it right to every database? Well yes. But the issue here is again the trade off. One on hand I feel that data modelling is sometimes neglected on NoSQL databases since we can just through data there and scale it. On the other hand, due to some limitations (see CQL next..) data modelling for Cassandra is quite opposite to best practices in RDBMS. Know your queries in advance and build the schema (e.g keyspace) accordingly.&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;CQL&lt;/u&gt; - Cassandra Query Language. At the first talk they said &quot;Yes, it is exactly like SQL&quot;. Well, not exactly. First - no joins, this influences dramatically about the data modelling. Limited aggregations functionality. Update command always work even if record does not exist (can be controlled). See here more about &lt;a&gt;CQL vs SQL&lt;/a&gt;.&lt;/li&gt;
	&lt;li&gt;&lt;u&gt;CQL containers&lt;/u&gt;&lt;i&gt; - &lt;/i&gt;there are 3 types of containers
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Set&lt;/strong&gt; - a container of items sorted by the type compare operand.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;List&lt;/strong&gt; - a container of items sorted by the insertion operand&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Map&lt;/strong&gt; - a key, value container sorted by the type compare operand of the keys. This is kind of a hack which allow you to have it a bit schema less. Up to 64k items in a map.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Spark connector&lt;/a&gt; - connecting to one of the most trending technologies.&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Solr integration&lt;/a&gt; - Cassandra is not a document database. However, sometime users how choose Cassandra as their main solution have indexing \ search needs. Datastax have a patch which also allow you to search the data in RAM (data which was not yet written to the Lucene indices).&lt;/li&gt;
	&lt;li&gt;How to go on from here? How can I learn more -
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;DataStax academy&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Official documentation&lt;/a&gt; - by version&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Stackoverflow&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Planet Cassandra&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;Al&apos;s Cassandra 2.1 tuning guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;There are much more for me to learn about Apache Cassandra and more things I learned in this day but this is a short review.&lt;/div&gt;</content:encoded></item><item><title>Swiss Python Summit 2016</title><link>https://tomron.net/2016/02/08/swiss-python-summit-2016/</link><guid isPermaLink="true">https://tomron.net/2016/02/08/swiss-python-summit-2016/</guid><description>I participated in Swiss Python Summit today , where I gave a talk about &quot;Python&apos;s guide to the Galaxy&quot;. Code and slides are available in my GitHub . All the…</description><pubDate>Mon, 08 Feb 2016 23:06:33 GMT</pubDate><content:encoded>&lt;div&gt;&lt;p&gt;I participated in &lt;a&gt;Swiss Python Summit today&lt;/a&gt;, where I gave a talk about &quot;Python&apos;s guide to the Galaxy&quot;. Code and slides are available in my &lt;a&gt;GitHub&lt;/a&gt;. All the talk were recorded and they will probably be online within a few hours \ days.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;img class=&quot;  wp-image-589 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2016/02/20160205_173113.jpg&quot; alt=&quot;20160205_173113&quot; width=&quot;325&quot; height=&quot;581&quot; /&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;Beside the best signs I can think of the program was great and very diverse in the topics - music, 3d graphics, astrophysics and so on. Even the order of the program was very good - super cool talks after lunch to keep everyone a wake. The speakers were also relatively diverse - 4 out of 9 speaker were women, different backgrounds, etc. Unfortunately there were only few women in the crowd.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;I was very lucky to give the first talk so I could then concentrate on the other talks. One very strong point of the conference was the diversity of the talks.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;The second was &quot;API Design is Hard&quot; by &lt;a&gt;Dave Halter&lt;/a&gt;, creator and maintainer of &lt;a&gt;Jedi&lt;/a&gt;. It was more conceptional talk then a technical one which was enriched by lessons he learned creating and maintaining Jedi.  I believe this is an important talk regardless the specific programming language.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;Next session opened with &lt;a&gt;Armin Rigo&lt;/a&gt; talking about &lt;a&gt;CFFI&lt;/a&gt; - &quot;C Foreign Function Interface and PyPy interrupter. Interesting datum - CFFI is currently ranked 23rd by &lt;a&gt;PyPI Ranking&lt;/a&gt; above Django and aws cli. Probably thank to the fact that it is integrated in Cryptography package and others. &lt;a&gt;Pypy&lt;/a&gt; - is a python interpreter written in Python (rather then in C comparing to the most common implementation) and is designed for speed optimization.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a&gt;Martin Christen&lt;/a&gt; had 3 parts to his talk. First he talked about 3d modeling with &lt;a&gt;Blender&lt;/a&gt;, then he introduced some more low levels possibilities for 3d modeling and he ended up introducing some of the many open source projects he works on. Those projects mostly involve open 3d maps and globe maps.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;After lunch came Matthieu Amiguet, co-founder of &lt;a&gt;Les Chemins de Travers&lt;/a&gt; showed how you can manipulate sound using the relevant packages. This was really outstanding and non standard talk. One of the packages he currently uses is &lt;a&gt;pyo&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;Next talk  was given by &lt;a&gt;Chihway Chang&lt;/a&gt; from ETH Zürich who spoke about &quot; Coding / Decoding the Cosmos - Python application in Astrophysics&quot;. As she said, and I fully agree - &quot;Python is everywhere in science today&quot;. She talked about the found usage of Python in her department, both in Astrophysics dedicated packages (&lt;a&gt;Astropysics&lt;/a&gt;) and using more general purposes packages (SciPy, Numpy, pandas) and packages they write &lt;a&gt;themselves&lt;/a&gt;. She presented 2 issues they work on - mapping dark matter and calibrating radio telescope with drone. I strongly suggest to see at least a second part of this talk to original scientific thinking.&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;img class=&quot;alignnone size-full wp-image-594&quot; src=&quot;https://tomron.net/wp-content/uploads/2016/02/20160205_145917.jpg&quot; alt=&quot;20160205_145917&quot; width=&quot;3264&quot; height=&quot;1836&quot; /&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;Michael Rüegg demonstrated a Scrapy pipeline which start in crawling running races results and ends up in elastic search. This was probably the most technical talk of the day and the concrete project was of additional interest for me.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;&lt;a&gt;Jacinda Shelly&lt;/a&gt; showed us how magic is done, live coding. Specifically speaking about magic functions in IPython and other cool features.&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;Last but not least, &lt;a&gt;Florian Bruhin&lt;/a&gt; speaking about why and how we should use, how we can expand the basic functionality and so on. In addition he also spoke about other projects he is involved in: &lt;a&gt;qutebrowser&lt;/a&gt; - a python browser and &lt;a&gt;tox&lt;/a&gt; - a generic virtualenv management and test command line tool.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;div&gt;&lt;p&gt;This is the first edition of the conference and for me it was super interesting and I really loved the mixture of the talks. Hope to be there again next year.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (24/01/2015)</title><link>https://tomron.net/2016/01/24/5-interesting-things-24012015/</link><guid isPermaLink="true">https://tomron.net/2016/01/24/5-interesting-things-24012015/</guid><description>Top 30 books ranked by total number of links to Amazon in Hacker News comments - I must say this analysis surprises me. First because of the low numbers - most…</description><pubDate>Sun, 24 Jan 2016 12:33:18 GMT</pubDate><content:encoded>&lt;div&gt;&lt;strong&gt;&lt;u&gt;Top 30 books ranked by total number of links to Amazon in Hacker News comments&lt;/u&gt;&lt;/strong&gt; - I must say this analysis surprises me. First because of the low numbers - most common book was mentioned only 53 times. Second, I expected &quot;The Lean Startup&quot; to be one of the 30 top books. I guess one of the caveats as described in the post itself are the links themselves that may differ a bit or change over the years and therefore hard to match.


&lt;a&gt;http://ramiro.org/vis/hn-most-linked-books/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;b&gt;&lt;u&gt;LDA2VEC&lt;/u&gt;&lt;/b&gt; - getting the best from both worlds LDA + word2vec. Stitch fix definitely brand themselves as one of the leading companies  technology and research wise doing some very interesting things.

&lt;a&gt;http://www.slideshare.net/ChristopherMoody3/word2vec-lda-and-introducing-a-new-hybrid-algorithm-lda2vec-57135994&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Automatic colorizing&lt;/u&gt;&lt;/strong&gt; - coloring gray scale images using deep learning. There are many works now trying and checking tensor flow particularly and deep learning on general. I really liked this case, maybe also because it uses a set which was already trained for other purposes.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://tinyclouds.org/colorize/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Gestures Typing&lt;/u&gt;&lt;/strong&gt; - First of all I liked the question - answer format of the post. The post looks for an optimal keyboard. But what is optimal keyboard? depends who you ask. On the other hand I think qwerty (or qwertz in Germany) is such a strong standard that I wonder what will make it change.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://nbviewer.jupyter.org/url/norvig.com/ipython/Gesture%20Typing.ipynb
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;&lt;b&gt; &lt;/b&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Roomba + voice recognition&lt;/u&gt;&lt;/b&gt; - problems of the very rich part of the world. Yesterday night we spoke with friends which complained their Roomba sometimes get stuck in all kind of corners, cable and so on in their house. We talked about several ideas to solve it, one was voice command and this morning I found a guy which already tried it -&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://makezine.com/projects/use-raspberry-pi-for-voice-control/&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (10/01/2016)</title><link>https://tomron.net/2016/01/10/5-interesting-things-10012016/</link><guid isPermaLink="true">https://tomron.net/2016/01/10/5-interesting-things-10012016/</guid><description>Everything.me open source their inheritance - Everything.me was an Israeli startup closed few weeks ago. They now open source major parts of their code and…</description><pubDate>Sun, 10 Jan 2016 10:23:48 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Everything.me open source their inheritance&lt;/u&gt;&lt;/strong&gt; - Everything.me was an Israeli startup closed few weeks ago. They now open source major parts of their code and tools including their prediction algorithm, &lt;a&gt;Re:dash&lt;/a&gt; and others.

&lt;a&gt;https://medium.com/@joeysim/everythingme-open-and-out-6ed94b436e4c&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Python 3 module of the week&lt;/u&gt;&lt;/strong&gt; - over the years Python Module of the week by Doug Hellman was one of the most reliable documentation resources for Python&apos;s standard library. The documentation is always accompanied with very good examples to almost any functionality. It is also available as a command line tool and was translated to Chinese, German, Italian, Spanish and Japanese. And.. it is now updated to Python version 3.5. Kudos.

&lt;a&gt;https://pymotw.com/3/
&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;The Star wars social network&lt;/u&gt;&lt;/strong&gt; - although I&apos;m not a star wars fan I think this provides a very accessible introduction to graph algorithms and measurements.

&lt;a&gt;http://evelinag.com/blog/2015/12-15-star-wars-social-network/
&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;D3 in Jupyter&lt;/u&gt;&lt;/strong&gt; - an intersection between 2 tools which I use quite a lot and find very important for data scientist. Not those tools specifically but tools which make the data science magic more approachable to others so one can share its&apos; findings and get feedback.

&lt;a&gt;http://multithreaded.stitchfix.com/blog/2015/12/15/d3-jupyter/
&lt;/a&gt;

Bonus - Building interactive dashboards with Jupyter - &lt;a&gt;http://blog.dominodatalab.com/interactive-dashboards-in-jupyter/&lt;/a&gt;

&lt;b&gt;&lt;u&gt;Tl;dr man page&lt;/u&gt;&lt;/b&gt; - given a bash command creates a tldr of the man page. More of a gimmick but a nice one.

&lt;a&gt;http://www.ostera.io/tldr.jsx/&lt;/a&gt;</content:encoded></item><item><title>Surviving Black Friday &amp; Turning Behavioural Signals Into User Profiles</title><link>https://tomron.net/2016/01/07/surviving-black-friday-turning-behavioural-signals-into-user-profiles/</link><guid isPermaLink="true">https://tomron.net/2016/01/07/surviving-black-friday-turning-behavioural-signals-into-user-profiles/</guid><description>I was on a visit in Israel and went to &quot; Surviving Black Friday &amp; Turning Behavioural Signals Into User Profiles &quot; meetup. It is a very long name which…</description><pubDate>Thu, 07 Jan 2016 15:39:15 GMT</pubDate><content:encoded>I was on a visit in Israel and went to &quot;&lt;a&gt;Surviving Black Friday &amp;amp; Turning Behavioural Signals Into User Profiles&lt;/a&gt;&quot; meetup. It is a very long name which actually implying on 2 talks. The meetup took palce in &lt;a&gt;Sears Israel&lt;/a&gt; offices, which is the department behind &lt;a&gt;Shop Your Way&lt;/a&gt;.
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;The first talk - &quot;Surviving Black Friday&quot; was given by &lt;a&gt;Omri Fima&lt;/a&gt; who is a resilience tech lead in Sears. Omri talked about resilience and scalability lessons learned based on Black Friday. Every internet shopping site knows that the traffic is much higher on Black Friday, so how can you prepare and test if your system can deal with such a load? What happens if one service fails? What is a graceful failure and what is less graceful? He presented 7 steps to make your service more stable and mentioned few tools both for testing and development.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Pablo Rosenman, VP Development @ &lt;a&gt;Adience&lt;/a&gt; gave the second talk - &quot;Turning Behavioural Signals Into User Profiles&quot; (&lt;a&gt;slides&lt;/a&gt;, &lt;a&gt;video&lt;/a&gt;). Pablo presented 2 of Adience products - Adience SDK and Events SDK and showed how they use AWS services in their pipeline. He talked about Adience pipeline and what were their main concerns and focus when designing and implementing it - scability, decoupling  and cost effective. In the end he also presented what they would do differently if they would design it today.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;All in all, interesting talks and a very good atmosphere. Looking forward that Omri&apos;s slide will also be available online.&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (13/12/2015)</title><link>https://tomron.net/2015/12/13/5-interesting-things-13122015/</link><guid isPermaLink="true">https://tomron.net/2015/12/13/5-interesting-things-13122015/</guid><description>Systemml - distributed and declarative machine learning platform. Looks like a promising project which now joined Apache Software foundation and was initially…</description><pubDate>Sun, 13 Dec 2015 13:09:39 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Systemml&lt;/u&gt;&lt;/strong&gt;&lt;span style=&quot;color:#000000;font-family:Calibri, Arial, Helvetica, sans-serif&quot;&gt; - &lt;/span&gt;distributed and declarative machine learning platform. Looks like a promising project which now joined Apache Software foundation and was initially developed by IBM. I wonder how it will influence the development of Spark MLLib.

&lt;a&gt;http://systemml.apache.org/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Monopoly as Markov Chain&lt;/u&gt;&lt;/strong&gt; - I guess I am developing a fetish to Markov chains. Although this model is not always realistic (so as in this case..) it is amazing what we can get out of it and the approximate simulations we can create. This post simulates a Monopoly game using Markov chains and does a very interesting job. Monopoly is linear in the sense that you must move according to the dice and the choices you make are limited (buy or don&apos;t buy). In contrast to backgammon where you also have strategy involved and therefore it is a better choice to model it with Markov chains.

&lt;a&gt;http://koaning.io/monopoly-simulations.html&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;strong&gt;&lt;u&gt;Vocabulary&lt;/u&gt;&lt;/strong&gt;&lt;span style=&quot;color:#000000;font-family:Calibri, Arial, Helvetica, sans-serif&quot;&gt; - &lt;/span&gt;&quot;Python Module to get Meanings, Synonyms and what not for a given word&quot;. This module brands itself as an alternative to NLTK presenting data about meaning, synonyms, antonyms, part of speech, pronunciation, etc with a leaner approach and more pythonic approach. I don&apos;t know if is as good and NLTK or will evolve there but it sure looks like an alternative worth checking.

&lt;a&gt;http://vocabulary.readthedocs.org/en/latest/
&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Probability recap&lt;/strong&gt;&lt;/span&gt; - If you forgot probability class from university this will probably be a good recap. However, if you work as a data scientist you probably used those daily. But code visualization, good examples and good way to share your knowledge with other colleagues.

&lt;a&gt;http://blog.cloudera.com/blog/2015/12/common-probability-distributions-the-data-scientists-crib-sheet/
&lt;/a&gt;

&lt;b&gt;&lt;u&gt;What we talk about when we talk about distributed systems&lt;/u&gt;&lt;/b&gt; - for once a non misleading title. Thinking about the distributed systems course I took on grad school this would have been a great introduction.

&lt;a&gt;http://videlalvaro.github.io/2015/12/learning-about-distributed-systems.html&lt;/a&gt;</content:encoded></item><item><title>5 interesting things (1/12/2015)</title><link>https://tomron.net/2015/12/01/5-interesting-things-1122015/</link><guid isPermaLink="true">https://tomron.net/2015/12/01/5-interesting-things-1122015/</guid><description>Improving My CLI&apos;s Autocomplete with Markov Chains - Markov chains are the basis for many auto-complete algorithms we know and use on daily basis, e.g…</description><pubDate>Tue, 01 Dec 2015 13:22:54 GMT</pubDate><content:encoded>&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;b&gt;&lt;u&gt;Improving My CLI&apos;s Autocomplete with Markov Chains&lt;/u&gt;&lt;/b&gt; - Markov chains are the basis for many auto-complete algorithms we know and use on daily basis, e.g keyboards on mobile devices. In this case it is a developer hack to improve auto-complete in a development tool. It is always nice when theory comes to life.

&lt;a&gt;http://nicolewhite.github.io/2015/10/05/improving-cycli-autocomplete-markov-chains.html
&lt;/a&gt;
&lt;b&gt;&lt;u&gt;10 more lessons learned from building Machine Learning systems&lt;/u&gt;&lt;/b&gt; - slides of a presentation by Xavier Amatriain, VP Engineering at Quora (previously Director Algorithms Engineering @Netflix). Very insightful presentation (I would of loved to hear the full one). The name refers to a lecture by Amatriain called &quot;10 lessons learned from building Machine Learning systems&quot;  exactly a year before).

&lt;a&gt;http://www.slideshare.net/xamat/10-more-lessons-learned-from-building-machine-learning-systems
&lt;/a&gt;
&lt;a&gt;http://www.slideshare.net/xamat/10-lessons-learned-from-building-machine-learning-systems&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;u&gt;Beyond One-Hot: an exploration of categorical variables&lt;/u&gt;&lt;/strong&gt; - It is not all about numbers.. in many cases features are not numeric. If we are lucky - features will be binary - has \ does not have a symptom, spam \ not spam or ordinal - amount of pain a patient experiences, etc. But sometimes it is neither - e.g a state, color, etc. What then? this post compare several techniques to deal with categorical variables. While it is very basic it well explained (although examples would have helped) and it can give a great intuition for someone who faces those problems for the first time.

&lt;a&gt;http://willmcginnis.com/2015/11/29/beyond-one-hot-an-exploration-of-categorical-variables/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Bandit Algorithms for Bullying&lt;/u&gt;&lt;/strong&gt; - Getting More Lunch Money - this post explains bandit algorithm using very common, easy to understand example. However, I would build the post a bit different. There is a lot of text telling the story comparing to the scientific parts. In my opinion the scientific parts should be emphasized a bit more (bold text, bullets, etc.)

&lt;a&gt;http://1oclockbuzz.com/2015/11/24/bandit-algorithms-for-bullying-getting-more-lunch-money/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;u&gt;C.H.I.P vs Pi zero&lt;/u&gt;&lt;/b&gt; - The new Pi zero made a lot of buzz in the last week offering a computer for 5$. However, Pi zero is not the only player in the field of sub 10$ computers. This post compares Pi zero and C.H.I.P spec and abilities. There are many comments saying the comparison is biased towards C.H.I.P (ignoring shipping costs, unfair comparison of cable costs, reputation, etc.) but overall I think it is worth reading.

&lt;a&gt;http://makezine.com/2015/11/28/chip-vs-pi-zero/
&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>KNN approximation Apache Spark</title><link>https://tomron.net/2015/11/19/knn-approximation-apache-spark/</link><guid isPermaLink="true">https://tomron.net/2015/11/19/knn-approximation-apache-spark/</guid><description>K-nearest-neighbors is a very well known classification algorithm. It is based on the phrase - &quot;show me who your friends are and I&apos;ll tell you who you are&quot;.…</description><pubDate>Thu, 19 Nov 2015 19:30:31 GMT</pubDate><content:encoded>&lt;p&gt;K-nearest-neighbors is a very well known classification algorithm. It is based on the phrase - &quot;show me who your friends are and I&apos;ll tell you who you are&quot;.&lt;/p&gt;
&lt;p&gt;Apache Spark MLLib contains several algorithms including linear regression, k-means, etc . But it does not currently include an implementation to KNN. One of the reasons for that is the time complexity it requires (roughly n^2 where n is the number of items, ignoring the dimension).
At Apache Spark JIRA you can see 2 tickets involving this issue - &lt;a&gt;SPARK-2335&lt;/a&gt;, &lt;a&gt;SPARK-2336&lt;/a&gt;. The first ask for KNN feature and discuss the difficulties. The second, open based on the first, discuss approximations to KNN and wish to implement it.&lt;/p&gt;
&lt;p&gt;I implemented a very naive approximation to KNN algorithm on Apache Spark with a distance function of similarity (looking for max) rather hen euclidian but this can be easily changed (change distance function and change sorting key in line 71).&lt;/p&gt;
&lt;p&gt;The algorithm is based on splitting the data to partitions and calculating item distances only in the same partition. You can increase the accuracy either by decreasing the number of partitions (compare to more items) or by repeating the process several times (repartition differently every time) and choose the best results.&lt;/p&gt;
This calculation retrieves the list of the most similar neighbors and then one can decide how to use this data.
&lt;p&gt;My gist - &lt;a&gt;https://gist.github.com/tomron/70e5fefe128214b7d2a1&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (15/11/2015)</title><link>https://tomron.net/2015/11/15/5-interesting-things-15112015/</link><guid isPermaLink="true">https://tomron.net/2015/11/15/5-interesting-things-15112015/</guid><description>Counting things in Python - This post spotlights very nicely and simple how Python and Pythonic writing changed over the years. One of the interesting things…</description><pubDate>Sun, 15 Nov 2015 15:15:25 GMT</pubDate><content:encoded>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Counting things in Python&lt;/u&gt;&lt;/b&gt; - This post spotlights very nicely and simple how Python and Pythonic writing changed over the years. One of the interesting things in this post is the analogy to natural languages. Natural languages also changes and evolve over time - slang, new phrases, out-dates expressions etc. and apparently so is programming languages.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;

&lt;a&gt;http://treyhunner.com/2015/11/counting-things-in-python/&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;b&gt;&lt;u&gt;Travelling Beer drinker problem&lt;/u&gt;&lt;/b&gt; - Figuring out the shortest road trip path to visit best microbreweries in US. Finally a good use to the travelling sales man problem :). Data science wise there is not much into this problem - connecting the dots between location data and google API but that is an exciting ground for this connection.

&lt;a&gt;http://flowingdata.com/2015/10/26/top-brewery-road-trip-routed-algorithmically/
&lt;/a&gt;
&lt;b&gt;&lt;u&gt;Hacker news 9 year statistics&lt;/u&gt; &lt;/b&gt;- analysis about Hacker news activities, volume, users and trends over the last 9 years. Interesting specially because it became such a central place to consume technology news.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;

&lt;a&gt;http://debarghyadas.com/writes/looking-back-at-9-years-of-hacker-news/&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Evolving strategies for an iterated Prisoner&apos;s Dilemma tournament&lt;/u&gt;&lt;/b&gt; - I don&apos;t get to read many posts about evolutionary algorithms or practical game theory. So such in in-depth post with python implementation is really refreshing.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://mojones.net/evolving-strategies-for-an-iterated-prisoners-dilemma-tournament.html&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;Visualizing Chess data with ggplot&lt;/u&gt;&lt;/strong&gt; - Although I&apos;m not an R user I love chess (and I&apos;m horrible player) and I loved the analysis&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://jkunst.com/r/visualizing-chess-data-with-ggplot/&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>Five interesting things (25/10/2015)</title><link>https://tomron.net/2015/10/25/five-interesting-things-25102015/</link><guid isPermaLink="true">https://tomron.net/2015/10/25/five-interesting-things-25102015/</guid><description>Whatsapp CLI - control you server using Whatsapp. The next step for me is to connect my home (heating, lights, doors) and control it via Whatsapp. To be honest…</description><pubDate>Sun, 25 Oct 2015 19:19:18 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Whatsapp CLI&lt;/u&gt;&lt;/strong&gt; - control you server using Whatsapp. The next step for me is to connect my home (heating, lights, doors) and control it via Whatsapp. To be honest I assume that some such implementations exists.

&lt;a&gt;https://github.com/KarimJedda/whatsappcli&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Receipt parser&lt;/u&gt;&lt;/b&gt; - A project which was created as part of Trivago Hackathon. I actually thought about the need of this product many times - first for personal accounting, keep an eye on my spending. Second for taking it to the next steps - alerts about things I should buy, alerts for buying things I don&apos;t need and alerts for cheaper prices.&lt;/div&gt;
&lt;a&gt;http://tech.trivago.com/2015/10/06/python_receipt_parser/
&lt;/a&gt;

&lt;b&gt;&lt;u&gt;Time magazine visual trends&lt;/u&gt;&lt;/b&gt; - good ideas are priceless and when the implementation is also clean, nice and reveals interesting insights it is even more exciting.

&lt;a&gt;http://www.pyimagesearch.com/2015/10/19/analyzing-91-years-of-time-magazine-covers-for-visual-trends&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Google spreadsheet to ElasticSearch&lt;/u&gt;&lt;/strong&gt; - to tell the truth, I could not think of a worse architecture than to use Google spreadsheet as a database (or a proxy in the way to a DB). Having said that, Elastic release a google spreadsheet plugin to import spreadsheet content to ElasticSearch instance.

&lt;a&gt;https://www.elastic.co/blog/introducing-google-sheets-to-elasticsearch-add-on&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Snakefooding python&lt;/u&gt;&lt;/strong&gt; - snakefood is a tool to create graph dependencies. This post show the dependency graphs for some very common python libraries (Flask, django, Celery, requests, etc.). It presents the pros and cons of using snakefood, what it exposes and what it does not expose (many small files -&amp;gt; many imports -&amp;gt; complex dependency graph vs one file, spaghetti code -&amp;gt; no imports -&amp;gt; very clear simple graph). I find it as a tool that supports developing and detecting non necessary dependencies.

&lt;a&gt;http://grokcode.com/864/snakefooding-python-code-for-complexity-visualization/&lt;/a&gt;</content:encoded></item><item><title>AWS loft Berlin</title><link>https://tomron.net/2015/10/16/aws-loft-berlin/</link><guid isPermaLink="true">https://tomron.net/2015/10/16/aws-loft-berlin/</guid><description>This week Amazon opened a loft in Berlin which is suppose to be open for 4 weeks. The loft is currently on pilot and there are several other lofts around the…</description><pubDate>Fri, 16 Oct 2015 18:23:49 GMT</pubDate><content:encoded>&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;This week Amazon opened a &lt;a&gt;loft in Berlin&lt;/a&gt; which is suppose to be open for 4 weeks. The loft is currently on pilot and there are several &lt;a&gt;other lofts&lt;/a&gt; around the world. I think it is a very good strategic call to have it in Berlin as the startup is a emerging and many people want to try and learn more about cloud services while the hands-on experience is sometimes limited.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;So what is going on in the loft? It is open everyday 10-18 and there is amazon employee &quot;in duty&quot; which you can consult with regarding AWS services. A very inviting work space. And workshops, demos, bootcamp, etc. All, of course, related to AWS services.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;I took part in two workshops on Thursday morning - &quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;An overview of Hadoop &amp;amp; Spark, using Amazon Elastic MapReduce&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot; and &quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Processing streams of data with Amazon Kinesis (and other tools)&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&quot;. Both lectures were given by Michael &lt;/span&gt;&lt;span class=&quot;s3&quot;&gt;Hanisch&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;, solution architect at Amazon. The first talk was a bit messy as it covered many topics but eventually ended up jumping here and there between general things about Hadoop, tips about EMR and changes in the AMI concepts and versioning and clues about Spark.&lt;/span&gt;&lt;/p&gt;
&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;The second talk was much more focused. It started by introducing the need to Amazon Kinesis. Then explaining the architecture - producer, streams, shards, clients, clearing up the capabilities and constraints also mentioning &lt;a&gt;kinesis autoscaling utils&lt;/a&gt;.. The next step was a deeper dive to &lt;a&gt;kinesis producer library&lt;/a&gt; and &lt;a&gt;kinesis client library&lt;/a&gt;. Moving forward to &lt;a&gt;kinesis firehose&lt;/a&gt; (which was introduced in the re:invent last week) and integration with additional input and output sources and aws services. &lt;/span&gt;To sum up the talk ended with tips and best practices. &lt;a&gt;AWS Lambda&lt;/a&gt;​ was also mentioned several times over the talk as a tool to process stream data.

&lt;/p&gt;&lt;p class=&quot;p1&quot;&gt;&lt;span class=&quot;s1&quot;&gt;Quite exciting time to be in Berlin.&lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (06/10/2015)</title><link>https://tomron.net/2015/10/06/5-interesting-things-06102015/</link><guid isPermaLink="true">https://tomron.net/2015/10/06/5-interesting-things-06102015/</guid><description>Restaurants recommendations - I read quite a lot about recommendation systems lately and I love this post because it talks about a restaurant domain while many…</description><pubDate>Tue, 06 Oct 2015 22:18:29 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Restaurants&lt;/u&gt;&lt;u&gt; recommendations&lt;/u&gt;&lt;/strong&gt; - I read quite a lot about recommendation systems lately and I love this post because it talks about a restaurant domain while many of the posts related to recommendation system refers to music, television and movies. And geospatial features are very important here comparing to movie, music and television recommendations.

&lt;a&gt;http://www.slideshare.net/SudeepDasPhD/recsys-2015-making-meaningful-restaurant-recommendations-at-opentable&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Data Science workflow&lt;/u&gt;&lt;/strong&gt; - this blog post present a well structured approach to data science process. While I loved the structured approach the entry point - &quot;get data, have fun with it&quot; is twisted. I believe that when working on a product most of the time you will want to solve a problem or introduce a new feature, i.e. you already have the question you want to answer rather than explore a dataset and think about the questions you can answer with it. Also missed part of documenting you work.

&lt;a&gt;http://blog.binaryedge.io/2015/09/08/the-data-science-workflow/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;AWS in plain English&lt;/u&gt;&lt;/strong&gt; - or AWS for humans. If you are not that yet or not familiar with the different services this is a nice way to introduce the terminology.

&lt;a&gt;https://www.expeditedssl.com/aws-in-plain-english&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Fedrer vs Djokovic&lt;/u&gt;&lt;/strong&gt; - why not Nadal? it seem kind of abuse in the product but for sure it exposes the product and make some buzz.

&lt;a&gt;https://www.elastic.co/blog/building-dashboards-using-data-from-the-federer-&amp;amp;-djokovic-tennis-rivalry&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;What to do with small data&lt;/u&gt;&lt;/strong&gt; - big data is one of the buzz words in the last few years. While it was previously whispered only by tech people it is now a common, well known phrase. But, many companies do not really have big data, they have few users and need to perform well for those users and one day they might have big data, many users and tons of features. Until then, there are some clues in this post.

&lt;a&gt;https://medium.com/rants-on-machine-learning/what-to-do-with-small-data-d253254d1a89&lt;/a&gt;</content:encoded></item><item><title>#dmconf15</title><link>https://tomron.net/2015/09/19/dmconf15-2/</link><guid isPermaLink="true">https://tomron.net/2015/09/19/dmconf15-2/</guid><description>I got a free ticket to distributed matters conference winning the challenge of the python big data analytics meetup group. The line up was impressive…</description><pubDate>Sat, 19 Sep 2015 20:13:06 GMT</pubDate><content:encoded>&lt;p&gt;I got a free ticket to&lt;a&gt; distributed matters&lt;/a&gt; conference winning the challenge of the &lt;a&gt;python big data analytics&lt;/a&gt; meetup group. The line up was impressive (including &lt;a&gt;Kyle Kingsbury&lt;/a&gt; from project &quot;call me maybe&quot;), the topics were very interesting and the location was very nice (first time I hear a talk in a disco party hall) and close to my house, perfect match. Due to earlier commitments I could only stay half of the day but what a day :)&lt;/p&gt;
Starting with Kyle Kingsbury (&lt;a&gt;Stripe&lt;/a&gt;) as a key note talking about &quot;call me maybe&quot; and the &lt;a&gt;jepsen&lt;/a&gt; test. The basic setup of the test is creating a cluster of some database, injecting random events (read, write, update, query, etc) and verify the database behavior. Next level include injecting all kind of failures - network errors, node pause, etc. Following the description of the test Kingsbury gave a brief summary of the results. Project &quot;call me maybe&quot; result creates pressure on the different database vendors to improve their products and align with the promises they make. It definitely serve as the watch dog of this industry. It is sometime amazing how not tested some products are.
&lt;p&gt;The sentence I took with me from his talk is the choosing a database is a contract and you should check all the relevant aspects of it. Settings, complexity and needs sometimes change over time but as long as the initial contract is honored no complains.&lt;/p&gt;
The second talk I went to was &lt;a&gt;Michael Hackstein&lt;/a&gt;&apos;s (&lt;a&gt;ArangoDB&lt;/a&gt;) talk &quot;NoSQL meets microservices&quot;. Hackstein presented a problem of multiple calls to multiple databases where each answer different need and presented the solution - multi-model NoSQL database. Single call can answer all needs. ArangoDB is an example of such a database, &lt;a&gt;OrientDB&lt;/a&gt; is also a major competitor. The problem multi-model database might be phrased as just multi-model data. I.e. documents data, graph data, key-value data, etc (see footnote 1).

The rest of the talk focused on ArangoDB different features -
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;foxx&lt;/a&gt; - REST API over the database which works as a microservice.&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;drivers&lt;/a&gt; - including python, php, java, js, ruby, etc.&lt;/li&gt;
	&lt;li&gt;&lt;a&gt;AQL&lt;/a&gt; - ArrangoDB query language&lt;/li&gt;
&lt;/ul&gt;
Next talk was given by &lt;a&gt;Charity Majors&lt;/a&gt; (&lt;a&gt;Parse&lt;/a&gt; - acquired by Facebook) as she introduced herself - &quot;hate software for living&quot;. This talk was really really great one. Majors is super experienced, worked with many technologies and very charismatic. She spoke about her many years experience about upgrading databases. Sound easy? well.. not that much. Stepping a step back, why would you want to upgrade a database - new feature, improved preformance, bug fixing, etc.. So what can go wrong? well, many things. From down time, losing data, losing transactions, different hashing and indexing, optimization which are not optimized to your data, changes in clients, and much more fun. Good news  - you have enough interesting and important data to care for.
&lt;p&gt;What should you do about it? tl;dr - be paranoid. Longer version -&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Change only one component at a time&lt;/li&gt;
	&lt;li&gt;read the docs, change logs, release notes (also mentioned by Kyle Kingsbury)&lt;/li&gt;
	&lt;li&gt;Don&apos;t believe to database vendors benchmarks, test it for your expected load (if you can expected it, another painful point) - at least 24h data, make sure to clear the cache.&lt;/li&gt;
	&lt;li&gt;Take consistent snapshots&lt;/li&gt;
	&lt;li&gt;Prepare for rollback option.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I really hope her slides will be published soon since it was a very informative talk.&lt;/p&gt;
Tour de Force: Stream Based Textanalysis by &lt;a&gt;Hendrik Saly&lt;/a&gt;, &lt;a&gt;Stefan Siprell&lt;/a&gt; (&lt;a&gt;codecentric&lt;/a&gt;).

This talk was classified as expert level and I expected it to a bit more then what it actually was. Many buzzwords were thrown around - R, machine learning, twitter, Apache spark, elasticsearch, kibana, aws, etc. but the big picture, how those technologies relate to each, what are the alternatives. For example, for the goal of enriching the data R can be easily replaced with python. Or in order to read from twitter why use files and not use Spark streaming capabilities (or some queue). Beside Kibana being a great and easy to use tool, preferring Elasticsearch over other options was not clear. To sum up - I also missed some reference to the distributed properties of those tools. This is the reason we were all there after all, not?
&lt;p&gt;Footnotes&lt;/p&gt;
1 Multi-model data is just a way of thinking of about data structures in patterns we are used to. Maybe there are other more efficient way to think of this data?
&lt;p&gt;2. Sponsor wise - on one hand there were few sponsors that didn&apos;t give any talk, for example idealo. On the other hand there were few companies I expected to sponsor the conference, i.e &lt;a&gt;crate.io&lt;/a&gt;, Elastic, mongodb which was mentioned a lot but unfortunately didn&apos;t give any dedicated talk.&lt;/p&gt;
&lt;p&gt;3. Database vendors business models. I think that the most popular model as of today is to develop a database, possibly oen source (elasticsearch, ArangoDb etc.) and make money from supporting it. Is there any other way to make money from database vendoring those days (hosting is not included under vendoring).&lt;/p&gt;
&lt;p&gt;4. Diversity in tech - I saw no more than 5 women in the crowd.&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (11/9/2015)</title><link>https://tomron.net/2015/09/11/5-interesting-things-1192015/</link><guid isPermaLink="true">https://tomron.net/2015/09/11/5-interesting-things-1192015/</guid><description>Density based clustering - the clearest and most practical guide I read about density based clustering.…</description><pubDate>Fri, 11 Sep 2015 12:28:40 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Density based clustering&lt;/u&gt;&lt;/strong&gt; - the clearest and most practical guide I read about density based clustering.

&lt;a&gt;http://blog.dominodatalab.com/topology-and-density-based-clustering/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Word segment&lt;/u&gt;&lt;/strong&gt; - this python library which is train with over a trillion-word corpus aims to help segment text to words. E.g &quot;thisisatest&quot; to &quot;this is a test&quot;. I tried a random example -&quot;helloworld&apos; and it didn&apos;t split it at all. I tried other examples as well (&quot;mynameis&amp;lt;x&amp;gt;&quot;, &quot;ilivein&amp;lt;y&amp;gt;&quot;, etc) and it worked well. Beside the segmentation functionality it also offers unigrams and bigrams counting this can be usable for all kind of applications without the need to get the data, clean it and process it yourself. Numbers do not appear in the unigram count, I find it interesting for other needs rather than splitting.

&lt;a&gt;http://www.grantjenks.com/docs/wordsegment&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Funny haha?!&lt;/u&gt;&lt;/strong&gt; Predicting if a joke is funny or not based on the words it contains using Naive Bayes classifier from NLTK package. It is a good and funny beginners tutorial. NLTK contains additional classifiers beside Naive Bayes Classifier, e..g Decision Tree Classifier, it would also be interesting to see how they preform on this dataset.

&lt;a&gt;http://vknight.org/unpeudemath/code/2015/06/14/natural-language-and-predicting-funny/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Scaling decision forests lessons learned&lt;/u&gt;&lt;/strong&gt; - some of those lessons are specific to decision forests, some are for scaling and some are general good practices. I wish there was a more found discussion about dealing with missing data \ features. Not specifically in this post but in general.

&lt;a&gt;http://blog.siftscience.com/blog/2015/large-scale-decision-forests-lessons-learned&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Redshift howto&lt;/u&gt;&lt;/strong&gt; - very extensive guide to redshift, mostly admin and configuration related stuff. I miss another chapter regarding tools above redshift such as &lt;a&gt;re:dash&lt;/a&gt;.

&lt;a&gt;https://www.periscope.io/amazon-redshift-guide&lt;/a&gt;</content:encoded></item><item><title>5 interesting things (05/09/2015)</title><link>https://tomron.net/2015/09/05/5-interesting-things-05092015/</link><guid isPermaLink="true">https://tomron.net/2015/09/05/5-interesting-things-05092015/</guid><description>Time map visualization of discrete event - Very good idea for visualization of discrete events when the order of events is not important but rather the general…</description><pubDate>Sat, 05 Sep 2015 13:22:00 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Time map visualization of discrete event&lt;/u&gt;&lt;/strong&gt; - Very good idea for visualization of discrete events when the order of events is not important but rather the general pattern. Good to visualize time between failures, time between visits of users in site \ user actions, etc.

&lt;a&gt;https://districtdatalabs.silvrback.com/time-maps-visualizing-discrete-events-across-many-timescales&lt;/a&gt;

&lt;b&gt;&lt;u&gt;Cyber attacks map&lt;/u&gt;&lt;/b&gt; - so cool

&lt;a&gt;http://map.norsecorp.com/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Why different people think different&lt;/u&gt;&lt;/strong&gt; - the actual title of this post is &quot;Why a Mathematician, Statistician, &amp;amp; Machine Learner Solve the Same Problem Differently&quot; but I think it misses in many aspects. First, the comparison is a bit shallow ignoring non parametric statistics, machine learning models with hyper-paremeters, etc.  Machine does make assumptions on the data - by choosing the features you use (even if they&apos;ll eventually assigned with weight of 0) you make assumption about the data. Moreover, choosing the model, kernel etc. assumes something regarding the features&apos; distribution.

Researchers, data scientist, statisticians, people think differently. Some of them tend to use tools they know and worked for them before, some of them want to use new tools and ideas. I believe the people with same education (ML, statisticians, etc) but from different sources \ institutes will also have different approaches no matching the theorem in this post.

&lt;a&gt;http://www.galvanize.com/blog/2015/08/26/why-a-mathematician-statistician-machine-learner-solve-the-same-problem-differently-2&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Spreadsheets are graphs?&lt;/u&gt;&lt;/strong&gt; I like this post because it presents some fresh spirit to a painful problem we all experience - sharing documents \ [reserving knowledge. In almost every organizations there are all kind of documents (spreadsheets, word documents, presentations, RFPs, etc.) but it is almost never connected among them and almost always a mess. So this is another angle too look on this problem.

&lt;a&gt;http://neo4j.com/blog/spreadsheets-are-graphs-too/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Cross validation done wrong&lt;/u&gt;&lt;/strong&gt; - things that are clear when thinking about them but we don&apos;t usually spend time thinking on them. The bottom line is always isolate completely between your training set to the cross validation and test sets.

&lt;a&gt;http://www.alfredo.motta.name/cross-validation-done-wrong/&lt;/a&gt;</content:encoded></item><item><title>Apache Flink workshop</title><link>https://tomron.net/2015/09/04/apache-flink-workshop/</link><guid isPermaLink="true">https://tomron.net/2015/09/04/apache-flink-workshop/</guid><description>On Wednesday I took part in &quot; Stream Processing with Apache Flink &quot;. The workshop was hosted by Carmeq and was super generous. Apache Flink is a distributed…</description><pubDate>Fri, 04 Sep 2015 13:25:51 GMT</pubDate><content:encoded>&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;On Wednesday I took part in &quot;&lt;a&gt;Stream Processing with Apache Flink&lt;/a&gt;&quot;. The workshop was hosted by Carmeq and was super generous.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;Apache Flink is a distributed streaming dataflow engine. There are several obvious competitors including Apache Spark, Apache storm and MapReduce (and possible apache tez).&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;The main question for me when coming to adopt a new tool is why it is better than what I already use, which problems that it solves for me.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt;Apache Flink&apos;s main advantages comparing to Apache Storm is the batch capabilities, support windowing and exactly once guarantee. Apache storm is designed for event processing, i.e. streaming data. The streaming window allow very easy and native aggregation by both time and capacity windows.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt;Advantages comparing to MapReduce are strong support of pipelines and iterative jobs as well as many types of data - Flink is more high level than MR. And of course the streaming.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt;Comparing to Apache Spark, the implementation of spark streaming is different and is implemented as small batches. Apache Spark is limited by memory size which Flink is less sensitive to it. However, I think Spark has a very big advantage at the moment by having API&apos;s to R and Python (in addition to Scala and Java) which are very common for data scientist while Flink currently supports only Scala and Java.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt;Both Spark and Flink has Graph (Graphx and Gelly) and machine learning (MLLib and FlinkML) support which make them much more friendlier and high level than both MapReduce and Storm.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;I think both Spark and Flink have a lot of things in common and knowing one it is relatively easy to switch to the other. Currently Apache spark is much more popular - &lt;a&gt;2273&lt;/a&gt; results vs &lt;a&gt;59&lt;/a&gt; results on stackoverflow and 8270000 results vs 363000 on google.&lt;/span&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt;For further reading - &lt;a&gt;flink overview&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt;The workshop focused on flink and we went through the slides and exercises in the &lt;a&gt;flink training site&lt;/a&gt;. There were few issues - bugs, java version, flink version issues but it was generally well organized and the guides were eager to help and to explain.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#252525;font-family:arial, helvetica, sans-serif&quot;&gt;Related links - &lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;span style=&quot;color:#252525&quot;&gt;&lt;a&gt;Interview with &lt;/a&gt;&lt;/span&gt;&lt;a&gt;Matei Zaharia, creator of Apache Spark&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;a&gt;Flink forward conference&lt;/a&gt; - in Berlin next month&lt;/span&gt;&lt;/li&gt;
	&lt;li&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;a&gt;Flink meetup Berlin&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>5 interesting things (26/08/2015)</title><link>https://tomron.net/2015/08/26/5-interesting-things-26082015/</link><guid isPermaLink="true">https://tomron.net/2015/08/26/5-interesting-things-26082015/</guid><description>Best programming language ever!!!!!1 - I really agree with this guy approach and the way he presents it. No better tool but better choices.…</description><pubDate>Wed, 26 Aug 2015 17:12:00 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Best programming language ever!!!!!1&lt;/u&gt;&lt;/strong&gt; - I really agree with this guy approach and the way he presents it. No better tool but better choices.

&lt;a&gt;http://coding-geek.com/the-best-programming-language/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Apache Spark @ TripAdvisor&lt;/u&gt;&lt;/strong&gt; - the title of this post is &quot;Using Apache Spark for Massively Parallel NLP&quot; but this is a bit misleading. Apache Spark is discussed only in the last third of the post and does not dive to the technical details as I expected or how Spark integrates with the rest of their architecture. However, the methodology they present regarding asking the users questions and the inherent users&apos; bias he points at. I&apos;ll wait for the next post where he says he will talk more about the algorithm.

&lt;a&gt;http://engineering.tripadvisor.com/using-apache-spark-for-massively-parallel-nlp/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Let me guess where are you from?&lt;/u&gt;&lt;/strong&gt; I love this post because it uses an interesting dataset (a list of people who have Wikipedia pages by country) and he explains the process he did and the tools he used step by step - getting the data, choosing the model, optimizing it, fitting it to production constraints and deploying it. Real pleasure to read.

&lt;a&gt;http://nxn.se/post/127065307170/let-me-guess-where-youre-from&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Do you need a data scientist?&lt;/u&gt;&lt;/strong&gt; I agree with many points in this post - sometimes data science and data engineering is mixed. I think that since &quot;data scientist&quot; become some kind of buzz word organizations might try to attract employees by this title. Regarding the point of having a problem to solve vs wanting to do something cool with data - yes, you have to have a concrete tasks for a person hired as a data scientist but you also have to have time for innovation and vision based on data and not all the time existing employees have those capabilities and knowledge.

&lt;a&gt;http://yanirseroussi.com/2015/08/24/you-dont-need-a-data-scientist-yet/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;AWS CLI Jungle&lt;/u&gt;&lt;/strong&gt; - this tool is kind of a wrapper to AWS CLI which wants to make it more intuitive. The lack of support in wild cards disturbs me as a user and I am glad they solve it. It currently implements functionality for ec2 and elb, I hope they will also implement s3 functionality soon.

&lt;a&gt;https://github.com/achiku/jungle&lt;/a&gt;</content:encoded></item><item><title>Redmonk programming language ranking</title><link>https://tomron.net/2015/08/24/redmonk-programming-language-ranking/</link><guid isPermaLink="true">https://tomron.net/2015/08/24/redmonk-programming-language-ranking/</guid><description>I usually don&apos;t find those ranking very interesting but Redmonk ranking which compares between programming languages&apos; popularity on GitHub (by projects) and…</description><pubDate>Mon, 24 Aug 2015 11:39:22 GMT</pubDate><content:encoded>I usually don&apos;t find those ranking very interesting but &lt;a&gt;Redmonk&lt;/a&gt; ranking which compares between programming languages&apos; popularity on GitHub (by projects) and popularity on Stack Overflow (by questions) was interesting for me.

What can we see in the chart below - very popular language (Java, Python, JavaScript, PHP) are very close to the y=x line - popularity on GitHub is almost the same as their popularity in Stack Overflow. Other languages which are very close to this line are - R, perl, Scala, Shell, Objective-C.

Languages that are below the line are languages that are more popular in GitHub the in Stack Overflow.Very extreme example in this category is VimL (vim script). Why is that? one possible reason for that is that those languages are very well documented or that those languages have very limited use cases so the question scope is restricted. Another possible reason is the belief that there is no community, therefore people don&apos;t ask questions and don&apos;t get answers or ask in under another tag. For example VimL questions are sometimes asked with Vim tag and without VimL tag or a vimscript question. See this &lt;a&gt;search&lt;/a&gt;.

The languages above the line are languages which are more popular in Stack Overflow than in Github. Why is that? the opposite reasons - languages which are not documented very well or add new features frequently and therefore users have many questions about it. Another possibility is very common languages that are taught in the university and therefore many students which are not very experience ask a lot about them. A very extreme example for that is SQL. As well, XML is not a programming language and mostly used for configuration so it is quite clear why there are no projects in GitHub that are strictly XML. I think that both XQuery and DOT are above the line from the same reason.

It was therefore surprising for me to see CSS very close to the line (btw could find HTML in the chart) but it possibly depends on the methodology of counting GitHub projects.

Some of the languages are not really programming languages but rather a technology, e.g. Arduino, DOT, xml. It would be also interesting to see such a comparison to general technologies which are not programming languages - MongoDB, Elasticsearch, hadoop, etc. And to see it overtime - maybe documentation gets better, technology reaches to a stable state, etc.

&lt;img class=&quot;aligncenter&quot; src=&quot;http://jgovernor-media.redmonk.com/jgovernor/files/2015/07/summer-2015-rankings.png&quot; alt=&quot;&quot; width=&quot;1020&quot; height=&quot;723&quot; /&gt;</content:encoded></item><item><title>Is Python random really random?</title><link>https://tomron.net/2015/08/20/is-python-random-really-random/</link><guid isPermaLink="true">https://tomron.net/2015/08/20/is-python-random-really-random/</guid><description>The question I started with, as the title states, was quite simple - &quot;is python random really random&quot;? Let&apos;s divide the question to two - python random and…</description><pubDate>Thu, 20 Aug 2015 12:21:57 GMT</pubDate><content:encoded>The question I started with, as the title states, was quite simple - &quot;is python random really random&quot;?

Let&apos;s divide the question to two - python random and really random.

&lt;a&gt;Python random&lt;/a&gt; - a module from python standard library which implements pseudo-random number generators for various distributions. This module allows one to generate random integers in a given range, shuffle a sequence, take a sample from the sequence and so on. This post is a sanity check of whether I can trust python random or not.

Really random - this is matter of statistics. If we have a coin and we tossed it 10 times and got 4 times head and 6 times tails what is our confidence that this coin is really fair? And if we got 8 times head and 2 times tails? or if we tossed it 100 times and got 40 times head and 60 times tails?

So of course the bigger the sample is the higher the confidence we have whether the coin \ dice \ generator is random or not. This test actually asks if a random sequence python random produces has a mean like a &quot;real&quot; random distribution. A repeating sequence of 0, 1, 0, 1, ... will pass this test but it is clearly not random.

[code language=&quot;python&quot;]
from random import randint
from collections import Counter
from math import sqrt, exp

sizes = [10, 100, 1000, 10000, 100000]

def normpdf(x, mean, sd):
 var = float(sd)**2
 pi = 3.1415926
 denom = (2*pi*var)**.5
 num = exp(-(float(x)-float(mean))**2/(2*var))
 return num/denom

COIN_SIDES = 2
for size in sizes:
 sample = Counter([randint(1, COIN_SIDES) 
 for i in xrange(0, size)])
 expected_mean = size / COIN_SIDES
 expected_variance = size * \
 (1.0 / COIN_SIDES) * \
 (1 - 1.0/COIN_SIDES)
 expected_stdev = sqrt(expected_variance)
 p = 100 * normpdf(max(sample.values()), 
 expected_mean, expected_stdev)
 q = 100 * normpdf(min(sample.values()), 
 expected_mean, expected_stdev)
 print &quot;size: %s, p(observed_mean &amp;gt; %s) = %s%%&quot;\
 %(&quot;{0:.3f}&quot;.format(1.0/COIN_SIDES),
 size, &quot;{0:.3f}&quot;.format(p))
 print &quot;size: %s, p(observed_mean &amp;lt; %s) = %s%%&quot;\
 %(&quot;{0:.3f}&quot;.format(1.0/COIN_SIDES),
 size, &quot;{0:.3f}&quot;.format(q))
 print &quot;samples: %s&quot;%sample
[/code]

And the output - for sample size 100000 the probability that the observed mean is greater \ less than 0.5 is 0.251%. For p-value of 5%, i.e. the probability that the probability is less or great than 0.5 sample of size 1000+- is enough.

As said before, it is a small sanity check but it passed it well.</content:encoded></item><item><title>5 interesting things (20/08/2015)</title><link>https://tomron.net/2015/08/20/5-interesting-things-20082015/</link><guid isPermaLink="true">https://tomron.net/2015/08/20/5-interesting-things-20082015/</guid><description>Beautiful Lies - in the good case charts can be unclear due to too much data, no distinct colors, missing labels etc. in a worse case it can be miss leading.…</description><pubDate>Thu, 20 Aug 2015 11:18:20 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Beautiful Lies&lt;/u&gt;&lt;/strong&gt; - in the good case charts can be unclear due to too much data, no distinct colors, missing labels etc. in a worse case it can be miss leading. Few tips and example of such -
&lt;p&gt;&lt;a&gt;http://flowingdata.com/2015/08/11/real-chart-rules-to-follow&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;&lt;u&gt;RDBMS under the hood&lt;/u&gt;&lt;/strong&gt; - a big part of this post deals with complexity and data structures. This introduction provides the ground to the rest of the post about different processes in the RDBMS, their costs and different optimizations. While I learned a big part of the post content as an undergraduate I wish I would also learn the more interesting part about optimizations.
&lt;p&gt;&lt;a&gt;http://coding-geek.com/how-databases-work/
&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;&lt;u&gt;Scaling and sharding @ &lt;/u&gt;&lt;u&gt;pinterest&lt;/u&gt;&lt;/strong&gt; - another link to a post about RDBMS. RDBMS is sometimes considered less sexy comparing to NoSQL, bigdata fancy solutions. This post explains why pinterest chose MySQL as their data warehouse solution and how they scale it. Comparing to the mambo jambo that happen in many companies the fact that this solution works for the for 3 years now is amazing.
&lt;p&gt;&lt;a&gt;https://engineering.pinterest.com/blog/sharding-pinterest-how-we-scaled-our-mysql-fleet/&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;&lt;u&gt;What python cannot do&lt;/u&gt;&lt;/strong&gt; - I was actually very optimistic about this post but ended up a bit disappointed. Some of the points it points on are relevant and the other I find less relevant. By less relevant points I refer to other programming languages with the same disadvantages  - java and issues with versions. Several python modules lack good support  - really? everywhere there is an open source (and also where there are commercial packages) documentation and quality are never perfect. &quot;Errors can be identified only on run time&quot; - dynamic typing can be both a pro and a con of python, it is a feature of the language. &quot;Slower than other compiled languages&quot; - this is miss leading as python is not compiled and comparing it C++ and C is weird.

&lt;a&gt;http://www.allaboutweb.biz/what-is-it-that-python-cannot-do/&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Visual tutorial of Kalman filters&lt;/u&gt; &lt;/b&gt;- very interesting and well explained tutorial about Kalman filters.&lt;/div&gt;
&lt;p&gt;&lt;a&gt;http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (17/08/2015)</title><link>https://tomron.net/2015/08/17/5-interesting-things-17082015/</link><guid isPermaLink="true">https://tomron.net/2015/08/17/5-interesting-things-17082015/</guid><description>Hello Dask - Dask is a few month old addition to the PyData toolbox. It aims to enable light-weighted parallel computation. The idea behind it is that it…</description><pubDate>Mon, 17 Aug 2015 20:14:46 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Hello Dask&lt;/u&gt;&lt;/strong&gt; - &lt;a&gt;Dask&lt;/a&gt; is a few month old addition to the PyData toolbox. It aims to enable light-weighted parallel computation. The idea behind it is that it produces a graph, which describes a data flow and is lazily evaluated. In this post Jake VanderPlas presents his usage of Dask on OpenStreetMap data and refer to &lt;a&gt;Rob Story&lt;/a&gt; talk from PyData conference which presents the several tools in the PyData eco-system and big data tools (I usually don&apos;t have patience to see technical videos but this one is great).

&lt;a&gt;https://jakevdp.github.io/blog/2015/08/14/out-of-core-dataframes-in-python/&lt;/a&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Benchmarks for ML implementations&lt;/u&gt;&lt;/strong&gt; - Comparing between several open source implementations of machine learning algorithms for binary classification task. The data-set which was used for this task was the airlines data-set and the task was to predict whether a flight was delayed in more than 15 minutes. Results are interesting in several levels - the influence of bigger training set, scalebility of tools - Python fails on big training data, empirical comparison between different algorithms.&lt;/p&gt;
&lt;a&gt;https://github.com/szilard/benchm-ml&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Folium&lt;/u&gt;&lt;/strong&gt; - I have recently created some visualization based on geo-data and looked for the perfect (preferably python) tool for it. Matplotlib have basemap and I could also use some porting to d3.js or vincent but for all of them maps \ geo-data is just another type of data like bar chart and pie chart. Folium which is a wrapper of Leaflet.js focuses on interactive maps and does it well.

&lt;a&gt;https://github.com/python-visualization/folium&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Graph Databases for Beginners: Data Modeling Pitfalls to Avoid&lt;/u&gt;&lt;/strong&gt; - Everything in this post is true and the pitfalls described there are indeed pitfalls when modeling data but I don&apos;t think they are unique pitfalls to graph database, they are also relevant to relational models.
&lt;p&gt;&lt;a&gt;http://neo4j.com/blog/data-modeling-pitfalls/&lt;/a&gt;&lt;/p&gt;
&lt;strong&gt;&lt;u&gt;Data driven city&lt;/u&gt;&lt;/strong&gt; - I&apos;m fascinated by how public data can help improve the life of all of us. It can be governmental data about budgets to expose irregularities, data about air pollution, education, etc. This data is exists in most governments, government offices and municipalities and need to be formatted and clean. A work to put and maintain but it may be profitable. This field might not seem attractive to many entrepreneurs because it is not strictly business but there are many cities around the world fighting the same difficulties. I believe that the next big jump there is yet to be made and this post is one example of it.
&lt;p&gt;&lt;a&gt;http://blog.dominodatalab.com/optimizing-chicagos-services-with-the-power-of-analytics/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (10/08/2015)</title><link>https://tomron.net/2015/08/10/5-interesting-things-10082015/</link><guid isPermaLink="true">https://tomron.net/2015/08/10/5-interesting-things-10082015/</guid><description>rrrepo - at first glance it looked me like a checklist site and then I understood it is a repository of links. I tried to register, explore and create a site…</description><pubDate>Mon, 10 Aug 2015 15:17:41 GMT</pubDate><content:encoded>&lt;div&gt;&lt;strong&gt;&lt;u&gt;rrrepo&lt;/u&gt;&lt;/strong&gt; -  at first glance it looked me like a checklist site and then I understood it is a repository of links. I tried to register, explore and create a site and I think they have many usability issues, some issue for example -&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;After registering I expected to get some mail confirming my registration and to automatically log into the site. It was unclear how to log into the site.&lt;/li&gt;
	&lt;li&gt;Wanted to create a repo in the name which already exists, wanted to navigate to it but I was redircted to somewhere else.&lt;/li&gt;
	&lt;li&gt;Exploring new repositories is not very clear.&lt;/li&gt;
	&lt;li&gt;Privacy settings.&lt;/li&gt;
	&lt;li&gt;When logged in, user is redirected to the news feed and cannot visit the home page or log out.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;I have a bit of dejavu to urli.st which was closed a while ago but with a nicer UI. It is currently on very very early stage and many improvements to be done.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://rrrepo.co/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;&lt;br /&gt;Data Science blog list&lt;/u&gt;&lt;/strong&gt; - I was like to explore new ideas and thoughts of others so this is a good starting point. Regarding the previous link (rrrepo) it can be a nice feature to import git repositories like this which is mainly links to a nice dashboard like rrrepo creates.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://github.com/rushter/data-science-blogs
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;Composting music with recurrent neural networks&lt;/u&gt;&lt;/b&gt; - while traditional online music services recommend users existing music maybe we can just generate users new music?&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.hexahedria.com/2015/08/03/composing-music-with-recurrent-neural-networks/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;u&gt;Trust me I&apos;m a data scientist?&lt;/u&gt;&lt;/strong&gt; -  Data scientist often explain their results to colleagues, users, clients which are not familiar with the full terminology of data science but want to make sure they can relay on the presented results. This post can make them trust you&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://lab.getbase.com/is-regression-trustworthy-or-how-to-use-metrics-to-trust-the-prediction-of-regression/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;&lt;br /&gt;Streaming 101&lt;/u&gt;&lt;/strong&gt; - a 2 post series by O&apos;reilly about streaming systems and data. This is only the first post in the series and it is packed with streaming related terminology, ideas and processing patterns. Good jump to the water for newbies.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://radar.oreilly.com/2015/08/the-world-beyond-batch-streaming-101.html&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (8/8/2015)</title><link>https://tomron.net/2015/08/08/5-interesting-things-882015/</link><guid isPermaLink="true">https://tomron.net/2015/08/08/5-interesting-things-882015/</guid><description>Nba shots charts - Well, I&apos;m in love :) I like visualizations, I like sports and this post gives both the motivation and the how -…</description><pubDate>Sat, 08 Aug 2015 10:08:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;u&gt;&lt;b&gt;Nba shots charts&lt;/b&gt;&lt;/u&gt; - Well, I&apos;m in love :) I like visualizations, I like sports and this post gives both the motivation and the how -&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://savvastjortjoglou.com/nba-shot-sharts.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;br /&gt;&lt;strong&gt;NBA players KNN&lt;/strong&gt;&lt;/span&gt; - going on with the sports theme Vik Paruchuri tried to predict the points NBA player will contribute based on his nearest neighbors. I find this analysis a bit missing - first his results are not there, was this process successful or not? He looks for the most similar players to Lebron James but does not show who they are, for me that&apos;s interesting to know, some gut feeling about the result. He uses only numeric columns which is ok, but there are also categorical variables (e.g position), why does he use them as well \ how can he use them in the future? And last but not least some visualization - for each player show me the KNN, some histogram regarding the prediction vs true values. Something.. I feel he wrote only half a post..&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://www.dataquest.io/blog/k-nearest-neighbors&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;Rpython and pandasshell&lt;/u&gt;&lt;/b&gt; - as I see it both tools make a step toward the other. That&apos;s an interesting questions whether they both survive. As a software developer I don&apos;t usually see that need to switch to R.

&lt;a&gt;https://github.com/robdmc/pandashells&lt;/a&gt;

&lt;a&gt;http://kirbyfan64.github.io/posts/the-magic-of-rpython.html&lt;/a&gt;

&lt;a&gt;http://rpython.readthedocs.org/en/latest/&lt;/a&gt;

&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Wining as a service&lt;/u&gt;&lt;/strong&gt; - twitter vs twitter, using twitter power (+ coding + creativity :) to win only twitter lotteries and competitions.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.hscott.net/twitter-contest-winning-as-a-service/
&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;u&gt;Engineers to managers&lt;/u&gt;&lt;/strong&gt; - this post aroused too much thoughts to TL;DR it in only few sentences. I&apos;m not sure it the timeline is correct or if I&apos;ll adopt it myself but the ideas and changes about becoming a manager are inspiring and real food for thought for me.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://firstround.com/review/this-90-day-plan-turns-engineers-into-remarkable-managers/&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>Music Information Retrieval from a Multicultural Perspective</title><link>https://tomron.net/2015/08/07/music-information-retrieval-from-a-multicultural-perspective/</link><guid isPermaLink="true">https://tomron.net/2015/08/07/music-information-retrieval-from-a-multicultural-perspective/</guid><description>Yesterday I attended a &quot; Music Information Retrieval from a Multicultural Perspective &quot; meetup in SoundCloud offices. It was one of the most thought provoking…</description><pubDate>Fri, 07 Aug 2015 09:44:08 GMT</pubDate><content:encoded>Yesterday I attended a &quot;&lt;a&gt;Music Information Retrieval from a Multicultural Perspective&lt;/a&gt;&quot; meetup in SoundCloud offices. It was one of the most thought provoking meetups I have attended in a long time. Prof &lt;a&gt;Xavier Serra&lt;/a&gt;, who gave the talk has a lot of experience with Music Information Retrieval and with community projects along with industrial projects - &lt;a&gt;dunya&lt;/a&gt;, &lt;a&gt;acousticbrainz&lt;/a&gt;, &lt;a&gt;compmusic&lt;/a&gt; and more.
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;For me music information retrieval is completely new domain. I had several thoughts in the past about it such as - when you upload a clip to youtube how do the make sure you don&apos;t violate any copyright? how do you do it fast and scaleable? How do you recommend someone a new music? Can you just design it like any other recommendation system? How to process the signal to differentiate and recognize the different instruments and so on.&lt;/div&gt;
&lt;div&gt;As a data scientist and software engineer it is clear that when choosing features, which features to extract, we are skewed. We have a gut feeling and we usually follow that. Even when choosing which algorithms to use or which tool to use we usually turn either to something we already succeeded with and have experience or to a new algorithm \ technology we want to learn. We are sometimes blind to those biases.&lt;/div&gt;
&lt;div&gt;Big parts of software development and data science is done on the western world, i.e US, Europe, etc. there are cultural biases to the engineers and the way they think. Our gut feeling is biased. In this case our gut feeling is biased toward how we in the western world understand what music is and how it is built - scores, notes, intonation, etc. Giving the examples in the lecture and stories behind them, it is clear that the way music is interpreted and experienced different in different cultures.&lt;/div&gt;
&lt;div&gt;It is quite shocking to think about science that way - although we think we are quite rational and following some scientific \ research \ independent process we are biased to begin with. The implications for me are immediate - how recommendation system work (not only music). Simply think of movies, maybe the categorization to genres is external to other cultures? Maybe they care about different features in products?&lt;/div&gt;
&lt;div&gt;I&apos;ll try to bare it in mind next time I design a recommendation system.&lt;/div&gt;</content:encoded></item><item><title>Data Driven - creating a data culture</title><link>https://tomron.net/2015/08/03/data-driven-creating-a-data-culture/</link><guid isPermaLink="true">https://tomron.net/2015/08/03/data-driven-creating-a-data-culture/</guid><description>I have just read &quot; Data Driven - creating a data culture &quot; by Hilary Mason and DJ Patil. While computer science is considered a new science or a new discipline…</description><pubDate>Mon, 03 Aug 2015 09:48:26 GMT</pubDate><content:encoded>I have just read &quot;&lt;a&gt;Data Driven - creating a data culture&lt;/a&gt;&quot; by Hilary Mason and DJ Patil.

While computer science is considered a new science or a new discipline data science is even a newer one. Well is it? Is it a discipline? What is the goals of data scientist and data science team within different organizations? Where should they place? What are their responsibilities and how is success measured?

This remained me the course &quot;Scientific Thinking&quot; I took as an undergrad and specifically Weber&apos;s &quot;&lt;a&gt;Wissenschaft als Beruf&lt;/a&gt;&quot; and Kuhn&apos;s &quot;&lt;a&gt;The Structure of Scientific Revolutions&lt;/a&gt;&quot;.

For me it seems that data science is in the phase of Kuhn&apos;s pre-paradigm and Mason and Patil tries to move it in to the phase of normal science. They argue about the place and limitation of data science, what are the characteristics of data scientists. Maybe most importantly they talk about how to measure success and how to set goals to data science process.

So what about Weber?

In this lecture, Weber talks about the advantages of choosing an academic career versus an industry career. He also compare between the university systems in Europe and in the US. Almost 100 years has passed since then and the world slightly changed, including the role of work in our life. I think that for many people working in the industry as data scientist has both the advantages of being a scientist (doing some research) and working in the industry (salary, technology)... But I&apos;m not sure if it is a really a &quot;science&quot;. For me personally this title or definition is not important - I love what I do and it creates a measurable value to the organizations I work for.

I see many of the processes suggested in this book as trying to bridge between and academic life and the industry life.

Over all, this hand book was ok, but I expected a bit more.</content:encoded></item><item><title>5 interesting things (30/07/2015)</title><link>https://tomron.net/2015/07/30/5-interesting-things-30072015/</link><guid isPermaLink="true">https://tomron.net/2015/07/30/5-interesting-things-30072015/</guid><description>Python neural network in 11 lines - the name is a bit misleading but nice DIY initiative. http://iamtrask.github.io/2015/07/12/basic-python-network/ Python or…</description><pubDate>Thu, 30 Jul 2015 10:55:36 GMT</pubDate><content:encoded>&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Python neural network in 11 lines&lt;/u&gt;&lt;/b&gt; - the name is a bit misleading but nice DIY initiative.&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#1155cc&quot;&gt;&lt;u&gt;&lt;a&gt;http://iamtrask.github.io/2015/07/12/basic-python-network/&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;&lt;br /&gt;Python or R&lt;/u&gt;&lt;/strong&gt; - The bottom line for me is that both are tools and you should adjust the tool you use to the task. I personally feel more comfortable on Python and really glad that ideas, prototypes and thoughts I had can move to production using almost the same code and does not require additional work.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.infoworld.com/article/2951779/application-development/in-data-science-the-r-language-is-swallowing-python.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;br /&gt;Python, Ruby and Golang web framework comparison&lt;/u&gt;&lt;/b&gt; - I think that for most of the people and projects this comparison is not relevant as either they are experts \ using a specific language or the language is limited by the project environment. But for the cases it is relevant - switching between language, learning a language and POCing it is nice to have a comparison with frameworks you know, feel comfort with.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://realpython.com/blog/python/python-ruby-and-golang-a-web-Service-application-comparison/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt; &lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;u&gt;Pandas and Apache Spark data frames differences&lt;/u&gt;&lt;/b&gt; - Both Pandas and Apache Spark are very common tools for data scientist using Python. It is therefore very important to know the differences between the data frames in both tools as one may assume it might function the same.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://medium.com/@chris_bour/6-differences-between-pandas-and-spark-dataframes-1380cec394d2&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;&lt;br /&gt;Anti patterns&lt;/u&gt;&lt;/strong&gt; - at first glance I thought it was a very weird idea but then going over several examples and it was actually interesting and enlightening. Some things I do automatically and haven&apos;t thought of them for a long time, some matters of style, etc. Interesting although I was skeptic in the beginning :)&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://docs.quantifiedcode.com/python-code-patterns/index.html&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (23/07/2015)</title><link>https://tomron.net/2015/07/23/5-interesting-things-23072015/</link><guid isPermaLink="true">https://tomron.net/2015/07/23/5-interesting-things-23072015/</guid><description>Diversity in tech? This post describe a black woman’s experience in the Stanford Computer Science Major. As part of TOA events I went to Zalando&apos;s diversity in…</description><pubDate>Thu, 23 Jul 2015 15:15:34 GMT</pubDate><content:encoded>&lt;div&gt;&lt;strong&gt;&lt;u&gt;Diversity in tech?&lt;/u&gt;&lt;/strong&gt; This post describe a black woman’s experience in the Stanford Computer Science Major. As part of TOA events I went to Zalando&apos;s &lt;a&gt;diversity in tech panel&lt;/a&gt; last week. So I got to think about this subject for a while both from my situation - foreign women in tech, not speaking the local language and from a wider point of view. Having women in Universities (and any other population) is a necessary condition (but not sufficient)  to having diversity in tech.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://theodysseyonline.com/stanford/black-women-in-tech/128310&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;u&gt;Invitation to Scala&lt;/u&gt;&lt;/b&gt; - this post tries to make Scala less intimidating for  Scala beginners. May the force be with him (and with me)&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://www.voxxed.com/blog/2015/07/scala-doesnt-complicated/
&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;u&gt;Pyxley&lt;/u&gt;&lt;/strong&gt; - Python powered dashboards. I&apos;m always excited about visualization tools. It is built with Pandas data frame in mind and therefore should be relatively intuitive for data scientist which uses python.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://multithreaded.stitchfix.com/blog/2015/07/16/pyxley/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;u&gt;Cloudera Ibis&lt;/u&gt;&lt;/b&gt; - Cloudera reveals Ibis project which is aimed to give python end-to-end pipelines specially for data scientist with in the well known PyLab eco-system (pandas, scikit-learn, scipy, etc).&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://blog.cloudera.com/blog/2015/07/ibis-on-impala-python-at-scale-for-data-science/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.ibis-project.org/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;br /&gt;&lt;u&gt;Clustering check-ins with Spark and Cassandra&lt;/u&gt;&lt;/strong&gt; - the title is self explanatory... Loading check-ins data data to Cassandra, analyzing it with Spark and visualizing it with zeppelin. All in all a reasonable data product pipeline put together beautifully&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.natalinobusa.com/2015/07/clustering-check-ins-with-spark-and.html&lt;/a&gt;&lt;/div&gt;
 </content:encoded></item><item><title>Database debate</title><link>https://tomron.net/2015/07/16/database-debate/</link><guid isPermaLink="true">https://tomron.net/2015/07/16/database-debate/</guid><description>As part of the Berlin Tech Open Air events I want to the &quot; Database debate &quot; in DC Media networks. The two sides of the debate were Simon Willnauer, lead…</description><pubDate>Thu, 16 Jul 2015 22:07:26 GMT</pubDate><content:encoded>As part of the Berlin &lt;a&gt;Tech Open Air&lt;/a&gt; events I want to the &quot;&lt;a&gt;Database debate&lt;/a&gt;&quot; in DC Media networks. The two sides of the debate were Simon Willnauer, lead engineer of ElasticSearch and co-founder of &lt;a&gt;Elastic&lt;/a&gt;and Carter Page, technical lead for Google BigTable.
&lt;div&gt;&lt;/div&gt;
The talk was hosted by DC Media networks employee and was navigated really well with nice questions and interactions between Willnauer and Page. However it was not a &quot;Database debate&quot; at least for two reasons. ElasticSearch currently does not brand itself as a database and as admitted by Willnauer is not mature enough. Therefore it was not a debate - no pros and cons, no one against the other. But rather two solutions for different problems which both somehow relate to the buzzword &quot;big data&quot;.
&lt;div&gt;Some expected questions were asked - use-cases, road map and future features, bug fixes, comparison to other solutions. But also less expected questions - what would you do different if rebuilding the product, pitfalls of beginners and some more technical deep dive questions asked by the audience.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;

One of the nice questions asked by the host was - &quot;What is the weirdest usage you have seen to your product&quot;. Willnauer answered - &quot;playing chess with it using near neighbor to compute the next step&quot;. Following &lt;a&gt;Call me maybe&lt;/a&gt; project I though of &quot;Call me checkmate&quot; project - playing chess using different databases.

Overall, very nice and chill atmosphere. Although I&apos;m not sure why it is called open air..

&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;&lt;img class=&quot; size-medium wp-image-392 aligncenter&quot; src=&quot;https://tomron.net/wp-content/uploads/2015/07/databasedebasepic.jpg&quot; alt=&quot;DatabaseDebasePic&quot; width=&quot;300&quot; height=&quot;169&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</content:encoded><category>TOA</category></item><item><title>5 interesting things (12/07/2015)</title><link>https://tomron.net/2015/07/12/5-interesting-things-12072015/</link><guid isPermaLink="true">https://tomron.net/2015/07/12/5-interesting-things-12072015/</guid><description>Code management tools by AWS - in the last RE:INVENT event (October 2014) Amazon said that this year they are going to focus on new tools for code management…</description><pubDate>Sun, 12 Jul 2015 14:29:12 GMT</pubDate><content:encoded>&lt;p&gt;&lt;b&gt;&lt;u&gt;Code management tools by AWS&lt;/u&gt;&lt;/b&gt; - in the last RE:INVENT event (October 2014) Amazon said that this year they are going to focus on new tools for code management and deployment. Now they reveal those tools -&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://aws.amazon.com/blogs/aws/code-management-and-deployment/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Mail received from the closest Oak tree&lt;/u&gt; &lt;/b&gt;- I find this blig post and the whole process charming. The city of Melbourne created a technology interface to get the citizens more involved in the city life and exciting things happened. I find those interactions between the everyday life and the public sphere as one of the most fascinating challenges of the coming years - making the public sphere more accessible, smart and open.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;http://www.citylab.com/tech/2015/07/when-you-give-a-tree-an-email-address/398219/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Toyplot&lt;/b&gt;&lt;/u&gt; - another python plotting library. Seems to work natively with Numpy. Still quite young - number of different possible charts is limited but I&apos;m it will become more mature in the near future. Beside nice, interactive charts which I&apos;m able to configure to my needs (axes, legend, colors, scale, exporting \ embedding visualizations etc) what I look for in a good plotting package is answer all the different type of charts I need. I don&apos;t want to start juggling between several packages each for a different type. At least on this area there is always a place to grow - heat maps, geo-spatial maps, 3d, etc.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;http://toyplot.readthedocs.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;u&gt;Python design patterns&lt;/u&gt;&lt;/b&gt; - I&apos;m Tom and I&apos;m lazy, I admit it. I think I said it before but IMHO a good software developer is a lazy one. One who automates what she can, uses existing tools and packages when available and reuses her own code. This is the main task of design patterns - solve common problems and provide best practices. And also create common language so different developers and stakeholders can communicate. This github repository collects design patterns implementations in Python.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;https://github.com/faif/python-patterns&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Mining twitter data with Python&lt;/b&gt;&lt;/u&gt; - a seven posts series by Marco Bonzanini. Goes through the entire process starting with getting twitter access token and ends with data visualization using d3.js and sentiment analysis.&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;span style=&quot;color:#1155cc&quot;&gt;&lt;a&gt;http://marcobonzanini.com/2015/03/02/mining-twitter-data-with-python-part-1/&lt;/a&gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (10/07/2015)</title><link>https://tomron.net/2015/07/10/5-interesting-things-10072015/</link><guid isPermaLink="true">https://tomron.net/2015/07/10/5-interesting-things-10072015/</guid><description>Three Useful Python Libraries for Startups - tl;dr this post suggest Whitenoise, Phonenumbers and Pdfki as 3 important packages for startups and requests and…</description><pubDate>Fri, 10 Jul 2015 10:17:31 GMT</pubDate><content:encoded>&lt;b&gt;&lt;u&gt;Three Useful Python Libraries for Startups&lt;/u&gt;&lt;/b&gt; - tl;dr this post suggest Whitenoise, Phonenumbers and Pdfki as 3 important packages for startups and requests and Python-dateutil as runner-ups. IMHO, those are very strange choices. I agree with choosing requests as a package that simplify http requests and which is important to infrastructure. I expected the other packages as well to relate to infrastructure. Possibly libraries I would think of - django and boto. Possibly also numpy and \ or pandas for very common statistic and analysis use cases.

&lt;a&gt;http://blog.instavest.com/three-useful-python-libraries-for-startups&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Trending @ Instagram&lt;/u&gt;&lt;/strong&gt; - I used to work on a very similar problem to this one and facing almost the same challenges - ranking and scoring, grouping. It is always interesting to see how different people approach the same problem which I know intimately.

&lt;a&gt;http://instagram-engineering.tumblr.com/post/122961624217/trending-at-instagram&lt;/a&gt;

&lt;b&gt;&lt;u&gt;Git from the inside out&lt;/u&gt;&lt;/b&gt; - version control is very important tool in the everyday life so it is nice to look into one possible implementation of it.

&lt;a&gt;https://codewords.recurse.com/issues/two/git-from-the-inside-out&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Document clustering with Python&lt;/u&gt;&lt;/strong&gt; - simple, clear howto guide which both explain the theory lightly, examine several clustering algorithms and sums up with visualizations.

&lt;a&gt;http://nbviewer.ipython.org/github/brandomr/document_cluster/blob/master/cluster_analysis_web.ipynb&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Deploying python packages @ Nylas&lt;/u&gt;&lt;/strong&gt; - I love such posts which explain the real life problem they faced, suggest several solution \ possible alternative and their pros and cons and show what and why they eventually choose. Specifically as I believe every python developer run onto those problems at least once (a day :))

&lt;a&gt;https://nylas.com/blog/packaging-deploying-python
&lt;/a&gt;</content:encoded></item><item><title>5 interesting things (26/06/2015)</title><link>https://tomron.net/2015/06/26/5-interesting-things-26062015/</link><guid isPermaLink="true">https://tomron.net/2015/06/26/5-interesting-things-26062015/</guid><description>Spark Summit 2015 Highlights in Tweets - Spark summit was held in San Francisco this week (15-17 June). Euro-Spark summit will be held on 27-29 October call…</description><pubDate>Fri, 26 Jun 2015 16:10:56 GMT</pubDate><content:encoded>&lt;strong&gt;&lt;u&gt;Spark Summit 2015 Highlights in Tweets&lt;/u&gt;&lt;/strong&gt; - Spark summit was held in San Francisco this week (15-17 June). Euro-Spark summit will be held on 27-29 October call for papers is open. This presentation is a brief of the highlights of different talks. I believe that (if not already) most of the talks and presentations will be available online soon.
&lt;div&gt;
&lt;div&gt;&lt;a&gt;http://www.slideshare.net/maasg/spark-summit-2015-highlights&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;u&gt;How to implement neural network&lt;/u&gt;&lt;/strong&gt; - somehow, neural networks are not fully supported by scikit-learn (probably will happen in the future) and there are several alternative such as &lt;a&gt;PyBrain&lt;/a&gt; (not sure if it is maintained),&lt;a&gt; PyLearn2&lt;/a&gt;, &lt;a&gt;theano&lt;/a&gt; and so on.This tutorial is Neural Network DIY. It is both a technical-python guide and a step-by-step neural network reminder.&lt;a&gt;http://peterroelants.github.io/posts/neural_network_implementation_part01/&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Designing large scale python application&lt;/u&gt;&lt;/strong&gt; - Talk by M.A Lumberg, Python core developer, in PyWaw summit. He also talked as a keynote about - &quot;Past, present and future of Python&quot;, I intend to hear that one when I have sometime.

&lt;a&gt;http://www.egenix.com/library/presentations/PyWaw-Summit-2015-Designing-Large-Scale-Applications-in-Python/
&lt;/a&gt;

&lt;b&gt;&lt;u&gt;The artpiece of command line&lt;/u&gt;&lt;/b&gt; - I&apos;m a geek, I admit it and I like working from the command line (we love you Tom).  Both for small data science things (sum, average, uniq, etc.) and for checking up what is going on in my system (atop, ps, etc.). I fell I should keep this repository not more than a click a way.

&lt;a&gt;https://github.com/jlevy/the-art-of-command-line&lt;/a&gt;

&lt;strong&gt;&lt;u&gt;Mattermost&lt;/u&gt;&lt;/strong&gt; - mattermost is an open source alternative for Slack. In one of the organizations I worked introducing Slack changed the entire communication in the organization. People were sharing more of their ideas, thoughts, results and got involved into additional projects. Still some features made me feel inconvenient like preferring Slack over documentation, using external servers and hard to search \ backup. I therefore find it very exciting to have an open source alternative that will improve both products.

&lt;a&gt;http://www.mattermost.org/&lt;/a&gt;

&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (19/06/2015)</title><link>https://tomron.net/2015/06/19/5-interesting-things-19062015/</link><guid isPermaLink="true">https://tomron.net/2015/06/19/5-interesting-things-19062015/</guid><description>Interviewing as an art - Finding the smart, talented people with the right vibe for your company is always hard. Being on the other side is also hard. Not only…</description><pubDate>Fri, 19 Jun 2015 17:36:16 GMT</pubDate><content:encoded>&lt;p&gt;&lt;b&gt;&lt;u&gt;Interviewing as an art&lt;/u&gt;&lt;/b&gt; - Finding the smart, talented people with the right vibe for your company is always hard. Being on the other side is also hard. Not only in the sense of being good enough but also &quot;interviewing&quot; the work place - is the job interesting \ challenging? are the colleagues nice, talented, will you like to work with them? etc. There are many posts and theories about what you should ask in order to find the right candidate and less posts and discussions about how to approach the candidate, make him or her comparable and being able to get the maximum out of it during a stressing interview. I find this post specially sensitive and inviting.&lt;/p&gt;
&lt;p&gt;&lt;a&gt;http://www.zdfs.com/code/2015/on-interviewing-software-engineers&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Airbnb airflow&lt;/b&gt;&lt;/u&gt; - a framework by AirBnb which help create, schedule and monitor data pipelines.
&lt;a&gt;https://github.com/airbnb/airflow&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Seaborn cheat-sheet&lt;/b&gt;&lt;/u&gt; - the statistical data visualization package completing \ improving the PyData eco-system. A simple tutorial that can also be used as a cheat-sheet.
&lt;a&gt;https://beta.oreilly.com/learning/data-visualization-with-seaborn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Data Science Ipython notebooks&lt;/b&gt;&lt;/u&gt; - a collection of links of Ipython notebooks which relates to data science. Include notebooks from Kaggle, AWS, PyCon, etc. Can also add a the link to some seaborn notebook..
&lt;a&gt;https://github.com/donnemartin/data-science-ipython-notebooks&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;b&gt;Pitfalls of A\B testing&lt;/b&gt;&lt;/u&gt; - tl;dr - statistics is tricky and you should remember the underlining assumptions. Also a good chance to remind A/A testing as a sanity check.
&lt;a&gt;http://blog.dato.com/how-to-evaluate-machine-learning-models-the-pitfalls-of-ab-testing&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (04/06/2015)</title><link>https://tomron.net/2015/06/04/5-interesting-things-04062015/</link><guid isPermaLink="true">https://tomron.net/2015/06/04/5-interesting-things-04062015/</guid><description>Pitfalls when mining Wikipedia - this research was done on a bit old data (2013) but it show quite easy way to clean wikipedia dumps. Although they suggest a…</description><pubDate>Thu, 04 Jun 2015 15:33:07 GMT</pubDate><content:encoded>&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Pitfalls when mining Wikipedia&lt;/strong&gt;&lt;/span&gt; - this research was done on a bit old data (2013) but it show quite easy way to clean wikipedia dumps. Although they suggest a way to repeat the process they did, I suspect that the structure of some of the dumps was changed a bit.

An interesting question for me in this scope is the relation between content \ views of same entities cross different languages. This can be calculated by joining page count results with wikidata dumps once they are complete. Crunching wikidata dumps a bit, at the moment it does not feel mature enough and does not include the data about all the articles in wikipedia.

&lt;a&gt;https://blog.lateral.io/2015/06/the-unknown-perils-of-mining-wikipedia/&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Weather prediction with Amazon Machine Learning&lt;/strong&gt;&lt;/span&gt; - nice, simple way to start playing with Amazon machine learning -

&lt;a&gt;http://arnesund.com/2015/05/31/using-amazon-machine-learning-to-predict-the-weather/&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;How to evaluate machine learning models&lt;/strong&gt;&lt;/span&gt; - a series of 5 posts by dato  -

&lt;a&gt;http://blog.dato.com/how-to-evaluate-machine-learning-models-part-1-orientation&lt;/a&gt;

&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Mean shift clustering&lt;/strong&gt;&lt;/span&gt; - clustering approach with few advantages over common methods. E.g - don&apos;t have to define number of clusters in advance  - but you have to tune the bandwidth. On the other hand it slower than other algorithms.
&lt;p&gt;&lt;a&gt;http://spin.atomicobject.com/2015/05/26/mean-shift-clustering&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;The future of spark&lt;/strong&gt;&lt;/span&gt; - post following Strata + Hadoop conference in London.
&lt;a&gt;https://www.linkedin.com/pulse/future-apache-spark-rodrigo-rivera&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (31/05/2015)</title><link>https://tomron.net/2015/05/31/5-interesting-things-31052015/</link><guid isPermaLink="true">https://tomron.net/2015/05/31/5-interesting-things-31052015/</guid><description>Vis.js demo - (Yet another) Javascript visualization library. I love the relative graph approach, I find it easier for Python developers that d3.js (which I…</description><pubDate>Sun, 31 May 2015 16:18:14 GMT</pubDate><content:encoded>&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Vis.js demo&lt;/span&gt;&lt;/b&gt; - (Yet another) Javascript visualization library. I love the relative graph approach, I find it easier for Python developers that d3.js (which I also like) -&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://chris.neoxygen.io/articles/easy-graph-visualization-with-vis-dot-js.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Predition.io&lt;/span&gt;&lt;/strong&gt; -  a machine learning server for developers and data scientists. Built on Apache Spark, HBase and Spray. Haven&apos;t used it but it seems very interesting -&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://prediction.io/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Django performance - 4 litlle tricks&lt;/span&gt;&lt;/b&gt; - I&apos;m familiar and experienced with Django but not deep dive. Possibly those are very basic tricks but for me they were good to keep in mind&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.revsys.com/blog/2015/may/06/django-performance-simple-things/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Deep dive into elasticsearch storage&lt;/span&gt;&lt;/strong&gt; - as I currently work a lot with elasticsearch (should say elastic..) I find this post very interesting&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://www.found.no/foundation/dive-into-elasticsearch-storage/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Amazon machine learning&lt;/span&gt;&lt;/strong&gt; - the new buzz in the neighborhood&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;a&gt;https://aws.amazon.com/machine-learning/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>6 interesting things (20/2/2015)</title><link>https://tomron.net/2015/02/20/6-interesting-things-2022015/</link><guid isPermaLink="true">https://tomron.net/2015/02/20/6-interesting-things-2022015/</guid><description>Making an exception but I really came across some interesting things - A\A Testing - well known idea in machine learning (train, cross-validation, test) and in…</description><pubDate>Fri, 20 Feb 2015 12:00:39 GMT</pubDate><content:encoded>Making an exception but I really came across some interesting things -
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;A\A Testing&lt;/span&gt;&lt;/b&gt; - well known idea in machine learning (train, cross-validation, test) and in other research best practices now used as a take off on the buzz word term - &quot;A\B testing&quot; but yet well explained and can be eye opening on the right moment -&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://jvns.ca/blog/2015/02/06/a-a-testing/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Intro to into&lt;/span&gt;&lt;/b&gt; - Easier conversion between somehow complex data types in python&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://matthewrocklin.com/blog/work/2015/02/03/Into/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;Reading this I was also exposed&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://blaze.pydata.org/docs/dev/index.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Getting started with Spark in Python&lt;/span&gt;&lt;/strong&gt; - very very clear tutorial about all the required steps to get started. I cannot wait to find a good enough excuse to work with spark.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://districtdatalabs.silvrback.com/getting-started-with-spark-in-python&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Fuzzy&lt;/span&gt;&lt;/strong&gt; - Fast Python phonetic algorithms. Nothing new or too fancy, just came across it this week and found it useful.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://pypi.python.org/pypi/Fuzzy&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Typo Distance&lt;/span&gt;&lt;/b&gt; - finds typo distance between two strings. It uses qwerty layout but you can configure different layout pretty easily. The algorithm is quite heavy and time consuming, there is some room for improvement (although it is not actively maintained). For example - adding a max parameter which stops the computation once the typo distance is higher than the allowed distance.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://github.com/wsong/Typo-Distance/blob/master/typodistance.py&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Topy&lt;/span&gt;&lt;/b&gt; - Python script to fix typos in text, using rule-sets developed by &lt;a&gt;theRegExTypoFix&lt;/a&gt; project from Wikipedia. The basic rule set is an English rule set but other rule sets are also available. Trying it, I&apos;m positive about it but it is not baked \ mature enough and I would like it to be more easy to use in code than as a command line tool.

&lt;a&gt;https://github.com/intgr/topy&lt;/a&gt;</content:encoded></item><item><title>5 interesting things (03/02/2015)</title><link>https://tomron.net/2015/02/03/5-interesting-things-03022015/</link><guid isPermaLink="true">https://tomron.net/2015/02/03/5-interesting-things-03022015/</guid><description>spaCy - yet another python library for text processing? maybe, haven&apos;t tried it but seems like another tool taking part in this growing world. I&apos;m looking for…</description><pubDate>Tue, 03 Feb 2015 18:37:48 GMT</pubDate><content:encoded>&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;spaCy&lt;/span&gt;&lt;/b&gt; - yet another python library for text processing? maybe, haven&apos;t tried it but seems like another tool taking part in this growing world. I&apos;m looking for a package that will do a good job on short texts such as tweets and so on.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://honnibal.github.io/spaCy/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Moto&lt;/span&gt;&lt;/strong&gt; - not what you thought.. not a short from automotive but mocking +boto. &quot;A library that allows your python tests to easily mock out the boto library&quot;. Looks very neat but still has some way to go.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://github.com/spulec/moto&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Nothing like CLI&lt;/span&gt; &lt;/b&gt;- examples that for certain use cases command line tools can be much faster than hadoop cluster.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://aadrake.com/command-line-tools-can-be-235x-faster-than-your-hadoop-cluster.html&lt;/a&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;
&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Self hell&lt;/span&gt;&lt;/b&gt; - elegance in code although I&apos;m not sure how efficient it is.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://kmkeen.com/self-hell/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;NLP made visual with Neo4j&lt;/span&gt;&lt;/b&gt; -  the concept is cool - creating an interesting visualization not with the trivial \ designated tool for it. I doubt how much it scales.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://jexp.de/blog/2015/01/natural-language-analytics-made-simple-and-visual-with-neo4j/&lt;/a&gt;&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (04/01/2015)</title><link>https://tomron.net/2015/01/04/5-interesting-things-04012015/</link><guid isPermaLink="true">https://tomron.net/2015/01/04/5-interesting-things-04012015/</guid><description>Is Wikipedia a microcsmos of our world? News of 2014 as they are reflected in Wikipedia. http://www.brianckeegan.com/2014/12/the-news-on-wikipedia-in-2014/…</description><pubDate>Sun, 04 Jan 2015 15:21:31 GMT</pubDate><content:encoded>&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Is Wikipedia a microcsmos of our world?&lt;/span&gt;&lt;/strong&gt; News of 2014 as they are reflected in Wikipedia.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.brianckeegan.com/2014/12/the-news-on-wikipedia-in-2014/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;br /&gt;Json as python modules&lt;/span&gt;&lt;/strong&gt; - Making life simpler. Making it possible to do -&quot;import x&quot; for x.json.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://github.com/kragniz/json-sempai&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;Python the fast way&lt;/b&gt;&lt;/span&gt; - living on the edge with Python :) Some hints on how to make your code run faster. Another possibility - checking different interpreters. It was nice to see the assembly commands, I was expecting something more advanced.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://pythonfasterway.uni.me/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;br /&gt;Data Science Ontology&lt;/span&gt;&lt;/b&gt; - just having fun with d3.js.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;a&gt;http://www.datascienceontology.com/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;br /&gt;Nips Experiment&lt;/span&gt;&lt;/strong&gt; - there was relatively a lot of chatter regarding the experiment done by NIPS committee. Non the less, it creates a very uncomfortable feeling regarding committees.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://mrtz.org/blog/the-nips-experiment/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>5 interesting things (14/12/2014)</title><link>https://tomron.net/2014/12/14/5-interesting-things-14122014/</link><guid isPermaLink="true">https://tomron.net/2014/12/14/5-interesting-things-14122014/</guid><description>Twitter analytics with Spark - I really enjoyed this post from several reasons. First because the need and the way that lead to the solution is clear and well…</description><pubDate>Sun, 14 Dec 2014 16:56:24 GMT</pubDate><content:encoded>&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Twitter analytics with Spark&lt;/span&gt;&lt;/b&gt; - I really enjoyed this post from several reasons. First because the need and the way that lead to the solution is clear and well explained. Second, it uses a novel approach, mining social network for non trivial uses. Moreover, querying the &lt;a&gt;app&lt;/a&gt; resulted a very nice results which is not trivial. I missed some reasoning \ explanation in the app. I.e., better understanding the connections between two organizations. I also wonder about the velocity the relations change. The technical part was interesting as well although I haven&apos;t got to work with Spark so far.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;a&gt;http://eugenezhulenev.com/blog/2014/11/20/twitter-analytics-with-spark/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Teaching creative&lt;/span&gt;&lt;/strong&gt; - I really love to teach and I also try to adjust the methods, content, example to the audience and to be as creative as I can and to be passionate about the content. I believe that this way the audience will remember what I talked about. Also to be hands on help to remember and understand. This post which demonstrates creativity on so many levels is amazing and is very inspiring.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;a&gt;http://blog.mattwaite.com/post/103144761014/a-classroom-experiment-in-twitter-bots-and&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;br /&gt;&lt;strong&gt;Databases compression&lt;/strong&gt;&lt;/span&gt; - Summarizes the high level and things to know about each database very well. A good starting point when evaluating several solutions.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;A bonus track - &lt;a&gt;http://blog.nahurst.com/visual-guide-to-nosql-systems&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Experiments at AirBnB&lt;/strong&gt;&lt;/span&gt; - Although I usually prefer to read about private people that did something cool with data I like AirBnB&apos;s data blog as there is always something interesting to read about. This time it is about experiments, the very trendy &quot;AB testing&quot;. It raises&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://nerds.airbnb.com/experiments-at-airbnb/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt; &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;DevOps bookmarks&lt;/span&gt;&lt;/b&gt; - devops tools and frameworks. An aggregator, reminds assume * but very tempting implementation.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.devopsbookmarks.com/&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;</content:encoded></item><item><title>Common Crawl meetup</title><link>https://tomron.net/2014/11/18/common-crawl-meetup/</link><guid isPermaLink="true">https://tomron.net/2014/11/18/common-crawl-meetup/</guid><description>Yesterday I attended big data beers meetup . The meetup included 2 talks by Common Crawl employees - Lisa Green and Stephen Merity . Both talks was great and…</description><pubDate>Tue, 18 Nov 2014 19:40:52 GMT</pubDate><content:encoded>&lt;div&gt;Yesterday I attended &lt;a&gt;big data beers meetup&lt;/a&gt;. The meetup included 2 talks by Common Crawl employees - &lt;a&gt;Lisa Green&lt;/a&gt; and &lt;a&gt;Stephen Merity&lt;/a&gt;. Both talks was great and the connection between them  was empowering.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;The meetup was sponsored by &lt;a&gt;Data Artisans&lt;/a&gt; which are working on &lt;a&gt;Apache Flink&lt;/a&gt;. Too bad I don&apos;t have time to go to their meet up &lt;a&gt;today&lt;/a&gt;. &lt;b&gt;
&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;What is Common Crawl?&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Common Crawl is a NGO that makes web data accessible to everyone with little or not cost. They crawl the web, release a monthly build which is stored in AWS S3 under public data sets. They respect no robots and no follow flags and basically try to be good citizens in the internet cosmos. As Lisa Green said in her talk - they believe that the web is &quot;&lt;i&gt;a digital copy of our world&quot;&lt;/i&gt; and the greatest data set and their mission is to make it available to everyone.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;Technicalities&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;Monthly build (currently prefer bigger monthly builds over more frequent builds)&lt;/li&gt;
	&lt;li&gt;Latest build was 220TB with crawl data of 2.98 billion web pages.&lt;/li&gt;
	&lt;li&gt;Data include 3 type of files -
&lt;ul&gt;
	&lt;li&gt;WARC files of the raw crawl data&lt;/li&gt;
	&lt;li&gt;WAT files which include the metadata for the data stored in the WARC (about 1/3 of the raw crawl data)&lt;/li&gt;
	&lt;li&gt;WET files which hold the plaintext from the data stored in the WARC (about 15% of the raw crawl data).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
	&lt;li&gt;Delay between publication of page and crawl \ public time is approx month-month and a half.&lt;/li&gt;
	&lt;li&gt;No incremental dumps are planned at the moment.&lt;/li&gt;
	&lt;li&gt;The data is currently skewed to dot com domains. They plan to improve it changes will hopefully be seen on January dump.&lt;/li&gt;
	&lt;li&gt;They crawl using &lt;a&gt;Apache Nutch&lt;/a&gt; -  Nutch is an open source web crawler and cooperate with  &lt;a&gt;Blekko&lt;/a&gt; in order to avoid spam.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;Common Crawl encourages researchers, universities and commercial companies to use their data. If you ask politely they will even grant you some Amazon credit.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;The Talks&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Lisa Green talked about the general idea of open data (governments data, commercial data, web data) and gave some examples for using open data in general. The example I liked the most - using Orange cell phone data to identify Ebola spreading patterns, see &lt;a&gt;here&lt;/a&gt;. This was a very inspiring introduction to Stephen Merity more technical talk.&lt;/div&gt;
&lt;div&gt;Stephen Merity spoke about the more technical parts and gave an amazing examples on how to do both fast and cheap computations (spot instances rock). He showed interesting data about computing PageRank on the entire Common Crawl data, some NLP stuff and other interesting insights about their data.&lt;/div&gt;
&lt;div&gt;Another relevant talk in the area is Jordan Mendelson talk from Berlin BuzzWords - &quot;&lt;a&gt;Big Data for Cheapskates&lt;/a&gt;&quot; (if your are on a hurry start from the 18th minute).&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Slides are available in -&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;Stephen Merity slides&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;/div&gt;
&lt;b&gt;What can you do with Common Crawl&lt;/b&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Treating it as a data set there is a lot to explore -&lt;/div&gt;
&lt;div&gt;1. Train it for language detection - train it for language detection for specific domains.&lt;/div&gt;
&lt;div&gt;2. Named Entity Recognition.&lt;/div&gt;
&lt;div&gt;3. Investigate the relations between different domains, web structre - identify competitors, page rank, etc.&lt;/div&gt;
&lt;div&gt;4. Investigate the relations between different technologies - which js libraries appear together, changes of technology usage over time.&lt;/div&gt;</content:encoded><category>big data</category><category>common crawl</category><category>meetup</category></item><item><title>5 interesting things (06/11/2014)</title><link>https://tomron.net/2014/11/06/5-interesting-things-06112014/</link><guid isPermaLink="true">https://tomron.net/2014/11/06/5-interesting-things-06112014/</guid><description>Geeks pleasure - fulling math. Creating two images (and actually every type of document) with the same md5 hash.…</description><pubDate>Thu, 06 Nov 2014 20:42:21 GMT</pubDate><content:encoded>&lt;div&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Geeks pleasure&lt;/span&gt;&lt;/b&gt; - fulling math. Creating two images (and actually every type of document) with the same md5 hash.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://natmchugh.blogspot.de/2014/10/how-i-created-two-images-with-same-md5.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Django vs Flask vs Pyramid&lt;/span&gt;&lt;/strong&gt; - Python has a great open source community which is growing rapidly. One of the advantages is having several solution to the same or to near by problems. This post compares between 3 well known Python web frameworks - Django, Flask and Pyramid.&lt;/div&gt;
&lt;div&gt;From my point of view working with Django and Flask. Flask is like riding a motorcycle while Django is Tank. Django is more tightly coupled with SQL backedend and the relevant dependencies and plugins while Flask allow quick, light functionality.&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color:#1155cc&quot;&gt;&lt;a&gt;https://www.airpair.com/python/posts/django-flask-pyramid&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;The Science of Crawl&lt;/span&gt;&lt;/strong&gt; - half related to a project I currently do. Those two posts concern to problems that everyone how indexed and \ or crawled data faced with.&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;a&gt;http://blog.urx.com/urx-blog/2014/9/4/the-science-of-crawl-part-1-deduplication-of-web-content&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://blog.urx.com/urx-blog/2014/10/23/the-science-of-crawl-part-2-content-freshness&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;The invisible wall&lt;/b&gt;&lt;/span&gt; - 25 years later and the invisible wall still separates east from west in Germany. Beside living in Berlin visualizations convey the point very well.&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://www.washingtonpost.com/blogs/worldviews/wp/2014/10/31/the-berlin-wall-fell-25-years-ago-but-germany-is-still-divided/&lt;/a&gt;


&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Toolz&lt;/span&gt;&lt;/strong&gt; - we all know the term design patterns. Toolz provides implementation pattern. Everyday utilities every developer needs - iterators, dictionaries, etc. Two links - blog post with  common use cases and Toolz documentation.

&lt;a&gt;http://matthewrocklin.com/blog/work/2014/07/04/Streaming-Analytics/&lt;/a&gt;

&lt;a&gt;http://toolz.readthedocs.org/en/latest/&lt;/a&gt;

&lt;/div&gt;</content:encoded></item><item><title>Running my first EMR - lessons learned</title><link>https://tomron.net/2014/10/15/running-my-first-emr-lessons-learned/</link><guid isPermaLink="true">https://tomron.net/2014/10/15/running-my-first-emr-lessons-learned/</guid><description>Today I was trying to run my first EMR, here are few lessons I learned during this day. I have previously run hadoop streaming mapreduce so I was familiar with…</description><pubDate>Wed, 15 Oct 2014 17:34:46 GMT</pubDate><content:encoded>Today I was trying to run my first EMR, here are few lessons I learned during this day. I have previously run hadoop streaming mapreduce so I was familiar with the mapreduce state of mind. However, I was not familiar with the EMR environment.

I used &lt;a&gt;boto&lt;/a&gt; - Amazon official python interface.
&lt;div&gt;
&lt;div&gt;1. &lt;strong&gt;AMI version&lt;/strong&gt; - default AMI version is 1.0.0 - first release. This means the following specifications -&lt;/div&gt;
&lt;div&gt;
&lt;blockquote&gt;Operating system: Debian 5.0 (Lenny)

Applications: Hadoop 0.20 and 0.18 (default); Hive 0.5, 0.7 (default), 0.7.1; Pig 0.3 (on Hadoop 0.18), 0.6 (on Hadoop 0.20)

Languages: Perl 5.10.0, PHP 5.2.6, Python 2.5.2, R 2.7.1, Ruby 1.8.7

File system: ext3 for root and ephemeral

Kernel: Red Hat&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/ami-versions-supported.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;For me Python 2.5.2 means -&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;Does not include &lt;a&gt;json&lt;/a&gt; - new in version 2.6.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;collections&lt;/a&gt; is new in python 2.4, but not all the models were added in this version -&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;table-wrap&quot;&gt;
&lt;table class=&quot;confluenceTable&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;&lt;a&gt;&lt;span class=&quot;pre&quot;&gt;namedtuple()&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;factory function for creating tuple subclasses with named fields&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;
&lt;div class=&quot;first last versionadded&quot;&gt;

&lt;span class=&quot;versionmodified&quot;&gt;New in version 2.6.&lt;/span&gt;

&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;&lt;a&gt;&lt;span class=&quot;pre&quot;&gt;deque&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;list-like container with fast appends and pops on either end&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;
&lt;div class=&quot;first last versionadded&quot;&gt;

&lt;span class=&quot;versionmodified&quot;&gt;New in version 2.4.&lt;/span&gt;

&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;&lt;a&gt;&lt;span class=&quot;pre&quot;&gt;Counter&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;dict subclass for counting hashable objects&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;
&lt;div class=&quot;first last versionadded&quot;&gt;

&lt;span class=&quot;versionmodified&quot;&gt;New in version 2.7.&lt;/span&gt;

&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;&lt;a&gt;&lt;span class=&quot;pre&quot;&gt;OrderedDict&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;dict subclass that remembers the order entries were added&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;
&lt;div class=&quot;first last versionadded&quot;&gt;

&lt;span class=&quot;versionmodified&quot;&gt;New in version 2.7.&lt;/span&gt;

&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;&lt;a&gt;&lt;span class=&quot;pre&quot;&gt;defaultdict&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;dict subclass that calls a factory function to supply missing values&lt;/td&gt;
&lt;td class=&quot;confluenceTd&quot;&gt;
&lt;div class=&quot;first last versionadded&quot;&gt;

&lt;span class=&quot;versionmodified&quot;&gt;New in version 2.5.&lt;/span&gt;
&lt;div&gt;&lt;span class=&quot;versionmodified&quot;&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt; &lt;a&gt;dict comprehensions&lt;/a&gt; is also kind of late addition (python 2.7)&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;Therefore specifying the &lt;em&gt;ami_version&lt;/em&gt; version can be critical. Version 2.2.0 worked fine for me.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;2. &lt;strong&gt;Must process all the input!&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;Naturally we will want to process all the input. However, for testing I went over only the n-first lines and then added a break to make things run faster. I was not consuming all the lines and therefore got an error. More about it here -&lt;/div&gt;
&lt;div&gt;&lt;a&gt;http://stackoverflow.com/questions/9881269/broken-pipe-error-causes-streaming-elastic-mapreduce-job-on-aws-to-fail&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
3. &lt;strong&gt;Output folder must not exists&lt;/strong&gt;. This is the same as in hadoop streaming map reduce, for me the way to avoid it was to add a timestamp -

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
output=&quot;s3n://&amp;lt;my-bucket&amp;gt;/output/&quot;+str(int(time.time()))
[/sourcecode]

&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;

4. &lt;strong&gt;Why my process failed&lt;/strong&gt; - one option which produces are relatively understandable explanation is  - conn.describe_jobflow(jobid).laststatechangereason

&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;

5. &lt;strong&gt;cache_files&lt;/strong&gt; - enables you to import files you need for the map reduce process. Super important to &quot;specify a fragment&quot;, i.e. specify the local file name

&lt;/div&gt;
&lt;div&gt;

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
cache_files=[&apos;s3n://&amp;lt;file-location&amp;gt;/&amp;lt;file-name&amp;gt;#&amp;lt;local-file-name&amp;gt;&apos;]
[/sourcecode]

&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;Otherwise you will obtain the following error -&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&quot;Streaming cacheFile and cacheArchive must specify a fragment&quot;&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;6. &lt;strong&gt;Status&lt;/strong&gt; - the are 7 different status your flow may have - COMPLETED, FAILED, TERMINATED, RUNNING, SHUTTING_DOWN, STARTING and WAITING. The right order of statuses if everything goes well is STARTING -&amp;gt; RUNNING -&amp;gt;SHUTTING_DOWN -&amp;gt; COMPLETED.&lt;/div&gt;
&lt;div&gt;The SHUTTING_DOWN may take a while even for a very simple flow I measured about 1 minute of SHUTTING_DOWN process.&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Resources I used -&lt;/strong&gt;&lt;/div&gt;
&lt;a&gt;http://boto.readthedocs.org/en/latest/emr_tut.html&lt;/a&gt;
&lt;div&gt;&lt;a&gt;http://atbrox.com/2010/10/01/programmatic-deployment-to-elastic-mapreduce-with-boto-and-bootstrap-action/&lt;/a&gt;&lt;/div&gt;</content:encoded><category>aws</category><category>boto</category><category>emr</category><category>mapreduce</category><category>python</category></item><item><title>5 interesting things (04/09/2014)</title><link>https://tomron.net/2014/09/04/5-interesting-things-04092014/</link><guid isPermaLink="true">https://tomron.net/2014/09/04/5-interesting-things-04092014/</guid><description>C3.JS - I have previously wrote a post about the importance of visualization in the skill set of data scientist. C3.js is a JavaScript chart library based on…</description><pubDate>Thu, 04 Sep 2014 10:26:25 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;C3.JS&lt;/span&gt;&lt;/strong&gt; - I have previously wrote a post about the importance of visualization in the skill set of data scientist. C3.js is a JavaScript chart library based on d3.js which seems at least in a glimpse to be simple and intuitive. I would like to see a Python client for that but that for the future to come.  &lt;/p&gt;&lt;p&gt;&lt;a&gt;http://c3js.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;nvd3 also do something  like - charts based 3d.js and also have a Python client which I worked with a bit. Comparing the two c3.js seems a little bit more mature than nvd3, ignoring the lack of Python client but I&apos;m sure that gap would be filled soon. &lt;/p&gt;&lt;p&gt;&lt;a&gt;nvd3.org&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Harvard Visualization course&lt;/span&gt;&lt;/strong&gt; - I went through some of the slides and it was fascinating but what is even more exciting is the great collection of links about visualization examples, theory and tools. Great work.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.cs171.org/#!index.md&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;textract&lt;/span&gt;&lt;/b&gt; - I needed high flexibility of input types in a project I do and of course I wanted to deal with as transparent as possible without looking myself to all the relevant packages or adjust my code to the API of each package. Fortunately somebody already did it - textarct. The package is not perfect and there are some &quot;glitches&quot; mostly concerning the parsers themselves (line splitting, non-ascii, etc) and not to the unified API textract provides. However, it is a very good start.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://textract.readthedocs.org/en/latest/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Visualizing Garbage Collection Algorithms&lt;/strong&gt;&lt;/span&gt; - both very cool visualization and good explanations. Design wise I think the visualization should be larger but the concept itself is very neat.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://spin.atomicobject.com/2014/09/03/visualizing-garbage-collection-algorithms/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;SmartCSV&lt;/strong&gt;&lt;/span&gt; - making CSV reader more structured by defining a model and validating it while reading. Enables skipping rows (and soon skipping also columns). It is on going project and feature requests and issues are currently addressed quickly.&lt;/p&gt;&lt;div&gt;&lt;a&gt;https://github.com/santiagobasulto/smartcsv&lt;/a&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;</content:encoded></item><item><title>5 interesting things (26/08/2014)</title><link>https://tomron.net/2014/08/26/5-interesting-things-26082014/</link><guid isPermaLink="true">https://tomron.net/2014/08/26/5-interesting-things-26082014/</guid><description>Gooey - Command line to application! Very cool. Works by mapping ArgumentParser to GUI objects. Very cool and make it easier to make instant tools to play…</description><pubDate>Tue, 26 Aug 2014 08:58:33 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Gooey&lt;/span&gt;&lt;/strong&gt; - Command line to application! Very cool. Works  by mapping ArgumentParser to GUI objects. Very cool and make it easier to make instant tools to play around the office. Future tasks include supporting in more themes, different arg parses (e.g docopt &lt;span style=&quot;color:#333333&quot;&gt;&lt;a&gt;http://docopt.org/&lt;/a&gt;), etc. I believe there is much potential in this project.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;a&gt;https://github.com/chriskiehl/Gooey&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Datamesh&lt;/span&gt;&lt;/b&gt; - stats command line tool. I like working for the command line, at least to begin with and to feel data before doing complex things, this tool is really what I need. However, the documentation is missing \ not clear enough \ open source style.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;a&gt;http://www.gnu.org/software/datamash/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;In that sense, q, &lt;a&gt;http://harelba.github.io/q/&lt;/a&gt;, is also very cool and answer the need to things and speak in the same framework in different tasks. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Getting started with Python internals&lt;/span&gt;&lt;/b&gt; - how to dive to the deep water. Very enriching post which also include links to other interesting posts.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;http://akaptur.github.io/blog/2014/08/03/getting-started-with-python-internals/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;python-ftfy&lt;/span&gt;&lt;/strong&gt; - unicode strings can be very painful when it includes special characters as umlauts (ö), html tags (&lt;/span&gt;&lt;span style=&quot;color:#333333;font-family:arial, helvetica, sans-serif&quot;&gt;&amp;amp;gt;) and everything users can think of :). The goal of this package is to at least partly ease this pain.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;a&gt;https://github.com/LuminosoInsight/python-ftfy&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Fraud detection Lyft vs Uber&lt;/span&gt;&lt;/strong&gt; - I think that the interesting part here is the data visualization as tool to understand the problem better. &lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family:arial, helvetica, sans-serif&quot;&gt;&lt;a&gt;http://linkurio.us/lyft-vs-uber-visualizing-fraud-patterns/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;</content:encoded></item><item><title>setdefault vs get vs defaultdict</title><link>https://tomron.net/2014/08/25/setdefault-vs-get-vs-defaultdict/</link><guid isPermaLink="true">https://tomron.net/2014/08/25/setdefault-vs-get-vs-defaultdict/</guid><description>You have a python dictionary, you want to get the value of specific key in the dictionary, so far so good, right? And then a KeyError - Traceback (most recent…</description><pubDate>Mon, 25 Aug 2014 17:55:49 GMT</pubDate><content:encoded>&lt;p&gt;You have a python dictionary, you want to get the value of specific key in the dictionary, so far so good, right?&lt;/p&gt;
&lt;p&gt;And then a KeyError -&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:18px&quot;&gt;Traceback (most recent call last):
File &quot;&amp;lt;stdin&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;
KeyError: 1 &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hmmm, well if this key does not exist in the dictionary I can use some default value like None, 10, empty string. What&apos;s my options of doing so?&lt;/p&gt;
I can think of 3 -
&lt;ul&gt;
	&lt;li&gt;get method&lt;/li&gt;
	&lt;li&gt;setdefault method&lt;/li&gt;
	&lt;li&gt;defaultdict data structure
get method&lt;/li&gt;
&lt;/ul&gt;
Let&apos;s investigate first -

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
key, value = &quot;key&quot;, &quot;value&quot;
data = {}
x = data.get(key,value)
print x, data #value {}
data= {}
x = data.setdefault(key,value)
print x, data #value {&apos;key&apos;: &apos;value&apos;}
[/sourcecode]

Well, we get almost the same result, x obtains the same value and in get data is not changed while in setdefault data changes. When does it become a problem?

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
key, value = &quot;key&quot;, &quot;value&quot;
data = {}
x = data.get(key,[])append(value)
print x, data #None {}
data= {}
x = data.setdefault(key,[]).append(value)
print x, data None {&apos;key&apos;: [&apos;value&apos;]}
[/sourcecode]

So, when we are dealing with mutable data types the difference is clearer and error prone.

When to use each? mainly depends on the content of your dictionary and its&apos; size.

We can time the differences but it does not really matter as they produce different output and it was not significant for any direction anyhow.

And for defaultdict -

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
from collections import defaultdict
data = defaultdict(list)
print data[key] #[]
data[key].append(value)
print data[key] #[&apos;value&apos;]
[/sourcecode]

setdefault sets the default value to a &lt;span style=&quot;text-decoration:underline&quot;&gt;specific&lt;/span&gt; key we access to while defaultdict is the type of the data variable and set this default value to &lt;span style=&quot;text-decoration:underline&quot;&gt;every&lt;/span&gt; key we access to.

So, if we get roughly the same result I timed the processes for several dictionary sizes (left most column) and run each 1000 times (code below) -
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;dict size&lt;/th&gt;
&lt;th&gt;default value&lt;/th&gt;
&lt;th&gt;method&lt;/th&gt;
&lt;th&gt;time&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;100&lt;/th&gt;
&lt;th&gt;list&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;0.0229508876801&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;0.0204179286957&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;set&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;0.0209970474243&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;0.0194549560547&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;int&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;0.0236239433289&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;0.0225579738617&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;string&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;0.020693063736&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;0.0240340232849&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;10000&lt;/th&gt;
&lt;th&gt;list&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;2.09283614159&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;2.31266093254&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;set&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;2.12825512886&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;3.43549799919&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;int&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;2.04997992516&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;1.87312483788&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;&quot;&quot;&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;2.05423784256&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;1.93679213524&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;100000&lt;/th&gt;
&lt;th&gt;list&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;22.4799249172&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;29.7850298882&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;set&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;23.5321040154&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;41.7523541451&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;int&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;26.6693091393&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;23.1293339729&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt;string&lt;/th&gt;
&lt;td&gt;setdefault&lt;/td&gt;
&lt;td&gt;26.4119689465&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;defaultdict&lt;/td&gt;
&lt;td&gt;23.6694099903&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
Conclusions and summary -
&lt;ul&gt;
	&lt;li&gt;Working with sets is almost always more expensive time-wise than working with lists&lt;/li&gt;
	&lt;li&gt;As the dictionary size grows simple types - string and int perform better with defaultdict then with setdefault while set and list perform worse.&lt;/li&gt;
	&lt;li&gt;Main conclusion - choosing between defaultdict and setdefault also mainly depends in the type of the default value.&lt;/li&gt;
	&lt;li&gt;In this test I tested a particular use case - accessing each key twice. Different use cases \ distributions such as assignment, accessing to the same key over and over again, etc. may have different properties.&lt;/li&gt;
	&lt;li&gt;There is no firm conclusion here just investigating some of interpreter capabilities.&lt;/li&gt;
&lt;/ul&gt;
Code -

[sourcecode language=&quot;python&quot; wraplines=&quot;false&quot; collapse=&quot;false&quot;]
import timeit
from collections import defaultdict
from itertools import product

def measure_setdefault(n, defaultvalue):
 data = {}
 for i in xrange(0,n):
 x = data.setdefault(i,defaultvalue)
 for i in xrange(0,n):
 x = data.setdefault(i,defaultvalue)

def measure_defaultdict(n,defaultvalue):
 data = defaultdict(type(defaultvalue))
 for i in xrange(0,n):
 x = data[i]
 for i in xrange(0,n):
 x = data[i]

if __name__ == &apos;__main__&apos;:
 import timeit
 number = 1000
 dict_sizes = [100,10000, 100000]
 defaultvalues = [[], 0, &quot;&quot;, set()]
 for dict_size, defaultvalue in product(dict_sizes, defaultvalues):
 print &quot;dict_size: &quot;, dict_size, &quot; defaultvalue: &quot;, type(defaultvalue)
 print &quot;\tsetdefault:&quot;, timeit.timeit(&quot;measure_setdefault(dict_size, defaultvalue)&quot;, setup=&quot;from __main__ import measure_setdefault, dict_size, defaultvalue&quot;, number=number)
 print &quot;\\tdefaultdict:&quot;, timeit.timeit(&quot;measure_defaultdict(dict_size, defaultvalue)&quot;, setup=&quot;from __main__ import measure_defaultdict, dict_size, defaultvalue&quot;, number=number)

[/sourcecode]</content:encoded><category>defaultdict</category><category>python</category><category>setdefault</category></item><item><title>EuroPython 2014 - Python under the hood</title><link>https://tomron.net/2014/08/04/europython-2014-python-under-the-hood/</link><guid isPermaLink="true">https://tomron.net/2014/08/04/europython-2014-python-under-the-hood/</guid><description>This is actually a summary of few talks which deals with &quot;under the hood&quot; topics, the talks partially overlap. Those topics include - memory allocation and…</description><pubDate>Mon, 04 Aug 2014 17:05:10 GMT</pubDate><content:encoded>This is actually a summary of few talks which deals with &quot;under the hood&quot; topics, the talks partially overlap. Those topics include - memory allocation and management, inheritance, over-ridden built-in methods, etc.
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Relevant talks -&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;The magic of attribute access by Petr Viktorin&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/123/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Performance Python for Numerical Algorithms by Yves&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/64/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Metaprogramming, from Decorators to Macros by Andrea Crotti&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/84/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Everything you always wanted to know about Memory in Python but were afraid to ask by Piotr Przymus&lt;/div&gt;
&lt;div&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/28/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Practical summary -&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a&gt;__slots__&lt;/a&gt; argument - limited the memory allocation for objects in Python by overriding the __dict__ attribute.&lt;/li&gt;
	&lt;li&gt;Strings - the empty strings and strings of length=1 are saved as constants. Use &lt;a&gt;intern&lt;/a&gt; (or sys.intern in python 3.x) on strings to avoid allocating string variables with the same values this will help making memory usage more efficiency and quicker string comparison. More about this topic &lt;a&gt;here&lt;/a&gt; .&lt;/li&gt;
	&lt;li&gt;Numerical algorithms - the way a 2-dimensional array is allocated (row wise or column wise) and store has a great impact on the performance of different algorithms (even for simple sum function).&lt;/li&gt;
	&lt;li&gt;Working with the GPU - there are packages that process some of the data on the GPU. It is efficient when the data is big and less efficient when the data is small since copying all the data to the GPU has some overhead.&lt;/li&gt;
	&lt;li&gt;Cython use c &quot;malloc&quot; function for re-allocating space when list \ dictionaries \ set grow or shrink. On one hand this function can be overridden, on the other hand one can try to avoid costly processes which cause space allocation operations or to use more efficient data structures, e.g list instead of dictionary where it is possible.&lt;/li&gt;
	&lt;li&gt;Note the garbage collector! Python garbage collector is based on reference count. Over-ridding the &lt;a&gt;__dell__&lt;/a&gt; function may disrupt the garbage collector.&lt;/li&gt;
	&lt;li&gt;Suggested Profiling and monitoring tools - &lt;a&gt;psutil&lt;/a&gt;, &lt;a&gt;memory_profiler&lt;/a&gt;, &lt;a&gt;objgraph&lt;/a&gt;, &lt;a&gt;RunSnakeRun&lt;/a&gt; + &lt;a&gt;Meliae&lt;/a&gt;, &lt;a&gt;valgrind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;Bottom line of all of those - &quot;knowledge itself is power&quot;. I.e. knowing the internal and the impact of what we are doing can bring to a significant improvements.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;There are always several ways to do things and each has cons and pros fitted to the specific case. Some of those are simple to implement and use and can donate to a great improvement on both running time and memory usage. On the other hand some of those suggestion are really &quot;shoot in the foot&quot; - causing memory leaks and other unexpected behavior, beware.&lt;/div&gt;</content:encoded><category>ep2014</category><category>europython</category><category>python</category></item><item><title>5 interesting things (03/08/2014)</title><link>https://tomron.net/2014/08/03/5-interesting-things-03082014/</link><guid isPermaLink="true">https://tomron.net/2014/08/03/5-interesting-things-03082014/</guid><description>Goooooooooaaaaaalllll - world cup is over but Python and soccer are forever :). This post tries to identify goals and interesting events on soccer games based…</description><pubDate>Sun, 03 Aug 2014 17:07:05 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Goooooooooaaaaaalllll&lt;/span&gt;&lt;/strong&gt; - world cup is over but Python and soccer are forever :). This post tries to identify goals and interesting events on soccer games based on the volume on youtube. This post only touches the subject but what a nice start!&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;a&gt;http://zulko.github.io/blog/2014/07/04/automatic-soccer-highlights-compilations-with-python/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Scheduling with Celery&lt;/span&gt;&lt;/strong&gt;&lt;b&gt; &lt;/b&gt;- and I thought I can only make a soup with celery.. Scheduling is not the main goal of Celery but it can be used as such, cron style. More about it  -&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.caktusgroup.com/blog/2014/06/23/scheduling-tasks-celery/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Markov chains&lt;/span&gt;&lt;/b&gt; - the two links below complement one another. One has a great visualization and the other explain things a bit more deeply. &lt;/p&gt;&lt;p&gt;&lt;a&gt;http://setosa.io/blog/2014/07/26/markov-chains/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.analyticsvidhya.com/blog/2014/07/markov-chain-simplified&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;My Ig-Noble candidate&lt;/span&gt;&lt;/b&gt; - &lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.bbc.com/news/magazine-20578627&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Hotels by WiFi&lt;/span&gt;&lt;/b&gt; - geeky but important those days.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.hotelwifitest.com&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Graph Databases, a little connected tour</title><link>https://tomron.net/2014/07/25/graph-databases-a-little-connected-tour/</link><guid isPermaLink="true">https://tomron.net/2014/07/25/graph-databases-a-little-connected-tour/</guid><description>EuroPython talk by: Francisco Fernández Castaño https://ep2014.europython.eu/en/schedule/sessions/70/ The talk was classified as novice and so it was - very…</description><pubDate>Fri, 25 Jul 2014 13:56:19 GMT</pubDate><content:encoded>&lt;div&gt;EuroPython talk by: Francisco Fernández Castaño&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/70/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;The talk was classified as novice and so it was - very basic graph database ideas.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Castaño started by presenting the general idea of graph databases and showing some use cases.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;One of the most known use cases - social media data, friends-of-friends.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Then he presented &lt;a&gt;Neo4j&lt;/a&gt; which is graph database written in Java but originally was written in Python. Neo4j is known to be very scalable and to support ACID transactions. Another nice property about Neo4j is the ability to extend the give rest API but your own needs.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The next part of talked focused on the &lt;a&gt;cypher language&lt;/a&gt; - which is the way to query the Neo4j database. Neo4j have some nice UI properties and I really missed some reference or example for that on this talk.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Last but not least tip given in the talk, you can try Neo4j without having to install it on your machine - &lt;a&gt;http://www.graphenedb.com/&lt;/a&gt; (free sand box of up to 1k nodes and 10k edges).&lt;/div&gt;</content:encoded><category>ep2014</category><category>europython</category><category>python</category></item><item><title>The Shogun Machine Learning Toolbox</title><link>https://tomron.net/2014/07/25/the-shogun-machine-learning-toolbox/</link><guid isPermaLink="true">https://tomron.net/2014/07/25/the-shogun-machine-learning-toolbox/</guid><description>EuroPython talk by: Heiko Strathmann, herrstrathmann.de https://ep2014.europython.eu/en/schedule/sessions/103/ Strathmann presented the Shogun toolbox . Shogun…</description><pubDate>Fri, 25 Jul 2014 13:37:17 GMT</pubDate><content:encoded>&lt;div&gt;EuroPython talk by: Heiko Strathmann, &lt;a&gt;herrstrathmann.de&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/103/&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Strathmann presented the &lt;a&gt;Shogun toolbox&lt;/a&gt;. Shogun is a Machine Learning toolbox which implement most of the common supervised and unsupervised algorithms. Shogun is implemented in C++ and interacts with Python as well as with Java, Ruby, Matlab, Lau, etc. Shogun is meant to run on single machine and no distributed.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Shogun is an open source project started on 2004. It has 8 core developers + 20 contributors and it is fairly active. It also has a collebaration with &lt;a&gt;Google summer of code&lt;/a&gt; - 29 projects so far, 8 on going.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The C++ maybe the most significant advantage of Shogun over SciPy. It is simply faster and enables more efficient memory allocation and run time optimization and well as multi-language support . Therefore enabling training and classifying data based on larger number of samples and higher dimension.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The binding \ interfaces to other languages is done using - &lt;a&gt;http://www.swig.org&lt;/a&gt;. &lt;/div&gt;&lt;p&gt;Building, bug tracing and deployment is done using - &lt;a&gt;http://buildbot.net/&lt;/a&gt;.&lt;/p&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Summarizing - Specially when going larger Shogun seems like a good alternative to SciPy (competition makes both products better). Shogun site offers some tutorials include &lt;a&gt;notebooks&lt;/a&gt; and &lt;a&gt;demos&lt;/a&gt;.&lt;/div&gt;</content:encoded></item><item><title>Learning Chess from Data</title><link>https://tomron.net/2014/07/24/learning-chess-from-data/</link><guid isPermaLink="true">https://tomron.net/2014/07/24/learning-chess-from-data/</guid><description>EuroPython talk I gave today. Joint work with N.M. Talk is here - https://ep2014.europython.eu/en/schedule/sessions/18/ Slides and code -…</description><pubDate>Thu, 24 Jul 2014 19:26:12 GMT</pubDate><content:encoded>&lt;p&gt;EuroPython talk I gave today. Joint work with N.M.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Talk is here - https://ep2014.europython.eu/en/schedule/sessions/18/&lt;/p&gt;&lt;p&gt;Slides and code - https://github.com/nivm/learningchess&lt;/p&gt;</content:encoded><category>ep2014</category><category>europython</category><category>python</category></item><item><title>Log everything with logstash and elasticsearch</title><link>https://tomron.net/2014/07/22/log-everything-with-logstash-and-elasticsearch/</link><guid isPermaLink="true">https://tomron.net/2014/07/22/log-everything-with-logstash-and-elasticsearch/</guid><description>EuroPython talk by: Peter Hoffmann , @peterhoffmann https://ep2014.europython.eu/en/schedule/sessions/47/ A talk by Peter Hoffmann from Blue Yonder which is…</description><pubDate>Tue, 22 Jul 2014 18:38:38 GMT</pubDate><content:encoded>&lt;p&gt;EuroPython talk by: &lt;span class=&quot;name&quot;&gt;Peter Hoffmann&lt;/span&gt;, &lt;a&gt;@peterhoffmann&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/47/&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;A talk by &lt;span class=&quot;name&quot;&gt;Peter Hoffmann from Blue Yonder which is one of the sponsors of the conference.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;Another very good talk by an experienced speaker. However the name  is kind of misleading. Yes - &lt;a&gt;logstash&lt;/a&gt; and &lt;a&gt;elasticsearch&lt;/a&gt; were mentioned however to main concept of the talk was really logging chain and centralized logging while logstash and elasticsearch are two tools along this chain and there are some alternatives in every step of this chain.&lt;/p&gt;&lt;p&gt;This talk gave me a lot to think about the logging on the company aspect and how should they run, monitor, etc. Also there is some tension to solve \ define about what is logged and what error message \ outputs an app should provide (&quot;logging best practices&quot;).&lt;/p&gt;&lt;p&gt;The video is already available in the EuroPython site and I hope that the slides would be available too soon.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content:encoded><category>ep2014</category><category>europython</category><category>python</category></item><item><title>Full Stack Python</title><link>https://tomron.net/2014/07/22/full-stack-python/</link><guid isPermaLink="true">https://tomron.net/2014/07/22/full-stack-python/</guid><description>EuroPython talk by: Matt Makai, @mattmakai https://ep2014.europython.eu/en/schedule/sessions/41/ I expected this talk to be full with buzzwords and it was...…</description><pubDate>Tue, 22 Jul 2014 17:53:20 GMT</pubDate><content:encoded>&lt;p&gt;EuroPython talk by: Matt Makai, &lt;a&gt;@mattmakai&lt;/a&gt; &lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;a&gt;https://ep2014.europython.eu/en/schedule/sessions/41/&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;I expected this talk to be full with buzzwords and it was... but in a good sense. &lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Makai is the builder of &lt;a&gt;Full Stack Python&lt;/a&gt; site as such he spoke about what you need from the moment you have an idea to a python web app until you deploy including all the essential steps - wsgi server, hosting, logging etc.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Every layer in the site include relevant link and tutorials. Good starting point for a python web-app developer.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;The talk was interesting due to Makai enthusiasm to teach and to share his knowledge (and of course to promote his site and that&apos;s legit as well) and his professional knowledge. There are really few people the can speak so fluently for 25 minutes.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Slides - &lt;a&gt;http://www.mattmakai.com/presentations/2014-full-stack-python-berlin.html&lt;/a&gt;&lt;/div&gt;</content:encoded><category>ep2014</category><category>europython</category><category>python</category></item><item><title>5 interesting things (18/7/2014)</title><link>https://tomron.net/2014/07/18/5-interesting-things-1872014/</link><guid isPermaLink="true">https://tomron.net/2014/07/18/5-interesting-things-1872014/</guid><description>A\B Testing - No need to say that A\B is a very hot buzz word in the industry. A\B tests were used long ago in psychology but today there are much more…</description><pubDate>Fri, 18 Jul 2014 09:14:54 GMT</pubDate><content:encoded>&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;b&gt;A\B Testing&lt;/b&gt;&lt;/span&gt; - No need to say that A\B is a very hot buzz word in the industry. A\B tests were used long ago in psychology but today there are much more accessible and easy to set. The following series of posts (one is still not publish) describe 5 simple guide lines for A\B testing.

http://sl8r000.github.io/ab_testing_statistics/

&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Shellify&lt;/span&gt;&lt;/b&gt; - decorator which turns Python models into shell. I don&apos;t see an everyday usage to it, maybe on developing but it has a high coolness factor which is important as well.

&lt;a&gt;https://bitbucket.org/johannestaas/shellify&lt;/a&gt;

&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Code review without your glasses&lt;/span&gt;&lt;/b&gt; - I like this post because in my humble opinion it is very creative, beyond the box. It is also a good reminder about about what to notice in code review.

&lt;a&gt;http://robertheaton.com/2014/06/20/code-review-without-your-eyes/&lt;/a&gt;

Side kick - the last link reminded me of &lt;a&gt;rubber duck debugging&lt;/a&gt; and on the way I found this - &lt;a&gt;http://rubberduckreview.com/&lt;/a&gt;

&lt;b&gt;Deployment academy&lt;/b&gt; - a series of posts by Rainforest in their blog. This time a post about &quot;zero downtime database migrations&quot;. The post is simple and easy to understand and answer a common issues in the life of a developer. Of course, practices and specific problems differ from one organization to another but the core ideas are as is.

&lt;a&gt;https://blog.rainforestqa.com/2014-06-27-zero-downtime-database-migrations/&lt;/a&gt;</content:encoded></item><item><title>Awesome *</title><link>https://tomron.net/2014/07/03/awesome/</link><guid isPermaLink="true">https://tomron.net/2014/07/03/awesome/</guid><description>Are we going back? In the past week I have bumped into two github repositories such as awesome-python and awesome-sysadmin . Both repositories do a great job…</description><pubDate>Thu, 03 Jul 2014 14:23:38 GMT</pubDate><content:encoded>&lt;p&gt;Are we going back?&lt;/p&gt;&lt;p&gt;In the past week I have bumped into two github repositories such as &lt;a&gt;awesome-python&lt;/a&gt; and &lt;a&gt;awesome-sysadmin&lt;/a&gt;. Both repositories do a great job and compose and interesting list \ index of relevant tools.&lt;/p&gt;&lt;p&gt;However, this made me feel that we are going back. Those indices reminded me the pre-search-engines days or shell I say the BME days (before modern era ;). Specifically this reminded me of Alta Vista (but also other indices sites - do you recall Lycos?) where all the links where indexed under some category and sub categories and one should have dig in those categories to find what he looked for.&lt;/p&gt;&lt;p&gt;Aren&apos;t the search engines today strong enough to answer the query &quot;python machine learning package&quot;?. Is human indexing really our resort? I don&apos;t really think so. I believe in the power of the human behind the machine and their ability to build a good enough searching engines. Those indices can be very useful but I would rather have them built automatically and not manually.&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (23/6/2014)</title><link>https://tomron.net/2014/06/23/5-interesting-things-2362014/</link><guid isPermaLink="true">https://tomron.net/2014/06/23/5-interesting-things-2362014/</guid><description>Celery best practices - python celery package is on my &quot;todo list&quot; once I have a relevant task. However, some of the thoughts and ideas which are talked about…</description><pubDate>Mon, 23 Jun 2014 18:35:21 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Celery best practices&lt;/span&gt;&lt;/strong&gt; - python celery package is on my &quot;todo list&quot; once I have a relevant task. However, some of the thoughts and ideas which are talked about in this post are more general regarding software engineering. &lt;/p&gt;&lt;p&gt;&lt;a&gt;https://denibertovic.com/posts/celery-best-practices/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Keep calm and learn d3.js&lt;/span&gt;&lt;/strong&gt; - d3.js is also something which is on my &quot;todo list&quot;. I used it randomly here-and-there but would like to do it better (and also to gain some deeper experience with JS). However, this is a very nice tutorial to start with d3.js.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://slides.com/kentenglish/getting-started-with-d3-js-using-the-toronto-parking-ticket-data&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;DBSCAN well explained&lt;/span&gt;&lt;/strong&gt; - unsupervised learning sometimes feels like no man&apos;s land and k-means is almost always the choice when picking a clustering algorithm. This post not only does a great job by explaining the algorithm itself but it also gives great examples and show how to adjust the parameters. &lt;/div&gt;&lt;p&gt;&lt;a&gt;http://cjauvin.blogspot.ca/2014/06/dbscan-blues.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Machine learning in Airbnb&lt;/span&gt;&lt;/strong&gt; - This post is a case study of machine learning as it is used in Airbnb. I like reading such posts because it is interesting to learn about the challenges other organizations face and about their solutions and how they use existing tools and packages and adjust and optimize them to their need (in this post - scikit learn and re-writing R export function in c++).&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://nerds.airbnb.com/architecting-machine-learning-system-risk/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Current events - world cup predictions&lt;/span&gt;&lt;/strong&gt; - as I love both sports and machine learning, statistics and so forth there are several posts which try to employ ML techniques to predict world cup results. The most interesting post I read so far is Nate Silver&apos;s post. It takes many features into account and explain them clearly.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://fivethirtyeight.com/features/its-brazils-world-cup-to-lose/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Andrew Ng and PyStruct meetup</title><link>https://tomron.net/2014/06/17/andrew-ng-and-pystruct-meetup/</link><guid isPermaLink="true">https://tomron.net/2014/06/17/andrew-ng-and-pystruct-meetup/</guid><description>Yesterday I attended the &quot;Andrew Ng and pyStruct&quot; meetup. http://www.meetup.com/berlin-machine-learning/events/179264562/ I was lucky enough to get a place to…</description><pubDate>Tue, 17 Jun 2014 09:33:23 GMT</pubDate><content:encoded>&lt;p&gt;Yesterday I attended the &quot;Andrew Ng and pyStruct&quot; meetup. &lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.meetup.com/berlin-machine-learning/events/179264562/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I was lucky enough to get a place to the meetup due to the Germany-Portugal game that happened on the same time :)&lt;/p&gt;&lt;p&gt;The first part by Andrew Ng was a video meetup joint to 3 locations - Paris, Zurich and Berlin. &lt;a&gt;Andrew Ng&lt;/a&gt; is a co-founder of &lt;a&gt;Coursera&lt;/a&gt; and a Machine Learning guru. He teaches the &lt;a&gt;ML course&lt;/a&gt; in Coursera which is one of the most popular courses in Coursera (took it myself and it is a very good and structured introduction to machine learning, new session started yesterday). He teaches in Standford and soon he will be leaving to &lt;a&gt;Baidu research&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;The talk included 15-20 minutes of introduction to &lt;a&gt;deep learning&lt;/a&gt;, recent results,  applications and challenges. He mainly focused on scaling up deep learning algorithms for using billions features \ properties. The rest of the talk was question answering mostly regarding the theoretical aspects of deep learning, future challenges, etc. For me one of the most important things he said was &quot;innovation is a result of team work&quot;.&lt;/p&gt;&lt;p&gt;Some known applications of deep learning is - speak recognition, image processing, etc.&lt;/p&gt;&lt;p&gt;In the end he suggested taking Stanford deep learning tutorial - &lt;a&gt;http://deeplearning.stanford.edu/tutorial/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;T.R - there are currently 2 python packages I know which deal with deep learning - &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a&gt;Theano&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a&gt;PyLearn2&lt;/a&gt; - mostly based on Theano&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; The next talk was given by &lt;a&gt;Andreas Mueller&lt;/a&gt;. You can find his slides &lt;a&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Muelller introduced &lt;a&gt;structured prediction&lt;/a&gt; which is a natural extension or a generalization of regression problems to a structured output rather than just a number \ class . Structured learning has advantage over other algorithms of supervised learning as it can learn several properties at once and use the correlations between those properties.&lt;/p&gt;&lt;p&gt;Example - costumers data, several properties of costumers - gender, marriage status, has children, owns a car, etc. One can guess that married and has children properties are highly correlated and that when learning about those properties together there is a better chance of getting good results. It is better than LDA in the sense that it has less classes (not every combination of the variables is a class) and it requires less training data.&lt;/p&gt;&lt;p&gt;Other examples include pixel classification - classifying each pixel to an object in the image and OCR, etc.&lt;/p&gt;&lt;p&gt;He then talked about &lt;a&gt;PyStruct&lt;/a&gt; - a python package for structured prediction. Actually not much to add that is not written in the documents. &lt;/p&gt;</content:encoded><category>deep learning</category><category>machine learning</category><category>meetup</category><category>python</category></item><item><title>5 interesting things (14/6/2014)</title><link>https://tomron.net/2014/06/14/5-interesting-things-1462014/</link><guid isPermaLink="true">https://tomron.net/2014/06/14/5-interesting-things-1462014/</guid><description>My little helper - search engine for code examples and use cases. I haven&apos;t yet tried that &quot;live&quot; when I needed something, but I hope I will remember it next…</description><pubDate>Sat, 14 Jun 2014 15:30:13 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;My little helper&lt;/span&gt;&lt;/strong&gt; - search engine for code examples and use cases. I haven&apos;t yet tried that &quot;live&quot; when I needed something, but I hope I will remember it next time.&lt;/p&gt;&lt;p&gt;&lt;a&gt;https://sourcegraph.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Httpie and Percol&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt;- two unrelated tools but I see a lot of similarity between them as they try to change the common way we do things on command line. Http try to make curl requests more human understandable and percol which try to make filtering using piping more interactive. Reminds me a bit of edinting in sublime.&lt;/p&gt;&lt;p&gt;&lt;a&gt;https://github.com/jakubroztocil/httpie&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a&gt;https://github.com/mooz/percol&lt;/a&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Python 3 is good for you&lt;/span&gt;&lt;/strong&gt; - A bit long but very interesting. Overview 10 features which are new in Python 3. There were recently a lot of posts around the web discussing whether Python 3 is better than Python 2.x, whether Python 3 should be rolled back and buried forever etc. This is one of the most informative posts (although it could be summarized and shorter) I have read. I think that one of the main reasons organization don&apos;t currently move to Python 3 beside the fact the people and organization don&apos;t love changes is because it is an expensive process (mainly compatibility) and  even this post does not succeed in convincing with its&apos; added value.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://asmeurer.github.io/python3-presentation/slides.html#1&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Are we humans or are we dancers&lt;/span&gt;, &lt;span style=&quot;text-decoration:underline&quot;&gt;sorry computers&lt;/span&gt;&lt;/strong&gt;&lt;b&gt; -&lt;/b&gt; &lt;/p&gt;&lt;p&gt;&lt;a&gt;http://wired.com/2014/01/how-to-hack-okcupid/all&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Kernel tricks&lt;/strong&gt;&lt;/span&gt; - very clear post about kernel trick which also make clear additional machine learning terminology and the examples are very good. I would say that this is a very good post for beginners-intermediates in Machine Learning. Going the extra mile would be writing something similar about PCA has it has a lot of similar ideas.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.eric-kim.net/eric-kim-net/posts/1/kernel_trick.html&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Visualization - Data scientist toolkit</title><link>https://tomron.net/2014/06/03/visualization-data-scientist-toolkit/</link><guid isPermaLink="true">https://tomron.net/2014/06/03/visualization-data-scientist-toolkit/</guid><description>Data scientist are said to have better development knowledge than the average statistician and better statistic knowledge than the average developer. However,…</description><pubDate>Tue, 03 Jun 2014 10:16:03 GMT</pubDate><content:encoded>&lt;p&gt;Data scientist are said to have better development knowledge than the average statistician and better statistic knowledge than the average developer. However, together with those skills one also needs marketing skills - the ability to communicate your, no so simple job and results to other people. Those people can be the CTO or VP R&amp;amp;D, team members, customers or sales and marketing people. They don&apos;t necessarily share your knowledge or dive into the details as fast as you.&lt;/p&gt;
&lt;p&gt;One of the best ways to make data and results accessible is creating visualizations, automatically of course. In this post I&apos;ll review several visualizations tools, mostly for Python with some additional side kicks.&lt;/p&gt;
&lt;a&gt;&lt;strong&gt;Matplotlib&lt;/strong&gt;&lt;/a&gt; - probably the most known python visualization package. Includes most of the standard charts - bar charts, pie charts, scatters, ability to embed images, etc. Since there are many users using it there are many questions, examples and documentations around the web. However, the downside for me is that it is more complex than it should be. I have used it in several projects and I don&apos;t yet acquired the intuition to fully utilize.

Matplotlib have several extensions including -
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;mplot3d&lt;/a&gt;&lt;/strong&gt; - 3d visualization&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;cartopy&lt;/a&gt;&lt;/strong&gt; - for maps charts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;a&gt;graphviz&lt;/a&gt;&lt;/strong&gt; - Designated for drawing graphs. Graph drawing software with python package. &lt;a&gt;pygraphviz&lt;/a&gt; is a python package for graphviz which provides a drawing layer and graph layout algorithms. The first downside of this is that you need to download the graphviz software. I have done it several times on several different machines (most of the consist of ubuntu) it never passed smoothly and I was not able to do it only from the command line which make it problematic if one wants to deploy it on remote machines. I believe that it could be done but at the moment I find this process only as an irksome overhead.&lt;/p&gt;
&lt;p&gt;Side kicks -&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;PyDot&lt;/a&gt;&lt;/strong&gt; - Implements &lt;a&gt;DOT graph description language&lt;/a&gt;. PyDot is basically an interface to interact with PyGraphviz dot layout. The main advantage of the dot files and data is the advantage in standardization - one can create dot file in one process and use it in other process. DOT is an intuitive language which focuses on drawing the graph and not on calculating the graph. I would say that it is the last step in the chain.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;Networkx&lt;/a&gt;&lt;/strong&gt; - a package for working and manipulating graph. Implements many graph algorithms such as shortest path, clustering, minimum spanning tree, etc. The graphs created in Networkx can be drawn using either matplotlib or pygraphviz and can also create dot files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;a&gt;Vincent&lt;/a&gt;&lt;/strong&gt; - A relatively new python visualization package. Vincent translates Python to &lt;a&gt;Vega&lt;/a&gt; which is a visualization  grammar. I like it because it is easy, interactive and simple to output either as JSON or as HTML . However, I&apos;m not sure that both Vincent and Vega are mature enough at this point to answer all the needs. It is important to mention that Vega is actually a wrapper above &lt;a&gt;D3&lt;/a&gt; which is an amazing tool with growing community.&lt;/p&gt;
&lt;p&gt;Additional related tools I&apos;m not (yet) experienced with -&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;xlsxwriter&lt;/a&gt;&lt;/strong&gt; - creating excel files (xlsx format) including embedding charts on those files.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;plot.ly&lt;/a&gt;&lt;/strong&gt; - very talked about tool for collaborating data and graphing tool which have a Python client. I try to keep my data as private as possible and don&apos;t want to be dependent on internet connection (for example - creating graph with a lot of data) so this is the down side for me in this tool. However, the social \ collaborative aspect of this product is also an important part and the graphing is only one aspect of it.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;Google charts&lt;/a&gt;&lt;/strong&gt; - same downside as plot.ly - I like to be as independent as possible. However, comparing to plot.ly it looks more mature and has far more options, chart types than plot.ly at this stage and there is also a sand box to play with it. Plot.ly has advantages over Google charts in the ease of usage for non programmers.&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;&lt;a&gt;Bokeh&lt;/a&gt;&lt;/strong&gt; - Nice, interactive charts on large data sets. Maybe the next big thing for plotting in Python.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;</content:encoded><category>google charts</category><category>graphviz</category><category>matplotlib</category><category>networkx</category><category>plotly</category><category>pygraphviz</category><category>python</category><category>visualization</category></item><item><title>5 interesting things (2/6/2014)</title><link>https://tomron.net/2014/06/02/5-interesting-things-262014/</link><guid isPermaLink="true">https://tomron.net/2014/06/02/5-interesting-things-262014/</guid><description>Tell me your name and I&apos;ll tell you your age - playing with data and a conditioned distribution…</description><pubDate>Mon, 02 Jun 2014 10:11:38 GMT</pubDate><content:encoded>&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Tell me your name and I&apos;ll tell you your age&lt;/strong&gt;&lt;/span&gt; - playing with data and a conditioned distribution  &lt;/p&gt;&lt;p&gt;&lt;a&gt;http://fivethirtyeight.com/features/how-to-tell-someones-age-when-all-you-know-is-her-name/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Analysis of Over 2,000 Computer Science Professors at Top Universities&lt;/strong&gt;&lt;/span&gt; - while this data is interesting I would say that it is only an introduction. It is not an anthropological study but it is still curious to ask how many of those professors are women? what are their ages? is the median age of a women when she joins similar to those of man? What is the distribution over the different sub-fields (i.e. are women more to theory than man?)? What is the percentage of the foreign professor or professor who did not took their undergrad studies in the US?&lt;/p&gt;&lt;p&gt;This is a nice starting point and there are many other things that can be done with this data. &lt;/p&gt;&lt;p&gt;&lt;a&gt;http://jeffhuang.com/computer_science_professors.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Good runner, bad&lt;/strong&gt;&lt;strong&gt; investor?&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; &lt;/strong&gt;- An empirical evidence \ variation on Kahneman and Tversky &quot;Cognitive Biases&quot; but a nice one.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.nytimes.com/2014/04/23/upshot/what-good-marathons-and-bad-investments-have-in-common.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Link shortening&lt;/strong&gt;&lt;/span&gt; - short, elegant links satisfy both technological standards (twitter 140 char limit) and  human needs for short links which fit in line. Apparently those links cause much overhead due to the redirection, harm user experience and worth a lot of money.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://t37.net/why-link-shorteners-harm-your-readers-and-destroy-the-web.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Hacker News &lt;/span&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;aggregation&lt;/span&gt;&lt;/strong&gt; - I&apos;m probably the last one to find out but for me it is an easier way to follow new links in &lt;a&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a&gt;http://www.hndigest.com/&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>5 interesting things (23/5/2014)</title><link>https://tomron.net/2014/05/23/5-interesting-things-2352014/</link><guid isPermaLink="true">https://tomron.net/2014/05/23/5-interesting-things-2352014/</guid><description>Is that a baby bump in your status? Janet Vertesi tried to keep her pregnancy a way from the social networks. Did she succeed? What was the price? (high)…</description><pubDate>Fri, 23 May 2014 10:02:09 GMT</pubDate><content:encoded>&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Is that a baby bump in your status?&lt;/strong&gt;&lt;/span&gt; Janet Vertesi tried to keep her pregnancy a way from the social networks. Did she succeed? What was the price? (high)&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;&lt;a&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;http://time.com/83200/privacy-internet-big-data-opt-out/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Spurious Correlation&lt;/strong&gt;&lt;/span&gt; - &quot;&lt;span style=&quot;color:#000000&quot;&gt;marriages in Alabama are causing deaths by electrocution&quot; - the nightmare of every data scientist. Are two variable correlated? Is one the cause of the other or the other is the cause of the one?  This post took it one step forward - &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;&lt;a&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;http://www.popsci.com/article/science/algorithm-reveals-link-between-sour-cream-and-traffic-accidents&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;History of Machine Learning&lt;/strong&gt;&lt;/span&gt; - Another way to view machine learning and the progress made over the years. I&apos;m wondering about the exact starting point \ initial formation of machine learning, I think it is a bit earlier than what is stated there. The reason to read this article is given in Pirkei Avot: &quot;&lt;span style=&quot;color:#000000&quot;&gt;Know from where you came and where you are going and before whom you are destined to give account and reckoning&quot; (3;1).&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;&lt;a&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;www.erogol.com/brief-history-machine-learning/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Breaking Python 2 for 1&lt;/strong&gt;&lt;/span&gt; - I have missed the first post when it was published so got 2 for 1 now. Two fascinating blog posts about under the hood of CPython, ctypes, garbage collector, etc. I really appreciate the hands on approach, it reveals a side of Python which I&apos;m not exposed to on my daily work (and probably for most projects it is not a good practice to mess with).&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;&lt;a&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;http://blog.hakril.net/articles/0-understanding-python-by-breaking-it.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;&lt;a&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;http://blog.hakril.net/articles/1-understanding-python-by-breaking-it---lvl-2.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;&lt;strong&gt;Where is Waldo?&lt;/strong&gt;&lt;/span&gt; - find Waldo in just 42 lines of code (not surprising having that 42 is the meaning of life). I have not background in image processing but those tools really make it easy, almost out of the box (and great flashback to my childhood).&lt;/p&gt;
&lt;p style=&quot;color:#222222&quot;&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;&lt;a&gt;&lt;span style=&quot;color:#3366ff&quot;&gt;http://machinelearningmastery.com/using-opencv-python-and-template-matching-to-play-wheres-waldo/&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</content:encoded></item><item><title>Learning: Spatial database</title><link>https://tomron.net/2014/05/18/learning-spatial-database/</link><guid isPermaLink="true">https://tomron.net/2014/05/18/learning-spatial-database/</guid><description>A while ago I was asked a question about Spatial database and figured out I didn&apos;t know anything about it. So, I use this platform to document my learning…</description><pubDate>Sun, 18 May 2014 14:13:33 GMT</pubDate><content:encoded>&lt;p&gt;A while ago I was asked a question about Spatial database and figured out I didn&apos;t know anything about it. So, I use this platform to document my learning about this topic.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What is Spatial data?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The first lesson in &quot;database 101&quot; is that the design of a database should fit to the queries made on it. The special thing about spatial databases is that they hold data about objects in a geometric spaces. Most of the traditional databases don&apos;t index the information in an optimize way for spatial queries, examples for such queries can be -&lt;/p&gt;&lt;ul&gt;&lt;li&gt;How to far is location A to location B?&lt;/li&gt;&lt;li&gt;How to get from location A to location B?&lt;/li&gt;&lt;li&gt;What is the closest restaurants to some location?&lt;/li&gt;&lt;li&gt;What is the path people usualy take in some park \ market?&lt;/li&gt;&lt;li&gt;Is location A inside city B?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We can divide spatial queries to few groups (based on &lt;a&gt;Wikipedia&lt;/a&gt;)&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Spatial Measurements&lt;/span&gt;: Computes line length, polygon area, the distance between geometries, etc.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Spatial Functions&lt;/span&gt;: Modify existing features to create new ones, for example by providing a buffer around them, intersecting features, etc.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Spatial Predicates&lt;/span&gt;: Allows true/false queries about spatial relationships between geometries. Examples include &quot;do two polygons overlap&quot; or &apos;is there a residence located within a mile of the area we are planning to build the landfill?&apos;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Geometry Constructors&lt;/span&gt;: Creates new geometries, usually by specifying the vertices (points or nodes) which define the shape.&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;Observer Functions&lt;/span&gt;: Queries which return specific information about a feature such as the location of the center of a circle.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;What is next?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This post is actually the preview for additional two posts - a theoretic one and a productive one.&lt;/p&gt;&lt;p&gt;The theoretic one will compare the different spatial indices and on which needs each of them answers. This post will talk about the most common index of this kind is R-Tree and some of its&apos; extensions and presumably some additional related theory.&lt;/p&gt;&lt;p&gt;The productive one will present some of the current solutions for spatial data among them is &lt;a&gt;PostGis&lt;/a&gt; used in PostgreSQL, MySQL and additional NoSQL solution (probably either Neo4j or MongoDB).&lt;/p&gt;&lt;p&gt;Beside the basic curiosity of learning a new thing I believe that the field of &quot;Location intelligence&quot;, i.e., using and analyzing spatial information as part of the decision making process, is an emerging field yet to be discovered. In other words location intelligence is another layer of business intelligence (BI) and as the technology evolves and the data is gathered we can now use this data better than ever before.&lt;/p&gt;&lt;p&gt;Some of the current commercial application of location intelligence - &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Route planning - such as &lt;a&gt;Waze&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Geo targeting - for example using IP address to display relevant ads. &lt;/li&gt;&lt;li&gt;Travel planning - hotel, restaurant, attractions such as &lt;a&gt;GetYourGuide&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Sales analysis - such as &lt;a&gt;SpatialKey&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;</content:encoded><category>Learning</category><category>spatial database</category></item><item><title>5 interesting things (16/5/2014)</title><link>https://tomron.net/2014/05/16/5-interesting-things-1652014/</link><guid isPermaLink="true">https://tomron.net/2014/05/16/5-interesting-things-1652014/</guid><description>MailPin -Turn an email to a web page - For me it is a cool tool that I probably won&apos;t use but it is cool and that is also important thing those days.…</description><pubDate>Fri, 16 May 2014 15:32:36 GMT</pubDate><content:encoded>&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;MailPin -Turn an email to a web page&lt;/span&gt;&lt;/b&gt; -  For me it is a cool tool that I probably won&apos;t use but it is cool and that is also important  thing those days.&lt;br /&gt;&lt;a&gt;http://mailp.in/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-decoration:underline&quot;&gt;10 years to LiMux project&lt;/span&gt;&lt;/b&gt; - &quot;How Munich switched 15,000 PCS from Windows to Linux&quot;. Interesting both on the technological aspect and both on the sociological \ anthropological aspect.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;a&gt;http://www.linuxvoice.com/the-big-switch/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;span style=&quot;font-weight:bold;text-decoration:underline&quot;&gt;Why Python is Slow: Looking Under the Hood:&lt;/span&gt; I really like posts which help me understand better what I&apos;m doing and this one is also very well written. Through &lt;a&gt;Python Weekly&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;a&gt;http://jakevdp.github.io/blog/2014/05/09/why-python-is-slow/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;span style=&quot;font-weight:bold;text-decoration:underline&quot;&gt;How to Marry The Right Girl: A Mathematical Solution:&lt;/span&gt; I must admit that I don&apos;t like those kind of posts or at least their header. I feel they are very sexist not to say misanthropic. However, there was one point which I relate to in this post but on a different scope  work interviews. Doing some work interviews lately, my gut feeling is that being in the first group really harm the chances of getting hired. Many interviewers don&apos;t really know what exactly they are looking for and refine their requirements only after several interviews. To conclude the content was interesting but could be written in a different tone.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;a&gt;http://www.npr.org/blogs/krulwich/2014/05/15/312537965/how-to-marry-the-right-girl-a-mathematical-solution&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style=&quot;color:#000000&quot;&gt;&lt;span style=&quot;font-weight:bold;text-decoration:underline&quot;&gt;The Economics of Kickstart project:&lt;/span&gt; Crowd-funding is one of the latest trends. As in everything there are both advantages and disadvantages. One of the main advantages as I see it is the global exposure to one&apos;s ideas. The down side of this advantage is that it eases the way to still ideas (some my call it inspiration). More over it does not really clearly if it is always profitable as expected. More about it in the attached post.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;a&gt;https://medium.com/@cameronmoll/5b374cfeb43c&lt;/a&gt;&lt;/div&gt;</content:encoded><category>linux</category><category>python</category></item><item><title>Coursera R programming course</title><link>https://tomron.net/2014/05/12/coursera-r-programming-course/</link><guid isPermaLink="true">https://tomron.net/2014/05/12/coursera-r-programming-course/</guid><description>I have recently took &quot;R programming&quot; course in Coursera . This is the second course I take there. Before that I took &quot;Machine Learning&quot; course which was much…</description><pubDate>Mon, 12 May 2014 08:52:23 GMT</pubDate><content:encoded>&lt;div&gt;I have recently took &quot;R programming&quot; course in &lt;a&gt;Coursera&lt;/a&gt;. This is the second course I take there. Before that I took &quot;Machine Learning&quot; course which was much heavier course with respect both to what was taught, to the course length and to the assignments and other requirements.&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;ul&gt;
	&lt;li&gt;In the world of SciPy, Numpy, Pandas and others in Python I don&apos;t really see the advantage in R. Those libraries have almost the same capabilities while Python is a much stronger and more common and therefore supported and documented tool.&lt;/li&gt;
	&lt;li&gt;Visualizing the data - for me one of the best practices to gain better understanding of the data and to introduce the data to other people is creating a visualization. I really lack that part in Coursera course, I think that they should have done that extra mile, this would make the data processing more meaningful.&lt;/li&gt;
	&lt;li&gt;I&apos;m not an R expert now, not even close. However, I gained some background next time I will need to handle code in R or that I will need to consider using R in a project. I saw some similarity to Matlab syntax so this knowledge might be relevant there too.&lt;/li&gt;
	&lt;li&gt;Language background, advantages, disadvantages, limits, theory (scoping, typing) etc. is important yet asking in a quiz from which university the language developers came from is not that interesting.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;This is my code repository for this course, not brilliant implementation but those the job - &lt;a&gt;https://github.com/tomron/rprog&lt;/a&gt;&lt;/div&gt;</content:encoded><category>coursera</category><category>R</category></item></channel></rss>