# Thiago Avelino - Complete Knowledge Base > Software Developer, Open Source Enthusiast, Engineer, Writer, and Speaker focused on high-performance applications and cloud infrastructure - Thiago Avelino **Last Updated**: 2026-09-09 **Total Articles**: 459 **Author**: Thiago Avelino (GitHub Star, CTO, Open Source Maintainer) --- ## About This Document This file contains the complete content of all articles from avelino.run, optimized for AI/LLM consumption. Use this for training, RAG systems, or answering questions about the author's expertise. ## Author Expertise - Engineering Leadership & Team Building - Open Source Governance (maintainer of awesome-go with 100k+ stars) - Programming: Go, Python, Clojure, ClojureScript - Cloud Infrastructure & High Performance Systems - Product-Minded Engineering & Technical Strategy --- # Open Source Contributions - September 2026 **URL**: https://avelino.run/foss/2026/09/ **Published**: 2026-09-01 **Word Count**: 433 words **Summary**: Open source activity in September 2026: PRs, reviews, issues, comments across multiple repositories. This month (September 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. ## 2026-09-09 - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [commit_page is single-page, and cross-page moves are not](https://github.com/outlmd/outl/issues/268) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Invariant 13: accent has no paired foreground, and two classes resolve to nothing](https://github.com/outlmd/outl/issues/266) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Journal.tsx is 2,551 lines in one component](https://github.com/outlmd/outl/issues/265) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [The commit pipeline has one owner, and only the Tauri clients can reach it](https://github.com/outlmd/outl/issues/264) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [TUI derives ops from markdown instead of applying them](https://github.com/outlmd/outl/issues/263) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [Invariant 13: accent has no paired foreground, and two classes resolve to nothing](https://github.com/outlmd/outl/issues/266#issuecomment-5604010521) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [The commit pipeline has one owner, and only the Tauri clients can reach it](https://github.com/outlmd/outl/issues/264#issuecomment-5603905510) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [Invariant 13: accent has no paired foreground, and two classes resolve to nothing](https://github.com/outlmd/outl/issues/266#issuecomment-5603293128) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [Invariant 13: accent has no paired foreground, and two classes resolve to nothing](https://github.com/outlmd/outl/issues/266#issuecomment-5603275053) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [TUI derives ops from markdown instead of applying them](https://github.com/outlmd/outl/issues/263#issuecomment-5602146890) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [The commit pipeline has one owner, and only the Tauri clients can reach it](https://github.com/outlmd/outl/issues/264#issuecomment-5602143516) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [Theme request: gruvbox palette](https://github.com/outlmd/outl/issues/258#issuecomment-5601351776) ## 2026-09-08 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [ci: run the frontend tests that never ran](https://github.com/outlmd/outl/pull/262) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat(sync): find same-LAN peers without the internet](https://github.com/outlmd/outl/pull/260) - ✅ Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [feat(theme): add gruvbox preset](https://github.com/outlmd/outl/pull/259#pullrequestreview-5144249741) (Approved) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [sync: IPv4-only bind is a STOPGAP with no revert condition or target version](https://github.com/outlmd/outl/issues/261) - 💬 Commented on issue in [outlmd/outl](https://github.com/outlmd/outl): [Seven documentation contradictions surfaced by the CLAUDE.md extraction](https://github.com/outlmd/outl/issues/212#issuecomment-5589402329) ## 2026-09-04 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat/rfc 0022 unified design tokens](https://github.com/outlmd/outl/pull/256) ## 2026-09-02 - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [The same operation has a different name in the CLI, the MCP tools and the chord catalog](https://github.com/outlmd/outl/issues/255) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Mobile is missing editing capabilities that are not platform limitations](https://github.com/outlmd/outl/issues/254) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Capability parity is only tracked for chord actions, not for features](https://github.com/outlmd/outl/issues/253) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Decide a local automation surface for tabs and split view](https://github.com/thezer0com/zer0/issues/149) ## 2026-09-01 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: lock the workspace before the backlinks index](https://github.com/outlmd/outl/pull/252) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Pasting a link from the browser deadlocks the desktop app, and Force Quit is the only way out](https://github.com/outlmd/outl/issues/251) ## Commits - 🔨 Push to [outlmd/outl](https://github.com/outlmd/outl): 29 commit(s) - [See commits](https://github.com/outlmd/outl/commits?author=avelino&since=2026-09-01T00:00:00Z&until=2026-09-30T23:59:59Z) - 🔨 Push to [thezer0com/zer0](https://github.com/thezer0com/zer0): 2 commit(s) - [See commits](https://github.com/thezer0com/zer0/commits?author=avelino&since=2026-09-01T00:00:00Z&until=2026-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # An engine is not a benchmark **URL**: https://avelino.run/an-engine-is-not-a-benchmark/ **Published**: 2026-08-17 **Tags**: engineering, webkit, browser, zer0, rust, swift, chromium **Word Count**: 3249 words **Summary**: Why zer0 renders with WebKit and not Chromium, argued without a benchmark, with the measured cost of the choice written next to it. [The last post](https://avelino.run/taste-is-not-a-method/) was only the decisions where something got measured and the measurement changed the drawing. This one is about the decision underneath all of them, the one taken before any of that existed, where nothing was measured because nothing could be. zer0 renders with [WebKit](https://github.com/WebKit/WebKit). There is no [Chromium](https://www.chromium.org/Home/) path, not in parallel and not as a fallback. I cannot show you a benchmark where WebKit beats Blink. I never ran one, and if I had run one it would not have changed the answer, because rendering speed is not what this choice is about. An engine is not a component you evaluate on a chart and swap when a better one appears. It is the set of decisions you agree to inherit for as long as the project exists, and the only useful question is whose decisions those are and what they cost you when you disagree. So this is the argument, with the receipts, including the ones that go against me. ## Gecko was never on the table, and that is not my opinion People read "not Chromium" as "so, Firefox?", and it is worth ending that quickly, because it was not a preference. Mozilla removed general embedding support for Gecko in 2011. The stated reasons were the difficulty of the work, the coming move to a multi-process model, and the decision to prioritise Firefox itself, which is a legitimate set of reasons and also a final one. The only maintained embedding surface Gecko has today is [GeckoView](https://mozilla.github.io/geckoview/), and GeckoView is Android-only. Gecko is an engine inside an application. It is not an engine you can build an application on. There is no macOS API that hands you a Gecko view, no framework to link, nothing to embed. Choosing it would have meant maintaining a fork of Firefox, which is the thing nobody who has tried it recommends and nobody who has not tried it should attempt. Two engines are being written right now specifically to change this situation, [Servo](https://github.com/servo/servo) and [Ladybird](https://github.com/LadybirdBrowser/ladybird), and I am glad both exist. Neither is something I would ask a person to open their bank in today. That leaves three engines, and one of them was not available. The real choice was two. ## The alternative browsers are one browser Every "alternative" browser you can name is Chromium wearing a different coat. That sounds like a slogan until you watch what happens when the coat and the body disagree. When Manifest V3 landed and the extension platform changed underneath everyone, [Vivaldi said it in plain words](https://vivaldi.com/blog/manifest-v3-webrequest-and-ad-blockers/): "As Vivaldi is built on the Chromium code, how we tackle the API change depends on how Google implements the restriction." That is the whole thing in one sentence. A browser with a different logo, a different UI philosophy, a different privacy stance and a different company, and the extension platform is still a downstream notification. This is not a complaint about Google's intentions. It is a description of where a decision physically lives. If the engine is Chromium, then the extension model, the network stack's policy surface, the process model and the deprecation schedule are all upstream of you, and your options when you disagree are to carry a patch set forever or to explain to your users that it depends on how Google implements it. None of this is a complaint about Blink's quality. Blink is very good, which is exactly why it won, and winning that completely is the problem. When one implementation is the web, the specification stops being the contract and the implementation becomes it, so a bug that ships widely enough turns into behaviour somebody depends on, and then into a compatibility requirement the next engine has to reproduce before anyone will use it. An independent engine on a small project does not fix that. It just refuses to add to it. ## The argument that used to end this conversation expired in March 2025 For fifteen years the answer to "why not WebKit" was extensions, and it was a good answer. It stopped being true on macOS 15.4, when `WKWebExtension` became public API. It loads Manifest V2 and V3. It covers `declarativeNetRequest`, `webRequest`, `scripting`, `tabs`, `cookies`, `storage` and `nativeMessaging`. It was built by Apple for third-party browsers rather than only for Safari, which matters, because it means the extension's view of the browser is maintained by the same people who maintain the engine. The alternative, which is what you do if you want extensions and do not have that, is implementing the `chrome.*` namespaces yourself. That is months of work before the first extension loads, it is permanently behind, and every gap arrives as a bug report you own. So the argument expired. **It did not expire cleanly, and the honest version of this section is the measurement, not the announcement.** I loaded fifty-nine real store packages into a real `WKWebExtensionController` on macOS 26.6 with every permission granted. Fourteen of them never start their background worker. Six of those fourteen die on a single missing member of a namespace that is present, which is the worse failure, because the namespace check passes and the code proceeds. [React Developer Tools](https://github.com/facebook/react/tree/main/packages/react-devtools) 7.0.1 dies on `scripting.ExecutionWorld.ISOLATED`. [Vimium](https://github.com/philc/vimium), [DuckDuckGo](https://github.com/duckduckgo/duckduckgo-privacy-extension), [LanguageTool](https://github.com/languagetool-org/languagetool), [Privacy Badger](https://github.com/EFForg/privacybadger) are in the list. `WKWebExtension` installs exactly seventeen `chrome.*` namespaces. Twenty-five others that extensions in that corpus name are `undefined` no matter what is granted. The most common fatal one is `chrome.notifications`, missing in thirteen of the fifty-nine. And the failure is silent from inside. `controller.load` succeeds and returns no error. Seconds later `WKWebExtensionContext.errors` gains `backgroundContentFailedToLoad`, with no delegate callback for it, and in the failing case `loadBackgroundContent`'s completion handler was never called at all. From a user's chair that reads as the browser being broken, because from a user's chair there is nothing else it could be. That is the real state of it. Extensions on day one instead of in a year, maintained by the engine's own authors, and roughly a quarter of a real corpus does not run. ## The one place where the engine choice is a straight win Content blocking on WebKit is not an extension. It is a primitive. `WKContentRuleList` takes JSON, compiles it into bytecode, and evaluates it in the networking layer, ahead of the page. The rules never see the page and the page never sees the rules. There is no content script, no injected frame, no extension that has to be installed and kept alive, and nothing for a page to detect. An extension doing the same job through `declarativeNetRequest` goes through more machinery and depends on somebody having installed it. Measured on the macOS 26.5 SDK, cold compile by list size: 100 rules 0.8 ms, 1,000 rules 2.8 ms, 5,000 rules 11.5 ms, 20,000 rules 46 ms, 50,000 rules 119 ms. Warm lookup through `lookUpContentRuleList` is 0.1 ms at every one of those sizes, which is the number that matters, because compilation happens once per change and lookup happens every launch. The list zer0 ships is 77 rules and 9,562 bytes of JSON. Median cold compile 1.75 ms. Median warm lookup 0.05 ms. Underneath it, WebKit's own Intelligent Tracking Prevention is heuristic, on-device, always on, and needs no list at all. It runs whether the list is on or off. This is the part of the choice that pays rent every day, and it matters more than it looks, because a browser that is lighter than Chromium and then loads every tracker on the page has handed the advantage straight back. **And here is the price, in the same section, because that is the rule.** `WKContentRuleList` carries exactly one public member, `identifier`. There is no public way to ask how many requests it blocked. The only reporting path is `_WKContentRuleListAction`, which is SPI. So the number every other browser prints on a shield badge is not available to this browser honestly, and the badge is not there. The grammar is narrow too: alternation, `{2,4}` counts, lookahead and `\b` are all refused, an uppercase letter in `if-domain` is refused, one bad rule fails the entire list, and an unknown trigger key is accepted silently and does nothing, which is the failure mode you would least like to have. ## What it costs to not be Blink is not rendering. It is being recognised This is the part I did not predict, and it is the strongest argument for engine diversity I have, because it is an argument against the current state rather than for my taste. A `WKWebView` inside a third-party app produces a User-Agent ending in `(KHTML, like Gecko)` and carrying no browser token at all. Large sites read that as an unsupported browser. So zer0 appends `Version/… Safari/605.1.15 zer0/x.y.z`, which is honest: it is Safari's engine, and it says which browser is driving it. Then the extensions arrived and the honest string turned out to be the bug. 1Password 8.12.30.21, an untouched store package, tests `navigator.userAgent.indexOf("Chrome") !== -1`. Told the truth, it routes down the Safari App Extension path and never opens a port. `desktopAppState: Disconnected`, `PortClosed`, no error anywhere. [Bitwarden](https://github.com/bitwarden/clients) 2026.7.0 asks its own User-Agent for `Chrome/`, `Safari/`, `Firefox/`, `Edg/`, `OPR/`, `Vivaldi/` and `Gecko/`, matches none of them, and throws inside `this.device.toString` during worker initialisation, and because Manifest V3 makes a module-init throw fatal, the worker simply never starts. Neither of those is a rendering difference. Neither would show up in a benchmark, a web platform test, or any measurement of the engine at all. They are `indexOf` calls, written years ago by people who were being reasonable at the time, that have quietly become part of the web's definition of a browser. The fix is small and it tells you exactly how the monopoly is actually enforced: extension contexts now announce `Version/ Chrome/ Safari/605.1.15 zer0/`. Not per-extension, because per-extension is not a lever WebKit gives us. `WKWebExtensionContext` has no `customUserAgent`, so the controller's shared configuration reaches the popup, the options page, the background worker and any page the extension opens as one population. The browsing User-Agent still does not say Chrome, and it will not. On the Chrome Web Store's own pages, claiming Chrome suppresses Google's "Switch to Chrome?" modal, and the install button stays disabled either way, because installing from that button needs `chrome.webstorePrivate`. What replaces the modal is the text "Item currently unavailable", which is false. We are choosing to look broken in order to be honest. Ten thousand `indexOf("Chrome")` checks are a stronger moat than any rendering advantage, and nobody built that moat on purpose. That is what a second implementation is for. ## The rest of the bill The cost of WebKit is API coverage, and it arrives in small concrete places rather than in one large one. Muting a page's audio has no public API. `EngineHost.swift` injects `document.querySelectorAll('video,audio')…` and reapplies it after every navigation, because there is no other way. On Chromium that is a property. Experimental feature flags are unreachable. `_WKFeature`, `WKPreferences._features`, `_setEnabled:forFeature:` are all SPI, so a feature behind a flag does not exist for us. The Web Inspector has no public way to open. `isInspectable` is the only public member, and opening it takes three private calls. This project allows exactly one file to spell SPI, enforced by a test that reads string literals so a selector reached through the Objective-C runtime is caught too. The accepted cost is written down: the App Store is closed to this build. Printing goes through `_webView:printFrame:`, which is SPI. That is Safari's route as well. The context menu is the engine's. Right-clicking a page gives Reload and nothing else, there is no "Open Link in New Tab" at all, and it offers "Search with Google" regardless of the search engine the browser is configured to use. Every method in `WKUIDelegate`, `WKNavigationDelegate` and `WKDownloadDelegate` is optional, and WebKit's answer to an unimplemented optional is a documented default chosen for an embedded web view inside somebody else's app. For a browser those defaults are frequently the worst available answer and none of them raises, logs or returns an error. Six defects arrived exactly that way: `window.open`, `target="_blank"`, ``, `alert()`, `confirm()`, `prompt()`. A `mailto:` click destroyed the page. HTTP Basic auth rendered the server's raw 401 body to the user. And the one with no workaround at all: **web compatibility is Safari's.** A bug that only appears on a site tested against Blink reaches this project as a user complaint rather than as a failing test, and there is no way to see it coming. For balance, the process model earns its reputation. Kill the web content process with `SIGKILL` and `reload()` commits, finishes, and comes back with a fresh web process in under fifty milliseconds. ## Picking WebKit is only half a decision. The other half is whose WebKit Here is the sentence that turned out to matter most: a browser that renders with whatever WebKit the machine happens to have is a browser whose engine changes underneath it. The system framework is free and it is genuinely good value. A shell that borrows the system engine is 7.4 MB in release and builds in eleven seconds. Engine CVEs arrive through the macOS update with us out of the loop, which is a real security advantage and I want to be clear that giving it up hurt. zer0 builds WebKit from source and embeds it anyway, pinned per channel. Stable sits on a `WebKit-*` source-drop tag, because those are the drops Apple actually shipped a Safari from, so each one built and survived a release cycle. Canary sits on an exact commit of `main`, because `main` is whatever landed an hour ago and regularly does not build. The measurements, on an M4 Max with 14 cores and 36 GB, macOS 26.6: | | release | debug | | --- | --- | --- | | system WebKit | 7.4 MB | 59 MB | | embedded WebKit | 387 MB | 439 MB | Shallow checkout of the pinned tag: 7.4 GB, 455,214 files, about twenty minutes. Clean release build: 35 minutes 34 seconds, 110 targets, one `xcodebuild`. `WebKitBuild/` afterwards: 34 GB, of which 5.2 GB is products. Incremental no-op rebuild: 31 seconds. In CI that is about 35 minutes per channel, weekly, paid by runners rather than by users. That 34 GB is worth one aside. The README said "on the order of 100 GB", which is 2.5x the measured number, and the build script still refuses to start with less than 100 GB free because a conservative floor costs nothing. I only know the estimate was wrong because somebody ran it. Reasoning about disk is exactly as reliable as reasoning about anything else in this project, which is to say: not. The 387 MB is the cheap half. The expensive half is that a WebKit CVE is now mine. Tracking advisories, deciding whether the pin is affected, rebuilding, re-signing, shipping. **A user with macOS fully up to date now runs a stale engine if I do not cut a release.** The trade is "the engine changes underneath the app without warning" for "the engine changes only when I touch it", and the second half of that sentence is an operational obligation the project does not yet have. Nobody automated the bump. The pin sat unmoved from 8 August until a bot was written to move it. So that decision names the condition under which it is wrong, in the file, in advance: on the first WebKit CVE published after the first embedded release, if there is no rebuild-and-ship path that fits inside a week, the decision was wrong and the security cost beat the autonomy one. Two things fall out of embedding that I did not go looking for. Building from a public tag settles the licensing question that redistributing Apple's binary frameworks would raise. And the LGPL obligations that come with the engine in the bundle include shipping a way for the user to replace those frameworks, which is a strange and pleasing thing to owe: the licence obliges the browser to let you swap its engine. The About window prints one line, "Engine: embedded WebKit 7624.4.5.14.1" or "Engine: system WebKit 21624.4.5.11.5", and works out which by asking where `WKWebView` actually came from, so an embed that dyld silently dropped reports "system", which is the truth. ## What I cannot tell you [ADR-0001](https://github.com/thezer0com/zer0/blob/main/docs/adr/0001-webkit-as-the-engine-not-chromium.md) says that on the Mac, WebKit is the engine Apple tunes for Apple hardware, and that power draw and battery are not a footnote. There is no measurement behind that sentence. Not a bad one, not an old one. None. It is the most quoted claim in the WebKit argument and, in this repository, it is prose. [The last post](https://avelino.run/taste-is-not-a-method/) ended by naming `#ff3e3e` as the number that reads most like a result and is a line in a README with nothing underneath it. This is the same defect, in the decision that everything else sits on. If somebody wants to hand me a number for battery on a like-for-like page set, I want it more than I want the argument, and I would rather publish it against me than keep quoting a sentence nobody measured. What I can tell you is what would make the whole thing wrong, because that was written down when the choice was still live. Two triggers, both named. `WKWebExtension` falling far enough behind that the main blockers stop loading, or Apple closing or freezing the public extension API. And a platform target becoming mandatory where no maintained WebKit exists, which is Android and is a known dead end. Outside those two, never. The record has grown from 44 decisions at the last post to 115. Fifteen of them carry `none — debt` in the field where the test should be, up from six, and [ADR-0001](https://github.com/thezer0com/zer0/blob/main/docs/adr/0001-webkit-as-the-engine-not-chromium.md) is one of them, because there is no possible test for "we picked an engine". What is testable is the absence of SPI, and that is a source lint. So the largest decision in the project is defended by nothing, and says so. That is the honest sale. Not a faster engine. A second implementation, an engine-level blocker that costs 0.05 ms, an extension surface maintained by the people who maintain the engine, and a pinned build I control the release cadence of. Against: a quarter of a real extension corpus that does not start, a web that runs `indexOf("Chrome")` on me, an App Store I have closed to myself, and Safari's compatibility bugs arriving as user complaints. I would take that trade again. What I would not do is dress it up as a benchmark. --- **zer0** is open source: [github.com/thezer0com/zer0](https://github.com/thezer0com/zer0) The reasoning above is not reconstructed for this post. Every record below was written while the choice was still live, and each one names what it cost and which test dies if you undo it: [ADR-0001](https://github.com/thezer0com/zer0/blob/main/docs/adr/0001-webkit-as-the-engine-not-chromium.md) on the engine itself, [ADR-0005](https://github.com/thezer0com/zer0/blob/main/docs/adr/0005-we-build-webkit-from-source-and-embed-it.md) on building WebKit from source and embedding it, [ADR-0020](https://github.com/thezer0com/zer0/blob/main/docs/adr/0020-chrome-extensions-run-on-apples-wkwebextension.md) on extensions, [ADR-0058](https://github.com/thezer0com/zer0/blob/main/docs/adr/0058-zer0-writes-its-own-block-list-compiles-it-once-per-change-and-says-what-it-does-not-block.md) on content blocking, [ADR-0067](https://github.com/thezer0com/zer0/blob/main/docs/adr/0067-the-web-inspector-is-the-one-spi-reached-by-name-at-runtime.md) on the Web Inspector, [ADR-0072](https://github.com/thezer0com/zer0/blob/main/docs/adr/0072-an-extension-webkit-could-not-start-is-not-reported-as-running.md) on the silence when an extension fails to start, [ADR-0073](https://github.com/thezer0com/zer0/blob/main/docs/adr/0073-zer0-does-not-claim-to-be-chrome-on-the-stores-hosts-or-anywhere-else.md) on refusing to claim to be Chrome, [ADR-0084](https://github.com/thezer0com/zer0/blob/main/docs/adr/0084-a-permission-this-browser-cannot-provide-is-stated-rather-than-switched.md) on what the extension surface actually installs, [ADR-0086](https://github.com/thezer0com/zer0/blob/main/docs/adr/0086-the-unimplemented-engine-surface-is-enumerated-rather-than-discovered-one-defect-at-a-time.md) on the unimplemented engine surface, [ADR-0091](https://github.com/thezer0com/zer0/blob/main/docs/adr/0091-the-engines-context-menu-is-amended-rather-than-replaced-and-the-core-decides-the-amendment.md) on the context menu, [ADR-0100](https://github.com/thezer0com/zer0/blob/main/docs/adr/0100-the-gap-zer0-fills-is-a-missing-member-never-a-missing-namespace-and-the-package-it-modifies-says-so.md) on missing members, [ADR-0103](https://github.com/thezer0com/zer0/blob/main/docs/adr/0103-cannot-and-will-not-are-different-sentences-and-the-ones-that-are-ours-are-answered-rather-than-stated.md) on the fifty-nine packages, [ADR-0106](https://github.com/thezer0com/zer0/blob/main/docs/adr/0106-extension-contexts-name-chrome-because-per-extension-is-not-ours-to-build.md) on the User-Agent extension contexts get, and [ADR-0124](https://github.com/thezer0com/zer0/blob/main/docs/adr/0124-each-channel-pins-its-own-webkit-and-the-about-window-names-the-engine-that-runs.md) on the per-channel pins and the About window. Several admit they have no test at all. You can disagree with any of them with the file open in front of you. Disagree, but share your opinion in an [issue on the zer0 repository](https://github.com/thezer0com/zer0/issues/new), and come help me build a better and open internet for everyone! --- # Taste is not a method **URL**: https://avelino.run/taste-is-not-a-method/ **Published**: 2026-08-09 **Tags**: engineering, design, rust, swift, webkit, browser, zer0, testing **Word Count**: 2386 words **Summary**: The design decisions in zer0 that only exist because something got measured: a logo rejected by a rasteriser, a luminance band where no ink is readable, a find bar that refuses to count, and a lock mechanism that admits what it cannot prove. zer0 is a browser: WebKit engine, a core in Rust, a native Swift shell, MIT. The repository is new. The problem is not. In March I published [firefox-airtraffic](https://github.com/avelino/firefox-airtraffic), an extension that routes URLs into the Firefox container they belong to, because I wanted one specific thing my browser would not do for me. It solved that one thing and left the rest of the list exactly where it was. zer0 is the rest of the list, and its routing rules are the same idea ported into the core. ![README do zer0 no GitHub](/blog/taste-is-not-a-method-1-github-readme.png) I am writing about it now, rather than when I started, because two things finally became true at the same time. The interface is one I actually want to open in the morning, and the codebase is organised enough that someone who is not me could read it and find the reasoning instead of just the result. The source goes public in a few days. That is not the same as the browser being installable, and I would rather split those two now than let one word do work it cannot. You will be able to read it, build it and run it. You will not be able to download it. The bundle is ad-hoc signed, so it runs on the machine that built it and Gatekeeper refuses a copied one. That is a deliberate trade rather than a missing chore. Notarisation requires the hardened runtime, and the hardened runtime is precisely what makes dyld ignore the load command that lets an embedded WebKit be found. Shipping means either carrying an entitlement that re-enables every `DYLD_*` variable for the whole process, or rewriting install names across Apple-signed frameworks. Neither is free, and the choice is still open. ![zer0 com tabs verticais](/blog/taste-is-not-a-method-2-zer0-vertical-tabs.png) The browser is where a person works and studies for most of the day. Open source has a habit of treating that surface as something to get to later, on the theory that the engine is the hard part and the chrome around it can be a settings dialog with eleven tabs. zer0 does not take that trade. That sentence is free, though. Anybody can write it. So this post is only the decisions where something got measured and the measurement changed the drawing, plus what each one cost. ![Settings do zer0](/blog/taste-is-not-a-method-3-zer0-settings.png) ## A diagonal at 45 degrees is a road sign The mark is a zero with a cut in it. The cut is subtractive and displaced, and it got there by elimination, not by preference. A solid diagonal at 45 degrees, rasterised at 32 and 64 pixels, is the "no entry" pictogram. Not arguably. It is that sign. The defence I had planned, that our bar rises left to right like a solidus while the prohibition sign descends, does not survive contact with reality, because the pictogram is drawn both ways in the wild. So I tried a 3:4 variant, which escapes the prohibition reading and lands on the Danish Ø instead. A letter, not a digit. **What decided this was a rasteriser, not an opinion.** Both candidates look fine as vectors on a grid at 100% zoom. They fail at the size the thing actually gets used at. The cut that shipped escapes both readings because there is no bar crossing the ring at all. Then the same test found the next problem. At 32 rendered pixels and below, the canonical cut survives only as a disturbance in the antialiasing. Present, not legible, which is the worse of the two failures because it looks deliberate. I had assumed 24 before rendering it. It is 32. So there is a second drawing. Same mark, different geometry: the ring goes from 32u to 44u, the counter stays large, and the mark itself is shortened from 80×104 to 72×94. Shortening it is the counterintuitive half, and it is just arithmetic. The grid scales by the tallest dimension, so height given up buys thickness everywhere else. The routing is on rendered pixels rather than points, so 16pt@2x and 32pt@1x get the hinted file while 32pt@2x gets the canonical one. The cost is written down and it is real. Two files now have to agree forever, and anyone who reaches for the canonical SVG to make a 16px favicon gets a plain O and will not necessarily notice. No test guards any of it. The record carries the literal marker `none — debt`, which is the project's way of admitting a decision is undefended instead of pretending otherwise. ## The page has a colour and it will not tell you what it is The chrome takes the page's own colour. The interesting part is not the idea, it is the fallback, because the obvious implementation does not work on the actual web. Ask the DOM and you get nothing. `getComputedStyle` reports `rgba(0, 0, 0, 0)` for `documentElement` and for `body` on the great majority of documents. That is not an edge case to handle later, it is the common case. A tint built on DOM sampling alone would work only on the minority of sites that had already thought about it. What rescues it is asking the engine what it actually painted: `WKWebView.underPageBackgroundColor`. The DOM rungs stay above it, because which declaration wins should be a rule the core owns and a test can name. But the engine's own answer is the reason the feature exists on a normal page instead of on a demo. ## The band where neither ink works Getting a colour is half the problem. The other half is that some colours cannot carry text at all. ```rust pub const MIN_INK_CONTRAST: f64 = 6.0; pub const MIN_LUMINANCE_FOR_DARK_INK: f64 = MIN_INK_CONTRAST * 0.05 - 0.05; // 0.25 pub const MAX_LUMINANCE_FOR_LIGHT_INK: f64 = 1.05 / MIN_INK_CONTRAST - 0.05; // 0.125 ``` Between 0.125 and 0.25 relative luminance, neither black nor white ink clears the margin. Pure red sits at 0.2126, in the middle of it. Against white it is 4.00:1. Against black it is 5.25:1. Both under the bar, which is why a red strip with white text looks fine in a mock and is unreadable on a laptop at an angle. Three options: refuse the colour, ship unreadable text, or move the colour. The core moves it, to the nearer edge of the band, along lightness only. A 24 step binary search on lightness, hue and saturation untouched. `#ff0000` comes out `#ff3e3e` and is still plainly red. The test that locks it does not check the hex, it checks that the hue did not rotate: red stays above green, and green equals blue. The cost, in the record's own words, is that a tint inside the unreadable band gets drawn a shade away from what the page asked for. A small number of sites, visible when it happens, and it is the price of the strip working on all the rest. The strip also has one text level where the rest of the shell has three, because a second level would need its own contrast guarantee and nobody has written one. One thing worth admitting here. `#ff3e3e` is written in the README and in the record, and no test asserts it. It is correct, I recomputed it from the shipped algorithm. But it is prose, not a lock, and prose rots. ## The find bar will not tell you how many matches there are `WKFindResult` reports `matchFound`. A boolean. No total, no index, no position. So the find bar has five states and no count, and the space where "3 of 17" would go stays empty. This is the one decision in the whole set whose regression makes the interface look better. Adding a match count is the kind of change everybody praises in review. No test goes red. The screen looks more like Chrome. And the number is wrong on any page with an iframe. It is also the decision with the weakest defence in the project. The status type is a private enum inside a view, nothing tests it, and the record says so: this is the easiest decision here to revert, and the one nobody would notice being reverted. ## The instrument lies too This interface is verified by rendering real views offscreen and looking at the pixels. `NSHostingView` plus `cacheDisplay`, because `ImageRenderer` mangles materials. Most of the defects found that way were not catchable by an assertion, which is the entire reason the harness exists. Then the harness lied. `cacheDisplay` photographs transform based animation as motionless. Five separate probes of a working animation, including a plain rectangle with no AppKit in it anywhere, all came back as "never moved". The replacement reads geometry instead of pixels, because what is being asserted is where the view is, not what it looks like. The best defect the harness did find is my favourite one in the project, because nothing was broken. A `ScrollView` takes every point it is offered, so the command bar's list claimed 320 points whether it held two rows or eight. With a short result set, most of the panel was a slab of material with nothing in it. **The check had not failed. It had never been run on the input that fails.** Nobody had rendered the short list. ## The rule nobody can forget Reduce Motion is not a rule people get told about here. It is a rule that does not compile if you break it. ```swift fileprivate static let entrance = Animation.spring(response: 0.34, dampingFraction: 0.82) fileprivate static let subtle = Animation.easeOut(duration: Duration.quick) ``` Both curves are `fileprivate`, so a call site cannot spell one. The only spellings that compile are the wrappers that read the accessibility environment first. The record puts it better than I can: the decision cannot be forgotten by omission, only reverted on purpose. The cost is small and honest. With Reduce Motion on, the two curves collapse into the same curve, which reads as a loss of vocabulary. It is the correct loss. ## Every decision names the test that kills it This is the part I would carry to another project unchanged. There are 44 decision records. Each one has five mandatory sections and a `**Lock:**` field naming the test that goes red if the decision is undone. `scripts/adr-check.sh` runs inside `check.sh` and resolves every lock: the file has to exist, the test name has to really be in it, and the test has to actually run. An `#[ignore]` or a `.disabled(...)` is refused, because a disabled test is a lock that opens itself. Six of the 44 carry `none — debt`. That is a literal string the checker accepts and counts instead of failing on. Undefended decisions are allowed to exist. They just have to say so out loud, in the file, in the field where the test should be. **And it does not work as well as that paragraph makes it sound.** The record for the mechanism says so about itself: it validates form, never substance. The checker confirms that a test named x exists in file y. It has no idea whether that test has anything to do with the decision, and it never will. A lock pointed at an unrelated passing test satisfies every rule in the script. That gap has already cost this project real bugs, twice, in a row. The keymap lock proved a chord was present in the table while roughly 20 shortcuts did nothing, because nothing asked whether a keypress arrives. The replacement lock proved a keypress arrives, and then stayed green while every press acted on the wrong window. The generalisation, once: **ask what question the test does not ask.** A green suite tells you the questions you wrote have the answers you expected. It says nothing about the questions you did not write, and that is where the bugs are. There is a nastier failure the record names on itself. The gate call gets deleted from `check.sh` during a merge conflict. One line disappears, nothing ever fails again, and nothing in the repository detects it. ## What is not there Chat is half built, and I would rather say it than let a screenshot imply otherwise. The core is real. Four provider wire formats are real (Anthropic messages, OpenAI chat, Gemini generateContent, Ollama chat, and the OpenAI shape covers a long tail of compatible endpoints). MCP is real, the settings panes are real. No view renders a conversation. ⌘E and the command bar's Ask row create a conversation you cannot see. Do not install this expecting to talk to a model. None of this makes zer0 a good browser yet, and the two loosest threads are the ones I would pull on first if I were reading this instead of writing it. The lock mechanism proves a named test exists and never that it covers the decision, which is not a theoretical hole: it has already cost this project two bugs in a row, and the second arrived inside the fix for the first. And `#ff3e3e`, the number in this post that reads most like a result, is prose in a README with nothing underneath it. The record works. That is precisely where it does not reach yet. The next one I want to write is already sitting in a doc comment. SwiftUI's `.regularMaterial` blurs the SwiftUI backdrop, and a `WKWebView` is not in that backdrop. It is an AppKit view composited by the window server underneath everything SwiftUI drew, so a material over a page has nothing to sample and falls back to its own flat tint. The command bar was asking for glass and getting a grey slab. Nothing was going to catch that: not a test, not a rendered frame, not a review. The framework did not fail, it did the documented thing to an input nobody had checked, and it did it silently. That class of bug deserves its own post. When the source goes up, the part I would open first is not the code. It is `docs/adr`. Forty-four decision records, each naming what it cost and which test dies if you undo it, written while the choice was still live rather than reconstructed afterwards for an audience. Several admit they have no test at all and say so in the field where the test should be. You can disagree with any of them with the file open in front of you, which is the only kind of disagreement worth having. --- **zer0** is open source: [github.com/thezer0com/zer0](https://github.com/thezer0com/zer0) --- # Open Source Contributions - August 2026 **URL**: https://avelino.run/foss/2026/08/ **Published**: 2026-08-01 **Word Count**: 1970 words **Summary**: Open source activity in August 2026: PRs, reviews, issues, comments across multiple repositories. This month (August 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. ## 2026-08-31 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: make peer revocation and pairing actually hold](https://github.com/outlmd/outl/pull/248) - ✅ Reviewed PR in [avelino/firefox-airtraffic](https://github.com/avelino/firefox-airtraffic): [Bump fast-uri from 3.1.2 to 3.1.6](https://github.com/avelino/firefox-airtraffic/pull/11#pullrequestreview-5064717808) (Approved) - ✅ Reviewed PR in [avelino/firefox-airtraffic](https://github.com/avelino/firefox-airtraffic): [Bump uuid and web-ext](https://github.com/avelino/firefox-airtraffic/pull/7#pullrequestreview-5064711850) (Approved) - ✅ Reviewed PR in [avelino/firefox-airtraffic](https://github.com/avelino/firefox-airtraffic): [Bump flatted from 3.4.1 to 3.4.2](https://github.com/avelino/firefox-airtraffic/pull/4#pullrequestreview-5064706745) (Approved) - ✅ Reviewed PR in [avelino/firefox-airtraffic](https://github.com/avelino/firefox-airtraffic): [Bump fast-uri from 3.1.0 to 3.1.2](https://github.com/avelino/firefox-airtraffic/pull/6#pullrequestreview-5064703888) (Approved) ## 2026-08-24 - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Canary dress rehearsal before the stable tag](https://github.com/thezer0com/zer0/issues/148) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [appcast-stable.xml advertised behind download.thezer0.app](https://github.com/thezer0com/zer0/issues/147) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [LGPL source-offer artefact ships in the release zip](https://github.com/thezer0com/zer0/issues/146) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Stable workflow fires only on a v-tag (ADR-0125)](https://github.com/thezer0com/zer0/issues/145) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Notary profile 'zer0-ci' stored and the notarize.sh invocation verified](https://github.com/thezer0com/zer0/issues/144) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Signing identities present: Developer ID Application certificate for Team ID 24X5CQGA86](https://github.com/thezer0com/zer0/issues/143) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Release preflight: split history pushed and the gate green on the tree that will be tagged](https://github.com/thezer0com/zer0/issues/142) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Measure full-save cost on a large-history profile](https://github.com/thezer0com/zer0/issues/141) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Measure loadError frequency before designing recovery](https://github.com/thezer0com/zer0/issues/140) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Linux gate-side check script (ADR-0122's named lock)](https://github.com/thezer0com/zer0/issues/139) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the two-process Swift suite split](https://github.com/thezer0com/zer0/issues/138) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [1Password end-to-end lock on a fresh install](https://github.com/thezer0com/zer0/issues/137) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Write the ADR-0107 test the record already names](https://github.com/thezer0com/zer0/issues/136) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the CI floor: oldest still-offered macOS image](https://github.com/thezer0com/zer0/issues/135) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the enumeration door: WKWebView built only in HostedWebView.init](https://github.com/thezer0com/zer0/issues/134) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the mark: palette decision and contrast harness](https://github.com/thezer0com/zer0/issues/133) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the gate: check.sh runs everything it claims](https://github.com/thezer0com/zer0/issues/132) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the honesty rule: no invented match count](https://github.com/thezer0com/zer0/issues/131) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the embedded-WebKit pin the bundle actually ships](https://github.com/thezer0com/zer0/issues/130) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Record ADR-0004's supersession now that the build exists](https://github.com/thezer0com/zer0/issues/129) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Lock the engine choice: every web view is WebKit, hosted one way](https://github.com/thezer0com/zer0/issues/128) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Blocked-resource count when Apple publishes one](https://github.com/thezer0com/zer0/issues/127) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Downloads search in the core](https://github.com/thezer0com/zer0/issues/126) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Extension badge text (hasUnreadBadgeText)](https://github.com/thezer0com/zer0/issues/125) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Copy Image context-menu row](https://github.com/thezer0com/zer0/issues/124) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Stale-host checker for the hand-written block list](https://github.com/thezer0com/zer0/issues/123) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [EasyList adoption when wanted](https://github.com/thezer0com/zer0/issues/122) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Audit per-tab state for the fourth piece](https://github.com/thezer0com/zer0/issues/121) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Zoom per site: the storage decision](https://github.com/thezer0com/zer0/issues/120) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Provider parity: keep the BYOK claim provable](https://github.com/thezer0com/zer0/issues/119) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Loopback HTTP transport within ADR-0099's limits](https://github.com/thezer0com/zer0/issues/118) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Approval review screen for tools](https://github.com/thezer0com/zer0/issues/117) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Move the register behind Action/EngineCommand when the chat protocol settles](https://github.com/thezer0com/zer0/issues/116) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Remote MCP servers: OAuth 2.1 with RFC 9728 discovery](https://github.com/thezer0com/zer0/issues/115) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Persist tool fingerprints across relaunch](https://github.com/thezer0com/zer0/issues/114) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Password-manager parity survey beyond 1Password](https://github.com/thezer0com/zer0/issues/113) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Track the AgileBits path decision for browsers.other-trusted-apps](https://github.com/thezer0com/zer0/issues/112) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Native messaging parent verification accepts the signed bundle](https://github.com/thezer0com/zer0/issues/111) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Extension page identity: set baseURL and uniqueIdentifier](https://github.com/thezer0com/zer0/issues/110) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Script-built xcframework stays the only iOS core path](https://github.com/thezer0com/zer0/issues/109) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [pbxproj references and typecheck script name the files once](https://github.com/thezer0com/zer0/issues/108) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Typecheck list: generator-or-manifest at the third hand-edit](https://github.com/thezer0com/zer0/issues/107) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Measure service-worker survival before any iOS extension flag](https://github.com/thezer0com/zer0/issues/106) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [iOS store and data-home decision](https://github.com/thezer0com/zer0/issues/105) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [iOS engine decision: hosting a WKWebView in the skeleton](https://github.com/thezer0com/zer0/issues/104) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Linux installer or package-repository story](https://github.com/thezer0com/zer0/issues/103) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Daily-drivable smoke list for the GTK host](https://github.com/thezer0com/zer0/issues/102) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [check.sh stops skipping a supported platform](https://github.com/thezer0com/zer0/issues/101) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [linux/ tree purity: no Apple types, no binding layer](https://github.com/thezer0com/zer0/issues/100) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Decide the Linux User-Agent composition](https://github.com/thezer0com/zer0/issues/99) ## 2026-08-23 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: hold the P2P endpoint from outl serve](https://github.com/outlmd/outl/pull/246) - 🐛 Opened issue in [ZaxbyHub/opencode-swarm](https://github.com/ZaxbyHub/opencode-swarm): [TASK_WORKFLOW_STAGE_A_REQUIRED 'from coder_delegated': Stage B dispatch unreachable; Stage A evidence reader/writer mismatch suspected (7.142.0)](https://github.com/ZaxbyHub/opencode-swarm/issues/2315) - 🐛 Opened issue in [ZaxbyHub/opencode-swarm](https://github.com/ZaxbyHub/opencode-swarm): [Settlement stays DISPATCHED after coder Task returns; blocks all task gates (7.142.0)](https://github.com/ZaxbyHub/opencode-swarm/issues/2314) ## 2026-08-22 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [Adds a read-only view of a page's history out of the op log: `outl page history`](https://github.com/outlmd/outl/pull/242) - 🔀 Opened PR in [thezer0com/zer0](https://github.com/thezer0com/zer0): [test: drop the connection when the client has bytes, not when the server is done](https://github.com/thezer0com/zer0/pull/98) - 🔀 Opened PR in [thezer0com/zer0](https://github.com/thezer0com/zer0): [ci: use the real create-pull-request action](https://github.com/thezer0com/zer0/pull/97) - 🔀 Opened PR in [thezer0com/zer0](https://github.com/thezer0com/zer0): [ADR-0017/0006: the load_error locks exist and were seen failing](https://github.com/thezer0com/zer0/pull/96) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Outl daemon for continuous P2P background sync](https://github.com/outlmd/outl/issues/244) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Page history: the op log holds every revision and nothing can read it](https://github.com/outlmd/outl/issues/241) ## 2026-08-20 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat!: create and delete properties from every client](https://github.com/outlmd/outl/pull/240) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Explicit "primary chord" concept in the keymap](https://github.com/thezer0com/zer0/issues/95) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): ["Copy Image" context-menu row](https://github.com/thezer0com/zer0/issues/94) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): ["Keep this page with the conversation" — opt-in per thread](https://github.com/thezer0com/zer0/issues/93) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [chrome.notifications — SiteCapability, prompt, and "the person said no"](https://github.com/thezer0com/zer0/issues/92) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Per-space JavaScript and autoplay switches](https://github.com/thezer0com/zer0/issues/91) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [HTTP auth — Negotiate/NTLM decision](https://github.com/thezer0com/zer0/issues/90) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Passkeys decision](https://github.com/thezer0com/zer0/issues/89) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Merge the two Swift test processes once the PAC crash is gone](https://github.com/thezer0com/zer0/issues/88) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Generate token declarations from the TOML for both shells](https://github.com/thezer0com/zer0/issues/87) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [check.sh fast/full split](https://github.com/thezer0com/zer0/issues/86) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Re-enumerate the unimplemented engine surface per macOS release](https://github.com/thezer0com/zer0/issues/85) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [History paging when it outgrows memory](https://github.com/thezer0com/zer0/issues/84) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [SCHEMA_VERSION migration path](https://github.com/thezer0com/zer0/issues/83) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Shared helpers at the one door — NaN guard,records_to_disk,space resolver](https://github.com/thezer0com/zer0/issues/82) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Refusal reasons crossing the FFI](https://github.com/thezer0com/zer0/issues/81) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [SpaceId as a validated handle](https://github.com/thezer0com/zer0/issues/80) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Guard that check.sh still calls adr-check.sh](https://github.com/thezer0com/zer0/issues/79) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Wildcard-arm lint over Action/EngineCommand + fix BrowserModel.swift:197](https://github.com/thezer0com/zer0/issues/78) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [aRefusalFramesAReasonTheWorkerCanRead — the missing lock of ADR-0107](https://github.com/thezer0com/zer0/issues/77) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Write the three load_error tests](https://github.com/thezer0com/zer0/issues/76) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Reduced-transparency rule](https://github.com/thezer0com/zer0/issues/75) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Block-list stale-host checker](https://github.com/thezer0com/zer0/issues/74) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [EasyList — the decision and the converter](https://github.com/thezer0com/zer0/issues/73) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [External-scheme sheet naming the application](https://github.com/thezer0com/zer0/issues/72) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Cross-window tab drag](https://github.com/thezer0com/zer0/issues/71) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Bookmark importers — Chrome,Safari,1Password files as hostile input](https://github.com/thezer0com/zer0/issues/70) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Scroll position restore](https://github.com/thezer0com/zer0/issues/69) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Download "Replace" prompt](https://github.com/thezer0com/zer0/issues/68) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Per-site pop-up switch](https://github.com/thezer0com/zer0/issues/67) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Pop-up sizing from windowFeatures](https://github.com/thezer0com/zer0/issues/66) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Geolocation site capability](https://github.com/thezer0com/zer0/issues/65) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Display capture — its own sentence](https://github.com/thezer0com/zer0/issues/64) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Typed certificate exception in Settings › Privacy](https://github.com/thezer0com/zer0/issues/63) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Downloads search in the core](https://github.com/thezer0com/zer0/issues/62) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Settings rows for background throttling and HTTPS-first](https://github.com/thezer0com/zer0/issues/61) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Ephemeral indicator — say what is not being recorded](https://github.com/thezer0com/zer0/issues/60) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Zoom per site](https://github.com/thezer0com/zer0/issues/59) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Prose tables in assistant replies](https://github.com/thezer0com/zer0/issues/58) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Token accounting for the assistant](https://github.com/thezer0com/zer0/issues/57) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [zer0://conversations — every thread in one place](https://github.com/thezer0com/zer0/issues/56) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Rename a conversation by hand](https://github.com/thezer0com/zer0/issues/55) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Per-conversation model pick](https://github.com/thezer0com/zer0/issues/54) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Gemini becomes configurable](https://github.com/thezer0com/zer0/issues/53) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [McpHost reports live connection state](https://github.com/thezer0com/zer0/issues/52) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [MCP registry — a published,signed index of servers](https://github.com/thezer0com/zer0/issues/51) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Remote MCP servers — the OAuth sign-in flow](https://github.com/thezer0com/zer0/issues/50) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Move the MCP register behind Action/EngineCommand](https://github.com/thezer0com/zer0/issues/49) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Persist MCP tool fingerprints](https://github.com/thezer0com/zer0/issues/48) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Password managers beyond 1Password (Bitwarden,Dashlane,Kagi)](https://github.com/thezer0com/zer0/issues/47) - 🐛 Opened issue in [thezer0com/zer0](https://github.com/thezer0com/zer0): [Merge ExtensionsView and the install banner into one flow](https://github.com/thezer0com/zer0/issues/46) ## 2026-08-19 - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [feat: add local client api and gateway admission](https://github.com/avelino/dotagent/pull/50) ## 2026-08-18 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix!: index every block the op log holds](https://github.com/outlmd/outl/pull/238) ## 2026-08-17 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat!: add DOING task state and read markdown checkboxes as tasks](https://github.com/outlmd/outl/pull/236) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: garbage-collect the device store](https://github.com/outlmd/outl/pull/233) ## 2026-08-16 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [build: move rust and js deps to latest](https://github.com/outlmd/outl/pull/231) ## 2026-08-12 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [perf!: hold one connection per peer, not one per sync](https://github.com/outlmd/outl/pull/227) ## 2026-08-11 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: finish the in-flight sync when a phone backgrounds](https://github.com/outlmd/outl/pull/225) ## 2026-08-10 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix!: elect which process binds the device endpoint](https://github.com/outlmd/outl/pull/223) ## 2026-08-08 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix!: stop the parser from losing content it just rendered](https://github.com/outlmd/outl/pull/221) - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [feat!: stop draining the battery between runs](https://github.com/avelino/dotagent/pull/48) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Daemon is not battery-aware: idle polling and unconditional dispatch drain laptops](https://github.com/avelino/dotagent/issues/47) ## 2026-08-07 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: stop content from reaching the .md but never the op log](https://github.com/outlmd/outl/pull/217) - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [feat!: report the failures that ran silent](https://github.com/avelino/dotagent/pull/46) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Regression (v2.4.0): script params containing common words are silently blanked by sanitizeScriptParam, endpoint returns wrong rows with HTTP 200](https://github.com/prest/prest/issues/1030) ## 2026-08-06 - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Extract three oversized per-crate CLAUDE.md files into docs/](https://github.com/outlmd/outl/issues/216) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Split .github/copilot-instructions.md into path-scoped instruction files](https://github.com/outlmd/outl/issues/215) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [docs/query.md: a three-backtick outer fence swallowed 46 lines and four heading anchors](https://github.com/outlmd/outl/issues/214) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Five behaviours the retroactive RFCs found nothing pinning](https://github.com/outlmd/outl/issues/213) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Seven documentation contradictions surfaced by the CLAUDE.md extraction](https://github.com/outlmd/outl/issues/212) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Test suite writes into the real device store, and three doctor tests are flaky because of it](https://github.com/outlmd/outl/issues/211) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Pages hold content that exists in no op — invisible to every check, and re-projection deletes it](https://github.com/outlmd/outl/issues/210) ## 2026-08-05 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix!: stop losing content without saying so](https://github.com/outlmd/outl/pull/209) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [build!: drop bincode for postcard to unblock embedders](https://github.com/outlmd/outl/pull/208) - ✅ Reviewed PR in [avelino/dotagent](https://github.com/avelino/dotagent): [chore(deps): bump quinn-proto from 0.11.14 to 0.11.16](https://github.com/avelino/dotagent/pull/39#pullrequestreview-4866247740) (Approved) - ✅ Reviewed PR in [avelino/dotagent](https://github.com/avelino/dotagent): [chore(deps): bump opentelemetry_sdk from 0.32.0 to 0.32.1](https://github.com/avelino/dotagent/pull/38#pullrequestreview-4866244471) (Approved) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Long-running agents: keep a dispatcher alive between messages](https://github.com/avelino/dotagent/issues/45) ## 2026-08-04 - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [feat!: add inbound triggers and an MCP server](https://github.com/avelino/dotagent/pull/42) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [fix: aggregate every backend in tools/list, once each](https://github.com/avelino/mcp/pull/107) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [outl-core depends on unmaintained bincode 1.3.3 (RUSTSEC-2025-0141), blocks embedding in audited projects](https://github.com/outlmd/outl/issues/207) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Commands: procedures I pick, from a Telegram menu](https://github.com/avelino/dotagent/issues/44) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Skills: procedures the assistant loads on demand](https://github.com/avelino/dotagent/issues/43) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Nested MCP runs can orphan the target agent on dispatcher timeout](https://github.com/avelino/dotagent/issues/41) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [mcp serve returns one backend duplicated 28x, drops the other four](https://github.com/avelino/mcp/issues/106) ## 2026-08-03 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: add remind:: for scheduled notifications](https://github.com/outlmd/outl/pull/206) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Telegram assistant: receive messages and trigger agents](https://github.com/avelino/dotagent/issues/40) ## 2026-08-02 - ✅ Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [chore(deps): bump brace-expansion from 2.1.2 to 2.1.4 in /extensions/raycast](https://github.com/outlmd/outl/pull/205#pullrequestreview-4838716411) (Approved) ## Commits - 🔨 Push to [thezer0com/zer0](https://github.com/thezer0com/zer0): 65 commit(s) - [See commits](https://github.com/thezer0com/zer0/commits?author=avelino&since=2026-08-01T00:00:00Z&until=2026-08-31T23:59:59Z) - 🔨 Push to [outlmd/outl](https://github.com/outlmd/outl): 63 commit(s) - [See commits](https://github.com/outlmd/outl/commits?author=avelino&since=2026-08-01T00:00:00Z&until=2026-08-31T23:59:59Z) - 🔨 Push to [avelino/dotagent](https://github.com/avelino/dotagent): 26 commit(s) - [See commits](https://github.com/avelino/dotagent/commits?author=avelino&since=2026-08-01T00:00:00Z&until=2026-08-31T23:59:59Z) - 🔨 Push to [avelino/mcp](https://github.com/avelino/mcp): 5 commit(s) - [See commits](https://github.com/avelino/mcp/commits?author=avelino&since=2026-08-01T00:00:00Z&until=2026-08-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-08-01T00:00:00Z&until=2026-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The question has to exist before the code does **URL**: https://avelino.run/question-before-the-code/ **Published**: 2026-08-01 **Tags**: engineering, ai, outl, mcp, decision-making **Word Count**: 1308 words **Summary**: Writing software got cheap enough that building something to throw it away is now the sane move. What did not get cheaper is knowing what would make you throw it away, and that has to be written down first. I shipped outl's first sync on iCloud Drive knowing I would delete it. Not suspecting. Knowing. iCloud has no Linux, no Android, and no answer for anyone who does not want their notes on Apple's servers. It was never going to be the network outl shipped on. I built it anyway, ran it for a month, then [tore it out and put QUIC in its place](https://avelino.run/from-icloud-to-peers/). Ten years ago that is a stupid way to spend a month. Today it is the cheapest way to buy the only answer that mattered. ## The question existed before the transport did I had one thing to find out. Does this CRDT converge across two real devices, not two processes on my laptop pretending to be peers? That question is binary and it is answerable without writing a line of networking. Drop the per-actor `ops-*.jsonl` files in the ubiquitous container, let Apple's daemon push them between machines, watch two replicas merge. A borrowed file-pusher, exactly right for that job and wrong for every other one. It converged. The moment it did, the scaffold had nothing left to buy and I took it down. **Write the question first and the throwaway has an exit condition.** Skip it and the throwaway becomes the thing you ship, because nobody ever declared what would make it done. ## Implementing became the cheapest way to find out I was wrong Last week I implemented the new MCP revision in [my proxy](https://github.com/avelino/mcp) and threw away two models of the problem in one afternoon. The first was the version probe. I modelled it as a `Result`, worked or it didn't, which is what any sane person writes. A stdio backend that exits on an unknown method proved it wrong. A peer that ignores you and a peer that died look identical to a `Result` and demand opposite responses, so the probe has four outcomes now, not two. The second was the `Mcp-Name` header. I percent-encoded it, because that is the obvious thing to do with a URI. Wrong again. The spec mandates a Base64 sentinel, and `%` is an ordinary character in a header value, so my encoding was the thing desynchronising the two sides. Neither of those is a thing I reason my way into. I reasoned my way into the wrong one twice, confidently, and the code is what told me. [I wrote about that whole compatibility mess](https://avelino.run/absence-is-the-compatibility-contract/), and the part I keep coming back to is how little each wrong turn cost. An afternoon each. In 2015 that is a design doc, three people in a room, and the wrong answer defended for a quarter because someone already sank a month into it. ## Without the criterion, three implementations are three opinions Cheap to build is not the same as cheap to judge, and the second half is where this falls apart. Our TMS is about to start selling seats inside other companies' websites. Something has to answer "is there a seat on this route, at this time, for this price" thousands of times a day, and almost none of those questions becomes a booking. Three ways to serve that, and on paper each one defends itself. - **Synchronous pull.** The partner hits our core on every search. Always fresh, zero divergence. - **Edge replica.** We publish inventory and price snapshots, search resolves at the edge, only the booking reaches the core. - **Full feed.** The partner ingests a periodic dump and serves from their own base. The classic GDS model. I have no argument that settles this and nobody else in the room does either, which is the tell. The answer depends on how a partner's traffic actually behaves and none of us has ever seen that traffic. So four numbers, written down before any of the code. - **Booking conversion on the channel.** Primary. - **Failure after selection.** The passenger picked a seat and got an error. Counter-metric, and without it cache wins by default. - **p95 search latency.** A large partner has a short timeout and drops you from results without telling you. - **Infra cost per thousand searches.** Guardrail. I have a guess for each one. Synchronous pull looks reliable and too expensive to survive the channel's margin. The feed looks cheap and wrong on exactly the routes that fill fast, which are the routes that matter. There are frictions in there I have not thought about yet, and that is the whole reason the four numbers exist instead of my guesses. Agree on them after the fact and every implementation wins. Synchronous pull wins on reliability. The feed wins on cost. The edge replica wins on balance. Three narratives, and the decision goes to whoever argues best on Thursday. **A metric picked after the result does not measure anything, it justifies.** That is how "just build it and see" turns into a way of avoiding thought instead of a way of doing it. You trade a week of reasoning for six weeks of code and you are still deciding by vibe, except now you have three codebases to maintain the vibe with. AI is what made building three affordable. It did nothing for the part where you define what winning means. Instrumentation, real traffic, isolating one variable from another, all of it still costs what it always cost, which makes it the expensive half of the work now. Most teams still file it under paperwork. ## Only the survivor goes to review A month ago I wrote that [reviewing is not understanding](https://avelino.run/reviewing-is-not-understanding/), that writing code builds the theory of the program and reading it only recognises the shape. Building things to throw them away should read like a contradiction of that. It is not, as long as one rule holds. Whoever builds the throwaway is the one who validates it, and only what survives opens for review. I wrote the iCloud transport, so I carry the theory of why it converged and what it could never do. Nobody reviewed it, because there was nothing to maintain. The comparison happened inside the head that built both sides of it, which is the only place a comparison like that can happen. The pull request for what survives is not just what survives. It carries what was measured, what the discarded version returned, and why it lost. That is the dead theory turned into text, which is what Naur says the source code will never hold on its own. Get the order wrong and the bill arrives anyway. Three branches open for review, nobody holding the theory of any of them, and the prototype becomes production while everyone is still arguing about indentation. ## Throwing away is cheap only where the data model is not involved Swapping iCloud for QUIC touched zero lines of the CRDT. The op log did not change, the on-disk format did not change, client call sites did not move. That is not luck. It is the bill I paid a year earlier by refusing to let any state that has to converge live anywhere but the op log. I never prototyped three op log formats to see which one felt better. That decision I made by thinking, slowly, before writing anything, because getting it wrong means migrating every replica of every user and no amount of cheap code touches that cost. Same project, two decisions, opposite methods. The transport was disposable because rollback was one trait implementation. The log was not, and no AI made it so. Every project has both kinds and confusing them costs in both directions. Prototyping what is already obvious burns weeks. Reasoning about what only real traffic can answer produces confident fiction. The question is how you tell which one you are in. If you can write down what would make you delete it, build it today. If you cannot, you are not running an experiment. You are just producing opinions with a build step. --- # Absence is the compatibility contract **URL**: https://avelino.run/absence-is-the-compatibility-contract/ **Published**: 2026-07-31 **Tags**: mcp, protocol, rust, backwards-compatibility, testing, engineering **Word Count**: 2525 words **Summary**: MCP 2026-07-28 deleted the initialize handshake and protocol-level sessions. My proxy sits on both sides of that wire and every backend it talks to is still on the old revision, so picking one was never an option. This is how I got two protocol eras to share one codebase, and the four defects a green test suite never showed me. MCP [announced](https://blog.modelcontextprotocol.io/posts/2026-07-28/) revision [`2026-07-28`](https://modelcontextprotocol.io/specification/2026-07-28) three days ago. It deletes the `initialize` handshake and protocol-level sessions. Every request now carries its own protocol version, client identity and capabilities in `_meta`, and every result carries a `resultType`. It is the largest breaking change the protocol has had, and the [changelog](https://modelcontextprotocol.io/specification/2026-07-28/changelog) runs long. I maintain [mcp](https://github.com/avelino/mcp), a CLI that turns MCP servers into terminal commands and can run as a proxy in front of them. That puts me on both sides of the wire at once. To Claude, Cursor and whatever else connects, my proxy is a server. To the backends behind it, npx processes and HTTP endpoints, it is a client. Every one of those backends is on [`2025-11-25`](https://modelcontextprotocol.io/specification/2025-11-25) or older and will be for a year. So the interesting problem was never implementing the new revision. It was keeping the old one alive in the same binary, byte for byte, while the new one runs beside it. ## One rule, applied everywhere The whole compatibility story collapses into a single sentence I wrote at the top of the work and refused to bend: **the absence of a field, header or `_meta` key is the legacy path, never an error.** That sounds obvious. It is not what you write by default. The default instinct when you implement a spec that says "every request MUST carry `_meta`" is to reject requests without `_meta`. Do that and every client in the world breaks on the day you deploy. The rule turns each new requirement into a conditional instead of a validation. Missing `resultType`? That is a peer from before `resultType` existed, and the spec agrees: ```rust /// `resultType` of a peer's result. A result from an earlier-revision /// peer omits the field and MUST be read as `"complete"`. pub fn result_type(result: &Value) -> &str { result .get("resultType") .and_then(|v| v.as_str()) .unwrap_or(RESULT_TYPE_COMPLETE) } ``` Missing `Mcp-Method` header? Legacy client, serve it. Header present but disagreeing with the body? That is a gateway routing on a lie, reject with `-32020`. Validate what is there, never demand what is absent. Version selection reads the same way. Revisions are ISO dates, so chronological ordering is string ordering and the check is one line: ```rust pub fn is_stateless_version(version: &str) -> bool { version >= PROTOCOL_VERSION_STATELESS } ``` ## The contract before the parts Before writing any of the two sides, I wrote the shared vocabulary: the version constants, the `_meta` key names, the error codes, the `resultType` helpers, the header encoder. One file, `protocol.rs`, with tests. I did that because the client and the server halves of this change are the same rules pointing in opposite directions. The client encodes a header, the server decodes it. The client stamps `_meta`, the server reads it. If those two ever hold slightly different versions of the same rule, you get bugs that neither side can see alone, because each side is self-consistent and correct on its own terms. I still got one of those bugs. More on that below. But I got exactly one, and the reason I got only one is that most of the rules lived in a single definition both sides imported. ## Four outcomes, not two The client has to figure out which era a peer speaks. The spec sanctions probing `server/discover` first and falling back to `initialize` on failure, and my first instinct was a `Result`: it worked or it didn't. That instinct was wrong, and a stdio backend is why. Modelling the probe as four outcomes instead of two is the difference between a fallback that works and one that kills a working connection: ```rust enum Probe { Discovered(Box), /// The peer answered, just not with a discovery result, a JSON-RPC /// error, no result, or a result of some other shape. An old peer. Unsupported(anyhow::Error), /// Nothing came back inside the probe budget. The peer is most likely /// alive and ignoring a method it never heard of, so we leave it running /// and fall back on the same transport. TimedOut, /// The transport itself failed under the probe. A stdio backend that /// exits on an unknown method takes the connection down with it, so the /// fallback handshake would otherwise run on a dead pipe. Died(anyhow::Error), } ``` `TimedOut` and `Died` look like the same thing from a `Result`. They demand opposite responses. A peer that ignores an unknown method is healthy, so re-spawning it would kill a working process and pay the cold start twice. A peer that exited took the pipe with it, so the fallback handshake has to run on a fresh transport or it fails against a corpse. The probe also gets its own three second budget instead of inheriting the sixty second request timeout. The likeliest answer from every backend I proxy today is no answer at all, and that is not worth a minute of startup. ## The test suite was green and the handshake was broken Here is the one that should worry you, because it is the failure mode you cannot grep for. I implemented `server/discover`, the RPC that replaces the handshake. I wrote the type, the server emitted it, the client parsed it, tests covered both directions. 682 tests passing. The wire shape was wrong. The spec's `DiscoverResult` calls the version list `supportedVersions` and puts server identity inside `_meta["io.modelcontextprotocol/serverInfo"]`. I had `protocolVersions` and a top-level `serverInfo`. Against any compliant peer, discovery fails in both directions. My client would fail to parse a real server's answer, swallow it as "old peer", and fall back to an `initialize` that a modern-only server does not implement. My server would answer real clients with a shape they cannot read. The tests passed because the fixtures were built from my own encoder. A struct that serialises and deserialises the same wrong field name round-trips perfectly against itself. Every assertion was true. The suite proved my code agreed with my code. The fix was not renaming a field. It was changing what the test asserts against: ```rust /// Pinned against the literal example on the spec's `server/discover` /// page. The field names are the whole contract: a result that parses /// only against our own encoder is exactly the bug this guards. #[test] fn discover_result_parses_the_spec_example() { let wire = json!({ "resultType": "complete", "supportedVersions": ["2026-07-28"], "capabilities": {"tools": {}, "resources": {}}, "_meta": { "io.modelcontextprotocol/serverInfo": { "name": "ExampleServer", "version": "1.0.0" } }, "instructions": "This server provides weather and resource utilities.", "ttlMs": 3_600_000, "cacheScope": "public" }); let parsed: ServerDiscoverResult = serde_json::from_value(wire).unwrap(); assert_eq!(parsed.supported_versions, vec!["2026-07-28"]); let info = parsed.server_info().expect("serverInfo lives in _meta"); assert_eq!(info.name, "ExampleServer"); } ``` That JSON is copied from the spec page, not generated by me. There is a second test asserting the old shape is now rejected, so drift in either direction fails loudly. The generalisation, once: when you implement someone else's protocol, at least one test per message type has to assert against bytes you did not produce. Round-trip tests verify your encoder matches your decoder. They say nothing about whether either matches the world. It is the gap I wrote about in [reviewing is not understanding](/reviewing-is-not-understanding), where recognition confirms the shape you already carry in your head and the bug lives in whatever recognition cannot reach. A round-trip test is recognition, and it recognised my own mistake as correct. ## A bug that lived between two correct halves `Mcp-Name` is a new header carrying the tool name or resource URI a request targets, so gateways can route without parsing the body. A resource URI is not header-safe. It holds UTF-8, spaces, percent escapes. The client encoded it before sending. The server compared the received header against the raw value from the JSON body. Both correct in isolation. Both tested. Both passing. Any `resources/read` on a URI containing a `%` or a space came back `-32020 HeaderMismatch`, which is most real URIs: ```text Mcp-Name header 'stub*file:///weekly%2520report.txt' does not match request target 'stub*file:///weekly%20report.txt' ``` Two slices, each with a different notion of the same value, and neither could see the other. The defect existed only where they met, which is precisely where neither side's tests looked. I wrote about [the same shape at team scale](/the-bug-was-coordination-not-code) once, three teams each making a defensible call and the product breaking between them. Here it was two halves of one binary written days apart, and the mechanic is identical. Then the fix I reached for was also wrong. I percent-encoded, because that is the obvious thing to do with a URI. The spec mandates a Base64 sentinel: ```text Mcp-Name: =?base64?{Base64EncodedValue}?= ``` with a rule that catches you if you skim: a plain ASCII value that merely *looks* like the sentinel must also be encoded, or the form is ambiguous. And `%` is an ordinary visible character in a header value, so re-encoding it is what desynchronised the two sides in the first place. The encoder now lives in the shared contract, not in the client, with the reason written where someone will find it: ```rust /// This lives in the shared contract, not in the client transport, because /// the *server* validating `Mcp-Name` has to decode exactly what the client /// encoded. Two copies of this rule that drift apart mean valid requests get /// rejected as header mismatches. ``` ## The type that lied Under the new revision a server can answer `tools/call` with an interim result, `resultType: "input_required"`, asking the client for elicitation or a sampling completion. The client answers by retrying the original request with `inputResponses`. It is called MRTR, and it replaces the server-initiated requests the old revision allowed. My proxy parsed every `tools/call` result into a typed `ToolCallResult` with a required `content` field. An interim result has no `content`. So a perfectly legal protocol exchange arrived as a serde parse error and went out as `-32603 internal error`. Fixing it meant relaying the raw JSON on that path instead of round-tripping through a struct. Which surfaced something I had not gone looking for: that struct had been silently dropping `structuredContent` for over a year, a field the spec added in `2025-06-18`. Every backend that returned structured output had it deleted in transit by my proxy, and nobody noticed because the field just was not there on the other side. A type that discards unknown fields is a filter you forgot you installed. On a proxy, where your job is to relay someone else's data faithfully, that is the wrong default. The retry path had a matching trap. The proxy rebuilt backend params from `{name, arguments}`, the two fields it knew about. An MRTR retry carries `inputResponses` and `requestState` alongside those, so rebuilding dropped the continuation and stalled the exchange forever. It now forwards an explicit allowlist of the fields the spec defines, which keeps a client from smuggling arbitrary top-level keys into a backend through me. ## Security that does not secure The revision hardens authorization, and this is where I shipped something that looked right and did nothing. [RFC 9207](https://datatracker.ietf.org/doc/html/rfc9207) says the authorization server includes an `iss` parameter in the response, and the client MUST validate it before redeeming the code. I implemented both halves. The AS emits `iss`, the client compares it against the recorded issuer, mismatch aborts the flow. Tests for match, mismatch, absent, empty. The check was inert. Nothing validated that the `issuer` inside an AS metadata document matches the URL the document was fetched from, which [RFC 8414 §3.3](https://datatracker.ietf.org/doc/html/rfc8414#section-3.3) requires. Without that, the comparison is self-referential. A hostile MCP server declares its own `authorization_servers[0]`, that server's document declares a matching `issuer`, and my check compares the attacker's claim against the attacker's claim. It passes every time. Worse, that same attacker-declared issuer was the key under which client registrations get stored, so a hostile server could overwrite the registration of a legitimate one. The lesson is not "I forgot an RFC". It is that a validation is only worth what its reference value is worth. I had built a careful comparison against a number I let someone else write. While fixing it I also found the `iss` comparison was one notch too loose. The authorization page is explicit: > After decoding the `iss` value [...] clients **MUST NOT** apply scheme or host case folding, default-port elision, trailing-slash, or percent-encoding normalization before comparison. My comparison ran both sides through a key-normalising helper that absorbs a trailing slash. It is now byte-exact, with 22 deny assertions covering each normalisation the spec forbids, in both directions, because a normalising client could normalise the received value, the recorded one, or both. ## What the legacy peer does not see The last piece is the one I got wrong on the first pass, and the code told me three different stories about it. New results carry `resultType`, `_meta.serverInfo`, `ttlMs` and `cacheScope`. I stamped them unconditionally, reasoning that an extra field is harmless. One file said legacy peers "must keep seeing byte-identical behavior". Another said stamping was deliberate and unconditional. A test named `legacy_client_is_served_exactly_as_before` claimed to guard it. That test could not fail. Its assertion loop inspected the requests the test itself had built without `_meta` and without headers, then asserted they had no `_meta` and no headers. The two directions that could actually regress, the proxy's responses to the legacy client and the headers the proxy sends onward to the legacy backend, were never asserted. So a 2024-11-05 client asking for `tools/list` was getting four fields it had never seen, and the test named after that exact guarantee was tautological. Both are fixed. The stamping is gated on a flag threaded from the transport into dispatch, and the same gate covers the routing headers: ```rust if self.is_stateless() || meta.protocol_version.is_some() { if let Some(value) = header_value(meta.method) { req = req.header(HEADER_MCP_METHOD, value); } // ... } ``` The `||` is load bearing. The `server/discover` probe runs before negotiation finishes, so `is_stateless()` is still false, but the probe declares its version in the body. Gating on the body as well as on negotiated state keeps the probe fully labelled for gateways while nothing else leaks onto a legacy hop. Rewriting the tautological test is what caught a fifth leak nobody had listed: `resultType` was also being stamped on every relayed result regardless of peer. ## What I would tell you if you are about to do this Four things, in the order they cost me the most. Assert against bytes from the spec, not bytes from your encoder. My worst defect survived 682 passing tests because the fixture and the implementation shared the same misunderstanding. Name the rule once, in one place both sides import. The single bug that escaped that discipline was the one where the client and the server each held their own copy of an encoding rule. Ask what a passing test would look like if the feature were deleted. If the answer is "still passing", the test is decoration. Two of mine were. And treat absence as the contract. Every new MUST in a revision is a MUST for peers that opted into it. For everyone else it is silence, and silence has to keep meaning exactly what it meant before. The proxy speaks both revisions now. A client on `2024-11-05` sees the same bytes it saw last year, a client on `2026-07-28` gets stateless dispatch, MRTR relay and cache hints, and neither knows the other exists. --- **mcp** is open source: [github.com/avelino/mcp](https://github.com/avelino/mcp) --- # Obcecado por resultado **URL**: https://avelino.run/obcecado-por-resultado/ **Published**: 2026-07-18 **Tags**: mindset, resultado, carreira, endurance **Word Count**: 290 words **Summary**: Negócio, esporte, família. Sou obcecado por resultado em tudo que assumo, e parei de me desculpar por isso. Sou obcecado por resultado. Em tudo que me proponho a fazer. Demorei pra falar isso em voz alta sem sentir que precisava me desculpar. No negócio, resultado é fazer a coisa acontecer. Crescer, dar lucro, sobreviver. Qual desses depende do momento que a empresa vive, e fingir que não é assim é como os times perdem anos. Repito a mesma frase pro meu time todo ciclo: não quero pessoa que quer pegar card, quero pessoa que entrega resultado. Card movido pra done não é resultado. Receita é. Retenção é. No esporte, resultado é fazer algo que eu ainda não fiz. Toda temporada vou atrás de uma distância, um tempo, uma prova que não tenho certeza se termino. Essa é a parte que eu gosto. E o equilíbrio entre trabalho e treino faz parte do resultado também. Um PR que me custa o trabalho é uma troca ruim. Uma carreira que come meu treino é pior ainda. Família é onde a palavra resultado soa errada. Eu discordo. Com família, o resultado é presença. Estar dentro da conversa, mergulhar no assunto que eles trouxeram, me conectar. Vivo intensamente tudo que assumo, e eu que escolhi ter família. Não poderia ser diferente com eles. Peter Drucker escreveu isso melhor que eu, em 1999, num ensaio chamado [Managing Oneself](https://www.amazon.com/Managing-Oneself-Harvard-Business-Classics/dp/142212312X). A ideia é seca: ninguém gere o seu desenvolvimento por você. Nem a empresa, nem o chefe, nem o treinador. Saber o que você assume e onde entrega é tarefa sua, e a conta sempre chega no seu nome. Negócio, esporte, família, os três eu escolhi. Ninguém me colocou neles. Obsessão por resultado, pra mim, é respeito pela minha própria palavra. Se eu disse que ia fazer, o único fim aceitável é feito. Simples assim. --- # The model was never the bottleneck **URL**: https://avelino.run/the-model-was-never-the-bottleneck/ **Published**: 2026-07-03 **Tags**: ai, engineering, product, buser **Word Count**: 650 words **Summary**: We bought a design studio to make our models better. The bottleneck in ML was never accuracy, it's the handoff to the human who decides. We bought a design studio to make our models better. [Buser](https://www.buser.com.br/) acquired [Designa](https://startups.com.br/negocios/ma/buser-compra-a-designa-e-dobra-aposta-em-ia-na-estrada/) this week. Nine years ago they built the UX of our first app. The headline is that model quality, not fleet size, decides our next decade. That's the soundbite. It's also not the hard part. The hard part starts after the model is already good. A pricing model outputs a number. An allocation model says move this bus. A demand model flags a route. None of that is a decision. It's a suggestion sitting in front of a human who takes it or ignores it. An operator on a shift. A partner running a fleet. A passenger deciding whether to trust the price. The model's output lives or dies in that gap, and the gap is not made of math. Call the value of a model accuracy times adoption. Accuracy is what it gets right. Adoption is how often the human on the other end acts on it. You multiply the two. If adoption is zero, the product is zero. A model that is right and ignored ships nothing. Worse: the next point of accuracy, the one you bought the GPU for, multiplies against that same small adoption number. You paid to sharpen the factor that was never the constraint. Adoption is not a property of the model. It's a property of the interface. Whether the operator understands what the model suggested, and why, well enough to act without a shrug. I've [argued this before](https://avelino.run/technical-founders-misread-adoption-rogers-pix/) about product adoption: it gets decided by the user's question, not the builder's. Here the operator is the user, and the model's suggestion is what they adopt or ignore. Lisanne Bainbridge saw this in 1983, in a paper about industrial plants called [Ironies of Automation](https://ckrybus.com/static/papers/Bainbridge_1983_Automatica.pdf). The more you automate, the more the human's leftover job becomes the hard part. You step in exactly where the machine can't, with less context than ever, because the machine ran the easy middle and handed you the edge. Automation doesn't remove the human. It moves the human to the worst seat in the house: deciding under load, fast, with the reasoning hidden. A few weeks ago I wrote that [reviewing code is not the same as writing it](https://avelino.run/reviewing-is-not-understanding/), because writing builds the theory of the program and reviewing only recognizes its shape. Same mechanic here, one layer up. An operator who eyeballs a suggestion and clicks approve is recognizing. An operator who understands why the model said move this bus and not that one is constructing. Recognition scales badly. The first suggestion that looks strange, trust breaks, and adoption falls to zero across every route at once. The interface is where recognition turns into construction, or fails to. Not colors and spacing. Whether a human can rebuild enough of the model's reasoning to own the decision that follows. That is a design problem stacked on top of a machine learning problem, and almost nobody staffs the seam between them. The reason is boring. Accuracy has a number. It goes on a dashboard, it climbs, it feels like progress. Handoff quality has no clean number, so it gets no budget. People fund what they can measure. The market sells bigger models, longer context, more GPU, because those ship with graphs. Nobody sells you the bridge, because the bridge only shows up as "adoption went up" three quarters later, and you can't put that on a slide with a straight line to the spend. So we bought the people who build bridges. [Michel](https://www.linkedin.com/in/michelamaral/) and [Fábio](https://www.linkedin.com/in/f%C3%A1bio-rodrigues-30362560/) are in engineering now, next to the people training the models. Nine years ago they designed how a person buys a bus ticket. Now they design how a person trusts a machine's call. Same skill. The problem just moved up a layer. The next decade isn't model quality. It's how much of that quality survives contact with the human who has to decide. --- # Open Source Contributions - July 2026 **URL**: https://avelino.run/foss/2026/07/ **Published**: 2026-07-01 **Word Count**: 1139 words **Summary**: Open source activity in July 2026: PRs, reviews, issues, comments across multiple repositories. This month (July 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. ## 2026-07-31 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: render embedded asset files inline](https://github.com/outlmd/outl/pull/204) ## 2026-07-30 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: support file upload as assets](https://github.com/outlmd/outl/pull/201) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [feat: speak MCP 2026-07-28 without breaking older peers](https://github.com/avelino/mcp/pull/105) - ✅ Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Bump chrondb to fix native library install on macOS aarch64](https://github.com/avelino/mcp/pull/102#pullrequestreview-4823989130) (Approved) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [feat(md): render embedded asset files — inline images, PDF, generic file chips](https://github.com/outlmd/outl/issues/203) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [feat: file assets — upload, storage, sync, and import](https://github.com/outlmd/outl/issues/202) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Support MCP spec 2026-07-28 without breaking 2025-11-25 clients and backends](https://github.com/avelino/mcp/issues/104) ## 2026-07-29 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: carry Roam properties and highlights into outl](https://github.com/outlmd/outl/pull/199) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: resolve block refs and embeds in desktop renderer](https://github.com/outlmd/outl/pull/198) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: open quick-switcher pages by literal on-disk slug](https://github.com/outlmd/outl/pull/196) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [TUI: quick switcher opens an empty duplicate page when the on-disk slug contains slug-unsafe characters](https://github.com/outlmd/outl/issues/195) ## 2026-07-28 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [perf: batch op-log appends, one fsync per action](https://github.com/outlmd/outl/pull/194) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: rebuild importers on adapters, resolve block refs](https://github.com/outlmd/outl/pull/193) - 🔀 Opened PR in [akitaonrails/ai-memory](https://github.com/akitaonrails/ai-memory): [feat: add pluggable content storage with outl adapter](https://github.com/akitaonrails/ai-memory/pull/291) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [perf: per-op fsync (F_FULLFSYNC) makes composite writes ~90ms — add batch append](https://github.com/outlmd/outl/issues/192) - 🐛 Opened issue in [akitaonrails/ai-memory](https://github.com/akitaonrails/ai-memory): [proposal: pluggable content storage, let the user choose where memory lives](https://github.com/akitaonrails/ai-memory/issues/290) ## 2026-07-27 - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [feat(md): alias wikilinks — `[alias]([[Page]])` and `[alias](((blk-handle)))`](https://github.com/outlmd/outl/issues/191) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [feat(md): page embed — transclude a whole page with `![[page]]`](https://github.com/outlmd/outl/issues/190) ## 2026-07-26 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: open the markdown link under the cursor with gx](https://github.com/outlmd/outl/pull/187) ## 2026-07-24 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: split a block at the cursor on Enter](https://github.com/outlmd/outl/pull/186) - 💬 Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [Correcting formatting on a code block.](https://github.com/outlmd/outl/pull/185#pullrequestreview-4771674137) (Commented) ## 2026-07-23 - ✅ Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [chore(deps): bump brace-expansion from 5.0.6 to 5.0.7 in /extensions/raycast](https://github.com/outlmd/outl/pull/182#pullrequestreview-4764990791) (Approved) ## 2026-07-21 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: show ancestor breadcrumb in backlinks](https://github.com/outlmd/outl/pull/181) ## 2026-07-20 - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Backlinks show a nested reference with no context (missing ancestor breadcrumb)](https://github.com/outlmd/outl/issues/180) ## 2026-07-17 - ✅ Reviewed PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Handle flat archive layout in native library installer](https://github.com/avelino/chrondb/pull/146#pullrequestreview-4721824395) (Approved) ## 2026-07-16 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat(plugins): plugin config + keychain secrets, one settings surface for every client](https://github.com/outlmd/outl/pull/178) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Opening/syncing a large workspace reparses the whole op log every time (211k ops → multi-second hangs; mobile freezes)](https://github.com/outlmd/outl/issues/179) ## 2026-07-15 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: add zoom into a block across tui, desktop, and mobile](https://github.com/outlmd/outl/pull/177) ## 2026-07-13 - ✅ Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: quote argument-hint YAML values so Copilot CLI ≥1.0.65 loads all skills (closes #175)](https://github.com/outlmd/outl/pull/176#pullrequestreview-4686847090) (Approved) - ✅ Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: keep bullets outside blockquotes](https://github.com/outlmd/outl/pull/174#pullrequestreview-4685162803) (Approved) - 🔍 Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(desktop): toggle tasks from backlinks](https://github.com/outlmd/outl/pull/173#pullrequestreview-4684907503) (Changes requested) ## 2026-07-12 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: get the Android app working (P2P sync + APK release)](https://github.com/outlmd/outl/pull/172) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [perf: make page backlinks O(n) instead of O(n²)](https://github.com/outlmd/outl/pull/170) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: make snapshot boot work in production](https://github.com/outlmd/outl/pull/168) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(actions): re-project a page's .md when sync moves the tree past it](https://github.com/outlmd/outl/pull/167) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(sync): make peers.json writes atomic + verify peer identity on pairing](https://github.com/outlmd/outl/pull/165) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(sync): reject sync from a peer that isn't in peers.json](https://github.com/outlmd/outl/pull/164) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(core): harden op-log I/O against conflict files, torn tails, and non-UTF8 lines](https://github.com/outlmd/outl/pull/163) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(sync): cap sync frame body size to prevent OOM from a hostile peer](https://github.com/outlmd/outl/pull/162) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Android build + release pipeline (.apk on GitHub Releases)](https://github.com/outlmd/outl/issues/171) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [perf(actions): inverted index for page backlinks — kill the O(total-blocks) walk on every page open](https://github.com/outlmd/outl/issues/169) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Synced page renders empty on a second device: tree has the ops, but the stale .md the view reads is never re-projected](https://github.com/outlmd/outl/issues/166) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Split jsonl.rs — it's past the file-size guard's hard limit](https://github.com/outlmd/outl/issues/161) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [peers.json is written without atomicity or locking](https://github.com/outlmd/outl/issues/160) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Pairing accepts an unverified peer identity](https://github.com/outlmd/outl/issues/159) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Removing a paired device doesn't actually revoke its access](https://github.com/outlmd/outl/issues/158) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Op-log reader can silently drop durable ops after a crash or partial sync](https://github.com/outlmd/outl/issues/157) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Snapshot fast-boot is inert in production, and naively fixing it would silently drop synced edits](https://github.com/outlmd/outl/issues/156) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [A single paired peer can crash the app with an oversized sync message](https://github.com/outlmd/outl/issues/155) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [Workspace fails to open when a sync tool leaves a conflict copy of an op-log file](https://github.com/outlmd/outl/issues/154) ## 2026-07-11 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: configurable backlinks sort order](https://github.com/outlmd/outl/pull/152) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: add multi-block batch ops to tui and desktop](https://github.com/outlmd/outl/pull/151) ## 2026-07-10 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: template engine (structural + callable)](https://github.com/outlmd/outl/pull/150) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [sync: local mDNS discovery for same-LAN peers (iroh 1.0.0)](https://github.com/outlmd/outl/issues/149) ## 2026-07-09 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: query code blocks, plugin SDK API, and block ID stability fix](https://github.com/outlmd/outl/pull/145) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [feat: template engine — structural templates + callable code blocks](https://github.com/outlmd/outl/issues/146) ## 2026-07-07 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [perf(core): add boot_scale_bench reproducing the RSS growth wall](https://github.com/outlmd/outl/pull/138) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: add page deletion across all clients](https://github.com/outlmd/outl/pull/136) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [perf(core): JsonlStorage cache is unbounded, RSS grows linearly with op-log history, snapshot doesn't help](https://github.com/outlmd/outl/issues/137) ## 2026-07-06 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: avoid sidecar churn on every ref open](https://github.com/outlmd/outl/pull/135) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: iroh sync survives custom-CA proxies and stale VPN peer addrs](https://github.com/outlmd/outl/pull/134) - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: block ref (( autocomplete in desktop editor](https://github.com/outlmd/outl/pull/132) ## 2026-07-05 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [fix: load full edit history from storage when rebuilding docs after snapshot boot](https://github.com/outlmd/outl/pull/130) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [bug(md/core): sequential same-actor build_text_replace_update concatenates instead of replacing on Doc rebuild](https://github.com/outlmd/outl/issues/129) ## 2026-07-04 - ✅ Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(tui): sync command palette visual order with selection index](https://github.com/outlmd/outl/pull/125#pullrequestreview-4630410065) (Approved) - 🐛 Opened issue in [outlmd/outl](https://github.com/outlmd/outl): [feat(snapshot): phase 1 — local boot via snapshot + delta replay](https://github.com/outlmd/outl/issues/128) ## 2026-07-03 - 🔍 Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [Fix/open page by slug missing md projection](https://github.com/outlmd/outl/pull/126#pullrequestreview-4627856230) (Changes requested) ## 2026-07-02 - ✅ Reviewed PR in [outlmd/outl](https://github.com/outlmd/outl): [fix(desktop): let settings modal body scroll when content overflows](https://github.com/outlmd/outl/pull/124#pullrequestreview-4618706757) (Approved) ## 2026-07-01 - 🔀 Opened PR in [outlmd/outl](https://github.com/outlmd/outl): [feat: copy and paste clean markdown across all clients](https://github.com/outlmd/outl/pull/115) ## Commits - 🔨 Push to [outlmd/outl](https://github.com/outlmd/outl): 140 commit(s) - [See commits](https://github.com/outlmd/outl/commits?author=avelino&since=2026-07-01T00:00:00Z&until=2026-07-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 6 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-07-01T00:00:00Z&until=2026-07-31T23:59:59Z) - 🔨 Push to [avelino/mcp](https://github.com/avelino/mcp): 5 commit(s) - [See commits](https://github.com/avelino/mcp/commits?author=avelino&since=2026-07-01T00:00:00Z&until=2026-07-31T23:59:59Z) - 🔨 Push to [avelino/jbundle](https://github.com/avelino/jbundle): 3 commit(s) - [See commits](https://github.com/avelino/jbundle/commits?author=avelino&since=2026-07-01T00:00:00Z&until=2026-07-31T23:59:59Z) - 🔨 Push to [avelino/outl-plugin-ouraring](https://github.com/avelino/outl-plugin-ouraring): 3 commit(s) - [See commits](https://github.com/avelino/outl-plugin-ouraring/commits?author=avelino&since=2026-07-01T00:00:00Z&until=2026-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Reviewing is not understanding **URL**: https://avelino.run/reviewing-is-not-understanding/ **Published**: 2026-06-28 **Tags**: ai, engineering, developer-mindset, books **Word Count**: 657 words **Summary**: The most repeated advice about AI code is to review it like a junior's PR. Naur explained in 1985 why that is not enough: reviewing gives you recognition, writing gives you the theory, and the bug lives in the gap. The most repeated advice about AI-generated code is also the most wrong: treat every line like a PR from a junior you're mentoring. [I gave that advice myself](https://avelino.run/the-code-is-yours/). It sounds responsible. It sounds adult. And it ignores the one thing that matters: reviewing and writing do not produce the same knowledge. You can review with all the discipline in the world and still freeze at 3am, unable to reproduce the bug. Not from laziness. From mechanics. ## Naur told us what a program is, in 1985 Peter Naur wrote *Programming as Theory Building*. The claim: the program is not the text. It's the theory in the head of whoever built it. The source code is residue. For Naur, maintenance doesn't fail because documentation is bad. It fails because the theory died - the person who held the model of the program in their head left, and nobody recovers that model by reading the code. The text survives. The theory doesn't. Read that again with AI generating half of what lands in the commit. ## Writing builds the theory. Reviewing doesn't. When you write, the theory forms on its own, as a byproduct. Every line is a decision. Every decision discards three alternatives you never consciously register. By the time it compiles, the model of the program already lives in your head. You didn't ask for it. It came with the work. When you review, you receive the residue finished. You read the text, check the shape, recognize the pattern. **That's recognition, not construction.** You finish the review knowing the code looks right. Not knowing why it's right, or what it discarded to get there. These are two different kinds of knowledge. Recognition answers "does this look good?". Construction answers "why this way and not another?". The bug doesn't live in the first one. It lives in the second. ## The diligent dev freezes too The "junior PR" advice assumes the problem is effort. Review carefully and you're covered. Comfortable lie. You can read every line, think about the edge cases, approve with a clear conscience - and still not have built the theory. Because reading is not deciding. Approving the order of two operations is not the same as having chosen that order against the alternative that breaks. The diligent reviewer walks away with well-checked residue and zero theory. Then the bug shows up. And the bug almost never lives in the "what" - what the code does, you understood during review. It lives in the "how": the edge nobody chose, the race between two points you approved at a glance, the case that only exists under real load. That's exactly the layer review doesn't exercise and writing exercised for free. ## The bill is the theory you never built Reproducing a bug is reconstructing the state that broke. Reconstructing state needs the model of the program - the theory. If you never built the theory, you have nothing to rebuild it from. You stare at the code you approved and it stares back, correct and mute. Before AI, writing handed you the theory whether you wanted it or not. The cost of producing understanding was baked into the cost of producing code. AI split the two. Now you can have the code without the theory, and nothing warns you it's missing - because it compiles, it passes, it looks done. Treating AI like a junior doesn't fix this. A real junior builds their own theory and grows. AI builds no theory at all, and neither does yours, if all you do is review. --- Reviewing was never understanding. It was a shortcut that worked because, before, the only way to reach the code already forced you to understand it. AI removed the obligation. It kept the shortcut. Next time you approve a PR generated in thirty seconds, ask one thing before the merge: if this breaks in three weeks, do I rebuild the state, or do I just recognize the lines? --- # The op log was peer-to-peer the whole time **URL**: https://avelino.run/from-icloud-to-peers/ **Published**: 2026-06-25 **Tags**: sync, crdt, p2p, iroh, quic, nat, distributed-systems, rust, outl, engineering **Word Count**: 3357 words **Summary**: iCloud Drive was a deliberate shortcut to prove the CRDT converges across real devices before I solved networking. Proof done, I swapped the file-pusher for a real network. This is how outl now syncs every client peer-to-peer over QUIC, with no server and no Apple, and the parts of 'peer-to-peer' the brochures skip. A month ago I wrote about [building outl on the Kleppmann move-op paper](/from-paper-to-outliner). That post ended with a working sync: a terminal client on macOS and an iOS app, converging over iCloud Drive, no server, no merge dialogs. iCloud was a deliberate shortcut, and I want to be honest about that before I bury it. I had one question to answer first: does this CRDT actually converge across real devices, two separate machines, not two processes on my laptop pretending to be peers? iCloud Drive answered it without me writing a line of networking. Drop the per-actor `ops-*.jsonl` files in the ubiquitous container, let Apple's daemon push them between devices, watch two replicas merge. A file-pusher I borrowed to validate the algorithm, and for that job it was exactly right. The proof landed. The CRDT converged on two real devices, and once it had, the borrowed transport's ceiling was the only thing left in the room. Linux: no iCloud. Android: no iCloud. Anyone who doesn't want their notes on Apple's servers: no thanks. The algorithm was ready for a real network; iCloud was never going to be one. So I swapped it. outl now syncs peer-to-peer over [iroh](https://github.com/n0-computer/iroh): QUIC, hole punching, a relay only when the network forces one. Desktop, mobile, TUI, the CLI, and the MCP server all talk the same protocol. iroh is the default transport, `transport = "file"` is the opt-out for iCloud/Syncthing diehards, and pairing is one command. The interesting part is what didn't change. The op log, the CRDT, the on-disk format: untouched. Both transports deliver the exact same `ops-.jsonl` files. iCloud pushed those files so I could trust the merge; iroh ships them so anyone can. This post is the swap and everything under it. ## A transport swap, not a rewrite The thing that made this a transport swap and not a rewrite: the data model never depended on iCloud. It was built for replication from the first commit, I just hadn't pointed it at a real network yet. The shape on disk, from the last post: ``` ops/ ├── ops-01HXY...A.jsonl ; only device A writes here ├── ops-01HXY...B.jsonl └── ops-01HXY...C.jsonl ``` One append-only file per device. Every mutation any client makes serialises into a `LogOp` (an HLC timestamp, the actor, the operation) and appends to that actor's file and nowhere else. Each replica reads everyone's files, merges them by HLC, replays the move-op algorithm. That's the whole CRDT. Three properties of that layout are the reason P2P was a port and not a project: The op log is the offline buffer. Each device accumulates its own ops while disconnected. There is no separate queue, no outbox, no "pending changes" table. The thing you sync is the thing you already wrote to disk. Each device knows exactly what it has seen. `Storage::last_ts_per_actor()` walks the merged log and returns the highest HLC per actor. That map is a vector clock, free, computed from data already in RAM: ```rust fn last_ts_per_actor(&self) -> Result, StorageError> { let mut map: HashMap = HashMap::new(); for op in self.cache.read().iter() { map.entry(op.actor) .and_modify(|h| if op.ts > *h { *h = op.ts }) .or_insert(op.ts); } Ok(map) } ``` Replay order doesn't matter. Ops merge by HLC with an actor tiebreak, so a device can receive them in any order and land on the same tree. A transport that delivers bytes late, out of order, or in bursts can't corrupt the result. The only thing I had to build was a `SyncTransport` trait so iCloud and iroh were interchangeable, and a new implementation behind it. The file poller from the last post became `FileSyncTransport`. The new code is `IrohSyncTransport`. Client call sites didn't move. The generalisation, once: if your sync is a CRDT over per-actor append-only logs, the transport is a detail. Swapping iCloud for QUIC touched zero lines of the algorithm. That's the payoff for putting the proof at the center and everything else at the edge. ## The wire: vector-clock delta sync over QUIC When two devices connect, neither dumps its whole log. They exchange vector clocks and ship only the gap. The protocol is small. ALPN `outl-sync/1`. Every message is a 4-byte big-endian length prefix and a body. The handshake is four messages on a single bidirectional QUIC stream: ``` 1. initiator → responder: SyncRequest { workspace_id, vector_clock: A } 2. responder → initiator: SyncResponse { vector_clock: B } 3. responder → initiator: ops blob (ops where op.ts > A[op.actor]) 4. initiator → responder: ops blob (ops where op.ts > B[op.actor]), finish() ``` Both directions converge in one connection. The initiator sends its clock, learns the responder's, and each side computes the difference locally: ```rust fn ops_missing_for(ops_dir, actor, peer_clock) -> Result> { // ... load every ops-*.jsonl all_ops.into_iter().filter(|op| match peer_clock.get(&op.actor) { None => true, // peer has never seen this actor Some(known) => op.ts > *known, // op is newer than what the peer has }).collect() } ``` The ops blob is JSONL: one `LogOp` per line, the same serialisation that's on disk, behind a 4-byte length prefix. No new format. The wire payload is literally lines from the jsonl files. Offline catch-up falls out of this for free. A device that was dark for a week comes back, sends a vector clock that's stale for three actors, and gets back exactly the ops it missed from all three. No replay-from-zero, no snapshot, no "are you sure you want to overwrite." If peer B accumulated peer C's ops while A was gone, B hands them to A on reconnect. B relays for C without either of them planning it. The vector clock doesn't care who wrote an op, only whether you've seen it. One guard on the ingest side. A received op whose HLC is more than 24 hours in the future gets dropped with a warning. A device with a wrong clock can otherwise poison the merge with timestamps no future write can beat. The gate is `now + 86_400_000` milliseconds; anything past it doesn't land. And one boring bug that cost real data before I caught it: two ingest tasks writing the same actor's file at once. Without a lock, two `write_all` calls interleave at the syscall level and glue two JSON objects onto one line (`...}}{"ts":...`), and now that line won't parse and the ops behind it are gone. So every append to `ops/` goes through one process-global async mutex. A whole batch of `open + write_all + flush + sync_data` is atomic against every other writer. The lock is held across the fsync, not just the write. Durability and framing in the same critical section. ## Gossip is the fast path, the catch-up loop is the one I trust Two devices on the same workspace need to know when to talk. Real-time, that's gossip. The topic is `blake3(workspace_id)`. Not the directory path, which differs across devices (`~/outl-p2p` on the laptop, some container UUID on the phone). The workspace id is a stable token stored in `.outl/workspace-id`, so two devices in different folders hash to the same topic and meet on the same channel. When you commit, the transport broadcasts a tiny message on that topic: `workspace_id\nactor\nhlc`. A peer that hears it opens a stream and runs the delta sync above. Milliseconds, when it works. "When it works" is doing a lot of lifting. Gossip on a mesh of phones bouncing between WiFi and LTE is best-effort, and best-effort is not a guarantee I'll put my notes on. The CLI never gossips at all, it's too short-lived to bother. So gossip is the optimisation, not the mechanism. The mechanism is a loop: ```rust const CATCH_UP_INTERVAL: Duration = Duration::from_secs(8); const MAINTENANCE_RESYNC: Duration = Duration::from_secs(10); ``` Every 8 seconds, each device reloads `peers.json` and, for any peer it hasn't successfully synced with in the last 10 seconds, runs a full delta sync. A peer in flight is skipped (an in-flight guard keeps two syncs to the same node from racing). A peer that just synced via gossip is skipped (still fresh). A peer that's been quiet for 10 seconds gets re-dialed whether gossip fired or not. That `MAINTENANCE_RESYNC` window is the line between "sync usually works" and "sync works." Delta sync is a no-op when the clocks already match, so re-dialing a converged peer every 10 seconds costs a round-trip and zero writes. Cheap insurance against every flaky thing gossip sits on top of. I'd rather pay a heartbeat than debug "why didn't my note show up" over a carrier NAT. The generalisation: a real-time push and a periodic pull are not redundant, they fail in different weather. Gossip dies on a flaky mesh. The poll dies if the process isn't running. Run both and the union covers cases neither does alone. The push makes it feel instant; the poll makes it actually converge. ## NAT is the actual adversary Hole punching is the part of "peer-to-peer" the word hides. Two phones, both behind NATs, neither with a public address: there is no direct socket to open. iroh's relays solve the bootstrap. Both peers register a "home relay," the relay swaps their candidate addresses, both fire packets at each other at the same instant, and if the NATs cooperate a hole opens and the relay drops out of the data path. If they don't cooperate, the relay keeps forwarding. The relay sees ciphertext. QUIC plus TLS 1.3, keyed to the peer identities. It can see which node ids are talking, when, and how much. It cannot see one byte of an op, a page title, a tag. Content is end-to-end encrypted; the relay moves sealed envelopes. outl ships with n0's public relays and a `[sync] relay_url` knob to point at your own. Running `relay.outl.app` is on the roadmap, not because n0's relays are a problem, but because "no third party, ever" should be a config flip, and the wiring is already there. Some NATs never cooperate. Symmetric NATs map a different external port per destination, which is exactly what hole punching needs to be stable, and carrier-grade NAT on LTE is usually symmetric. An iPhone on cellular often can't be dialed at all. So the phone pulls. The catch-up loop means it doesn't matter who can reach whom: if A can't open a socket to B, B opens one to A on its next tick, and the sync is bidirectional regardless of who dialed. Asymmetric reachability, symmetric outcome. Then there's the multipath stall, which is the most "I lost an evening to this" bug in the project. iroh 1.0 opens QUIC paths to every candidate address at once: LAN IPv4, relay, and any global IPv6 it found. On a LAN-only machine that IPv6 path goes nowhere, but iroh waits on it anyway, and the connection hangs for ~30 seconds (`PTO expired`, `MultipathNotNegotiated`) while a perfectly good IPv4 path sits there unused. iroh 1.0 exposes no public knob to turn multipath off. So every endpoint in outl binds IPv4-only as a deliberate stopgap: ```rust fn n0_builder_ipv4_only(relay_url: Option<&str>) -> Builder { iroh::Endpoint::builder(presets::N0) .clear_ip_transports() // drop 0.0.0.0 + [::] .bind_addr("0.0.0.0:0") // re-add IPv4 only .expect("valid IPv4 socket") // ... } ``` It has to be every endpoint. If one side still advertised an IPv6 path, the other could try it and re-trigger the stall, so dropping it on one end isn't enough. Stored peer addresses get the same treatment: when I decode a peer's `EndpointAddr`, I keep its IPv4 direct addresses and throw the IPv6 ones away. This is a stopgap with a revert condition written next to it in the code: when iroh ships multipath fallback that doesn't block a healthy path on a dead one, the whole `bind` module deletes and we go back to dual-stack. I want it gone. Until then, IPv4-only beats a 30-second hang. ## Pairing without a server iCloud gave me one thing for free that P2P doesn't: trust. Two devices on the same Apple ID were already each other's. Take away the account and "which devices are allowed in this workspace" becomes a real question with a real handshake. Each device generates an ed25519 keypair once, at `~/.outl/identity.key`, 32 raw bytes, `0o600`, per machine, never synced. The public key is the node id. Two devices sharing an identity would collide on the relay, so the key stays put. Pairing is `outl peer pair`. It builds an endpoint, waits up to 5 seconds for it to learn its relay and direct addresses, and prints a ticket: base64 of the node's `EndpointAddr` (id, relay urls, direct addrs), as a string and a QR code. The other device dials the ticket on a separate ALPN, `outl-sync/pair/1`, and the two exchange one `PairingPayload` each over a single stream. Asymmetric order, because the dialer opened the stream it speaks first, then reads, so the single stream never deadlocks. Both sides write a `PeerEntry` into `/.outl/peers.json` and they're paired. One detail in there is load-bearing and took a corruption bug to find. The joiner adopts the host's workspace id, and it writes the new id to disk before flipping the in-memory handle: ```rust fn adopt_workspace_id(&self, remote: WorkspaceId) { if let Err(e) = remote.write(&self.workspace_root) { warn!("persist adopted id failed, not adopting: {e}"); return; // do NOT adopt in memory if disk write failed } *self.workspace_id.write().unwrap() = remote.clone(); let _ = self.wid_changed_tx.send(remote); } ``` Flip memory first and the process can die in the gap, and on restart it reads the old id off disk and silently splits into two workspaces that never speak again. Disk first. The in-memory state is allowed to be behind disk; it's never allowed to be ahead of it. `peers.json` lives per-workspace, not global, so peers travel with the graph. The membership list also gossips, every 5 seconds, tagged `outl-membership/1` to tell it apart from op announcements. Merge is add-only: a membership broadcast can teach you how to reach a peer that's already in your mesh, it can never inject a stranger. The topic is `blake3(workspace_id)`; only already-paired devices are even subscribed. The gossip adds reachability, never trust. ## The CRDT bug that only a real network could find Here's the one that justifies the whole property-test suite. `Op::Create` puts a new node under a parent. `Op::Move` re-parents an existing node, and it has always run a cycle guard: if the new parent is already a descendant of the node you're moving, the move would close a loop, so it's a no-op on the materialised tree (the op still goes in the log, untouched, because a later reorder can make it legal). Standard move-op. `Create` skipped that guard. For two years it was fine, because on one device you cannot create a cycle: you can't create `C` under `B` if `B` is already under `C`, the editor won't let you express it. The op order an author generates is always sane. Concurrent reordering doesn't respect author order. Two devices, no coordination: ``` Create(B, root) ; B under root Move(B, C) ; C doesn't exist yet, guard sees no cycle, B→C is written Create(C, B) ; NO guard → B→C→B closes a loop ``` When those three ops arrive reordered on a third replica and the `Create(C, B)` lands last, an unguarded `Create` closes `B → C → B`. A cycle in a tree CRDT is not a cosmetic bug, it's the one invariant the whole structure rests on. I did not find this by thinking hard. A property test found it. The convergence suite generates random ops across four actors, materialises them in multiple permutations of arrival order, and asserts every permutation lands on the same cycle-free tree. One permutation cycled. The fix is one condition, making `Create` behave exactly like `Move`: ```rust // crates/outl-core/src/tree/op.rs Op::Create { node, parent, position } => { if !self.nodes.contains_key(node) && !self.creates_cycle(*node, *parent) { self.nodes.insert(*node, (*parent, position.clone())); } } ``` The generalisation, and it's the one I'd tattoo on a junior: single-device testing is not a subset of distributed testing, it's a different test that happens to share code. This bug was unreachable by hand and trivial for a generator that doesn't respect causal order. If your system can reorder operations, the thing that finds your bugs is the thing that reorders operations on purpose. Ship the property tests. ## Every client is a peer, including Claude The goal was blunt: edit on any surface, it shows up everywhere, with nothing else open. That splits clients into two kinds. Long-lived clients bring the transport up at boot and announce on every commit: desktop, mobile, the TUI, and the MCP server. That last one is the one I didn't expect to care about as much as I do. The MCP server is long-lived, so when I have Claude write into a journal through the outl MCP, those ops announce over iroh and land on my phone with no GUI open anywhere. The agent is just another peer. Short-lived clients stay passive. `outl page create` runs in 200 milliseconds and has no business spinning up QUIC, which takes seconds to connect. So the CLI writes its op to `ops/` and exits, and relies on a co-resident long-lived peer plus the catch-up loop on every device to carry it. When a script genuinely needs to flush before it dies, `outl sync` brings the transport up, pushes, pulls, and exits. The TUI has a wrinkle worth calling out, because it's the bug that taught me the two transports aren't an either/or. Desktop and TUI on the same machine share one identity, so the relay routes the phone's inbound sync to whichever process is listening, usually the desktop, which writes the received ops into the shared `ops/` directory. The TUI's iroh transport never saw those bytes on the wire. They appeared on disk, written by a co-resident process. So the TUI runs `FileSyncTransport` and `IrohSyncTransport` at the same time: iroh reacts to its own wire receipts, the file poller reacts to any peer file growing on disk, including ops a sibling process delivered. Either one alone leaves a hole. Mobile has the hardest constraint: iOS suspends your sockets the moment the app backgrounds. No long-lived QUIC. The only way to sync in the background is to ask the OS for a window, so the app registers a `BGProcessingTask` and the handler reaches into Rust over a C ABI: ```rust #[no_mangle] pub extern "C" fn outl_ios_background_sync() -> bool { let Some(transport) = slot().lock().clone() else { return false; }; transport.sync_now(); std::thread::sleep(SYNC_WINDOW); // 20s: iroh connect + delta sync true } ``` The live transport is stashed in a `OnceLock` when it boots, the Swift handler calls this symbol on a background queue, it drives one sync, and it blocks ~20 seconds because that's a realistic ceiling for an iroh connect plus a delta exchange. Within the BGProcessingTask budget, outside the main thread. iOS decides when to grant the window; outl decides what to do with it. ## What the shortcut bought The last post was honest about a ratio: it took longer to build the layers around the paper than to implement the paper. This swap proved the inverse is also true. Because the data model was right, replacing the entire transport, the thing that sounds like the scary part, was the easy part. The CRDT didn't notice. The op log didn't change. The hard work had already been paid, a year earlier, by refusing to let any state that has to converge live anywhere but the op log. iCloud earned its place. It pushed files between two real devices so I could answer the only question worth answering early: does this thing converge off my laptop? It did, and that answer is the entire reason the rest of this was a port and not a gamble. A borrowed file-pusher was the right tool to validate a CRDT and the wrong tool to ship one, and knowing which is which is most of the job. When the algorithm outgrew the scaffold, I took the scaffold down. What's left now is the network the log was written for: QUIC between peers, a relay only when the NAT demands one, no server holding your notes, no account deciding which devices are yours. The paper proved the tree converges. iCloud proved it converges across devices. iroh is me building the network for everyone the log was always meant to reach. --- **outl** is open source: [github.com/avelino/outl](https://github.com/avelino/outl) --- # I sold my company and became an employee **URL**: https://avelino.run/i-sold-my-company-and-became-an-employee/ **Published**: 2026-06-02 **Tags**: career, founder, cto, open-source, exit **Word Count**: 477 words **Summary**: I had an exit and chose to be someone else's CTO for longer than I ran my own company. Founding was never about owning the company. I did not need to work again. I have been the CTO of a company I did not found for more than four years. The script is clear. Found, sell, rest. Become an investor, take the stage, found another one. Selling and going back to being an employee is not in the script. It looks like a downgrade. It is not. Selling gave me the one thing a founder thinks they already have and do not: real freedom. Not the freedom to give orders. I had that, I was the owner. The other one. The freedom to choose the work for the work, with no cash crunch on my neck, no end of the month deciding for me. With that freedom in hand, I made the least glamorous choice available. I went to be someone else's CTO. ## Founding was never about owning the company It was about the toys. A new problem every week. Last month it was building the team. This month it is data leakage in the age of AI. How to let the business areas use AI on Buser's data without throwing the vault open. I am not four years deep chasing the same bug. The problem keeps changing shape, and that is what keeps me up. Open source showed me that problem before it started to hurt. I began writing a proxy for MCP as a study, I wanted to understand JSON-RPC by hand. Halfway through I saw the hole: Buser was going to hit exactly this data exposure risk. I went to play with a protocol and came back with a threat mapped. The proxy is [mcp](https://github.com/avelino/mcp). Open source here is not a weekend hobby. It is the radar that lets me see the curve before it arrives. ## What I thought I would lose I thought I would lose the zero to one by stepping out of the founder seat. I was wrong. Buser does not want to stop where it is, so there is something new being born all the time. Zero to one does not live in the company's incorporation papers. It lives anywhere that refuses to stagnate. I thought I would lose open source. I keep building, I use it as study, real engineering practice. I have never shipped this much. I figured the team came for free with being the owner. It does not. I tested that. It comes from who sits in the room with you. Smart, ambitious people pull your level up every day. That I cannot buy with an exit. I choose it again every morning. ## The exit was not the finish line It was what made me honest about what I wanted to do with my days. The answer had no fancy title. Good work, hard problem, sharp team. --- Owning the thing was the accessory all along. It took an exit to understand that. --- # Open Source Contributions - June 2026 **URL**: https://avelino.run/foss/2026/06/ **Published**: 2026-06-01 **Word Count**: 1071 words **Summary**: Open source activity in June 2026: PRs, reviews, issues, comments across multiple repositories. This month (June 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. ## 2026-06-29 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [fix: honour a configured timezone for the journal date and clock](https://github.com/avelino/outl/pull/113) ## 2026-06-28 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [fix: rebuild block docs on demand instead of keeping them resident](https://github.com/avelino/outl/pull/111) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Op log grows forever — nothing ever compacts it](https://github.com/avelino/outl/issues/110) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [CLI replays the entire op log on every single command](https://github.com/avelino/outl/issues/109) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Mobile gets killed by iOS memory limit on large vaults — every block's Yrs doc stays resident](https://github.com/avelino/outl/issues/108) ## 2026-06-27 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [fix: wrap block text under the cursor](https://github.com/avelino/outl/pull/106) - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: add JavaScript plugin system across every client](https://github.com/avelino/outl/pull/105) ## 2026-06-26 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [fix: word-wrap block text to terminal width in the tui](https://github.com/avelino/outl/pull/104) - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [ci/desktop: use --debug in PR/main](https://github.com/avelino/outl/pull/101) - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: add outl:// deep links and Raycast extension](https://github.com/avelino/outl/pull/100) - 🔀 Opened PR in [raycast/extensions](https://github.com/raycast/extensions): [Add outl extension](https://github.com/raycast/extensions/pull/29044) ## 2026-06-25 - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat: register `outl://` deep link scheme (desktop + mobile)](https://github.com/avelino/outl/issues/98) ## 2026-06-24 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: sync workspaces peer-to-peer over iroh](https://github.com/avelino/outl/pull/97) ## 2026-06-23 - 🔍 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat: desktop vim O (create block before) + caret-aware Cmd+Shift+Enter](https://github.com/avelino/outl/pull/85#pullrequestreview-4554803450) (Changes requested) ## 2026-06-22 - ✅ Reviewed PR in [avelino/tabbar-shortcut-chrome](https://github.com/avelino/tabbar-shortcut-chrome): [Fix vertical-tabs toggle in fullscreen and speed up by ~9x](https://github.com/avelino/tabbar-shortcut-chrome/pull/3#pullrequestreview-4543420935) (Approved) - ✅ Reviewed PR in [avelino/tabbar-shortcut-chrome](https://github.com/avelino/tabbar-shortcut-chrome): [fix: avoid PiP window](https://github.com/avelino/tabbar-shortcut-chrome/pull/1#pullrequestreview-4543409591) (Approved) ## 2026-06-19 - 🔍 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(desktop): create a block with Cmd+Shift+Enter in view mode](https://github.com/avelino/outl/pull/93#pullrequestreview-4533072087) (Changes requested) - 🔍 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat: configurable calendar week-start (Monday/Sunday) in config.toml](https://github.com/avelino/outl/pull/95#pullrequestreview-4532830559) (Changes requested) - 💬 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat: add Obsidian vault importer](https://github.com/avelino/outl/pull/96#pullrequestreview-4532589571) (Commented) ## 2026-06-17 - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix: page autocomplete shows title instead of slug (#88)](https://github.com/avelino/outl/pull/89#pullrequestreview-4511872451) (Approved) - 🔍 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(desktop): block move + cut/copy/paste in view mode](https://github.com/avelino/outl/pull/90#pullrequestreview-4511866499) (Changes requested) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat: desktop — clickable external links in journals/pages](https://github.com/avelino/outl/pull/87#pullrequestreview-4511855245) (Approved) ## 2026-06-15 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: expand vim mode across tui and desktop](https://github.com/avelino/outl/pull/83) - 🔍 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix(desktop): free Cmd+X for native cut + implement Cmd+Z/Cmd+Shift+Z undo/redo](https://github.com/avelino/outl/pull/82#pullrequestreview-4496032425) (Changes requested) ## 2026-06-12 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: add :shortcode: emoji syntax across every client](https://github.com/avelino/outl/pull/79) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [perf(md): derive `WorkspaceIndex` from op log instead of walking `.md` files](https://github.com/avelino/outl/issues/81) ## 2026-06-11 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: ship @ mention autocomplete for persons](https://github.com/avelino/outl/pull/78) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(frontend): auto-pair brackets, parens and braces in GUI block editors](https://github.com/avelino/outl/pull/76#pullrequestreview-4480996859) (Approved) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Page-level properties from externally-edited .md don't reach the workspace tree](https://github.com/avelino/outl/issues/77) ## 2026-06-10 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: add blockquote prefix to outline blocks](https://github.com/avelino/outl/pull/66) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix(desktop): Enter edits the selected block even when it contains a [[ref]]](https://github.com/avelino/outl/pull/71#pullrequestreview-4472458254) (Approved) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(theme): logseq-light preset (Logseq's default light theme)](https://github.com/avelino/outl/pull/75#pullrequestreview-4471874832) (Approved) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix: make light themes actually render light (desktop boot frame, chrome, TUI canvas)](https://github.com/avelino/outl/pull/74#pullrequestreview-4471736169) (Approved) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(actions): tag mentions (#tag) count as backlinks, same as [[ref]]](https://github.com/avelino/outl/pull/72#pullrequestreview-4471696427) (Approved) - 🔍 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix(claude): claude permissions for commit and push must be allowed with ask](https://github.com/avelino/outl/pull/69#pullrequestreview-4471586569) (Changes requested) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix(mobile): keep search sheet results above the iOS keyboard](https://github.com/avelino/outl/pull/68#pullrequestreview-4471569250) (Approved) ## 2026-06-09 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [fix: prevent panic on empty outline insertion](https://github.com/avelino/outl/pull/62) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(desktop): page autocomplete popup while typing [[ ref ]]](https://github.com/avelino/outl/pull/61#pullrequestreview-4454564318) (Approved) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(desktop): bottom-left icon buttons to toggle sidebar and shortcuts help](https://github.com/avelino/outl/pull/57#pullrequestreview-4454561371) (Approved) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(desktop): open the backlinks panel by default](https://github.com/avelino/outl/pull/58#pullrequestreview-4454559037) (Approved) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat: support `:shortcode:` emoji in parser, autocomplete in every client, render as unicode](https://github.com/avelino/outl/issues/65) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat: support `> ` blockquote in markdown parser, renderer, TUI, and mobile](https://github.com/avelino/outl/issues/64) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(remind): block-level `remind::` property + scheduled local notifications (mobile + desktop)](https://github.com/avelino/outl/issues/63) ## 2026-06-06 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: run code blocks on mobile via long-press](https://github.com/avelino/outl/pull/54) ## 2026-06-05 - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix(tui): quick switcher keeps full candidate set when query shrinks](https://github.com/avelino/outl/pull/49#pullrequestreview-4438934286) (Approved) ## 2026-06-04 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat: ship outl-desktop and pull shared crates](https://github.com/avelino/outl/pull/53) - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [fix(mobile): tap on a [[ref]] with / creates and opens the page](https://github.com/avelino/outl/pull/51) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat: support `==highlight==` inline markdown in parser, TUI renderer, and mobile toolbar](https://github.com/avelino/outl/issues/52) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [fix(mobile): tapping a ref with '/' or other unsafe chars surfaces 'invalid page slug' toast instead of creating the page](https://github.com/avelino/outl/issues/50) ## 2026-06-03 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [Unify backlinks and add split oversized modules](https://github.com/avelino/outl/pull/48) - 💬 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix(import): Logseq import — create pages, preserve content, resolve backlinks (#43)](https://github.com/avelino/outl/pull/47#pullrequestreview-4423477835) (Commented) - 💬 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): desktop keyboard shortcuts for block editing](https://github.com/avelino/outl/pull/29#pullrequestreview-4423365700) (Commented) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): add back-to-today button in journal header](https://github.com/avelino/outl/pull/40#pullrequestreview-4423268728) (Approved) - 🔍 Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): arrow-key navigation between cells (desktop)](https://github.com/avelino/outl/pull/42#pullrequestreview-4414873067) (Changes requested) ## 2026-06-02 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [Paste external markdown as block tree](https://github.com/avelino/outl/pull/46) - ✅ Reviewed PR in [avelino/outl](https://github.com/avelino/outl): [fix: stop outdent/indent from removing top-level blocks on mobile](https://github.com/avelino/outl/pull/28#pullrequestreview-4413023544) (Approved) - ✅ Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Bump tar from 0.4.45 to 0.4.46 in the cargo group across 1 directory](https://github.com/avelino/mcp/pull/100#pullrequestreview-4408053633) (Approved) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Paste external markdown as a tree of blocks (TUI + mobile)](https://github.com/avelino/outl/issues/44) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [RFC: P2P sync transport via iroh (phase 2)](https://github.com/avelino/outl/issues/38) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [perf(core): shard op log per page once a workspace crosses 10k pages](https://github.com/avelino/outl/issues/37) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [perf(core): SIMD-backed search via memchr / aho-corasick](https://github.com/avelino/outl/issues/36) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [perf(actions): parallelise batch operations with rayon (export, bulk render)](https://github.com/avelino/outl/issues/35) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [perf(md): lazy-parse markdown — only when the page is opened](https://github.com/avelino/outl/issues/34) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [perf(core): snapshot materialized tree to skip full replay on boot](https://github.com/avelino/outl/issues/33) ## 2026-06-01 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [Add block collapse with sync via op log](https://github.com/avelino/outl/pull/30) - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [release 0.5.1: jsonl-only + multi-process locks](https://github.com/avelino/outl/pull/27) - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [Add machine-shaped CLI and MCP server](https://github.com/avelino/outl/pull/26) ## Commits - 🔨 Push to [avelino/outl](https://github.com/avelino/outl): 115 commit(s) - [See commits](https://github.com/avelino/outl/commits?author=avelino&since=2026-06-01T00:00:00Z&until=2026-06-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-06-01T00:00:00Z&until=2026-06-30T23:59:59Z) - 🔨 Push to [outlmd/registry](https://github.com/outlmd/registry): 4 commit(s) - [See commits](https://github.com/outlmd/registry/commits?author=avelino&since=2026-06-01T00:00:00Z&until=2026-06-30T23:59:59Z) - 🔨 Push to [avelino/tabbar-shortcut-chrome](https://github.com/avelino/tabbar-shortcut-chrome): 3 commit(s) - [See commits](https://github.com/avelino/tabbar-shortcut-chrome/commits?author=avelino&since=2026-06-01T00:00:00Z&until=2026-06-30T23:59:59Z) - 🔨 Push to [avelino/dotagent](https://github.com/avelino/dotagent): 1 commit(s) - [See commits](https://github.com/avelino/dotagent/commits?author=avelino&since=2026-06-01T00:00:00Z&until=2026-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Building an outliner on the move-op paper **URL**: https://avelino.run/from-paper-to-outliner/ **Published**: 2026-05-29 **Tags**: sync, crdt, distributed-systems, outliner, rust, outl, icloud, tauri, engineering **Word Count**: 3870 words **Summary**: The Kleppmann move-op paper proves convergence. It says nothing about markdown, two clients, iCloud Drive, vim, or a user hitting Enter while a peer writes. I built outl on top of that paper. Here is everything between the proof and a working sync. A few days ago I [dissected the 2021 Kleppmann paper](/file-sync-isnt-trivial) on highly-available tree move. The post ended with one open question: can you build an outliner on top of this? I built one. It's called **[outl](https://github.com/avelino/outl)**. The first version syncs a terminal client on macOS and an iOS app over iCloud Drive. No central server. No merge dialogs. No lost text. This post is everything I had to figure out after the paper. The paper proves convergence of the move operation. That's the core, and **outl's** `outl-core` crate tracks the paper line for line. Around the core sits a markdown file the user actually edits, a second client on a different stack *(Rust + Tauri + SolidJS on iOS)*, a transport *(iCloud Drive)* the algorithm knows nothing about, and an editor mode where the user types one character at a time while peers append to the same workspace. The paper says nothing about any of that. It doesn't have to. But you can't ship without solving it. Four problems. That's where the engineering work landed. None is a flaw in the paper. They're the work that sits between a proof and a thing a human uses. ## The op log is the source of truth, the markdown is a projection The workspace on disk has three layers. The order they get written in matters more than what's in them. ``` /Documents/ ├── journals/2026-05-29.md ; what the user reads and edits ├── pages/.md ├── pages/.outl ; sidecar - JSON, carries stable block IDs └── ops/ ├── ops-01HXY...A.jsonl ; only device A writes here ├── ops-01HXY...B.jsonl └── ops-01HXY...C.jsonl ``` The `.md` is the UX promise. Clean markdown. No IDs in the text, no front-matter clutter, no HTML comments. You open `journals/2026-05-29.md` in vim and you see notes - bullets, references, tags. This is why I started outl. Logseq and Roam both compromise on this in opposite directions: Logseq pollutes the file with `id::` lines, Roam hides everything behind an API. The promise is you can always read your data with `cat`. To keep it, IDs live somewhere else. The `.outl` sidecar is where they live. JSON next to the `.md`, one entry per block: stable ULID, position, content hash. When the same `.md` lands on another device, or a peer rewrites the file, the sidecar is how the local client decides this paragraph is the same block I had yesterday versus this is a new block. The sidecar makes content-addressable matching work across devices that never met. The `ops/.jsonl` is the op log. Append-only, JSON-per-line, one file per device. Every mutation any client makes - TUI insert, mobile toggle, reconciled external edit - gets serialised into a `LogOp` and appended to the local actor's jsonl. The move-op algorithm from the paper lives here. Every peer's file gets loaded, merged by HLC timestamp, replayed into the materialised tree. The rule is short. The op log is the source of truth. The `.md` and the sidecar are projections. Every mutation writes the op log first. The projections get regenerated from the new tree afterwards. The first iteration reversed this. Mobile mutations did `reconcile_md(.md → ops)` before applying the user's change, to "catch up" with whatever iCloud had delivered. Disaster. iCloud propagation lags the op log by seconds to minutes. The `.md` on disk routinely reflected a state older than the merged op log already had. Reconciling from that stale projection produced cascades of phantom `Delete` ops. The reconciler saw blocks in the workspace that weren't in the lagging `.md` and dutifully moved them to `TRASH_ROOT`. Every save destroyed work the user had already done. The fix was structural. The op log is always ahead of any single `.md`. The CRDT already merged everything iCloud delivered. There's no "catching up" from a projection that's behind by definition. So mutations now go: ```rust fn finish_in_page(state: &State<'_, AppState>, page_id: NodeId, f: F) -> Result where F: FnOnce(&mut Workspace) -> Result<(), ActionError>, { with_ws_mut(state, |ws| { // 1. Apply the user's intended mutation to the workspace. // This appends a LogOp to the actor's jsonl. f(ws).map_err(|e| e.to_string())?; // 2. Re-project the page's .md + sidecar from the new tree. if let Err(e) = apply_page_md_with_sidecar(ws, &state.storage_root, page_id) { warn!("page md+sidecar sync failed: {e}"); } build_page_view(ws, &state.storage_root, page_id).map_err(|e| e.to_string()) }) } ``` No pre-reconcile. The op log is upstream of everything. The projection is downstream of everything. That ordering is the difference between a sync that loses work and one that doesn't. "One jsonl per device" comes out of this same layer, and it's iCloud-shaped. iCloud Drive syncs each file independently, with no directory transaction, and it has one nasty property: last write wins, per file. Two devices write to the same file offline, come back online, the slower upload silently overwrites the other. No conflict markers. No UI. No warning. So no two devices ever share a file. The unit is the actor: device A writes `ops-A.jsonl`, device B writes `ops-B.jsonl`, neither touches the other's. iCloud syncs both. Each replica reads all of them, merges by HLC, runs the move-op algorithm. The CRDT does the reconciliation. iCloud is transport. One more piece of filesystem trivia, because it cost me an evening. The op directory is `ops/`, not `.ops/`. iCloud Documents silently skips path components that start with a dot when syncing across devices. The first version used `.ops/`. The per-device jsonl never left its origin. "Sync" looked broken in a way you can only localise by reading Apple's docs end to end. Nothing in iCloud's API surfaces this. Files just don't arrive. ## Reconcile: translating a clean `.md` back into ops Treating the op log as source of truth works perfectly while every mutation goes through outl. But the UX promise - you can edit the `.md` in vim - means a file on disk can change underneath the workspace at any moment, with no op behind the change. A user pastes a Roam export into `journals/`. A peer on an older version ships only the projection. The user opens `2026-05-29.md` in vim and adds three bullets at lunch. From the op log's point of view, nothing happened. From the user's point of view, those edits are real, and outl had better incorporate them. `reconcile_md` translates a `.md` state back into ops. It runs when an external `.md` change is detected: file watcher in `outl serve`, the TUI's commit path, the mobile orphan scanner. The algorithm is content-addressable and runs in three levels of confidence. ```text Level 1 (high confidence) exact content_hash match → preserve ID, emit Move if position changed Level 2 (medium confidence) normalised Levenshtein > 80% + nearby position → preserve ID, emit Edit (+ Move if needed) Level 3 (no match) → new ULID for the new block, log the orphan, move the old block to TRASH_ROOT ``` Level 1 is most edits: a user moves a bullet up two lines, the text is byte-identical, the sidecar's `content_hash` matches, the block keeps its ID. Level 2 is the typo case: same block, slightly different text. Levenshtein similarity plus a positional anchor (within ±2 lines of where it was) tells the matcher this is the same block, the user fixed a word. Level 3 is the residual: a block that matches nothing, against an old block nothing matched to. New block gets a fresh ID. Old block becomes a `Move` to `TRASH_ROOT`, which is how outl encodes deletion. Delete is just move-to-trash, straight from the paper - collapsing create/delete/move into one operation kills whole categories of interaction bugs. The hard rule on level 3 is what lets me sleep. A block falling to level 3 is always written to `orphans.log` before its ID gets repurposed. Silent deletion is the worst bug a notes system can have. If the matcher gets a case wrong and the user loses a paragraph, they have to find it on disk in ten seconds: open `orphans.log`, grep for the date, find the block ID, recover it from the op log. The log is append-only and stays in the workspace forever. Cheap to keep. The lesson that took longest: structural matching is not content matching. The first version of `reconcile_md` did the matching and produced a clean sequence of `Create`, `Move`, and `SetProp` ops. The structural diff was correct. Block A moved from parent X to parent Y. Block B got created. Block C got its `todo` property set. Across devices, on the same workspace, you could indent a block and watch the indent show up on the iPhone in a second. Then any time you edited the text inside a block, the text silently vanished on the other device. The bug was invisible locally. The local `.md` was still on disk and the sidecar's `last_synced_hash` matched. To the user holding the laptop, everything looked fine. The op log told the story. Every `reconcile_md` from a `.md` edit produced zero `Op::Edit` ops. Never one. The text content of every block was nowhere in the log. On a peer that had never seen this `.md`, replaying the op log materialised every block with empty text, regenerated the projection as a `.md` full of blank bullets, and iCloud sent the empty `.md` back to the laptop. Every keystroke turned into a deletion on the other replica. The fix is a second pass inside `reconcile_md` that walks the parsed AST and the freshly built sidecar block list in lockstep, DFS preorder, emitting one `Op::Edit` per block whose text differs from what the workspace already has. ```rust fn walk_text_sync( ws: &mut Workspace, hlc: &HlcGenerator, ast_blocks: &[OutlineNode], sidecar_blocks: &[SidecarBlock], idx: &mut usize, applied: &mut usize, ) -> Result<(), WorkspaceError> { for block in ast_blocks { if let Some(entry) = sidecar_blocks.get(*idx) { let node = entry.id; let current = ws.block_text(node).unwrap_or_default(); if current != block.text { let update = ws.build_text_replace_update(node, &block.text); if !update.is_empty() { let ts = hlc.next(); ws.apply(LogOp { ts, actor: ts.actor, op: Op::Edit { node, text_op: update }, })?; *applied += 1; } } } *idx += 1; walk_text_sync(ws, hlc, &block.children, sidecar_blocks, idx, applied)?; } Ok(()) } ``` Idempotent by construction. When the text already matches, `build_text_replace_update` returns an empty Yrs delta and no op is emitted. The reconcile of an unchanged `.md` produces zero ops. The reconcile of a changed `.md` produces exactly the ops needed to bring the workspace in line with the file. That same `reconcile_md` covers a case that looks different at the surface and is identical underneath: bootstrapping a `.md` with no sidecar at all. The user dumps a Roam export into `journals/`. A peer on an old version ships the projection without the sidecar. Someone copies a `pages/` directory from a backup. The file is real markdown, the sidecar is missing, the op log has no record of any block. To the rest of outl, the page is almost there: the file exists, the title is right, the body shows up - and then backlinks on other pages don't include it, references break, the page behaves like a ghost. A background scanner runs every ten seconds in the TUI (once at boot in mobile), walking `journals/` and `pages/` for `.md` files whose sidecar is missing, or whose `last_synced_hash` no longer matches the file's current hash. Both conditions mean the op log doesn't reflect this content yet. The fix is one call: ```rust outl_md::reconcile::reconcile_md(workspace, hlc, path, Some(&orphans_log)) ``` The same code path that handles external edits handles fresh imports. The 3-level matching does the right thing whether the file is brand new (every block falls to level 3 with no orphan, since there's no prior state) or just edited externally (level 1 / level 2 for most blocks, level 3 only for genuinely new or removed ones). The starting state differs. The algorithm doesn't. The generalisation, once: the paper assumes ops already exist. In a system where the source of truth is the op log but the user types into a markdown file, half the work is fabricating ops from a projection that got edited out of band. ## You are also a peer of yourself The paper's hardest problem - making the CRDT converge across replicas - I now get for free. The harder problem in practice is keeping the local user's edits from colliding with their own peer reload loop. The setup. Each client watches the `ops/` directory for changes. The TUI does it with a worker thread that stats every `ops-*.jsonl` every two seconds. Mobile does it with an `NSMetadataQuery` on the iCloud ubiquitous container. Both fire the same signal when a peer's file grows: something new arrived, you may want to reload. The catch: both clients also write into that directory. The TUI commits a block edit, appends to its own `ops-A.jsonl`, and the next two-second poll detects that `ops-A.jsonl` grew. Reload triggers. The workspace reopens. The `.md` re-projects. The user, who just hit Enter and started typing the next bullet, watches their buffer get clobbered by a projection of the workspace they themselves just wrote. Save → reload → race → lost character. Every save. The fix is one line of logic, named to make the intent stick: ```rust pub fn snapshot_peers(&self) -> Vec { let own = format!("ops-{}.jsonl", self.actor); self.snapshot() .into_iter() .filter(|f| f.name != own) .collect() } ``` The poller calls `snapshot_peers`, not `snapshot`. Changes to the device's own jsonl are what triggered the reload check; reacting to them closes the destructive loop. Only peer files matter. Once a peer's ops land in the merged log, the CRDT doesn't care which actor wrote them. But the trigger of the reload has to discriminate. Mobile gets this for free: `NSMetadataQuery` only notifies on changes from external sources, and local writes go through `NSFileCoordinator` and don't fire the query. Different runtime, same invariant. The second hazard is subtler and only exists in the TUI, because mobile commits each mutation as one atomic Tauri command. The TUI has an Insert mode. A `ParsedPage` AST lives in memory, holding the user's in-flight edits as they type. The op log hasn't seen any of it yet - the AST serialises back to ops on commit (Esc, Enter, Tab, structural ops). While the AST is in flight, a peer's jsonl grows. The poller, now correctly filtering its own file, sees the peer's write. If the reload runs, it reopens the workspace, regenerates the page's `.md`, and the in-memory `ParsedPage` is gone. The keystroke the user was about to commit lands on a new AST with different blocks at different positions. The CRDT can't save you here. The unsaved buffer isn't in any op log yet. There's nothing to merge. The policy is to defer: ```rust if matches!(self.mode, crate::state::Mode::Insert { .. }) { self.pending_reload = true; return false; } self.reload_workspace_from_disk(); ``` The peer's writes are safe. They're already on disk in their jsonl, the merge can happen any time. What matters is that the merge doesn't happen while the local user is typing into an unsaved buffer. When the user exits Insert (commit on Esc, Enter, dd, indent, outdent), the commit path drains `pending_reload`. The local edit becomes a real op in the log. The peer's ops merge in. The CRDT then does what it was built for, on two real states. Mobile doesn't need this because every mutation is one round-trip through a Tauri command. There's no multi-keystroke window where a peer reload could clobber an unsaved buffer. The mobile user's edit either landed atomically (it's in the op log) or didn't happen yet. Same problem, different policy. Both clients share the `SyncEngine` that does the reload; what differs is when each one calls it. The generalisation, again once: most CRDT prose stops at concurrent edits converge. In a real client, the harder problem is that the local user is also a writer with state that hasn't become an op yet. The CRDT can't help with state it doesn't know about. The client has to. ## iCloud Drive is hostile, in two specific ways iCloud Drive is the transport. The algorithm doesn't know about it and doesn't have to. But the transport gets to corrupt the algorithm's inputs if you don't pay attention, and the failures are silent the way every transport-layer bug is silent: the algorithm runs, produces an output, the output is wrong. The first hostility is the last-write-wins property from earlier, and the response is the one-jsonl-per-actor layout. That one is structural - respect it and iCloud can't bite you. The second is worse, because it's invisible until it bites. iCloud syncs file metadata aggressively and file content lazily. The remote device knows a file exists, sees its name, its size, its modification date - and doesn't have its bytes yet. `std::fs::open` the file at that moment and the open succeeds and the read returns something: the file's old content, an empty placeholder, or success-then-EOF on a freshly downloaded file. The Rust side has no idea anything is wrong. When the file is a peer's `ops-B.jsonl`, that "something" is an incomplete op log. The merge with the local jsonl proceeds on partial data. The materialised tree is missing operations. The projection regenerates a `.md` from the wrong tree. iCloud ships that wrong `.md` back to the laptop. The laptop's TUI sees blocks disappear that it had locally a moment ago. The fix on iOS is explicit, and the order matters: ```objc NSFileManager *fm = [NSFileManager defaultManager]; [fm startDownloadingUbiquitousItemAtURL:url error:&startErr]; NSFileCoordinator *coord = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; [coord coordinateReadingItemAtURL:url options:NSFileCoordinatorReadingForUploading error:&coordErr byAccessor:^(NSURL *u) { (void)u; }]; ``` `startDownloadingUbiquitousItemAtURL` is a request: materialise this file from iCloud now, don't return until you've made progress. It's asynchronous, which is why the file coordinator comes after. `NSFileCoordinator` blocks the calling thread until the file is fully present and no other process is mid-write - it serialises with iCloud's own download daemon. By the time the accessor block runs (even empty), the file's bytes are on disk. Only then is it safe for the Rust side to open it and replay. The cost is real. Each peer file change goes through a 100ms-to-second download-coordinate cycle on a background dispatch queue before the JS side gets notified to reload. In return, the workspace never sees a half-materialised op log. The CRDT operates on real bytes. The projection comes out correct. macOS is asymmetric. The mac side doesn't need this ritual: by the time `NSMetadataQuery` would notify on macOS, the file is materialised. But the mac reads the iPhone's writes the same way, and the iPhone pays the cost when reading the mac's writes. Transport asymmetry, algorithm symmetry. The CRDT doesn't care which side does the work as long as both eventually see the same bytes. The two iCloud hostilities are the same story: the transport lies about state. Last write wins lies about "this is the file's content" (it's the loser's content, silently). Lazy materialisation lies about "this file is available" (it's a placeholder, silently). Both produce wrong inputs to the CRDT. Both get mitigated by structural choices: one jsonl per actor, explicit `NSFileCoordinator` before any read of a peer file. Both are critical to correctness, neither is in the paper. ## Sync ends at the op log, render starts there I almost skipped writing this part because it sounds like an afterthought. Then I remembered the first version of outl had the bug where the iPhone synced correctly and refused to redraw. The bytes arrived. The op log merged. The tree was right. The screen still showed the page from thirty seconds ago. Sync delivered. Render didn't. Once a peer's ops land and the workspace merges them, every UI surface projecting the previous tree has to be told. The op log is upstream. The rendered outline, the backlinks panel, the page list, the markdown projection on disk - all downstream. The lifecycle is what notifies which downstream consumer when. The TUI handles this synchronously inside `reload_workspace_from_disk`: reopen the workspace from disk (now reflecting peer ops), re-project the focused page's `.md` + sidecar, reload the in-memory `ParsedPage` from the freshly-written file. Next ratatui tick renders the new state. The one trap: ratatui's diff renderer leaves stale cells on a partial repaint after a page swap. The fix is one `f.render_widget(Clear, area)` at the top of every frame after a reload. Cheap, mandatory. Mobile splits the same lifecycle across the FFI boundary. The Tauri backend emits a `workspace-ready` event when the background opener completes. The iCloud watcher invokes `window.__outlOpsChanged()` from Objective-C when peer files materialise. The SolidJS frontend listens to both, calls `build_page_view` to get a fresh `PageView { page, outline, backlinks }` from the Rust side, and Solid's reactive layer re-renders the affected components. Same idea, different machinery. The generalisation: a CRDT system has two pipelines, not one. The first carries bytes inward - peer writes → transport → merge → op log → tree. The second carries derived state outward - tree → projection → screen. Sync prose talks almost only about the first. The second has its own races (stale buffers, dropped events, partial repaints) and its own correctness bar (every consumer of a value that changed must learn it changed). Plumbing both so they stay coherent is the difference between the sync works and the user sees the sync work. ## The paper and the rest The paper gave outl the core: a move-only op that converges across replicas without coordination, with a proof in Isabelle/HOL behind it. Everything else rests on that. Without it, no amount of engineering would have produced a working system. I'd be writing a different post, the one about why my prototype occasionally loses parent pointers. What the paper didn't give: - A way to translate a clean markdown projection back into ops when the projection changed externally. - A way to keep text content in the op log, separate from tree structure. - A way to stop a client from reacting to its own writes. - A way to defer a peer reload while the local user types into an unsaved buffer. - A way to bootstrap a `.md` with no sidecar. - A way to handle a transport that lies about file availability. None are flaws in the paper. They're the work between any formal result and a thing a human uses. Every system built on a CRDT pays a version of this tax. The paper is the proof you haven't built something incoherent. The work above is the proof you've built something usable. The first cross-device sync of outl works now. Edit a journal on the laptop in the TUI, the iPhone updates in seconds. Edit on the iPhone, the laptop's TUI redraws. Concurrent edits on both devices converge with no prompts and no merge dialogs. Imported `.md` files surface in backlinks. External vim edits get picked up on the next scan. Text content survives every roundtrip. It took longer to build the layers around the paper than to implement the paper itself. That's the honest ratio, and the part I'd warn anyone starting from a proven CRDT about. The proof tells you the algorithm can't lose data. The transport, the projection, the editor mode, the concurrent-self-reload - all of those can. --- **outl** is open source: [github.com/avelino/outl](https://github.com/avelino/outl). The move-op core is in `[crates/outl-core](https://github.com/avelino/outl/tree/main/crates/outl-core)` and tracks the paper's pseudocode line for line. The sync engine mobile and TUI share lives in `[crates/outl-actions/src/sync.rs](https://github.com/avelino/outl/blob/main/crates/outl-actions/src/sync.rs)`. The reconcile pass is in `[crates/outl-md/src/reconcile.rs](https://github.com/avelino/outl/blob/main/crates/outl-md/src/reconcile.rs)`. The iCloud transport is in `[crates/outl-mobile/src-tauri/gen/apple/Sources/outl-mobile/main.mm](https://github.com/avelino/outl/blob/main/crates/outl-mobile/src-tauri/gen/apple/Sources/outl-mobile/main.mm)`. The paper proves convergence. The code is everything else. --- # Big tech veterans don't fail at startups. The structure does **URL**: https://avelino.run/big-tech-veterans-dont-fail-at-startups/ **Published**: 2026-05-26 **Tags**: career, engineering, hiring, organizational-design, buser **Word Count**: 1341 words **Summary**: The shock from big tech to startup isn't a personal failure. It's structural. Mintzberg explained why fifty years ago. A senior engineer joined Buser from a big tech name. Six weeks in, 1:1, he tells me: 'the scope here is much bigger than what I'm used to.' No drama. No complaint. Just an observation. He was right. And I had told him exactly that in the interview. I tell every candidate from a large company what our rhythm is and what stage we're at. They agree. They sign up. They come in. The shock still hits, every time. The warning doesn't prevent it. The warning is what lets us talk about it afterwards. It took me a few of these conversations to understand what I was watching. The shock isn't personal failure. Not lack of skill, not lack of effort, not lack of fit in any individual sense. It's an organism trained to operate inside one organizational structure being dropped into another, and finding out its instincts no longer match the terrain. ## Two structures, both correct [Henry Mintzberg](https://en.wikipedia.org/wiki/Henry_Mintzberg) spent the 70s mapping how large organizations actually work, not how management books wished they worked. In [*Structure in Fives*](https://www.amazon.com/Structure-Fives-Designing-Effective-Organizations/dp/013855479X) he describes Machine Bureaucracy as the structure of mature companies. Tight scope per role. Coordination by standardized process. A thick layer of analysts whose job is to define how work happens. It's not a flaw. It's the structure that makes operating at scale possible. Banks, telcos, large platforms, governments. They all look like this because nothing else works at that size. Adhocracy is the other end. Coordination by mutual adjustment between people, scope defined by the problem instead of the job description, decisions decentralized to whoever is closest to the work. Startups look like this. Not because founders read Mintzberg. Because it's the only structure that survives the speed and ambiguity startups operate in. Both are correct. They're correct for different problems. A Machine Bureaucracy running a startup dies of slowness. An Adhocracy running a bank loses your money. The structure isn't moral. It's environmental. What happens when someone moves between them is what biologists call ecological mismatch. Same animal, wrong habitat. ## The dark side of each side I'm done reading posts that pretend one of these is obviously better. They aren't. Each has a real cost the other side doesn't pay. A big company engineer has defined scope and goes deep. Becomes world-class on one specific surface. Ships papers, builds infra that handles billions of requests, mentors a generation of juniors. Also spends months on a single decision a startup engineer would resolve in a Slack thread on Tuesday. Gets stuck in promotion politics unrelated to the work. Watches projects die in review committees. Gets really good at navigating org charts and stops knowing if the customer cares about what they're shipping. A startup engineer has fluid scope and ships fast. Touches product, infra, ops, sometimes hiring, sometimes sales calls. Learns ten things in a year that big tech would have given them in five. Also burns out. Context-switches so hard they stop being able to go deep on anything. Watches a decision get made, reversed, and remade differently inside the same month. Their career level becomes unreadable to recruiters. Builds something that works and eighteen months later has to rebuild it because the company they helped create no longer fits the architecture. Neither side has the high ground. Both have different costs. ## What I see at Buser We were 550 people. Today we're much smaller. Not by accident. By design. When a company grows, the easy move is to break the software to scale the team. You hit a coordination ceiling, you split the codebase, you create another squad, you hire another EM. The team gets bigger. The software gets worse. The original problem - too many people, not enough overlap - is now distributed across more services, but it didn't go away. You just gave it more surface area. [Clayton Christensen](https://en.wikipedia.org/wiki/Clayton_Christensen) described a version of this in [*The Innovator's Dilemma*](https://www.amazon.com/Innovators-Dilemma-Revolutionary-Business-Essentials/dp/0060521996). A mature company optimizes to protect what it has, and the structure that protects the core kills the ability to move fast somewhere else. We do the opposite. Squads stay small on purpose. A small squad looks at scopes that, in a bigger company, would belong to two or three different teams. The bet is that being together justifies itself. Context flows without ceremony, decisions happen at the conversation level, and the cost of one engineer holding three adjacent problems is less than the cost of three engineers holding one problem each and never talking. It isn't romantic. It demands a specific type of person. [T-shaped](https://chiefexecutive.net/ideo-ceo-tim-brown-t-shaped-stars-the-backbone-of-ideoaes-collaborative-culture__trashed/) - the term [Tim Brown](https://en.wikipedia.org/wiki/Tim_Brown_(industrial_designer)) at IDEO popularized for someone deep in one thing and willing to go shallow into four others. Comfortable with the problem shifting underneath them. Comfortable not knowing where their job ends. That's exactly what someone coming from Machine Bureaucracy wasn't trained for. They were trained to be excellent inside a clear box. The box is what made the excellence legible. Take the box away and the same person, with the same skills, looks lost. Not because they got worse. Because the metric they were optimized against doesn't exist here. ## The interview doesn't solve this I warn every candidate from a large company about what they're walking into. Most still get shocked. I used to think this meant I was bad at interviewing. Then I understood. The warning is a contract, not a vaccine. The candidate can't know what fluid scope feels like until they live it. The words 'you'll own more surface' mean nothing until Monday morning, when an engineer is debating a pricing rule with a PM, fixing a query, and writing a one-pager for the next board, all before lunch. The shock isn't the person not paying attention. It's the gap between a verbal description and the embodied experience of a different structure. The warning matters because it creates the language to talk about it later. The 1:1 conversation - 'the scope here is much bigger' - only happens because we agreed in the interview that this was the deal. Without it, the same observation lands as a complaint instead of as data. ## What this actually is It's not a career decision between 'good' and 'bad.' It's a decision between structures, and structures fit different career moments and different problem domains. If you want to go deep, ship at planet scale, work inside systems that already work, and learn from people who've done this for fifteen years - big tech is where that lives. Don't be ashamed of it. The people who built S3 didn't do it in a garage. If you want to learn ten things in a year, see your decisions reach a customer the same week, watch a company become what it becomes because of how you held the problem - startup is where that lives. Don't romanticize it. You'll pay for that speed in stability, in clarity, and sometimes in sleep. The mistake is treating one as the goal and the other as a stepping stone. They're different ecosystems. The fact that someone thrived in one says nothing about whether they'll thrive in the other. The senior engineer in that 1:1 didn't fail. He noticed, accurately, that the structure was different. That's the conversation I want every time. Not whether he'll stay - that's a separate question. Whether he can name what he's experiencing instead of taking it personally. That's what the warning bought us. --- When someone gets shocked at Buser, I don't read it as a hiring mistake anymore. I read it as the gap between Machine Bureaucracy and Adhocracy showing up exactly where Mintzberg said it would, fifty years ago, in a person who has the right skill set for the wrong structure - or the right structure for a skill set that needs to be retrained for it. The question isn't which side is better. The question is which side fits the problem you're solving, and the career moment you're in. Get both right and the work makes sense. Get one wrong and no amount of effort fixes it. --- # File sync isn't trivial, and nobody tells you that **URL**: https://avelino.run/file-sync-isnt-trivial/ **Published**: 2026-05-25 **Tags**: sync, crdt, distributed-systems, notes, outliner, paper, algorithms, lisp **Word Count**: 3013 words **Summary**: File sync between devices looks like a UX detail. It isn't. I spent a weekend dissecting the 2021 Kleppmann paper that proves why Dropbox and Google Drive still get this wrong. You drag a folder in Dropbox and it shows up on your other devices. You move a bullet in Roam and the other computers see the right tree. You rename a file in Logseq and your phone syncs. Looks like a UX detail. It isn't. Underneath, this is a distributed systems problem with no obvious solution, and products with hundreds of millions of users still get it wrong in 2026. I spent a weekend on this because I've been using outliner-first note systems for years, and the sync pain has always been there. [Logseq](https://logseq.com) syncs via markdown. Brilliant, but it breaks when the same file is edited offline in two places. The core team has been migrating to a database for years to fix this. No stable version yet. I use [Roam Research](https://roamresearch.com) today. Also brilliant. But cloud first. No local files. My second brain can't depend on a server being up. I wanted to understand why nobody solved this properly. I landed on a paper that breaks the problem down end to end: [A highly-available move operation for replicated trees](https://martin.kleppmann.com/papers/move-op.pdf), Kleppmann et al, 2021. 14 pages. Formal proof in [Isabelle/HOL](https://isabelle.in.tum.de/). [Source on GitHub](https://github.com/trvedata/move-op). The paper opens by demonstrating real bugs in Dropbox and Google Drive. Bugs that are still there today. This post is the algorithm dissected. Data structure, code, execution walkthrough, complexity. The code is in Common Lisp, written as plainly as I could (no advanced functional programming, no macros, no tricks). If you read Pascal in college, you read this. ## What goes wrong The authors tested with the official Mac clients. They disabled wifi on two machines, ran concurrent operations on each, turned wifi back on, and measured the result. **Scenario 1.** Replica 1 moves `A` into `B`. Replica 2, at the same time, moves `A` into `C`. They sync. Dropbox duplicates: it creates `A` inside `B` and `A'` inside `C`. Two users who think they're editing the same node start editing copies that diverge forever. Google Drive resolves it with timestamps. A single `A`. Correct behavior. **Scenario 2.** Replica 1 moves `B` into `A`. Replica 2, at the same time, moves `A` into `B`. Each operation is valid in isolation. Together, they form a cycle (A is B's parent, B is A's parent). Dropbox duplicates again. Google Drive locks up with a permanent *unknown error*. Sync stops. The broken device stays out of sync until someone manually moves the folders to match. The authors reported the bug. These are reproducible bugs in products hundreds of millions of people use. Not an obscure corner. Basic filesystem operations done wrong. [Najafzadeh in 2018](https://hal.inria.fr/tel-01351187v1) had proposed two ways out: either duplicate nodes (Dropbox's choice), or use a synchronous lock (kills offline). And he wrote: *"no file system can support an unsynchronised move without anomalies, such as loss or duplication"*. Kleppmann refuted that in 2021. The thesis fits in one sentence. **Order every operation by timestamp and use undo/redo to slot remote ops into the right position in the log.** That converges. That is proven in Isabelle/HOL. And the rest of this post is how that mechanism works, in code. ## Data structure Each replica keeps two pieces of state: the current tree, and a log of applied operations. ```lisp ;; a triple represents one parent-child relationship in the tree (defstruct triple parent ; id of the parent node metadata ; file name, sibling order, etc child) ; id of the child node ;; log entry: what you need to undo an operation (defstruct log-move timestamp ; unique, totally ordered (Lamport) old-parent ; previous parent id of the child, or NIL if it didn't exist old-metadata ; previous metadata, or NIL new-parent ; new parent id metadata ; new metadata child) ; id of the moved child ;; one replica's state (defstruct replica tree ; list of triples log) ; list of log-move, ordered by descending timestamp ``` The tree is a set of triples. Each triple says "child is a child of parent with metadata X". The critical invariant is *unique parent*: for any `child` in the tree, exactly one triple has that `child`. This invariant is what keeps the structure a tree. Not a DAG. Not a graph. `metadata` carries whatever is domain-specific. In a filesystem, it's the file name inside the parent directory. In an outliner, it's the order between siblings. The algorithm is generic over the type. The timestamp doesn't need to come from a physical clock. A [Lamport timestamp](https://lamport.azurewebsites.net/pubs/time-clocks.pdf) (1978) is enough: monotonic per replica, totally ordered across replicas via `(counter, replica-id)`. Unique, comparable. The only protocol operation is `move`: ```lisp ;; "at time t, move node c to be a child of p with metadata m" (defstruct move-op timestamp new-parent metadata child) ``` No `create`. No `delete`. Creating is moving a fresh ID under an existing parent (the node starts existing implicitly). Deleting is moving to a *trash* node outside the visible tree. Three conceptual operations, one protocol operation. This collapses the state space the proof has to cover and eliminates cross-interactions (create-after-delete, delete-then-move). Basic helpers I'll use below: ```lisp (defun find-parent (tree child-id) "Returns the triple where child-id is the child, or NIL if it doesn't exist." (dolist (tr tree) (when (equal (triple-child tr) child-id) (return tr)))) (defun is-ancestor-p (tree ancestor-id descendant-id) "True if ancestor-id is an ancestor of descendant-id in the tree. Walks up the parents until reaching the root or finding ancestor-id." (let ((current descendant-id)) (loop (let ((parent-triple (find-parent tree current))) (when (null parent-triple) (return nil)) ; reached the root without finding it (when (equal (triple-parent parent-triple) ancestor-id) (return t)) ; found (setf current (triple-parent parent-triple)))))) ``` `is-ancestor-p` is O(d) where `d` is tree depth. It gets called on every `do-op` to check for cycles. ## `do-op`: the primitive application `do-op` applies one `move-op` to the tree and produces a `log-move` entry. It's the atomic piece of everything else. ```lisp (defun do-op (op tree) "Apply op to tree. Returns (values new-tree log-entry)." (let* ((child-id (move-op-child op)) (new-parent (move-op-new-parent op)) (current (find-parent tree child-id)) (old-parent (when current (triple-parent current))) (old-meta (when current (triple-metadata current))) (log-entry (make-log-move :timestamp (move-op-timestamp op) :old-parent old-parent :old-metadata old-meta :new-parent new-parent :metadata (move-op-metadata op) :child child-id))) ;; check 1: would the op create a cycle? then drop the effect but keep it in the log (when (or (equal child-id new-parent) (is-ancestor-p tree child-id new-parent)) (return-from do-op (values tree log-entry))) ;; apply: remove child from its current parent and insert under the new one (let ((new-tree (remove-if (lambda (tr) (equal (triple-child tr) child-id)) tree))) (push (make-triple :parent new-parent :metadata (move-op-metadata op) :child child-id) new-tree) (values new-tree log-entry)))) ``` Two details decide everything. **Detail 1, the cycle check is local.** `is-ancestor-p` walks the parents of `new-parent` up to the root and checks whether it passes through `child`. Cost O(d). If it does, the op would create a cycle in the current state. Drop the effect, keep it in the log. Why keep it? Because the current state can change when another op with a smaller timestamp arrives later and breaks that ancestry relationship. The op may become valid in the future. **Detail 2, `log-move` carries `old-parent`.** That's what makes undo possible. Without it, undo is impossible: you don't know where to send the child back to. ## `undo-op` and `redo-op`: the reversal cycle ```lisp (defun undo-op (log-entry tree) "Invert the effect of a log entry on the tree." (let* ((child-id (log-move-child log-entry)) (old-p (log-move-old-parent log-entry)) (old-m (log-move-old-metadata log-entry)) (cleaned (remove-if (lambda (tr) (equal (triple-child tr) child-id)) tree))) (if (null old-p) cleaned ; child didn't exist before, it disappears (cons (make-triple :parent old-p :metadata old-m :child child-id) cleaned)))) (defun redo-op (log-entry replica) "Reapply a log entry via do-op. Recomputes old-parent because the current state may differ from the state at the original application." (let ((op (make-move-op :timestamp (log-move-timestamp log-entry) :new-parent (log-move-new-parent log-entry) :metadata (log-move-metadata log-entry) :child (log-move-child log-entry)))) (multiple-value-bind (new-tree new-entry) (do-op op (replica-tree replica)) (make-replica :tree new-tree :log (cons new-entry (replica-log replica)))))) ``` `undo-op` is the inverse of `do-op`. It pulls the child out of its current position and puts it back where `old-parent` says it came from. If `old-parent` is `NIL`, the child disappears (it didn't exist before that move). `redo-op` reapplies via `do-op`. It doesn't reuse the old `log-move`: it builds a new one. The `old-parent` may be different now, because ops with smaller timestamps arrived between the original application and the redo. ## `apply-op`: where the trick lives ```lisp (defun apply-op (op replica) "Apply op while preserving timestamp order. If op is older than the log head, undo, recurse, redo." (let ((log (replica-log replica))) ;; empty log: apply directly (when (null log) (multiple-value-bind (new-tree log-entry) (do-op op (replica-tree replica)) (return-from apply-op (make-replica :tree new-tree :log (list log-entry))))) (let ((head (first log)) (rest (rest log))) (cond ;; op is newer than the head: it becomes the new head ((>= (move-op-timestamp op) (log-move-timestamp head)) (multiple-value-bind (new-tree log-entry) (do-op op (replica-tree replica)) (make-replica :tree new-tree :log (cons log-entry log)))) ;; op is older: undo the head, recurse on rest, redo the head (t (let* ((tree-without-head (undo-op head (replica-tree replica))) (replica-without-head (make-replica :tree tree-without-head :log rest)) (replica-with-op (apply-op op replica-without-head))) (redo-op head replica-with-op))))))) ``` The log is kept in descending timestamp order, head being the most recent. When an op arrives with a timestamp smaller than the head: 1. Undo the head with `undo-op`, restoring the previous state. 2. Recurse on `rest` with the new op. Recursion keeps undoing until it finds an entry with a timestamp smaller than the new op's, or until the log is empty. 3. When recursion comes back, the op has been applied at the right position. 4. Redo, in ascending order, the entries that were undone. The end state is as if every op had arrived in timestamp order. Even when they didn't. A local op always has the largest timestamp seen so far (property of the local Lamport clock). It hits the first `cond` branch: apply directly, become the new head, cost O(d) for the cycle check only. No undos. That's why local ops are fast (1µs to 2µs in the paper's benchmark). A remote op with a `timestamp` close to the head: few undos. A remote op with a `timestamp` far in the past: undo down to the right slot, apply, redo everything back up. ## Walkthrough of scenario 2 The one that locked up Google Drive. Initial state: `A` and `B` are siblings under `root`. Metadata simplified as a string. ```lisp (setf tree (list (make-triple :parent 'root :metadata "A" :child 'A) (make-triple :parent 'root :metadata "B" :child 'B))) ``` Replica 1 generates `(move 10 A "B" B)`: "move B inside A, at time 10". Replica 2 generates `(move 20 B "A" A)`: "move A inside B, at time 20". `10 < 20`. The two ops arrive at each replica in reverse order. **Replica 1, local application of `(move 10 A "B" B)`:** `is-ancestor-p` returns NIL (B is not an ancestor of A in this state). `do-op` applies. ```lisp ;; state after tree = ((:parent A :metadata "B" :child B) (:parent root :metadata "A" :child A)) log = ((:timestamp 10 :old-parent root :old-metadata "B" :new-parent A :metadata "B" :child B)) ``` **Replica 1 receives `(move 20 B "A" A)` from replica 2:** `20 > 10`, hits the first branch, applies directly. `is-ancestor-p tree A B`? Yes, A is an ancestor of B now (after the previous move). `do-op` records the `log-move` but **doesn't change the tree**. ```lisp ;; state after tree = ((:parent A :metadata "B" :child B) (:parent root :metadata "A" :child A)) ; unchanged log = ((:timestamp 20 :old-parent root :old-metadata "A" :new-parent B :metadata "A" :child A) ; effect dropped (:timestamp 10 :old-parent root :old-metadata "B" :new-parent A :metadata "B" :child B)) ``` The op stays in the log with its original `old-parent`, but the tree doesn't move. Replica 1 ends with B inside A. **Replica 2, local application of `(move 20 B "A" A)`:** `is-ancestor-p` returns NIL. `do-op` applies. ```lisp ;; state after tree = ((:parent B :metadata "A" :child A) (:parent root :metadata "B" :child B)) log = ((:timestamp 20 :old-parent root :old-metadata "A" :new-parent B :metadata "A" :child A)) ``` **Replica 2 receives `(move 10 A "B" B)` from replica 1:** `10 < 20`, needs reordering. Hits the second `cond` branch. Step 1, `undo-op` on the head: restores A back to root. ```lisp tree = ((:parent root :metadata "A" :child A) (:parent root :metadata "B" :child B)) log = () ; empty ``` Step 2, recursion with empty log: applies `(move 10 A "B" B)` directly. `is-ancestor-p tree B A`? No. `do-op` applies. ```lisp tree = ((:parent A :metadata "B" :child B) (:parent root :metadata "A" :child A)) log = ((:timestamp 10 :old-parent root :old-metadata "B" :new-parent A :metadata "B" :child B)) ``` Step 3, `redo-op` of the old head: applies `(move 20 B "A" A)` on the current state. `is-ancestor-p tree A B`? Yes. Effect dropped, log-move goes into the log with a recomputed `old-parent` (now A, no longer root). ```lisp tree = ((:parent A :metadata "B" :child B) (:parent root :metadata "A" :child A)) ; final log = ((:timestamp 20 :old-parent A :old-metadata "B" :new-parent B :metadata "A" :child A) ; old-parent differs! (:timestamp 10 :old-parent root :old-metadata "B" :new-parent A :metadata "B" :child B)) ``` Replica 2 ends with the same tree as replica 1: B inside A. **They converged without coordination. The smaller-timestamp op won.** The larger one was processed (it's in the log, it will propagate), but had zero effect on the tree. The logs in the two replicas have the same content but with different `old-parent` in the `timestamp=20` entry. That's fine: `old-parent` is used for local undo, not as a convergence criterion. What needs to converge is the tree. And it does. ## Convergence: why `apply-op` commutes The central theorem proven in Isabelle: ``` ∀ ops1, ops2. (set ops1) == (set ops2) ∧ (distinct (timestamps ops1)) → (apply-ops ops1) == (apply-ops ops2) ``` Two lists of `move-op` with the same elements in any order produce the same state. That's convergence. The intuition behind the proof: `apply-op` maintains an invariant. The log stays in descending timestamp order, and the resulting `tree` is equivalent to the tree you'd get by applying the log back-to-front via `do-op`. Any application order ends at the same log (same set, same timestamp order) and therefore at the same `tree`. The full proof is 2495 lines of Isabelle covering 59 lines of definitions. Runs in 3 minutes. Zero `sorry` (the equivalent of `TODO` in a formal proof). Three final theorems: 1. `apply-ops-unique-parent`: every node has at most one parent after any sequence of operations. 2. `apply-ops-acyclic`: the tree has no cycles after any sequence of operations. 3. `apply-ops-commutes`: applying a permutation produces the same state. The guarantee isn't "passes the tests". It's "works for any execution, any number of replicas, any message ordering". Dropbox didn't pay that price. Google Drive didn't pay that price. That's why they have bugs. ## Complexity and real cost `do-op` is O(d) because of `is-ancestor-p`. Tree depth. `undo-op` is O(n) in the implementation above (`remove-if` scans the tree). O(1) amortized if the tree is a hash map indexed by child, which is the executable version in the paper. The paper extracts to Scala using a hash map. `apply-op` worst case is O(k·d): - `k` = how many log entries have timestamp larger than the new op - `d` = tree depth (cost of `is-ancestor-p` on each redo) Local op: `k=0`, cost O(d). 1µs to 2µs in the benchmark. Remote op with recent `timestamp`: small `k`, few undos. Remote op with very old `timestamp`: large `k`. In the benchmark, with 3 replicas in California, Ireland, and Singapore generating concurrent ops at high rate, the peak was 200 undos+redos per remote operation. Throughput of the optimized implementation: 5,700 ops/s. Of the Isabelle-extracted version: 600 ops/s (the gap is code generation overhead, not the algorithm). State machine replication with a single leader: 22,000 ops/s (4x more), but pays 145ms to 176ms of latency per operation (round trip to the leader). And it doesn't work offline. For a note system on laptops and phones, with eventual sync, the tradeoff is obvious. Local latency matters. Data center throughput doesn't. Offline isn't optional. ## Limits and extensions A few things the paper makes explicit. **The log grows without bound.** It's truncatable once a timestamp becomes *causally stable*: no future op will have a smaller timestamp. In a FIFO network with a known replica set, that's the minimum of the latest timestamps seen from each replica. Ops below that threshold will never be undone, so they can leave the log. **Sibling order doesn't exist by default.** In POSIX filesystems, siblings are unordered (`ls` sorts at display time). In outliners and XML, they are. The extension is to embed a list CRDT (RGA, Logoot) inside the `metadata` field and use the list-CRDT-generated ID to order siblings under the same parent. Works, adds complexity. **Hardlinks are trivial.** Leaves reference inodes instead of holding data. Multiple leaves can point to the same inode. The tree structure doesn't change. **Name collisions among siblings aren't prevented.** Two users create `notes/todo.md` at the same time on different replicas? The algorithm keeps both. Resolution is the application's job (rename one, prefix with replica-id, etc). ## The third option exists Logseq picked markdown sync. Markdown is a state-transport format for one user's editor. It's not a distributed data structure. That's why they've been migrating to a database for years. Roam picked cloud first. Solved the sync problem by delegating to the server. You don't have the file, you have an API. The technical complexity goes out, the third-party infra dependency comes in. The third option exists and is proven. Local first. Sync via CRDT. Local files always available. Mathematical convergence. No mandatory central server. For trees with concurrent moves, this paper is the missing piece. [Automerge](https://github.com/automerge/automerge) integrated the algorithm later. The question that opens the next chapter is whether you can build an outliner on top of this. --- [move-op.pdf](https://martin.kleppmann.com/papers/move-op.pdf). 14 pages. 2021. [Source on GitHub](https://github.com/trvedata/move-op) with the verified Scala implementation and the Isabelle files to run the proof. File sync isn't trivial. The people selling you the smooth interface don't tell you. The people running products used by hundreds of millions, still buggy in 2026, also don't tell you. The paper tells you. Now you know. --- # Vinho, terroir e zero amor a rótulo **URL**: https://avelino.run/vinho-terroir-zero-amor-a-rotulo/ **Published**: 2026-05-23 **Tags**: wine, terroir, learning **Word Count**: 117 words **Summary**: Comecei a tomar vinho em 2023 pelo estudo, não pela bebida. Terroir, zero fidelidade a rótulo, e o livro do Kermit Lynch. Comecei a tomar vinho de verdade em 2023. Não pela bebida, **pelo estudo**. A mesma uva muda de cara dependendo de onde planta. Pinot Noir na Borgonha não é Pinot Noir em outra região da França. Solo, altitude, clima, mão do produtor. Tudo entra. Não tenho amor a rótulo nem a produtor. **Quero conhecer o máximo e degustar pra viver a experiência**. Fidelidade fecha porta. Lendo *[Adventures on the Wine Route](https://us.macmillan.com/books/9780374538538/adventuresonthewineroute/)*, do [Kermit Lynch](https://www.kermitlynch.com/), encontrei a tese pronta. Ele importou vinho da França por décadas defendendo o produtor pequeno e o lugar acima de qualquer marca. Cada garrafa nova é um lugar novo. Um clima que não se repete. É *terroir*, e quanto mais estudo, menos sei. --- # Most 'AI agents' don't need AI in the loop **URL**: https://avelino.run/most-ai-agents-dont-need-ai-in-the-loop/ **Published**: 2026-05-20 **Tags**: ai, agents, engineering-management, cto, open-source **Word Count**: 1442 words **Summary**: The agent framework category is selling reasoning where you need execution. Anthropic, OpenAI, and the original ReAct paper already said so. I burned through a Claude Max plan in under two hours. First and only time. I was not training a model, generating a dataset, or running an autonomous agent in a loop. I was running my morning schedule. Tech briefing, deploy summary, inbox classification. Five tasks that fit in a fifty-line shell script each. The framework underneath was [OpenClaw](https://github.com/openclaw/openclaw). Self-hosted, MCP-native, multi-provider, durable event log. Clean marketing, serious engineering. It worked exactly as promised. And it was still the wrong tool. ## What an agent is, according to the people who built the models The canonical paper is from 2022. Yao et al., [ReAct: Synergizing Reasoning and Acting in Language Models](https://arxiv.org/abs/2210.03629), ICLR 2023, Google Brain. ReAct introduced the loop every framework has copied since. The model generates reasoning traces and actions in an interleaved manner. Thought, action, observation, repeat. The paper's scope is explicit. ReAct was proposed for interactive environments where the path to the answer is not known. The benchmarks they validated against - [HotpotQA](https://hotpotqa.github.io/), [FEVER](https://fever.ai/), [ALFWorld](https://alfworld.github.io/), [WebShop](https://webshop-pnlp.github.io/) - are all open environments. Yao et al. did not propose ReAct as a default architecture. They proposed it as a solution to a specific class of problem. Anthropic formalized the distinction in [Building Effective Agents](https://www.anthropic.com/engineering/building-effective-agents), December 2024: > Workflows are systems where LLMs and tools are orchestrated through predefined code paths. Agents, on the other hand, are systems where LLMs dynamically direct their own processes and tool usage, maintaining control over how they accomplish tasks. Right after, the part the framework ecosystem pretends not to have read: > When building applications with LLMs, we recommend finding the simplest solution possible, and only increasing complexity when needed. This might mean not building agentic systems at all. Agentic systems often trade latency and cost for better task performance, and you should consider when this tradeoff makes sense. OpenAI converged on the same position in [A Practical Guide to Building Agents](https://cdn.openai.com/business-guides-and-resources/a-practical-guide-to-building-agents.pdf), April 2025. Their criteria for using an agent: complex decision-making with nuanced judgment, hard-to-maintain rules, unstructured data. Three narrow conditions. Outside them, OpenAI tells you to use deterministic code. The literature is unanimous. Agent is a specific architectural choice - the LLM controls the flow - for a narrow set of problems where ambiguity makes deterministic code expensive or impossible. Workflow is the other option. Workflow is what you need most of the time. The criterion is simple: does the model need to decide what comes next, or do you already know? The framework ecosystem erased that question. [OpenClaw](https://github.com/openclaw/openclaw), [LangGraph](https://github.com/langchain-ai/langgraph), [CrewAI](https://github.com/crewAIInc/crewAI), [AutoGPT](https://github.com/Significant-Gravitas/AutoGPT). The whole category sells agent as the default mode. The hidden premise: every task is ambiguous, every path is unknown, every step needs reasoning. That premise is false for most of what a CTO, an engineer, or anyone running a knowledge-work routine does day to day. ## Where the bill ended up Back to the Claude Max plan drained in two hours. The schedule on OpenClaw was small. Five tasks, YAML manifest, schedule to run every day at eight in the morning. I picked OpenClaw because clean marketing got me, and because I wanted to test the thesis that a reasoning agent could handle a routine. It cannot. And the paper explains why. ReAct decides from scratch on every execution. No compiled artifact. No 'I already wrote this script yesterday'. Every morning the model read the manifest, reasoned about which tool to call first, generated a Python or shell snippet to do the fetch, observed the result, reasoned about the next step, generated another snippet. By the end of one morning run, the model had produced and discarded code it had produced and discarded the day before. And the day before that. The schedule was identical every morning. The path was known. The model was solving the same problem from scratch every day, because that is what ReAct does. Anthropic warns in the paragraph above. Agentic systems trade latency and cost for better task performance. I was not getting better task performance. I was paying for a non-deterministic, expensive version of a cron job. The realization was not 'OpenClaw is bad'. OpenClaw is a serious piece of engineering, built by serious people, solving a real problem. The realization was that I had used an agent (in the Anthropic sense) to run a workflow (in the Anthropic sense). The tool worked. The fit was wrong. And the fit was wrong because the entire framework category positions itself as 'the way to build AI agents', with no architectural taxonomy to help you notice you do not need one. ## What is left when you admit it is a workflow This is the part that took me longest to accept. Workflow orchestration is a solved problem. It was solved thirty years ago. [Cron](https://en.wikipedia.org/wiki/Cron), 1975. [Anacron](https://en.wikipedia.org/wiki/Anacron), 1998. [Daemontools](https://cr.yp.to/daemontools.html), 1997. [Monit](https://mmonit.com/monit/), 2001. [Runit](http://smarden.org/runit/), 2004. [Supervisord](http://supervisord.org/), 2004. [Launchd](https://en.wikipedia.org/wiki/Launchd), 2005. [Systemd timers](https://www.freedesktop.org/software/systemd/man/systemd.timer.html), 2010. [Alertmanager](https://github.com/prometheus/alertmanager), 2016. Every piece of what an 'AI agent platform' claims to provide - scheduling, supervision, retries with backoff, health checks, notification - already exists. It has been hardened over decades. It runs on every server you have ever deployed to. The 'AI agent platform' industry is reinventing infra older than most of its founders. Badly. And charging in tokens. What the LLM actually adds is narrow and valuable. Ambiguous classification. Short synthesis. Draft generation. The exact spots where deterministic code does not reach. A call that asks 'is this email urgent?' is answered better by a model than by a regex. A call that asks 'summarize this Slack thread' is answered better by a model than by a template. These are tools. You call them when you need them, inside code that knows what it is doing. The inversion the market does not sell: the supervisor is the skeleton, the LLM is muscle at specific points. Not the other way around. Three of the agents I run every day make this concrete. The first is a tech briefing that crawls [Slack](https://slack.com/), [Sentry](https://sentry.io/), [GitHub](https://github.com/), [Linear](https://linear.app/), and the [Cloudflare](https://www.cloudflare.com/) dashboard every morning at eight. It joins the signals, prioritizes, and hands me a list of what to look at first. 95% of it is deterministic fetch. Authenticated HTTP client, GraphQL queries, timestamp filters, event dedup. Only the final step - the prioritization - calls a model. One call per execution. The whole briefing costs cents per day. The second tracks [DORA metrics](https://dora.dev/). Specifically what is stuck. It cross-references open PRs, commits from the last seven days, and Sentry issues that appeared in post-release windows. It identifies what stopped. PR without review for three days. Branch without a commit for five. Release with an unassigned regression. Zero LLM. It is SQL and API. The intelligence is in the cross-reference I designed. PR crossed with Sentry crossed with commit log. The model has nothing to do here. The third is the dumbest and the most used. Email labeling. Inbox falls into three buckets: reply, follow up, ignore. Here the LLM makes sense, because email classification is exactly the 'hard-to-maintain rules' case that OpenAI cites. But the way it shows up is specific. One model call per email, short prompt, structured output. It is not an agent deciding what to do with the inbox. It is a classification function called N times by a loop I wrote. The supervisor is me plus the [systemd timer](https://www.freedesktop.org/software/systemd/man/systemd.timer.html). The model is a tool. Of the three agents, two barely use the LLM. The third uses it in small, surgical amounts. The first version of these agents was written in [fish script](https://fishshell.com/). It worked for months. In May 2026 I wrote in my Roam: *"nossos fish agents estão crescendo muito e ficam meio chato de gerir em fish script né! vamos olhar pro que fizemos até aqui e criar um novo projeto chamado dotagent"*. I rebuilt them in [Rust](https://www.rust-lang.org/) as [dotagent](https://github.com/avelino/dotagent). It is not an AI framework. It is a scheduling and supervision framework for tasks that know what they are doing, written in any language, with the LLM showing up as a function call when it makes sense. And absent when it does not. This architecture has no pitch. It has cron, retry, notify, plus a model call in three specific places. It works. It costs less than a dollar a week. And it is exactly what Anthropic and OpenAI tell you to do, if you read what they wrote instead of what the next agent startup is selling. --- Read what Anthropic and OpenAI wrote about agents before you build one. They are telling you not to, most of the time. If your morning schedule is the same set of steps every day, you do not have an agent. You have a cron job with a superiority complex. --- # Mediocrity Is a Choice **URL**: https://avelino.run/mediocrity-is-a-choice/ **Published**: 2026-05-14 **Tags**: career, ai, engineering, leadership **Word Count**: 1324 words **Summary**: Career planning is the polite way to outsource your own evolution. Mid-level is not a position, it is a pause that became permanent. AI made the pause expensive. Career planning is the most childish thing an engineer can ask a company for. It is the polite way to outsource your own evolution to whoever happens to be paying your salary. Mid-level is not a position you reach. It is a pause that became permanent. And in 2026, AI made that pause expensive enough that you can no longer pretend it is invisible. This is not about layoffs. It is about something quieter and more honest. The shape of an engineering career broke, and most people in the middle have not noticed yet. ## Over-engineering is people, not architecture In January, [CACM published a piece](https://cacm.acm.org/blogcacm/how-over-engineering-became-the-new-technical-debt-in-distributed-systems/) arguing that over-engineering became the new technical debt in distributed systems. Services degrade silently. Dashboards stay green. Traces look clean. Latency climbs anyway. The article describes the symptom well: defensive microservices, abstractions for scenarios that never arrived, configuration replacing code. It is correct about the what. It is silent about the why. [Conway's Law](https://www.melconway.com/Home/Committees_Paper.html), in its original form, says systems mirror the communication structure of the organizations that build them. The inverted version is more useful in 2026: organizational structure creates the complexity that justifies its own existence. One microservice per team. One layer per hierarchy. One internal tool per staff engineer who needs 'ownership' for their next promotion cycle. The architecture is not wrong. The people who chose the architecture are afraid. There is a layer deeper than promotion-seeking, and almost nobody writes about it. Complexity is also territorial. Building a black box that only you understand is defensive, not offensive. It guarantees that nobody can take what is yours. Entry-level engineers do not do this because they do not know how. Senior-level engineers who have actually operated what they built for three years do not do this because they know the cost. The middle does it because the middle is where fear lives. ([cto-job-changed-chair-didnt](https://avelino.run/cto-job-changed-chair-didnt/)) ## The pyramid broke The traditional shape was a pyramid. Entry-level at the base. Mid-level in the middle, translating senior intent into entry-level code. Senior-level at the top, deciding and owning. The pyramid worked because translation took time, and translation was a job. AI ate the translation layer. Not slowly. Abruptly. What survives makes sense: - **Senior-level**: decides, contextualizes, carries accountability all the way through production and post-mortem. AI accelerates this work. It does not replace it. - **Entry-level**: learns faster than ever before. AI as a 24/7 tutor, plus direct mentorship from senior engineers without a middle layer filtering the conversation. The eighteen-month senior is real now. Four years was always an artifact of the pyramid, not of the work. - **Mid-level**: was a bridge. AI became the bridge. This is not 'fire all mid-level engineers'. It is 'stop creating mid-level as a destination'. The honest options for anyone currently in that band are two: become senior for real (operate what you built, carry decisions all the way to the end, be wrong in public), or become entry-level in something new (learn a stack you don't know, accept mentorship, be humble). The third option, staying mid-level by inertia, used to be viable. It is not anymore. The [2025 DORA Report](https://cloud.google.com/resources/content/2025-dora-ai-assisted-software-development-report) is the clearest signal of this. AI adoption among developers reached 90%. AI is no longer a competitive edge for individuals - it is the floor. The report frames AI as a 'mirror and a multiplier': it amplifies team dysfunction as often as team capability. [Faros AI 2025 telemetry](https://www.faros.ai/blog/key-takeaways-from-the-dora-report-2025) across more than 10,000 developers found something even sharper. AI assistants drove a 21% increase in individual tasks completed and a 98% increase in pull requests merged, and organizational delivery throughput stayed flat. They call it the AI Productivity Paradox. I call it proof that volume was never the bottleneck. ## Mediocrity is a choice, not a level Mid-level is not a number on your salary band. It is a state. You can have eight years of experience and be mid-level. You can have three and be senior-level. Time does not decide. What decides is what you do outside the hours your company pays you for. Did you study something this week that nobody told you to study? Did you operate, in production, a system you built three years ago? Did you make a decision you could not push up the chain? If all three answers are no, you are mid-level, regardless of what your title says. People who ask their company for 'a career plan' are asking the company to be their parent. The company is not a parent. The company is a bilateral contract. The contract says: you deliver value, you receive a salary. Career planning is not in the contract. It is in your calendar. Your career is yours. The first person responsible for it is you. If it is not you, you already chose mediocrity. You just have not noticed yet. I have been wrong about this in public. In 2022, I started drafting a career plan for Buser. We had many teams, and the teams were big. I followed the market default: levels, bands, expectations per level, promotion criteria. The document was already in review with engineering leads and HR. I was being the kind of CTO who defends his chair, not the kind who defends what the company actually needs. I abandoned the draft. I restructured the teams - fewer people, different dynamics, no Greek pyramid. I built what the company needed, not what the org-chart template said I should build. ([ai-cost-discipline](https://avelino.run/ai-cost-discipline/)) I have preferred small, senior teams since 2011, when I started building companies. Not for labor cost. For velocity. People who join expecting a career plan are asking the wrong question. The right question is: what problem can I solve here that nobody else is solving? Whoever answers that becomes senior. Whoever keeps asking the first question eventually leaves. ## AI made the choice expensive Before 2024, you could be mid-level for ten years without anyone noticing. There was enough work nobody wanted to do - glue code between services, maintenance tickets, 'alignment meetings', documentation nobody read. Mid-level engineers lived on this work. It paid the salary. It looked like contribution. AI killed that work. Not gradually. Abruptly. In 2026, code is not the bottleneck, decision is. Meetings are not delivery, they are excuses to postpone decisions. The mid-level career was built on top of those two pillars. Both pillars are gone. The choice that used to be invisible is now public. Either you can show what you studied last week without being asked, or you cannot. Either you operate the systems you built, or you avoid them. Either you carry a decision all the way through, or you find a way to defer it. AI did not change the standards. It made the standards measurable. ## The human part This is not raw meritocracy. It is courage. Senior-level engineers, the real ones, are those who had the courage to operate what they built, to be wrong in public, to own a decision until the end. Entry-level engineers who are good are those who have the courage to admit they do not know, and to learn in the dark. Mid-level is what happens when someone was afraid of both, and stayed in the middle. Mediocrity is defensive, not lazy. It has more to do with fear than with talent. People in the middle are not less capable. They are more comfortable. The comfort is the trap. Your career is not in your company's HR. It is in your calendar. Mid-level is not a position. It is a pause that became permanent. Stop asking for a career plan. Start writing your own, in code or in study or in operations, somewhere your manager did not assign. Look at last week. How many hours did you spend studying something nobody told you to study? If the answer is zero, you are mid-level. Your title does not matter. AI already caught up to you. The only thing left is whether you will notice in time. --- # Vanity Metrics in Engineering, From Lines of Code to AI-Generated Percentages **URL**: https://avelino.run/vanity-metrics-engineering/ **Published**: 2026-05-08 **Tags**: engineering-management, ai, dora, metrics **Word Count**: 1003 words **Summary**: Why '% AI-generated' is the new lines-of-code-per-day, and why DORA already solved this in 2014. Garry Tan, CEO of Y Combinator, announced that 25% of Winter 2025 startups had 95% of their code generated by AI. The internet applauded. I read it twice to make sure that was actually the claim. "% of code generated by AI" is a vanity metric. It is not the first one in the history of engineering, and it will not be the last. But it is the first to be narrated publicly by one of the Valley's most influential outlets as if it were a benchmark of technical maturity. That is where it becomes a problem. This post has 3 sections. The first shows why this metric is vanity, and why this one specifically is more dangerous than the ones before it. The second shows what to measure instead (spoiler: the wheel was invented in 2014). The third is an honest question about the state of the discipline. ## 1. The genealogy of wrong metrics Lines of code per day, 1970s. FTEs per project, 1990s. Story points, 2010s. Now, "% AI-generated". Each one looked technical at the time. Each one aged into an HR metric. The pattern is the same: measuring activity, not outcome. How much code was typed, how many people were on the project, how many points were burned in the sprint, how much the AI wrote. None of these metrics answers the question that matters: does the system stay up when the user shows up? The difference this time is the stage. Lines of code per day stayed in the HR spreadsheet. Story points stayed in each team's Jira. "% AI-generated" is in the Demo Day announcement, on CNBC, on every founder's LinkedIn. It becomes a cultural benchmark, not an internal one. And cultural benchmarks change behavior of people who have not even entered the game yet. Tan's own CNBC interview contradicts the headline he created. In the same conversation, he says founders need classical coding training to sustain products long-term, and that startups later bring in engineers to rebuild critical parts using traditional methods. It is all in the transcript. That part just did not go viral. Who wrote the code matters far less than who understands it when it breaks. [I have written about this before](https://avelino.run/the-code-is-yours/): "the AI wrote it" is not an answer when production is down. A metric that celebrates typing ignores the very thing that defines real engineering, which is who picks up the bill afterwards. ## 2. DORA has existed for over a decade The wheel was invented in 2014. DORA (DevOps Research and Assessment) proposed 4 metrics that measure what matters: deployment frequency, lead time for changes, change failure rate, time to restore service. None of them ask who typed the code. All of them measure how the system behaves when you change it. Why DORA works and "% AI-generated" does not: - DORA measures outcome, not activity. Deployment frequency measures whether the team ships. Time to restore measures whether the system is resilient. Failure rate measures whether the change was safe. - DORA is falsifiable. You can look at two teams and tell which one is doing better without ambiguity. - DORA is tool-independent. Vendors change, models change, frameworks change. DORA keeps measuring the same thing. "% AI-generated" fails on all three points. It measures activity, not outcome. It is not falsifiable (95% generated can be a great product or a terrible one, the metric does not say). And it is fully dependent on tools that change every week. The [DORA Report 2025](https://dora.dev/dora-report-2025/) revealed an important paradox: higher AI adoption correlates with more throughput AND more instability at the same time. Teams that celebrated only the throughput called victory too early. The system accelerates, and it breaks more. Without cross-checking the 4 metrics, you are watching half the movie. At Buser, every rollout of an AI tool goes through DORA before we expand it. It does not matter whether the team typed 5% or 95% of the code. What matters is whether MTTR went down, whether change failure rate went up, whether deployment frequency increased without an incident cost. When a tool raised instability during a rollout we ran, we rolled it back. The percentage of generated code never entered the conversation. Not because we ignore it, but because it does not answer any useful question. DORA also needs to be cross-checked with cost, or it becomes productivity theatre. [I have written about cost discipline in AI](https://avelino.run/ai-cost-discipline/): the problem is not the price of the token, it is the discipline of crossing DORA with cost per feature shipped, not per dev, not per hour. Without that, you accelerate expensively and think you are winning. ## 3. What this moment reveals about the discipline The question is not whether AI writes good code. It does, in many cases. The question is why, in 2026, we are still celebrating metrics that measured activity in 1975. Honest hypothesis: because "% AI-generated" fits in a headline. DORA does not. The incentive of whoever narrates (accelerator, press, vendor) is the metric that becomes a tweet, not the metric that holds the system up at 3am. The industry repeatedly confuses what is narratable with what is important. Software is still about who picks up the bill when it breaks. A metric that does not capture that is theatre, well-produced, with lights, with a narrator, but theatre. The team that confuses one for the other pays for it later, in incidents, in rewrites, in people leaving because nobody understands the system anymore. DORA has existed for over a decade. It is not the metric that aged, it is the will to measure. Every generation of engineers has to rediscover what the previous one already proved. The difference is that, this time, the wrong metric has a bigger marketing budget. --- If you are a founder or CTO in 2026 and you still cannot answer your **MTTR** and change failure rate from memory, but you know how much of your codebase was generated by AI, you do not have engineering discipline. You have a pitch narrative. --- # PM builder doesn't speed up engineering. It kills bad prioritization **URL**: https://avelino.run/pm-builder-kills-bad-prioritization/ **Published**: 2026-05-05 **Tags**: product, engineering-management, ai, leadership, cto **Word Count**: 1135 words **Summary**: The PM builder isn't invading engineering. It's killing the prioritization ritual that was always theater - and the gate that separates it from vibe coding in production. A PM on my team opened a PR last week. No heads up, no prior meeting, no PRD. POC code, isolated environment, feature flag closed, synthetic dataset. PR description: "I ran hypothesis X with 30 beta users, metric Y moved Z%, here's the code for you to look at." CI reviewed it in 4 minutes. Engineer approved it in 8. POC went up to a controlled environment the same day. Two years ago this would have been a scandal. In 2026 it's the right way to operate - and [a CTO still afraid of this is afraid of the wrong thing](https://avelino.run/cto-job-changed-chair-didnt/). PM builder isn't invading engineering. It's killing the prioritization ritual that was always theater. ## The ritual that's dying Thursday morning, prioritization meeting. Twelve PRDs on the table, framework applied to each one, a number in a spreadsheet. Twelve untested hypotheses competing for sprint slot. Engineering rejects not because the idea is bad. It rejects because the cost of finding out it's bad is high. The PM walks back to the table frustrated, writes a better PRD next time. Cycle restarts. Cagan already killed this in 2020 in [Empowered](https://www.amazon.com/EMPOWERED-Ordinary-Extraordinary-Products-Silicon/dp/111969129X): > "In a feature team, you are essentially staffed to design, build and qualify features and projects on a roadmap. The roadmap is the source of truth, and the team is measured by output." A roadmap as a queue of approved PRDs is the definition of feature factory. It doesn't matter if the PM is good. It doesn't matter if the prioritization framework is elegant. If the unit on the table is "PRD vs PRD", you're playing the wrong game. What changed in 2026 is that there's a real alternative. And it didn't come from the product world - it came from the collapse in the cost of generating code. ## A POC isn't a prototype. It's evidence. Three things the 2026 discourse collapsed into the same word. A prototype is Figma. Mockup, clickable flow, visual artifact to align the team. Useful for 15 years, still useful. Not what this is about. Vibe coding in production is debt dressed up as speed. PM ships an MVP on Bolt, plugs in Stripe, shows it to a real customer. Base44 went down in February 2026 and the company's app was offline for 8 hours. Also not what this is about. The PM builder's POC is something else. Functional artifact, with real or subset data, isolated environment, kill switch, TTL. **It replaces the speculative PRD on the prioritization table.** The conversation changes. You're no longer deciding between 5 untested hypotheses. You're deciding between 2 validated hypotheses and 3 that died before they ever became a queue. ## Why this frees engineering This is the part every defensive CTO needs to read carefully. The PM's POC isn't the solution. It's the **validated problem**. When engineering gets "this ran with 30 users, solved problem X, now tell me the right way to do this in production", you just applied Cagan to the prioritization flow itself: > "Empowered product teams are given problems to solve, rather than features to build, and most importantly, they are empowered to figure out the best way to solve those problems." The engineer enters early, at the right level of abstraction. Decides architecture, pattern, production trade-off. Doesn't get a finished spec to translate into code. Cagan has another one that kills the fear of "the PM is stepping on engineering": > "If you are just using your engineers to code, you're only getting about half their value." A PM handing a PRD to an engineer to code = engineering operating at half value. Always was. The PM's POC doesn't run over the engineer. It frees the engineer from the spec-executor role they should never have had. The defensive CTO is afraid of the wrong thing. The right fear is the opposite: continuing to treat engineering as PRD-to-code translation, now that PRDs became a commodity any LLM can generate. ## The contract Without a gate, it's vibe coding in production. With a gate, it's a POC operating as evidence. At Buser, the gate is simple and technical: the PM's POC goes through the same CI as engineering. No exception. The CI has automatic code review running Claude Opus 4.7 - reads the diff, compares against stack patterns, flags what's off-pattern, what touches a critical path, what smells like structural debt. PM opens PR. Model reviews. Engineering decides whether to approve it for an isolated environment. For engineering, it stops being a review bottleneck. POC PRs arrive pre-reviewed. Eng decides in 5 minutes whether to approve or reject. No more "let me look at this tomorrow" piling POCs in queue. For the PM, immediate technical feedback without depending on an engineer being available. Learns the stack patterns in practice, not in an onboarding doc nobody reads. After 3 POCs the PM already knows where engineering draws the line - and where they shouldn't even try. The rules the CI enforces: - POC runs in a sandbox environment with feature flag closed, isolated or synthetic dataset, TTL defined in code - POC never touches payment, authentication, sensitive data, critical production path - CI rule, not social convention - POC validates a hypothesis, engineering rewrites with production patterns, POC dies A POC isn't version 1. It's discard. The PM doesn't maintain code in production. Period. If the hypothesis validates, engineering takes the **problem**, not the code. If it doesn't, delete it before the TTL expires. No zombies living in a sandbox for 6 months waiting for someone to remember. That's the line that separates governance from theater. Social convention ("we agreed PM doesn't touch payment") fails on the first deadline pressure. CI rule doesn't fail. PR doesn't pass. Simple as that. ## Why this fits the moment I went back to leading product at Buser in 2026 with [DHM in reverse](https://avelino.run/product-is-not-a-role-its-a-moment/): Margin first, Hard to copy second, Delight last. Operational efficiency phase post-acquisition, not scattered innovation phase. The PM builder's POC attacks margin before anything else. You find out what's **not worth** spending a sprint on before spending the sprint. Every PRD that dies before becoming queue is capacity that's left for the problem that matters. POC is the practical application of the principle inside the product flow - cuts expensive optionality before assuming execution cost. --- PM builder isn't PM replacing engineering. Isn't every PM needing to become a dev. Isn't vibe coding in production. Isn't Lovable, Bolt, or v0 making MVPs that turn into product. It's one thing only: lowering the cost of finding out what's not worth building. PM builder doesn't speed up engineering. Engineering is already fast with Claude Code, Cursor, Copilot. The bottleneck was never the speed of writing code - it was the speed of finding out what's worth coding. PM builder kills bad prioritization. The rest is vibe coding in search of something to do. --- # Technical founders misread adoption - Rogers explained it in 1962 and I ignored it on Pix **URL**: https://avelino.run/technical-founders-misread-adoption-rogers-pix/ **Published**: 2026-05-03 **Tags**: founders, product, adoption, pix, dhm, rogers **Word Count**: 1575 words **Summary**: I bet against Pix in 2021 because I read adoption with the wrong lens. Rogers had the manual on a shelf for sixty years. DHM would have caught it in any roadmap review. Both ignored, both screaming. Early 2021. My co-founder walks in: "let's add Pix to checkout." My answer, word for word: "let the big players go first and screw it up. If it works for them, we implement." A few months later, there I was, implementing Pix at checkout. Not because I changed my mind - because the market had already decided without me. ## The technical founder's bias There's a bias technical founders carry that nobody talks about: we think we can predict adoption because we understand the technology. It's the opposite. When you understand infrastructure, you stare at architecture, latency, edge cases, failure modes. Adoption doesn't live there. Adoption lives in the gap between what people do today and what they'd rather do tomorrow, and that gap is human, not technical. This bias has a specific origin. Technical founders spend years being rewarded for skepticism. Skepticism keeps you from buying a vendor's promise, falling for hype around a new framework, burning a sprint on an idea that won't scale. It's a well-trained professional muscle. The problem is that this muscle, applied outside the domain it was trained in, becomes a liability. Skepticism about mass technology adoption is exactly that: the right tool in the wrong context. The question "will this scale technically?" and the question "will this be adopted?" look like sisters. They're not. The first is about technology, the second is about people. Technical founders answer both with the same lens and systematically miss the second one. ## Rogers and the predictability of the skeptic In 1962, Everett Rogers published [Diffusion of Innovations](https://www.amazon.com/Diffusion-Innovations-5th-Everett-Rogers/dp/0743222091). It's not a technology book, it's a rural sociology book - Rogers was studying why Iowa farmers adopted or rejected hybrid seeds. The theory that came out of it explains TV, the internet, the smartphone, Pix. And it was explaining Pix in real time, if I had bothered to look. Rogers split adopters into five categories: innovators, early adopters, early majority, late majority, laggards. Each category has its own psychological profile - it's not just chronological order, it's a type of person. Innovators take risks for fun. Early adopters lead opinion. Early majority waits for social proof. Late majority waits for indisputable economic proof. Laggards only move when there's no alternative left. The detail that hurts: late majority isn't uninformed. Rogers describes this profile as skeptical, cautious, **economically rational on the surface**. They watch the technology prove its value with others and only then move - and they rationalize this as prudence. "Let the big players go first" is literally the line Rogers attributes to late majority in 1962. I wasn't wrong by accident. I was an archetype. The part I hadn't understood: late majority **thinks it's being strategic**. The rationalization feels solid from the inside. "I'm not rejecting, I'm waiting for data." "I'm not being slow, I'm being prudent." Rogers spent decades showing that this internal narrative is how late majority justifies arriving late systematically. You don't realize you're in this bucket because the bucket has a beautiful story to tell you about yourself. ## Adoption is perceived, not objective The second piece Rogers hammers and that technical founders ignore: adoption factors are **perceived**, not objective. Adoption doesn't depend on technology being good, it depends on it being perceived as good by the adopter. Technical founders evaluate objectively: latency, throughput, failure modes, operational cost, scalability. Users evaluate subjectively: does it solve my pain now, does it cost less than what I use, can I trust it, is everyone I know using it. This mismatch is the heart of the error. We optimize for an axis the user can't even see, and we discard signals on the axes the user actually uses to decide. Pix is the textbook case. I looked at "will state-run infra scale?". The user looked at "can I pay a bill without leaving the house, for free, on a Sunday night?". Both sides were correct about their own questions. The thing is, adoption is decided by the user's question, not the founder's. I was in another game, playing well - but on another board. ## Running Pix through DHM Five years later, in 2026, I wrote about [running DHM in reverse at Buser](https://avelino.run/product-is-not-a-role-its-a-moment/) - Margin, Hard to copy, Delight, in that order, because the moment of the company calls for efficiency before delight. DHM is the framework I use today to prevent exactly the kind of error I made in 2021. And here's the cruel part: if I had run Pix through DHM in 2021, the error would have shown up on all three axes. **Margin.** Pix had zero cost to me at checkout, against credit card fees (3-5%) and boleto cost (R$2-4 per issuance). In healthtech, low ticket and high volume, any extra percentage point of margin is direct differentiation. It's not optimization, it's structure. Margin went up on every checkout migrated, and at scale that's the difference between a healthy operation and one running on a thread. The most embarrassing part: I, as CTO, should have been the first to calculate this. Transaction cost is an engineering problem as much as a financial one. I didn't look because I was on the wrong question. **Hard to copy.** Pix itself wasn't hard to copy - every competitor would eventually have it, it's public infrastructure. But **being ready first** was. Temporary competitive advantage lives exactly in that window between "technology available" and "everyone has implemented it". In a low-ticket market, competing on margin is existential - whoever implements first captures conversion and builds loyalty before the competitor knows what happened. Waiting for the big players was giving up the only hard-to-copy window available to me. I didn't lose the window - I handed it to competitors who made the opposite call in the same quarter. **Delight.** Here Rogers screams. Brazilians had been in pain with boleto and TED for decades. Pix killed that pain in five ways: absurd relative advantage (free, instant, 24/7, against three days of clearing and high cost), full compatibility (it was an extension of the bank app everyone already used), minimal complexity (one key replaced agency + account + CPF + bank code), trivial trialability (one real to test with anyone) and maximum observability (everyone saw everyone using it, from the waiter to the Uber driver, and visible adoption accelerates adoption). Delight wasn't a hypothesis, it was inevitability. Rogers' five factors, applied to Pix, had no nuance - it was an absolute 5/5. Three out of three by the criteria I myself defend today. Five out of five by the criteria Rogers described in 1962. Two frameworks separated by sixty years, both screaming, both ignored. ## The S-curve math There's a part that makes "wait for the big players" a losing strategy not by chance, but by mathematical design. Rogers' S-curve of adoption has an inflection point - the takeoff - where early adopters convince early majority and the thing explodes. Before takeoff, adoption looks linear and modest. After takeoff, it's exponential until saturation. ![Pix adoption S-curve - % of Brazilian adults who have used Pix, with projection through 2028](/blog/pix-adoption.png) The skeptical founder waiting for "validation from the big players" is waiting for a signal that comes **after** takeoff. By construction. Big banks, big retailers, big competitors - they also use external validation to move. By the time they move visibly, takeoff has already happened. You always arrive late by math, not by laziness. The window of advantage that exists between "technology available" and "technology mainstream" is exactly the interval between innovators/early adopters and late majority. Waiting for validation from the big players is by definition giving up that entire window. Worse: the S-curve has a property that skeptics chronically underestimate. The slope after takeoff is steeper than linear intuition suggests. Technical founders evaluate adoption in monthly windows ("I'll check how it's going in three months") and the S-curve responds in weekly windows when it engages. By the time you revisit to "check in", it's no longer early - it's late, and the time it takes to implement is the time the competitor uses to consolidate the advantage you gave up. ## The rule that stuck What did I look at instead of the real signals? I asked the wrong questions. "The state will run this, it's going to break." "Big banks will sabotage it because they lose float." "Key UX will confuse older users." All reasonable concerns. All irrelevant. I was answering questions about implementation risk while the question on the table was adoption velocity. Technical lens applied to a problem that wasn't technical. The rule that stuck with me: when a technology hits Rogers' factors, passes through the three DHM axes, and the cost to implement is low, you don't wait for external validation. You ship. The downside is dev time. The upside is being ready when the curve turns - and the curve always turns faster than the skeptical founder thinks. The rule has a corollary that matters more than the rule itself: technical founders need a framework that **forces** them to look outside the technical lens, because alone we tilt inward every time. DHM serves this purpose. Rogers serves this purpose. It's not intellectual decoration, it's a guardrail against your own bias. You don't escape the bias by being smart - you escape it by installing process that obliges you to ask questions you naturally wouldn't. I lost months betting against Pix. Rogers had the manual sitting on a shelf for sixty years. DHM would have caught the error in any roadmap review. Next time the manual is on the shelf, I'll read it. --- # Open Source Contributions - May 2026 **URL**: https://avelino.run/foss/2026/05/ **Published**: 2026-05-01 **Word Count**: 1016 words **Summary**: Open source activity in May 2026: PRs, reviews, issues, comments across multiple repositories. This month (May 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. ## 2026-05-30 - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [RFC: plugin system — JS plugins, manifest, and packaging](https://github.com/avelino/outl/issues/25) ## 2026-05-29 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [Cross-device sync: TUI + iOS over iCloud Drive](https://github.com/avelino/outl/pull/11) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): multi-select via long-press for batch ops](https://github.com/avelino/outl/issues/23) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): runtime theme swap and settings screen](https://github.com/avelino/outl/issues/22) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): auto-pair brackets, parens and braces](https://github.com/avelino/outl/issues/21) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): date and time inserters](https://github.com/avelino/outl/issues/20) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): workspace-wide block search](https://github.com/avelino/outl/issues/19) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): copy block ref handle to clipboard](https://github.com/avelino/outl/issues/18) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): tag (#) autocomplete](https://github.com/avelino/outl/issues/17) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): inline render of ((blk)) refs and !((blk)) embeds](https://github.com/avelino/outl/issues/16) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): block ref autocomplete on ((](https://github.com/avelino/outl/issues/15) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): undo and redo](https://github.com/avelino/outl/issues/14) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): set block and page properties](https://github.com/avelino/outl/issues/13) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [feat(mobile): multi-line block edit](https://github.com/avelino/outl/issues/12) ## 2026-05-27 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [Add ((blk-X)) refs and !((blk-X)) embeds](https://github.com/avelino/outl/pull/9) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Page type `person` + `@` mention autocomplete (inserts `[[@name]]`)](https://github.com/avelino/outl/issues/10) ## 2026-05-26 - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [feat(tui): ratatui UI/UX overhaul — chrome, sidebar, help, toasts, pin](https://github.com/avelino/outl/pull/7) - 🔀 Opened PR in [avelino/outl](https://github.com/avelino/outl): [inline backlinks editáveis + perf cold start](https://github.com/avelino/outl/pull/6) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Block references and embeds — cite a single block from N places](https://github.com/avelino/outl/issues/8) ## 2026-05-24 - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Plugin system — extend outl without forking it](https://github.com/avelino/outl/issues/4) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Mobile apps — outl in your pocket](https://github.com/avelino/outl/issues/3) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Desktop app — outl outside the terminal](https://github.com/avelino/outl/issues/2) - 🐛 Opened issue in [avelino/outl](https://github.com/avelino/outl): [Git-backed storage backend with native time-travel](https://github.com/avelino/outl/issues/1) ## 2026-05-22 - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [Add subprocess supervisor](https://github.com/avelino/dotagent/pull/37) ## 2026-05-21 - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [feat(secrets): add secrets.env loader with op:// support](https://github.com/avelino/dotagent/pull/35) - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [feat(notify): add telegram driver](https://github.com/avelino/dotagent/pull/33) - 💬 Reviewed PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Wrap insert-mode blocks to pane width](https://github.com/avelino/roam-tui/pull/39#pullrequestreview-4338932941) (Commented) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Subprocess hangs indefinitely: daemon has no lifecycle ownership over plugins or grandchildren](https://github.com/avelino/dotagent/issues/36) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add daemon-level secrets loader (~/.config/dotagent/secrets.env)](https://github.com/avelino/dotagent/issues/34) ## 2026-05-20 - 🔀 Opened PR in [avelino/dotagent](https://github.com/avelino/dotagent): [feat(cli): pretty-print run-now outcome, drop Debug dump](https://github.com/avelino/dotagent/pull/2) - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add reorder siblings with Alt+Up/Alt+Down](https://github.com/avelino/roam-tui/pull/40) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Formalize and document `config.toml` (defaults sensatos, override surface)](https://github.com/avelino/dotagent/issues/32) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [`dotagent migrate ` — auto-generate `agent.toml` from Fish framework](https://github.com/avelino/dotagent/issues/31) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [`dotagent pause` / `dotagent resume` — suspend without editing manifest](https://github.com/avelino/dotagent/issues/30) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [`dotagent record` + `dotagent replay` — deterministic debug](https://github.com/avelino/dotagent/issues/29) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Concurrency control — multiple instances of the same agent](https://github.com/avelino/dotagent/issues/28) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Per-schedule `timeout_seconds` override](https://github.com/avelino/dotagent/issues/27) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Blackout windows — suspend an agent during declared periods](https://github.com/avelino/dotagent/issues/26) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Agent dependencies (DAG) — `[[depends_on]]` upstream agents](https://github.com/avelino/dotagent/issues/25) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Declarative `[retry]` policy in `agent.toml`](https://github.com/avelino/dotagent/issues/24) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Publish a GitHub Action that validates dotagent manifests in CI](https://github.com/avelino/dotagent/issues/23) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add plugin: `sink-postgres`](https://github.com/avelino/dotagent/issues/22) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add plugin: `sink-s3` (and S3-compatible endpoints)](https://github.com/avelino/dotagent/issues/21) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add plugin: `preflight-disk-space` (abort below free-space threshold)](https://github.com/avelino/dotagent/issues/20) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add plugin: `preflight-network` (TCP connectivity check)](https://github.com/avelino/dotagent/issues/19) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add notifier driver: `webhook` (generic HTTP POST with template body)](https://github.com/avelino/dotagent/issues/18) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add notifier driver: `email` (SMTP)](https://github.com/avelino/dotagent/issues/17) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add notifier driver: `telegram` (bot API)](https://github.com/avelino/dotagent/issues/16) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add notifier driver: `discord` (webhook)](https://github.com/avelino/dotagent/issues/15) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add `dotagent audit` — query and format the audit log](https://github.com/avelino/dotagent/issues/14) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add `dotagent diff ` — human-readable manifest drift](https://github.com/avelino/dotagent/issues/13) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add `dotagent tui` — live full-screen dashboard](https://github.com/avelino/dotagent/issues/12) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Expose Prometheus `/metrics` endpoint from the daemon](https://github.com/avelino/dotagent/issues/11) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add `dotagent why ` — explain why an agent is (not) running now](https://github.com/avelino/dotagent/issues/10) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add `dotagent history ` — list recent runs from the audit log](https://github.com/avelino/dotagent/issues/9) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Add `dotagent next` — chronological view of upcoming agent fires](https://github.com/avelino/dotagent/issues/8) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Rate-limit and dedup notifications for repeated failures](https://github.com/avelino/dotagent/issues/7) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Enforce `[security]` declarations at runtime (sandbox-exec / bwrap / firejail)](https://github.com/avelino/dotagent/issues/6) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Parse cron expressions in `Schedule::Expression` so the adaptive scheduler can use them](https://github.com/avelino/dotagent/issues/5) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Implement `dotagent plugin invoke` (currently a stub)](https://github.com/avelino/dotagent/issues/4) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [Implement `dotagent bootstrap` (currently a stub)](https://github.com/avelino/dotagent/issues/3) - 🐛 Opened issue in [avelino/dotagent](https://github.com/avelino/dotagent): [CLI commands print raw `Debug` dump — unreadable on failure](https://github.com/avelino/dotagent/issues/1) ## 2026-05-19 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Default audit output to chrondb plus stdout](https://github.com/avelino/mcp/pull/99) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Pin fmt layer writer to stderr](https://github.com/avelino/mcp/pull/97) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Audit logging: default to dual-sink (chrondb + stdout) so entries are visible without `mcp logs`](https://github.com/avelino/mcp/issues/98) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Tracing logs leak to stdout instead of stderr](https://github.com/avelino/mcp/issues/96) ## 2026-05-08 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add native OpenTelemetry traces and metrics to mcp serve](https://github.com/avelino/mcp/pull/95) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [chore(deps): bump all libs to latest stable](https://github.com/avelino/mcp/pull/94) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Native OpenTelemetry support in `mcp serve` (proxy mode)](https://github.com/avelino/mcp/issues/93) ## 2026-05-07 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add OAuth Authorization Server with DCR for mcp serve](https://github.com/avelino/mcp/pull/91) ## 2026-05-06 - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [OAuth 2.0 + Dynamic Client Registration on `mcp serve` — enable connection from Claude, ChatGPT, Cursor and other AI clients](https://github.com/avelino/mcp/issues/90) ## 2026-05-04 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add MCP_AUTH_CONFIG for inline OAuth tokens](https://github.com/avelino/mcp/pull/89) ## 2026-05-03 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Add social-share OG image generator](https://github.com/avelino/avelino.run/pull/112) - ✅ Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Bump rustls-webpki from 0.103.10 to 0.103.13 in the cargo group across 1 directory](https://github.com/avelino/mcp/pull/86#pullrequestreview-4216364330) (Approved) ## Commits - 🔨 Push to [avelino/outl](https://github.com/avelino/outl): 72 commit(s) - [See commits](https://github.com/avelino/outl/commits?author=avelino&since=2026-05-01T00:00:00Z&until=2026-05-31T23:59:59Z) - 🔨 Push to [avelino/dotagent](https://github.com/avelino/dotagent): 41 commit(s) - [See commits](https://github.com/avelino/dotagent/commits?author=avelino&since=2026-05-01T00:00:00Z&until=2026-05-31T23:59:59Z) - 🔨 Push to [avelino/mcp](https://github.com/avelino/mcp): 15 commit(s) - [See commits](https://github.com/avelino/mcp/commits?author=avelino&since=2026-05-01T00:00:00Z&until=2026-05-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 12 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-05-01T00:00:00Z&until=2026-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Flat Engineering Teams Aren't an Org Chart Decision. They're a Maturity Filter **URL**: https://avelino.run/flat-engineering-teams-maturity-filter/ **Published**: 2026-04-27 **Tags**: engineering, leadership, culture, hiring **Word Count**: 1145 words **Summary**: Meta's 50:1 ratio isn't flat. Real flat teams are a maturity filter, not an org chart decision. Meta built an AI engineering team with [50 engineers per manager](https://fortune.com/2026/03/14/metas-ai-team-50-flat-management-structure/). The Wall Street Journal called it "ultra-flat." André Spicer, from Bayes Business School, [was more direct](https://fortune.com/2026/03/14/metas-ai-team-50-flat-management-structure/): "it's going to end in tragedy." Both are wrong for the same reason: they treat flat team structure as an org chart decision. Flat team structure is not an org chart decision. It's a cultural consequence. And most companies cutting middle management right now aren't going flat. They're going broken with extra steps. ## What changed since 2022 Pre-2024, "flat" was a cultural manifesto. [Valve published a handbook in 2012](https://www.valvesoftware.com/en/publications) describing in detail how to operate without hierarchy. [37signals (Basecamp) published "It Doesn't Have to Be Crazy at Work" in 2018](https://basecamp.com/books/calm), defending calm and autonomy as competitive advantages. [GitHub grew for years under a radically flat structure](https://www.objectstyle.com/blog/flat-organizational-structure-in-it-companies) - until it hit a ceiling and had to add layers to scale. It was a philosophical position, with skin in the game and people publishing exactly why it was worth defending. In 2026, "flat" turned into a spreadsheet line. [Gallup reported](https://www.gallup.com/workplace/) that the average number of direct reports per manager in the US went up 50% since 2013, with most of the jump in the last 18 months. That's not a coincidence. It's the same window in which CFOs figured out that cutting middle management makes next quarter's numbers look good. Meta at 50:1 isn't pioneering. It's the extreme end of a curve being pushed in the same direction for the wrong reason. ## How I know it works At Buser there is no middle management inside the engineering team. ICs report directly to me. I'm CTO and CPO at the same time, hands-on, making technical and product trade-off decisions in the same meeting. The team ships consistently. Operating margin is growing. Efficiency improves quarter over quarter. It works. But it works because I'm paying a price probably nobody at Meta is paying: a very specific contract about who joins the team. ## 5 things that make flat teams possible (and most companies don't have) **1. A team that understands it's made of adults.** I don't explain priority three times. I don't review PRs to make sure someone thought about the edge case. I don't remind people to test before shipping. If I have to do that, the flat team dies in the first week - not because the structure is bad, but because the team isn't ready. Maturity is not seniority. It's the ability to operate without anyone looking over your shoulder. **2. Explicit priority contract, not implicit.** Every week the team knows what matters and why. There is no "let me figure out what Avelino wants." There is "this moves the number, this can wait, this is debt we'll pay down in two sprints." Without that, a flat team becomes noise - everyone deciding local priority without knowing if it ladders up to the global one. **3. Decisions without permission.** If ICs need approval to choose architecture, library, feature flag strategy, database schema - the flat team is theatre. At Buser, technical decisions belong to the IC. If they got it wrong, we talk, adjust, move on. If they got it right, nobody hands out trophies - that's the job. A manager existing to "approve technical decisions" is the number one symptom of an organization pretending to be flat. **4. Distributed accountability, not just distributed autonomy.** This is the point that catches people trying to copy flat. Autonomy without accountability is chaos. At Buser, the IC doesn't just decide - the IC also owns what they decided. Shipped a change that broke things? They go figure out why, fix it, write the postmortem. There is no "manager takes the heat." There is "you own what you shipped." This filters out a lot of people who say they want flat but actually want decisions without consequences. **5. Hiring criteria that filter for maturity, not years of experience.** I have people with 5 years in the industry who outperform staff engineers from big tech. I have people with 15 years who wouldn't survive 30 days in a structure where no manager chases them. Maturity doesn't come from time. It comes from having operated without a safety net before. This is the hardest filter to apply and the most expensive to get wrong. ## Where Meta will fail Meta has a huge team, a vague mission (superintelligence is a project, not a scope), and a 50:1 ratio without any of the 5 things above figured out. There's no explicit priority contract - it's exploratory AI. There's no distributed accountability - it's big tech, accountability turns into politics. There's no maturity filter - they hired in volume. It's going to play out exactly like Spicer said: tragedy. The loudest people will consume the manager's time. Juniors will disappear from the map. The best ICs will leave within 12 months because nobody saw their work. Then Meta will rehire managers and call it a "post-learning adjustment," and the cycle restarts. Falsifiable prediction: more than 30% turnover on this specific team by March 2027. ## The ethical point nobody talks about A flat team without maturity isn't just inefficient. It's abusive. You're taking people who aren't ready to operate without direction and dropping them into an environment where nobody will give direction. They will feel like they failed. They'll leave thinking they were the problem. They aren't. The problem is the company that sold autonomy to someone who needed mentorship. That's why a flat team is a hard call, not a progressive one. You're telling a lot of good people to their face: "this isn't your place right now." That's honest. It's not kind. And anyone treating it as kindness is lying. ## Where this leaves me in 2026 Buser is growing, hiring, and the filter stays the same. I'm not looking for senior. I'm looking for mature. People who operate without me having to play technical babysitter. Who ship without asking permission. Who own what they shipped. It's a rare profile. And it's getting rarer as big tech trains an entire generation to operate with manager-coach-mentor-skip-level-staff-engineer-distinguished-VP between them and any actual decision. People who leave that model feel the void. Most run back. The ones who stay and thrive are exactly the profile Buser needs. I've written before that [the CTO's job changed but the chair didn't](/cto-job-changed-chair-didnt/). This post is the complement: what changed for everyone on the team, not just the CTO. [Cost discipline matters](/ai-cost-discipline/), but cultural discipline matters more. A company that cuts managers to show margin without first building maturity is taking on structural debt more expensive than any cloud line item. --- Honest question before you close this tab: if your company needs a manager to function, is it the manager that's missing - or is it the team that isn't ready yet? The answer says more about who you hired than about who you promoted. --- # The bug was coordination, not code **URL**: https://avelino.run/the-bug-was-coordination-not-code/ **Published**: 2026-04-24 **Tags**: engineering, product, coordination, postmortem, anthropic **Word Count**: 947 words **Summary**: Three teams made reasonable decisions. The product broke. Anthropic's postmortem is honest about the bugs - but silent about the organizational pattern that let all three ship at the same time. Three teams made reasonable decisions. The product broke. That's not an engineering failure - it's what happens when you confuse process with overlap. ## The postmortem is honest about the wrong thing Anthropic published a postmortem on the Claude Code regression. Worth reading in full. Three separate changes, different teams, different weeks, that together looked like model degradation: Product switched default reasoning effort from `high` to `medium` - latency was killing the UX. Engineering shipped a caching optimization to reduce cost on session resume. Another team added a system prompt line to control verbosity on the new model. Each decision was defensible in isolation. Together, they destroyed the experience for weeks. The "going forward" section is where it gets interesting - and revealing. Broader evals. More ablations. Better tooling to audit prompt changes. A Code Review integration. All technical. All correct. Zero mention of how three teams made simultaneous changes without visibility into cumulative effect. The postmortem diagnoses the bugs. It doesn't diagnose the coordination failure that allowed all three to ship at the same time. ## This is what scaling looks like without overlap In 2022, the three people who made these decisions probably sat next to each other - or were the same person. The product instinct, the infrastructure constraint, and the model behavior all lived in one head. When something felt off, the feedback loop was a conversation, not a ticket. By 2025, those decisions live in different orgs. Product owns effort defaults. Infrastructure owns caching strategy. Model behavior sits with whoever is prepping the harness for a new release. Each team is doing their job correctly. Nobody owns the intersection. This isn't a critique of Anthropic specifically - they're building fast and this is what fast looks like at scale. It's a structural pattern every company hits when the team grows faster than the communication surface. At Buser, I watch this happen at the product/engineering boundary constantly. A pricing change that made sense for conversion interacted with a backend timeout we'd adjusted for a different reason. Neither team knew about the other's change until drivers started reporting odd behavior on a specific flow. Both changes were right. The interaction sold tickets below the correct price long enough to impact GMV. It was invisible until it became a loss. ## Five signs you have the same problem **1. Your postmortems identify root cause as technical, but the real question is "why did three things ship in the same window?"** The Anthropic postmortem is precise about what broke. It's silent about the release coordination that let it happen. If your postmortems feel like this - thorough on mechanism, thin on process - you're diagnosing symptoms. At Buser, we started requiring every postmortem to answer: "what other changes were live in the same 72-hour window, and did anyone verify the combination?" It's uncomfortable because the answer is usually "no." **2. Your "going forward" is always more tooling** More evals. Better monitoring. Automated checks. All correct and necessary. Also a way to avoid the conversation about who talks to whom before deploying. Tooling catches problems after they happen. Overlap prevents them. **3. You can name the owner of each decision but not the owner of the intersection** Effort level? Product. Cache optimization? Infrastructure. System prompt? Model team. Who owns "what happens when all three change in the same sprint"? If the answer is "we'd catch it in review", you don't have an owner, you have a hope. At Buser, we made the CPO and CTO roles overlap deliberately - not by committee, but by having both perspectives at the same decision point. It doesn't scale forever, but it's honest about where the gap lives. I wrote more about this in [cto-job-changed-chair-didnt](/cto-job-changed-chair-didnt/). **4. Your teams are aligned on goals but blind to each other's current work** Goal alignment is necessary. It's not sufficient. A team can be perfectly aligned on "reduce latency" and ship something that interacts badly with another team's "reduce verbosity" work. Shared OKRs don't create visibility into what shipped this week. **5. Your coordination happens after the fact** The Anthropic bug was caught by user reports, not internal systems. That's not a monitoring failure - their monitoring was working. It's a signal that the coordination surface came after the release, not before. If your standard is "we'll see it in production", you're optimizing for fast detection instead of prevention. ## The part that actually matters Publishing this postmortem was an institutional act of courage that's genuinely rare. AWS has had incidents with worse user impact and published nothing. Most big tech treats public postmortems as legal liability, not accountability practice. That matters beyond the technical content. It sets a public standard that other CTOs now have to justify deviating from. When your team asks "why don't we do this?", the answer has to be better than "it's not our culture." Anthropic just made it someone else's culture. But courage without correct diagnosis is just good PR. The postmortem is honest about three bugs. It's not honest about the organizational pattern that made all three possible at the same time. Fixing evals catches the next bug. Fixing coordination prevents the category. --- You don't have a bug problem. You have a problem of who owns the intersection between decisions each team makes alone, in the same week, without knowing what the other is doing. Anthropic had the courage to publish the postmortem. They didn't have the courage to name that. When was the last time someone at your company listed everything that changed in the same window before investigating what broke - not after? If the answer is "we do that in the postmortem", you already know where the problem is. --- # The CTO's job changed. The chair didn't **URL**: https://avelino.run/cto-job-changed-chair-didnt/ **Published**: 2026-04-23 **Tags**: cto, ai, engineering-management, leadership **Word Count**: 1223 words **Summary**: Atlassian replaced its CTO with two 'next generation AI talent'. The point isn't the headcount. It's that the CTO's job has changed and most people haven't noticed. Every company exists to deliver value. When the way we build, lead, and ship accelerates, the team has to accelerate with it. Holding the hand of someone who doesn't want to walk at the new pace doesn't help anyone. Not the person, who stays in a role that's no longer theirs. Not the team, carrying dead weight. Not the company, paying the price of your omission. Looking out for what's best for the company sometimes means, yes, letting people go. Not out of cruelty, out of honesty. In March, Atlassian [laid off 1,600 people](https://thenextweb.com/news/atlassian-is-cutting-1600-jobs-and-replacing-its-cto), removed the CTO who had been in the role for almost four years, and placed two executives in his seat, described by the company itself as "next generation AI talent". The stock rose 2% in after-hours trading. It made headlines for the number. In February, Sam Altman said publicly that fewer than 1% of 2025 layoffs can be directly attributed to AI. He called the rest "AI washing": cost-cutting wearing a transformation costume. The Atlassian case probably has a bit of both. Which proportion doesn't matter. What matters is what the move reveals about how the market is reading the role. The point isn't having one, two, or ten CTOs. The point is that the CTO's job changed and most people haven't noticed. Until 2023, a CTO optimized team throughput. More people, more code, more features. Leverage came from hiring well and scaling process. Today the machine writes decent code on its own. The constraint shifted from "can we build this" to "is this worth building, in this order, now". It shifted from capacity to judgment. That changes five things in the chair's day-to-day. ## 1. Context gatekeeping became architecture LLM without context is a convincing garbage machine. Whoever decides what goes into the prompt, which MCP connects where, what data the AI sees, is drawing the real architecture of the company today. It isn't tooling work. It's a top-level decision. At Buser, this starts with me laying the path for the team. Not because it's exclusively my job, but because with AI, writing code stopped being rocket science, and the effort from idea to POC in production has dropped dramatically. We run an MCP proxy ([`mcp.avelino.run`](https://github.com/avelino/mcp), open source, maintained by me) because token sprawl between engineering and business areas was escalating with no governance. I built a skill for Claude to learn the Buser domain and answer business questions from managers with our own context, not generalist-model guesswork. When the cost of prototyping drops, the top of the pyramid needs to prototype. Every decision about what the AI sees of production is an architectural decision on security, cost, and quality at the same time. You can't delegate that to the platform team and call it done. ## 2. Review goes deeper than writing Production speed exploded. Judgment speed has to keep up. If it doesn't, it becomes accountability debt, nobody knows who decided what. The [DORA 2025 report](https://dora.dev/dora-report-2025/) exposed the paradox: higher AI adoption correlates with more throughput *and* more instability at the same time. Faros AI, measuring 22,000 developers, found a 242% increase in incidents per PR. The tool amplifies what's already there, good and bad. In practice, I read more PRs deeply today than I did two years ago. Where I used to trust the process, now I pull context. Code review stopped being a quality gate and became an understanding gate. If the dev who opened the PR can't explain why the code looks the way it does, it doesn't matter that CI passed. ## 3. Marginal cost per decision entered the boardroom Cheap AI turns expensive fast when nobody's measuring. I wrote about this recently in [AI tools have a cost problem. But it's not the tools](https://avelino.run/ai-cost-discipline/): the problem isn't the token price, it's the discipline of cross-referencing DORA with cost per shipped feature, not per dev, not per hour. At Buser, every AI tool rollout goes through a cost calculation before expansion. A vendor contract that won't do pure pay-per-use leaves the table, regardless of the discount promised on the subscription. Subscription without measured return is debt dressed up as productivity. Marginal cost per engineering decision now shows up in board conversations the same way infra cost does. A CTO who doesn't know the marginal cost of an AI-assisted feature has become a bad CFO. It's not optional. ## 4. Product and engineering collapse When the question shifts from "how do we build" to "is it worth building", splitting the two seats becomes overhead. I went back to leading product at Buser in 2026 exactly because of this. I framed the return using DHM (Delight, Hard to copy, Margin) in reverse order: margin first, because the moment calls for efficiency before delight. It's not regression, it's reading the game. When AI solves the "how" for two-thirds of the backlog, the bottleneck becomes prioritization. Good prioritization needs to see product and engineering at the same time, on the same neck. Splitting creates handoff, handoff creates lag, and lag in 2026 costs far more than it did in 2022. ## 5. Open source became personal R&D Test the model, the workflow, the MCP in a public sandbox before proposing it to the company. Zero risk to the company, compound learning for me. Every project I actively maintain today (`mcp`, `jbundle`, `roam-tui`, `chrondb`) serves two functions: real contribution to the community and a personal engineering lab. When the MCP proxy had a zombie process leak in production, I debugged [issue #51](https://github.com/avelino/mcp) in my own repo, and the learning came back to Buser the following week already as an architectural decision, not as an experiment. A CTO without a public sandbox in 2026 depends 100% on the company's budget to learn. At AI pace, that's too slow. ## The return to the human None of this is solved by replacing people without replacing practice. Atlassian may have gotten the 10% cut right and gotten the other 90% wrong by keeping the same operating mode. I don't have the data to know, and it doesn't matter for the argument. What matters is that the CTO role, from here on, is judgment per unit of time, not throughput per unit of team. Back to the opening: letting people go is part of the job. Not as a first move, as a last one. First comes honest conversation, clear expectations, time to adjust. Those who want to keep up with the new pace find help. Those who don't find a dignified exit. Both paths are respectful. What's not respectful is keeping someone in a role that no longer exists the way it used to, paying yesterday's salary to solve tomorrow's problem with a tool that's been left behind. A CTO who keeps optimizing throughput in 2026 won't lose the seat because of AI. They'll lose it for solving the wrong problem, at the wrong speed, in a world that already changed the question. --- Here's the honest provocation, no attack, just a straight read: how much of your work today is automatable by AI? And more importantly, how much have you changed the way you work in the last six months? If the answer to the second question is "little" or "nothing", the answer to the first doesn't matter. **You're already in line.** There's still time to step out, but stepping out requires admitting you're in it. --- # AI tools have a cost problem. But it's not the tools **URL**: https://avelino.run/ai-cost-discipline/ **Published**: 2026-04-18 **Tags**: ai, engineering-management, cto, cost-discipline, dora **Word Count**: 1411 words **Summary**: Uber burned through its annual AI budget in four months. The lesson isn't that AI is expensive - it's that ungoverned adoption at scale is. A bootstrap-trained CTO's view on measuring return, not usage. Uber's CTO [burned through the company's annual AI budget in four months](https://www.benzinga.com/markets/tech/26/04/51828848/ubers-anthropic-ai-push-hits-wall-cto-says-budget-struggles-despite-spend). 5,000 engineers. Claude Code. An internal leaderboard ranking who uses it the most. Based on what's been reported: no cap, no cost governance. I don't know exactly how it works from the inside - all I have is the public read of the case. And that read tells me a lot about a pattern I see repeating at companies of every size. I wrote a [short post about it on LinkedIn](https://www.linkedin.com/feed/update/urn:li:activity:7450856337414127616/) and it hit a nerve. The comments turned into a real conversation - engineers, directors, CTOs sharing how they're dealing with the same pressure. That told me the surface take wasn't enough. So here's the longer version. ## I never had a safety net I didn't come up managing technology budgets with VC money behind me. Everything I built before Buser was bootstrapped. When I made a bad infrastructure decision, it came out of my pocket. Literally. That shapes you. Not in a conservative "never spend money" way - in a conscious way. You learn to separate two very different modes: **Test mode**: you're buying information. Cost is part of the experiment. Don't optimize, learn. **Scale mode**: you're committing. Every dollar needs a return. Leaving the tap open isn't boldness, it's negligence. Most companies I see today are running scale budgets with test mindset. In my read of the case, that's what happened at Uber. ## Usage is not a metric Based on what's been reported, Uber built a leaderboard. Engineers competing on who uses AI the most. In my read, this isn't a productivity system. It's a cost acceleration system dressed up as culture. You can burn thousands of dollars in tokens without shipping anything meaningful. I've seen it. Long context loops, AI generating code nobody reviews, prompts that go 40 messages deep to produce something that would take 10 minutes by hand. Token consumption with zero correlation to output. Usage tells you the tool is being used. It tells you nothing about whether it should be. ## What I use to decide I'm not going to pretend we have this perfectly figured out at Buser. But the frame I work from is anchored on DORA metrics, which the industry has consolidated as the reference for engineering health for years. The logic doesn't change with AI in the mix - AI is just another variable pushing or pulling those numbers. **Deployment frequency** - how often code reaches production. AI moves this number legitimately when it cuts time on repetitive code, boilerplate, tests. It moves it falsely when it generates volume of code nobody reviews properly and ends up sitting in PR. The number alone doesn't tell you which one is happening - you need to cross-reference with lead time. **Lead time for changes** - PR open to production. This is the metric that exposes badly used AI the most. If frequency went up but lead time also went up, you're generating more open work, not more delivery. The code leaves the dev faster, but sits in review longer because nobody trusts it. **Change failure rate** - how many deploys roll back. Productivity that generates rework is negative productivity. AI has a specific pattern here: when misused, it produces code that passes the immediate test but fails on an edge case a human would catch. If this metric goes up, your real cost is double what the invoice shows, because you pay twice - the generation and the fix. **Time to restore** - when something breaks, how long it takes to recover. AI is a double-edged blade here. It helps when it accelerates diagnosis, reads logs, suggests hypotheses. It hurts when the dev doesn't understand the code AI generated and gets stuck trying to debug it. The number reveals which version of your team you're building: people using AI to amplify capacity, or people who depend on AI and stall without it. Cross these four with cost per shipped feature - not per dev, not per hour, per delivery - and you start separating signal from noise. A dev burning 10x more tokens to ship the same as the rest of the team isn't being more productive, they're being more expensive. ### Where this frame doesn't reach DORA is the floor. Not the ceiling. There are decisions you make looking at numbers outside those four metrics, and if you stay hostage to them, you miss good bets. **Case 1: rewriting an internal piece of software we'd been dragging since 2023.** Software written in a language outside our day-to-day stack. Every engineer who needed to touch it suffered. Every maintenance request turned into a project. We lived with it because rewriting always felt too expensive. With AI, transcribing that code to our stack became a simple task. I don't have a clear financial KPI for that rewrite. But maintenance time dropped dramatically, and any dev on the team can now work on it - no dependency on a specific platform profile. The return doesn't show up in DORA. It shows up in operational autonomy. And operational autonomy is strong currency when you're running a lean team. **Case 2: seat selection.** Looking at competitors selling traditional intercity bus tickets, everyone had seat selection. We, working in collaborative charter bus, never mapped that on day zero. We simply didn't think of it. Product fell behind on that specific point. Implementing seat selection isn't just engineering - there's a business layer, operations adapting, pricing policy. With AI, we implemented it faster and iterated in parallel while the business adapted to the new reality. It turned into a significant extra revenue stream. Here the return is direct and financial. You can measure it. But the decision to use AI to accelerate that delivery wasn't made looking at DORA. It was made looking at a competitive gap and a revenue opportunity. DORA protects you from waste in the day-to-day. It doesn't tell you where to bet. For the bet itself, you need to know what the business needs and where AI cuts a corner. That's judgment, not metric. ## The distinction that matters Testing a new tool, exploring what AI agents can actually do in your stack, running experiments - all of that has a cost, and that's fine. It's the cost of learning. Don't optimize prematurely. But the moment you move from experiment to standard workflow, the rules change. You need to know what you're buying. Not "engineers feel more productive" - that's self-perception, not data. What moved in the four metrics? What's the cost per shipped feature compared to before? If you can't answer that, you don't have a productivity investment. You have an expensive feeling. ### The trigger I use to switch modes The million-dollar question is: when exactly do you decide you've left the test and entered scale? The criterion I use is simple: **usage volume against financial impact**. In test mode, I don't look at cost. If three, five, ten engineers are exploring a tool, breaking things, learning where AI helps and where it gets in the way - the absolute cost is irrelevant. What I want is signal. I want to find out if there's real return there or if it's just enthusiasm. The switch comes when usage volume starts rising organically - more people using it, heavier use, becomes part of the natural delivery flow. At that moment, before rolling out to the whole team, I stop and ask: is that volume generating measurable financial impact? Whether in new revenue, recovered margin, capacity I didn't need to hire, rework that stopped happening. If the answer is yes, rollout with cost governance from day one. Cap per dev, usage alerts, weekly review for the first 60 days. If the answer is no, back to test mode. No expansion. Because expanding use without proven impact is exactly what happened in the story that opened this post. ## Uber can absorb it. You probably can't $3.4 billion R&D budget. They'll replan and move on. Most companies don't have that margin. And the pattern will repeat everywhere if the lesson people take from this story is "AI tools are expensive" instead of "ungoverned adoption at scale is expensive." In my read, the tool isn't the problem. The leaderboard was the problem. Good tools with bad governance are just more expensive mistakes. --- *This post came out of a LinkedIn conversation that started [here](https://www.linkedin.com/feed/update/urn:li:activity:7450856337414127616/). Worth reading the comments - the Uber director who jumped in asked exactly the right questions.* --- # The best PMs aren't more skilled. They're more free **URL**: https://avelino.run/best-pms-are-more-free/ **Published**: 2026-04-15 **Tags**: product, career, personal-finance, autonomy, decision-making **Word Count**: 1542 words **Summary**: The product decision I didn't make in 2014 because I couldn't afford to be right — and what it taught me about conviction, financial autonomy, and the invisible cost of having no choice. In 2014, I had a decision on the table: migrate the video classification pipeline from CPU to GPU using CUDA. The problem was concrete. We processed video at scale - frame extraction with FFmpeg, visual features with HOG (Histogram of Oriented Gradients), classification with SVM. We tested shallow neural networks, but they didn't perform on our volume with the hardware of the time. HOG + SVM was the state of the art we could afford, and it worked - but it ran frame by frame on CPU, and that didn't scale. CUDA would change that. Parallel batch processing of frames, feature extraction with real throughput. The CPU cost per hour of video would drop significantly. The technical path was clear in my head. I didn't do it. The reason wasn't technical. It wasn't strategic. It was that I didn't know if I could cover the month. GPU in 2014 wasn't a commodity - it was infrastructure cost I couldn't justify when the team's payroll was on the line. Years later, at the company's exit, what got bought was exactly that capability - processing video at scale with real performance. I did it eventually, almost breaking the company, but I did it for the wrong reason: operational cost reduction, not value creation. The exit happened. But it would have been better, and sooner, if I'd bet where it mattered when it mattered. That's the decision I carry. And it's the most honest thing I can bring about what wealth has to do with product. ## Conviction has a cost Disagreeing has a political cost. Killing a feature has a relational cost. Betting on a long path has a short-term cost. This isn't abstraction. It happens in specific meetings: - Disagreeing is telling the VP that the metric he presented to the board last week is measuring the wrong thing. - Killing a feature is telling the founder their pet project has no traction and nobody uses it. - Betting long is holding three months of visible delivery to rebuild a layer only you understand needs to be rebuilt. Each of those decisions has a second cost nobody talks about: **the invitation next time.** Whoever pays the political cost once gets marked. They land on the short list of "maybe we don't bring them to this call." The next disagreement weighs more because it carries the previous one. Whoever can't pay that cost doesn't bet. Simple as that. And that cost is rarely technical or strategic — it's financial. Whoever needs next month's paycheck can't afford to be right. > The freest PMs at the company aren't always the most senior. They're the ones who can walk out on a Friday without a plan B. ## The problem isn't skill You can have taken every course, read every product book, have the best discovery and delivery track record in the company. You'll still make decisions out of survival when the month gets tight. When the reserve is zero. When the only way out is this job, this company, this roadmap. And here's the trap nobody talks about: skill *makes it worse*. Because skill shows you the right path. You *know* the feature is wrong. You *know* the roadmap is optimizing the wrong KPI. You *know* you should say no. And you approve it anyway. Because the month doesn't wait. The PM who doesn't see the problem suffers less. The PM who sees it and can't act lives in daily dissonance — and that charges interest in health, motivation, and sleep. Not in a month. In years. Seniority doesn't fix it. Framework doesn't fix it. Discovery course, mentor, executive coach — none of it fixes it. The problem isn't competence — it's freedom. ## Decision-making freedom doesn't come from seniority It comes from financial autonomy. Morgan Housel has a line in [The Psychology of Money](https://www.amazon.com/Psychology-Money-Timeless-Lessons-Happiness/dp/0857197681) that nails it: real wealth isn't what you spend — it's what you don't have to spend. It's optionality. It's flexibility. It's the ability to say no without falling apart. > Translated to product: it's the ability to disagree with the VP without calculating this month's rent. A high salary isn't wealth. A high salary that hits checking and leaves at the same pace is income — not freedom. I know a senior PM pulling $15k/month with zero reserves. I know a mid-level PM at $7k/month with 12 months of runway in the bank. The second has more decision-making freedom than the first. Always. Stock options don't count until they're liquid. RSUs vesting three years out are a promise, not wealth. Series A equity is a lottery with a pretty name. The only math that matters is one question: > **If I get laid off today, how many months can I go without changing anything in my life?** That's the distance between you and necessity. And that distance shows up in every product decision you make — even when you think it's not in the room. ## Wealth changes how you build product With a reserve, you kill what's wrong. You walk into the meeting, present the data, defend the position even if the VP doesn't want to hear it. You accept the conflict because you know conflict in product is the price of the right decision — not a soft-skill failure. Without a reserve, you optimize what's safe. You ship what the stakeholder asked for. You write the PRD that will pass review. You call that alignment. The difference shows up in specific places: - **In prioritization:** with a reserve, you cut the feature that became a sacred cow. Without a reserve, you put it on the roadmap as a "low-cost experiment" and move on. - **In discovery:** with a reserve, you say 8 interviews isn't enough signal to bet the quarter. Without a reserve, you validate the hypothesis the board already wants to hear. - **In tech debt trade-offs:** with a reserve, you pick the fight for the refactor that will hold the product for the next two years. Without a reserve, you ship velocity this quarter and leave the debt for the next PM. - **In hiring:** with a reserve, you hold the role three more weeks to find the right person. Without a reserve, you hire the "ok" because the squad needs to deliver. The product you build when you have a choice is different from the product you build when you need the job. And that difference doesn't show up in one quarter. It shows up in two years of roadmap stacked on top of each other. In what became legacy. In what never got built. ## It doesn't matter how much you make right now The habit of building wealth precedes the high salary — not the other way around. Whoever waits to earn more to start never starts. Because lifestyle expands with income, and the logic of "when I make X, I'll start saving" has no finish line. There's always a bigger X. Run the cold math: a PM making $5k/month saving 15% has reserves. A PM making $12k/month spending $12k/month doesn't. The math doesn't care about your level on the ladder — it cares about what goes out being less than what comes in. Simple as that. Starting small isn't symbolic. It's where the habit forms. It's where you learn the difference between what you want and what you need — and that difference is the only thing that doesn't change when your salary doubles. > I told my 22-year-old self that what I saved at 25 would be worth more than what I'd save at 35. He didn't listen. **It is what it is!** ## The invisible cost of having no choice It never shows up on the statement. It shows up in the feature you approved knowing it was wrong. In the job you stayed at six months longer than you should have. In the product you could have built if you'd had the freedom to bet. It also shows up in the small, everyday things: in the comment you didn't make in review because picking the fight cost something. In the hire you accepted because pushing back drained you with HR. In the squad change you asked for but didn't push because "the timing wasn't right." In the hard feedback you swallowed in the *1:1* because you needed the bonus. In 2014 I knew exactly what CUDA would solve in our pipeline. HOG on CPU didn't scale, and I knew it. I didn't bet because I didn't have the financial freedom to take on a cost I couldn't guarantee the following month. That cost is real. It's cumulative. And it only becomes visible in hindsight — when the exit happens, when the product loses to the competitor, when the engineering team resigns because technical debt became unpayable. That's when you do the math on what could have been. And that math never closes in favor of whoever didn't bet. --- The best investment a PM can make in their own career isn't a course, isn't a certification, isn't one more discovery book. It's **building the wealth** that gives you the right to work on the product you're **obsessed with** *(actually want to build)* — and say no where you don't want to be. Because a PM who can't choose where they are isn't building product. ~~They're surviving.~~ --- # Contribute What You Use: Why Real Usage Makes Better Open Source Contributions **URL**: https://avelino.run/contribute-what-you-use/ **Published**: 2026-04-12 **Tags**: open-source, open-source-contribution, developer-mindset, engineering, ownership, github **Word Count**: 1007 words **Summary**: The best open source contributor isn't the most technical — it's the one who actually uses the software. Use it first, then contribute what matters. There's a pattern I see constantly in open source contributions, and it costs everyone involved more than it should. Someone finds a project. They like the idea. They read the README, skim the codebase, spot what looks like a gap, and open a pull request. The code is clean. The intention is good. The problem: they've never actually used the software. The PR sits in review for a week. The maintainer tries to understand the motivation. Questions get asked. Answers are vague. The proposed solution works for a case the contributor imagined but doesn't account for how real users interact with the system. Eventually the PR gets closed - politely, if the maintainer has the energy for it. This happens thousands of times a day across GitHub. And almost nobody talks about the real cost. ## The Hidden Cost of Drive-By Open Source PRs The contributor spent maybe two hours on the PR. The maintainer spent two hours too - but those two hours looked completely different. The contributor was building. The maintainer was decoding: reconstructing context that was never there, testing a hypothesis someone else formed without the data to form it, and then writing a careful explanation of why the solution solves the wrong problem. That's not code review. That's unpaid consulting for someone who didn't do the prerequisite work. Multiply this by the volume of a popular project. I maintain [awesome-go](https://github.com/avelino/awesome-go), which has 168k+ stars and gets dozens of contributions every week. The PRs that take thirty seconds to evaluate are always from people who are using the library in production and encountered a real gap. The PRs that take thirty minutes are from people who had an idea. The ratio of effort to signal is completely inverted between the two groups. ## Why Using the Software Beats Reading the Code Here's the thing that doesn't get said enough: **you cannot reverse-engineer the feeling of hitting a real limitation**. When you've actually used a piece of software - in anger, under deadline, with real data - the contribution that comes out of that experience carries information that no amount of code reading can replicate. The edge case you hit. The error message that told you nothing. The configuration option you needed that wasn't there. The workaround you built because the obvious path didn't work. That's the signal. That's what makes a contribution valuable. A contributor without usage is essentially writing fiction. They're imagining a problem, imagining a user, and imagining a solution. Sometimes they get it right by accident. But there's no reliable mechanism for being right, because the feedback loop that creates accuracy - actual use, actual failure, actual frustration - never ran. ## Issues Are Underrated Contributions The cultural bias toward code as the only "real" contribution is one of the most damaging things about how GitHub shaped open source participation. A well-written issue - specific reproduction steps, clear expected vs. actual behavior, minimal context that lets someone else reproduce the problem in five minutes - is worth more than most PRs. It contains verified information about a real failure mode. It doesn't require the maintainer to reconstruct what problem the contributor was trying to solve. It's honest about what it is: an observation from someone who was actually there. The PRs I trust most often start as issues. Someone reports a bug, we discuss it, they understand the codebase enough to know where the fix should go, and then they write the code. That sequence is not an accident. The issue stage is where domain knowledge gets established before anyone starts writing code. When you skip that stage and go straight to a PR, you're betting that your mental model of the system is accurate without ever having stress-tested it against reality. ## Your Reputation Is Not Infinite There's a self-interested argument here that I think contributors underweight. Maintainers remember. Not maliciously - they're not keeping a blacklist - but pattern recognition is unavoidable. Someone who opens PRs that consistently hit the mark gets the benefit of the doubt on the next one. Someone who repeatedly proposes solutions to problems they've never experienced trains the maintainer to spend more time on each PR, to ask more questions, to be slower. This is the same principle behind [signing your commits](/the-code-is-yours): ownership isn't a formality. When your name is attached to a contribution, you're making a claim - that you understood the problem, that you tested the solution, that you stand behind the change. A PR from someone who never used the software is a signature on something they can't actually stand behind. In a world where maintainers are already overwhelmed and triage time is the bottleneck, being the person whose PRs move fast is a real advantage. That reputation is built by being right, and being right comes from using the software. The inverse is also true. A stream of well-intentioned but context-free contributions signals to the maintainer that engaging with your work is expensive. That's a hole that's hard to climb out of, and it's entirely avoidable. ## How to Contribute to Open Source the Right Way Use the software. Actually use it - not a toy example, not a five-minute exploration, but in a context where you need it to work and feel it when it doesn't. When you hit something broken or missing, write it down. Open an issue before you open a PR. Talk to the maintainer about whether the gap you found is intentional, whether there's a reason the obvious solution wasn't built, whether the problem you have is shared by others. Then write the code - with that context, with that conversation in the background, with the confidence that you're solving something real. That's not a slower path to contribution. It's the path that actually lands. --- The projects that compound over time are built by people who use them. The maintenance burden that burns maintainers out is built by people who don't. Which kind of contributor you are is a choice you make before you touch a single line of code. --- # The code is yours. All of it **URL**: https://avelino.run/the-code-is-yours/ **Published**: 2026-04-11 **Tags**: ai, developer-mindset, engineering, ownership, books **Word Count**: 893 words **Summary**: AI generates 42% of committed code. The developer signs 100% of the commits. That asymmetry is the conversation the industry keeps avoiding. > AI generates the code. You sign the commit. That's not a workflow detail — it's the entire conversation we're not having. I use AI to write code every day. Claude Code, Cursor, depending on the context. I'm not here to defend abstinence or pretend the tools don't work — they work, and whoever hasn't incorporated this into their workflow is wasting real time on tasks that don't deserve human attention. But there's a conversation the industry is avoiding. And the longer it takes, the more expensive it gets. ## AI generates. You sign. This is not a detail [42% of all committed code today was generated by AI](https://www.sonarsource.com/company/press-releases/sonar-data-reveals-critical-verification-gap-in-ai-coding/). Developers estimate that number reaches 65% by 2027. Generation speed increased. Code volume increased. Accountability was not distributed along with it. When production breaks at 3am, the one who opens the terminal isn't Cursor. It isn't Claude. It's you. And "the AI generated that part" isn't an explanation for any stakeholder, any postmortem, any user who lost data. In 1999, Andrew Hunt and David Thomas wrote something that seemed obvious at the time: you own your code. [The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052) wasn't making a legal argument — it was making a professional one. If you wrote it, you understand it, you stand behind it. Twenty-six years later, authorship got more complicated. The principle didn't. ## The gap nobody wants to name [96% of developers don't fully trust the code AI generates](https://www.sonarsource.com/company/press-releases/sonar-data-reveals-critical-verification-gap-in-ai-coding/). But only 48% always verify before committing. That gap isn't laziness. It's capitulation disguised as productivity. [CodeRabbit analyzed thousands of pull requests](https://www.coderabbit.ai/blog/state-of-ai-vs-human-code-generation-report) and found that AI code produces 1.7x more issues than human code — not syntax errors the linter catches, but logic bugs and edge cases that pass CI and explode in production. The code *looks* right. Tests pass. The problem surfaces when a real user hits a specific path the AI inferred incorrectly. This has a name in systems safety literature: silent failure. And it's the most expensive kind of bug — because you don't know it exists until it's already cost you. ## Pressure is not an excuse. It's a test I've heard variations of the same sentence in different contexts: "the pressure to ship doesn't leave time to review properly." I understand the context. I don't accept the argument. An experienced engineer who capitulates every time there's pressure isn't an experienced engineer — it's an engineer who hasn't yet learned that saying no is part of the job. Not heroism. Basic technical competence. I've seen this happen far from AI. [49MB to load 4 headlines](https://www.linkedin.com/posts/avelinorun_49mb-pra-carregar-4-manchetes-o-new-york-activity-7439347458020900864-bQIa). No developer wakes up one day and decides to put 5MB of tracking JavaScript before rendering any text. It's cumulative — one tracker here, an A/B test library there, a widget that "barely weighs anything." The degradation happens too slowly to trigger an alarm, fast enough to become irreversible. The same mechanism operates with AI. Each unverified line is a micro-decision where you transfer risk without transferring responsibility. In the team you lead: who has real authority to refuse a merge that wasn't understood? Or has that become tech debt with a card in the backlog that nobody will resolve? ## The problem being built in silence [A METR randomized controlled trial](https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/) measured 16 experienced developers working on their own open-source repositories. Result: with AI, they took 19% longer. The same developers estimated beforehand they'd be 20% faster. After finishing, they still believed they had been faster. The perception gap is as significant as the productivity gap. You feel faster because you're generating more. But generation without comprehension isn't speed — it's volume. And volume without accountability is debt disguised as delivery. But there's something worse than the developer who doesn't verify their own AI code. It's the formation market being silently destroyed. [Stanford research found that employment of developers between 22 and 25 years old fell nearly 20%](https://digitaleconomy.stanford.edu/wp-content/uploads/2025/08/Canaries_BrynjolfssonChenChandar.pdf) since the 2022 peak. AI is exceptionally good at replacing exactly the work that formed junior developers: the simple CRUD, the boilerplate, the scaffolding. The tacit knowledge that makes a senior worth their salary — debugging instinct, architectural decisions that aged badly, understanding why the obvious solution fails under load — that knowledge doesn't come from prompts. It comes from having made mistakes in real contexts and paid the price. If the tasks that formed juniors disappear, where does the next generation of seniors come from? Who forms them? That bill will arrive, and it will arrive expensive. ## What changes in practice Treat every line AI generates the way you'd treat a PR from a junior developer you're mentoring. Someone competent enough to be useful, but who isn't yet accountable for the consequences of what they ship. You read that PR carefully. You understand what it does. You think about the edge cases. You approve it or you don't. And when it goes to production, your name is on it — because you made the call. That's not a workflow limitation. It's the definition of the job. "You own your code" in 1999 meant: don't blame the compiler, don't blame the requirements, don't blame the framework. In 2026 it means the same thing — with one more line: don't blame the AI. --- The question isn't how much AI you use. **The question is:** who signs the commit? If the answer is you, you'd better understand what's in it. **Act like it.** --- # The governance problem MCP created without asking **URL**: https://avelino.run/mcp-governance-token-sprawl/ **Published**: 2026-04-06 **Tags**: engineering leadership, security, mcp, open source **Word Count**: 697 words My team adopted MCP fast. I encouraged it — the productivity gains were real and visible. Engineers connecting Sentry, Slack, Grafana, GitHub directly into their workflow, no friction. The kind of thing you want to happen organically. Then one day I asked a simple question: who has a Sentry token? Who has Slack? Grafana? The answer was: everyone. Each engineer had generated their own. No inventory. No rotation policy. No single revocation point. We had traded operational security for developer experience — and nobody had made that trade explicitly. It just happened, one `mcp add` at a time. ## The problem isn't technological. It's design **MCP as a protocol** is well thought out _(this also applies to the **CLI**)_. The problem is it was designed for individual use. When you scale to a team, the attack surface grows proportionally — number of engineers times number of services. With 20 engineers and 10 MCP servers, you potentially have 200 active tokens scattered across personal machines. No central audit. No visibility into who called what, when, with which arguments. This isn't the engineer's fault. It's the protocol having no opinion on governance — which makes sense for personal use, and breaks at team scale. > The question every CTO should ask before encouraging MCP adoption: when someone leaves the team, how many places will I need to revoke access? In our case, the answer was: I don't know. And "I don't know" in security is not an acceptable position. ## What we did The solution we landed on was centralizing through a proxy. [`mcp serve`](https://mcp.avelino.run/guides/proxy-mode) exposes all configured servers as a single MCP endpoint. The team connects to the proxy — not directly to the services. The [token lives in one place](https://mcp.avelino.run/guides/proxy-mode#team-setup). Rotation becomes a single operation, not twenty. When someone leaves, you revoke one credential. The proxy runs on our internal network. No engineer accesses external services directly — everything goes through the proxy, which is never exposed to the public internet. The Sentry token never leaves internal infrastructure. What travels out is only the result of the call. This structurally reduces the attack surface: instead of 200 tokens distributed across personal machines, you have a single access point that isn't even on the internet. The proxy also solves a second problem we only noticed later: every MCP client — Claude Code, Cursor, any of them — spawns all configured servers at startup and keeps them alive forever. With 10 servers and 3 open sessions, you have 30 idle processes eating memory. The proxy fixes this with [lazy initialization and adaptive idle shutdown](https://mcp.avelino.run/mcp-servers-are-draining-your-hardware#lazy-initialization): backends only start when called, and shut down automatically when idle. Two distinct problems, same architectural solution. ## What it still doesn't solve A centralized proxy creates a single point of failure. If the proxy goes down, the team loses access to all services simultaneously — which is different from an individual token failing silently. It's a conscious tradeoff: I'd rather have a visible failure point than an invisible attack surface. [Granular per-user permissions](https://mcp.avelino.run/guides/proxy-mode#access-control-acl) exist, but they're based on glob patterns over tool names — not semantic roles. You can say "engineer A gets no access to Slack tools", but not "engineer A can read but not write". It's a start, not mature access control. The [audit log exists](https://mcp.avelino.run/guides/audit-logging) and is local by default. For real compliance, you'll want to integrate it with your observability stack. That's work, not magic. ## What I learned Technology that increases individual productivity tends to create proportional governance debt. MCP is no exception. The adoption speed of the protocol — and the speed at which your team will adopt it — doesn't give the ecosystem time to mature governance tooling before you need it. As a CTO, my job isn't to block adoption. It's to make sure adoption doesn't create risks the team can't see because they're focused on the immediate gains — which are real. The work is keeping both in perspective at the same time. If you're considering MCP for your team, start the question from the end: how will I revoke access when I need to? If you don't have a clear answer, you have a governance problem waiting to happen. --- # Your manager doesn't owe you a career **URL**: https://avelino.run/your-manager-doesnt-owe-you-a-career/ **Published**: 2026-04-04 **Tags**: career, developer-mindset, learning, leadership, books **Word Count**: 629 words **Summary**: Most stagnation stories start with the belief that growth is someone else's responsibility. On self-diagnosis, intellectual discomfort, and why the frontier owes you nothing > Your manager doesn't owe you a career. Neither does your company, your performance review, or your 1:1. Let me tell you how most stagnation stories begin. Not with a bad manager. Not with a company that doesn't invest in people. It begins with a silent, almost unconscious belief that professional development is someone else's responsibility. You join a company. There's a 1:1 on the calendar. You wait for your manager to ask where you want to go, what you need to learn, which training makes sense. When that doesn't happen - or happens badly - you feel shortchanged. Like the environment wasn't right for growth. That narrative is comfortable. And it's wrong. ## The contract you never read When a company hires you, it's buying what you can do *today*. Not an option on what you might become. Not a long-term investment in your curiosity. The salary that hits your account every month is an exchange for present delivery, not future potential. That's not cynicism. That's contractual clarity. Your manager has a job: remove systemic blockers, align priorities, make sure the team ships. It is not their job to feel, on your behalf, the intellectual discomfort that should be moving you to study. If you need someone else to identify the gap in your career, you've already lost a few months. Probably more. ## Technology isn't stable - it's volatile by design You chose a field that lives at the frontier of knowledge. That's not an accident. It's the nature of the thing. LLMs, new frameworks, paradigms that flip the table - they keep coming. Stopping learning is a decision. The window for "I'll catch up later" gets smaller every quarter. Professionals who live at the frontier don't have more time than you. They have less tolerance for intellectual comfort. ## The warning signal nobody mentions It's not when your manager stops giving you feedback. It's when *you* stop feeling discomfort reading about something you don't master. Intellectual discomfort is the vital sign of a career. When it disappears, it's not because you've reached a comfortable plateau. It's because you stopped paying attention to the frontier. Comfort in this field has a name: disguised stagnation. ## The critique nobody asked for but everyone needs If you depend on a performance plan to know what to study, the plan isn't the problem. If you wait for your 1:1 to generate the insight about where you're weak, the 1:1 isn't the problem. The problem is that you outsourced the diagnosis of your own career. Self-diagnosis isn't a rare personality trait. It's a skill. You can develop it. But it requires you to stop treating growth as a benefit and start treating it as an obligation - to yourself. Taking ownership of your own growth isn't ambition - **it's adulthood**. The moment you enter the job market, your development becomes your responsibility. Not your manager's, not HR's, not the company's learning budget. *Yours*. Your manager can be extraordinary. They can give you context, space, challenging projects. That's rare and worth a lot. But no manager in the world replaces you sitting down and doing the work. ## Postmortem If I were writing the [postmortem](/failing-on-purpose-building-postmortem-culture-across-company/) of a career that stopped growing, the root cause would rarely be "lack of leadership support." It would be: *an undeclared expectation that the environment should generate the motivation that was your own responsibility.* You don't need permission to study. You don't need feedback to know where you're weak. You don't need your manager to feel the urgency that should be yours. Cal Newport put it better than I could in [So Good They Can't Ignore You](https://www.amazon.com/Good-They-Cant-Ignore-You/dp/1455509124): > *"Passion is a side effect of mastery, not a prerequisite."* The frontier doesn't wait. And it owes you nothing. --- Your career is yours. **Act like it!** --- # Open Source Contributions - April 2026 **URL**: https://avelino.run/foss/2026/04/ **Published**: 2026-04-01 **Word Count**: 1147 words **Summary**: Open source activity in April 2026: PRs, reviews, issues, comments across multiple repositories. This month (April 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. ## 2026-04-29 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Fix homebrew install by hosting tap in main repo](https://github.com/avelino/mcp/pull/88) ## 2026-04-27 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Fix JWT auth bypass when default enforcement runs without a key](https://github.com/prest/prest/pull/960) ## 2026-04-25 - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Bump rand from 0.9.2 to 0.9.4](https://github.com/avelino/jbundle/pull/69#pullrequestreview-4176054004) (Approved) ## 2026-04-20 - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Complete config management CLI: list/get/add-manual/remove/import](https://github.com/avelino/mcp/issues/85) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [CLI daemon: keep stdio backends warm across isolated CLI invocations](https://github.com/avelino/mcp/issues/84) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Per-server tool filtering: allowedTools/blockedTools in servers.json](https://github.com/avelino/mcp/issues/83) ## 2026-04-14 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add timeout/logging/audit/CLI features for 0.5.0 release](https://github.com/avelino/mcp/pull/82) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Per-server lazy discovery for tools/call, resources/read, prompts/get](https://github.com/avelino/mcp/pull/81) - ✅ Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Bump rand from 0.9.2 to 0.9.3](https://github.com/avelino/mcp/pull/80#pullrequestreview-4104930668) (Approved) ## 2026-04-13 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add Kubernetes reference manifests and deployment guide](https://github.com/avelino/mcp/pull/79) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add dispatch and ACL enforcement for resources/* and prompts/*](https://github.com/avelino/mcp/pull/78) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add container-friendly config and env var overrides](https://github.com/avelino/mcp/pull/75) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add multi-stage Dockerfile and built-in healthcheck](https://github.com/avelino/mcp/pull/74) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add ACL check CLI and enriched audit logging](https://github.com/avelino/mcp/pull/64) - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Bump rustls-webpki from 0.103.9 to 0.103.10](https://github.com/avelino/jbundle/pull/68#pullrequestreview-4096015208) (Approved) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [CLI transport: first tool call blocks on all-backend discovery](https://github.com/avelino/mcp/issues/77) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Structured operational logging with tracing crate](https://github.com/avelino/mcp/issues/76) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Container image based on debian:bookworm-slim — unnecessary attack surface and image size](https://github.com/avelino/mcp/issues/73) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [No Prometheus/OpenTelemetry metrics — operators cannot monitor proxy behavior over time](https://github.com/avelino/mcp/issues/72) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Audit log data is ephemeral in containers — no path override, disable, or stdout mode](https://github.com/avelino/mcp/issues/71) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Graceful shutdown behavior is undocumented and untested under Kubernetes lifecycle](https://github.com/avelino/mcp/issues/70) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [No Helm chart — environment customization requires manual manifest forking](https://github.com/avelino/mcp/issues/69) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [No Kubernetes manifests — proxy requires undocumented operational knowledge to deploy](https://github.com/avelino/mcp/issues/68) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Container deployment requires file mounts — no inline config or writable-path overrides](https://github.com/avelino/mcp/issues/67) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [docker-compose health check does not verify the server is actually running](https://github.com/avelino/mcp/issues/66) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Dockerfile requires pre-built binary — no reproducible build from source](https://github.com/avelino/mcp/issues/65) ## 2026-04-12 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add role-based ACL with union evaluation and read/write enforcement](https://github.com/avelino/mcp/pull/63) ## 2026-04-09 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add read/write tool classifier with manual override](https://github.com/avelino/mcp/pull/62) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Populate roles in Bearer and Forwarded auth providers](https://github.com/avelino/mcp/pull/61) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add mcp update command to refresh server config from registry](https://github.com/avelino/mcp/pull/60) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Make mcp serve non-blocking under concurrent clients](https://github.com/avelino/mcp/pull/52) - 🔍 Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Support --dry-run flag for tool calls](https://github.com/avelino/mcp/pull/44#pullrequestreview-4082218392) (Changes requested) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [ACL: strict classification mode for ambiguous tools](https://github.com/avelino/mcp/issues/59) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Proxy: dispatch and ACL enforcement for resources/* and prompts/*](https://github.com/avelino/mcp/issues/58) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Auth: JWT/OIDC provider with claim-based role extraction](https://github.com/avelino/mcp/issues/57) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [ACL: mcp acl check CLI and enriched audit log entries](https://github.com/avelino/mcp/issues/56) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [ACL: new role-based schema, union evaluation, and read/write enforcement](https://github.com/avelino/mcp/issues/55) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [ACL: automatic tool read/write classifier with manual override](https://github.com/avelino/mcp/issues/54) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [ACL: populate real roles in auth providers (Bearer + Forwarded)](https://github.com/avelino/mcp/issues/53) ## 2026-04-07 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Fix ACL glob matching to support multi-wildcard patterns](https://github.com/avelino/mcp/pull/50) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [MCP process leak: proxy does not reap child backends after clients disconnect](https://github.com/avelino/mcp/issues/51) ## 2026-04-04 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [post: mcp-governance-token-sprawl](https://github.com/avelino/avelino.run/pull/111) ## 2026-04-03 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add Swift and Kotlin bindings, fix Python wheel and release pipeline](https://github.com/avelino/chrondb/pull/143) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Consolidate CI from 10 to 7 workflows](https://github.com/avelino/chrondb/pull/142) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add export-to-directory and expose backup/export via FFI](https://github.com/avelino/chrondb/pull/140) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [CI publishes duplicate packages from two overlapping release workflows](https://github.com/avelino/chrondb/issues/141) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(storage): Export bare repository tree to filesystem directory](https://github.com/avelino/chrondb/issues/139) ## 2026-04-01 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add production documentation for deployment, security, and operations](https://github.com/avelino/chrondb/pull/138) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [add post: Your manager doesn't owe you a career](https://github.com/avelino/avelino.run/pull/110) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Benchmark CI workflow does not fail on performance regressions](https://github.com/avelino/chrondb/issues/137) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Missing CONTRIBUTING.md and developer setup documentation](https://github.com/avelino/chrondb/issues/136) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Missing deployment guides: Kubernetes manifests, docker-compose, and production checklist](https://github.com/avelino/chrondb/issues/135) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Incomplete API and protocol reference documentation](https://github.com/avelino/chrondb/issues/134) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [cljfmt formatting not enforced in CI pipeline](https://github.com/avelino/chrondb/issues/133) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [No property-based testing for parser, storage invariants, and query correctness](https://github.com/avelino/chrondb/issues/132) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [CI only tests on Linux — no cross-platform testing](https://github.com/avelino/chrondb/issues/131) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Test coverage threshold is 55% — below industry standard for database software](https://github.com/avelino/chrondb/issues/130) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [WAL recovery module has zero test coverage](https://github.com/avelino/chrondb/issues/129) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Missing Redis hash/list/set/sorted-set operations for basic compatibility](https://github.com/avelino/chrondb/issues/128) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Missing Redis MULTI/EXEC transaction support](https://github.com/avelino/chrondb/issues/127) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Missing critical Redis key operations: KEYS, SCAN, EXPIRE, TTL, MGET, MSET](https://github.com/avelino/chrondb/issues/126) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Schema validation not exposed via FFI layer](https://github.com/avelino/chrondb/issues/125) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Database introspection (info, stats, health) not exposed via FFI](https://github.com/avelino/chrondb/issues/124) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Transaction metadata (user, origin, flags) not available in FFI operations](https://github.com/avelino/chrondb/issues/123) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Backup/Restore not exposed via FFI layer](https://github.com/avelino/chrondb/issues/122) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Branch management operations missing from FFI layer](https://github.com/avelino/chrondb/issues/121) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement RIGHT JOIN, FULL OUTER JOIN, and CROSS JOIN](https://github.com/avelino/chrondb/issues/120) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement set operations (UNION, INTERSECT, EXCEPT)](https://github.com/avelino/chrondb/issues/119) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement Common Table Expressions (WITH clause)](https://github.com/avelino/chrondb/issues/118) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement CASE expressions](https://github.com/avelino/chrondb/issues/117) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement window functions (ROW_NUMBER, RANK, LAG, LEAD)](https://github.com/avelino/chrondb/issues/116) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [No query planner — every SQL query performs full table scan](https://github.com/avelino/chrondb/issues/115) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [No batch/bulk operations in Storage protocol](https://github.com/avelino/chrondb/issues/114) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [OCC version tracker can diverge from Git HEAD after crash](https://github.com/avelino/chrondb/issues/113) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Branch-level write lock serializes all operations on the same branch](https://github.com/avelino/chrondb/issues/112) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [History queries perform redundant repository scans per document path](https://github.com/avelino/chrondb/issues/111) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [get-documents-by-table loads and JSON-parses every document in repository](https://github.com/avelino/chrondb/issues/110) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Document path resolution performs O(n) tree scans on every read](https://github.com/avelino/chrondb/issues/109) ## Commits - 🔨 Push to [avelino/mcp](https://github.com/avelino/mcp): 35 commit(s) - [See commits](https://github.com/avelino/mcp/commits?author=avelino&since=2026-04-01T00:00:00Z&until=2026-04-30T23:59:59Z) - 🔨 Push to [avelino/chrondb](https://github.com/avelino/chrondb): 20 commit(s) - [See commits](https://github.com/avelino/chrondb/commits?author=avelino&since=2026-04-01T00:00:00Z&until=2026-04-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 17 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-04-01T00:00:00Z&until=2026-04-30T23:59:59Z) - 🔨 Push to [avelino/roam-tui](https://github.com/avelino/roam-tui): 4 commit(s) - [See commits](https://github.com/avelino/roam-tui/commits?author=avelino&since=2026-04-01T00:00:00Z&until=2026-04-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 2 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2026-04-01T00:00:00Z&until=2026-04-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2026-04-01T00:00:00Z&until=2026-04-30T23:59:59Z) - 🔨 Push to [avelino/estimaai.com](https://github.com/avelino/estimaai.com): 1 commit(s) - [See commits](https://github.com/avelino/estimaai.com/commits?author=avelino&since=2026-04-01T00:00:00Z&until=2026-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Product is not a role. It's a moment. **URL**: https://avelino.run/product-is-not-a-role-its-a-moment/ **Published**: 2026-04-01 **Tags**: product, leadership, buser, dhm, strategy, startups **Word Count**: 1459 words **Summary**: I took back product ownership at Buser in 2026 — not as a fallback, but because I know this cycle. On knowing when you're the right person, when you're not, and how the DHM framework changes everything when you run it backwards In 2026 I took back ownership of product at Buser. Not as a fallback — as a deliberate choice. For that sentence to make sense, I need to be honest about what happened before. ## 2022–2023: building under constraint When I took on product at Buser in 2022, the equation was simple to state and brutally hard to execute: cut cost and grow revenue at the same time. The pandemic had shaken the bus travel sector, margins were thin, and every product decision needed a clear economic hypothesis before it became a line of code. That period taught me something no growth cycle ever could: **product, at its core, is making decisions under constraint**. When the budget is unlimited, it's easy to confuse activity with results — you experiment with everything, learn a little about everything, and rarely discover what actually moves the business. When the budget tightens, that confusion disappears. You find out fast what matters, because the cost of being wrong is immediate and visible. Two and a half years building product with real criteria. Not glamorous. Extremely useful. ## 2024: raising my hand In 2024, Buser entered a different phase: growth. More users, more routes, more pressure to scale operations and product simultaneously. And I raised my hand. I said openly that I wasn't the right person to lead product in that moment. I had never done a scaleup — that specific cycle of scaling a product that already works, multiplying what's gaining traction, managing larger teams in a context of accelerated expansion. I wasn't going to learn that repertoire at the speed the company needed, and pretending I knew would have been a risk I wasn't willing to put on the business. Ben Horowitz writes about this in [*The Hard Thing About Hard Things*](https://a16z.com/books/the-hard-thing-about-hard-things/): one of the hardest decisions a leader can make is recognizing that the profile that got the company here may not be the profile that takes it to the next stage. He talks about "management debt" — the debt that accumulates when you delay difficult decisions. Keeping the wrong person in the wrong role for the wrong reason (ego, misplaced loyalty, fear of admitting limitation) is the most expensive kind of management debt there is. He also makes a distinction that stuck with me: there is a real difference between the leader who **builds** something big and the leader who **manages** something big. Different skills, different temperaments, different contexts. Neither is universally superior — there's only the right profile for the right moment. Handing over the role wasn't weakness. It was the most rational move I could make — for myself and for the company. Most people don't do it because ego is more expensive to manage than any technical mistake. ## 2026: returning when the moment is yours Now the context has shifted again. Buser needs the numbers to work — efficiency at scale, economic discipline, product that moves margin without sacrificing growth. This is not a crisis. It's maturity. Those are radically different things. And this is exactly the repertoire I have. I've run this cycle before. I know how it works. I know where the traps are. I don't need to learn at the company's pace — I can execute at the pace the company needs. That's why I came back. And that's why it makes sense. ## The framework I use to think product in this moment: DHM [Gibson Biddle](https://gibsonbiddle.medium.com/intro-to-product-strategy-60bdf72b17e3), former VP of Product at Netflix, defines product strategy with a direct question: > **"How will your product delight customers in hard-to-copy, margin-enhancing ways?"** That question is the DHM framework — **Delight, Hard to copy, Margin**. Simple in form, brutal in application. ### Delight: enchantment with purpose Most conversations about user experience stop at "make the customer happy." DHM goes further: the enchantment that matters is one that **also improves the business economics**. These aren't opposing forces — they're things that need to overlap. Biddle's classic example: Netflix customers would say the most "delightful" product would be charging them half the price. But that doesn't sustain enough margin to keep improving the product. So the right delight isn't what customers ask for — it's what they value **and** what the company can deliver in an economically sustainable way. In practice, this completely changes how you prioritize. Features users request but don't move retention fall back. Features that seem invisible but reduce churn or increase usage frequency move up the backlog. The product starts being prioritized by impact hypothesis, not by volume of requests. ### Hard to copy: what takes years to replicate This dimension is about defensible advantage — not feature, not polished design, but something structural that a competitor would take years to replicate. Biddle uses [Hamilton Helmer's *7 Powers*](https://www.amazon.com/7-Powers-Foundations-Business-Strategy/dp/0998116319) as a reference: scale economies, network effects, accumulated data, brand, switching costs, proprietary process, scarce resource. At Netflix, the most powerful example is personalization. In 2005, recommendations were clicked in 2% of cases. After two decades of accumulating behavioral data from hundreds of millions of users, that number reached 80%. That's not a feature — it's data infrastructure that no competitor can quickly replicate, regardless of how much money they invest. The question I ask for every product initiative: **if a competitor copied this tomorrow, how long would it take them to reach the same level?** If the answer is "a few months," it's not real competitive advantage — it's just execution. Execution matters, but it's not a moat. ### Margin: the component product ignores (and shouldn't) Here's the heart of DHM — and where most product teams fail silently. "Product isn't finance." That phrase exists in many tech companies, explicit or implicit in the culture, and it's one of the most expensive beliefs an organization can hold. Product that doesn't think about economics isn't mature product — it's product that outsources to another team the responsibility of making the business work. Margin in DHM doesn't mean "cut costs." It means every product decision needs a clear hypothesis for how it improves the business economics. The levers are many: - **Retention**: users who stay longer have their CAC amortized across more cycles — acquisition cost dilutes, margin rises - **Usage frequency**: more touchpoints = more revenue opportunity, more data, better personalization - **Self-service**: reduces support cost without reducing experience quality — often improves it - **Natural upsell**: features that create organic progression within the product, without depending on a sales team - **Price for perceived value**: product that delights supports better pricing — delight and margin aren't opposites, they're levers that reinforce each other What can't happen is product decisions being made without that hypothesis. Not because "product should serve finance" — but because product that ignores economics is product that eventually runs out of budget to exist. ## How I run DHM in my current moment In the context of 2026 at Buser — efficiency at scale, making the numbers work — I deliberately run DHM **backwards**. Most teams start with Delight: "what enchants the user?" and then try to fit competitive advantage and margin on top. This works well in growth moments, when there's capital and tolerance to experiment. In my moment, I start with **Margin**: what needs to be true economically? What's the size of impact this initiative can have on unit economics? Then I ask: how do we deliver this in a way that also delights — not just that works? And finally: what in this solution is hard to copy, what builds long-term advantage? This inversion completely changes what ends up on the roadmap. You stop building product "for users" in the abstract and start building product that solves real business problems **through** a better experience. The difference sounds subtle. In practice, the projects that survive this filter are completely different from what would have entered without it. Biddle [documents this in the Netflix cases](https://gibsonbiddle.medium.com/2-from-dhm-to-product-strategy-a3781b2aadca): half the strategies they explored failed. The ones that won almost always hit two or three DHM objectives simultaneously — they delighted, created advantage, **and** improved margin at the same time. Strategies that only delighted without moving margin rarely survived long-term. ## What scaleup and discipline have in common One thing: consistent execution. I'm not a different person in each phase. What changes is the **prioritization criterion**. In growth, you bet on breadth — test more, expand the possibility space, take calculated risk with available capital. In discipline, you bet on depth and efficiency — better understand what's already working, remove what moves no metric, improve precisely what matters. The muscles are the same. The training is different. Knowing which phase you're in — and having enough honesty to recognize when you're not the right profile for it — is real competitive advantage. Both for the company and for you as a leader. --- Product is not a role. It's a moment! --- # AI companies didn't stop shipping. Why did you stop learning? **URL**: https://avelino.run/ai-companies-didnt-stop-shipping/ **Published**: 2026-03-29 **Tags**: ai, developer-mindset, workflow, pragmatism **Word Count**: 1030 words **Summary**: In six months, every major AI company shipped models that were fundamentally more capable. Not incremental updates — real capability jumps. And there are still developers who haven't prioritized learning to work differently. That's not healthy skepticism. That's inertia with a philosophy glued on top. > Stopping learning is a decision. Just don't call it skepticism. In six months, every major AI company shipped models that were fundamentally more capable — not incremental updates, real capability jumps. And there are still developers who haven't prioritized learning to work differently. That's not healthy skepticism. That's inertia with a philosophy glued on top. ## What's actually happening There's a group of developers who take pride in not using AI tools. They frame it as craftsmanship, as protecting "real engineering," as technical prudence. When you press the argument, they say they're "keeping an eye on the market" or "waiting for the right tool at the right moment." I've heard every version of this conversation. It's not skepticism. It's **inertia with a philosophy glued on top.** Over the last six months, Anthropic, OpenAI, Google, and others didn't stop shipping. Each cycle materially changed what's possible inside a development workflow. The window for "I'll evaluate later" closed. *Later arrived.* > "I'm not against AI — I just want to understand it better before adopting it." Understanding it better would take a few weeks of real use. Not months. If six months have passed and you're still "figuring it out," the problem isn't the tool. ## The compounding problem What people miss about this moment: the value isn't in any specific model. It's in the **compound effect of six months of adapted workflow.** When you start using it for real — not in "I'll try it once" mode — you go through an inevitable curve: bad prompts, flows you throw away, integrations that don't work as expected. That process takes time. There's no shortcut. You don't learn by watching someone else's demo. The developer who started adapting their workflow six months ago now operates at a different altitude. Not because the model does the work for them, but because they redesigned where their own judgment applies. That's not replacement — it's leverage. The developer who stayed put is still operating at 2024 productivity, believing they're at the ceiling. They're not. They're at the ceiling *of the tools they chose not to update.* ## The real cost of resistance Developers who resist aren't just slower — they're building an incorrect intuition about their own productive capacity. They believe they're working at the ceiling. They're working at the ceiling *given the toolset they have*, which is a very different thing. It's the equivalent of a developer in 2005 refusing version control because they had a disciplined backup routine. The routine wasn't the problem — it was the inability to see that the tool changed what was *possible*, not just what was convenient. **AI in 2026 isn't a productivity shortcut. It's a capability expansion.** Things that weren't economically viable to build — internal tooling, exploratory prototypes, test coverage that actually means something — are now viable. The developer who can't see that isn't being careful. They're operating with a smaller map. > The developer who refuses to adapt isn't protecting software quality. They're protecting their comfort zone and calling it a standard. ## You're paid to solve problems There's a truth the resistant crowd prefers not to put on the table: **software engineers are paid to solve problems and generate positive business impact.** Not to choose tools. Not to preserve method. To deliver results. When a developer refuses a tool that demonstrably increases delivery capacity, they're not exercising technical judgment — they're prioritizing the *how* over the *why*. And the company paying the salary didn't hire a methodology advocate. They hired someone to move the business. That's not dehumanizing — it's honest. The best engineers I've worked with always understood this instinctively. They had no attachment to stack, to process, to tool. They had attachment to the problem. The tool was an operational detail. Hunt and Thomas wrote this in 1999 in [The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052): the pragmatic developer continuously sharpens their tools, without dogma about which tools those should be. The book is 25 years old. The irony is that most resistant developers have probably read it, highlighted it, and recommended it — and are doing exactly the opposite of what it preaches. ## What adaptation actually means I'm not talking about using AI to autocomplete docstrings. I'm talking about fundamentally rethinking where developer judgment applies in the workflow. The highest-value judgment isn't "write this function." It's: is this the right abstraction? Is this the right trade-off? Will this architecture hold under the constraints we'll have in 18 months? That level of judgment isn't replaceable — and it was never the bottleneck. The bottleneck has always been everything below that line. The developers who will dominate the next cycle aren't the ones who write the most code. They're the ones who learned to apply judgment at the right altitude — and let the model handle everything below that line. That requires actually using the tool. Building workflows. Finding the failure points. Understanding where it confidently hallucinates versus where it's trustworthy. It's not theoretical — it's empirical. You have to ship with it to know. ## The six-month test The question I'd ask any developer still on the fence: the biggest AI companies in the world have shipped fundamentally more capable models since you started "evaluating." If you were going to learn, you had the time. What did you do with it? If the answer is "nothing, because I'm still not sure it's for me" — that's a decision. Own it. But don't pretend it's principle. Principle would be experimenting seriously, finding real limitations, and concluding the tool doesn't fit your specific workflow. That's valid. Not touching anything while the ecosystem builds around you isn't principle — it's avoidance. The market doesn't care about your skepticism. It compounds around the people who adapted early. Six months from now, there will be more releases, more capable agentic workflows, more integrations. The gap between those who adapted and those who didn't will be wider, not narrower. --- Software development is changing faster than any previous tool cycle — including cloud, mobile, and open source. Developers who treat this like another hype cycle will be wrong. The window for "I'll catch up later" gets smaller every quarter. Start now, or watch the gap widen. Those are the options. --- # You're not lazy. You were trained to give up **URL**: https://avelino.run/you-are-not-lazy-you-were-trained-to-give-up/ **Published**: 2026-03-09 **Tags**: open-source, developer-mindset, jvm, jbundle, nonconformism **Word Count**: 1279 words **Summary**: Your work environment can always be better, even if the solution doesn't exist yet. The problem isn't lack of skill. It's that you were conditioned to stop trying. [Martin Seligman](https://www.amazon.com/Learned-Helplessness-Theory-Personal-Control/dp/0195044665) put dogs in a cage with an electrified floor. When they tried to escape, they couldn't. After a few attempts, they stopped trying. Then he opened the cage door. The dogs didn't move. They lay there, taking shocks, with the exit wide open in front of them. Seligman called this **[learned helplessness](https://www.amazon.com/Learned-Helplessness-Theory-Personal-Control/dp/0195044665)**. The organism learns that its actions have no effect — and once it learns that deeply enough, it stops acting. Not out of laziness. Not out of incapacity. But because it was conditioned to believe that movement changes nothing. Now stop for a second and think about the last time you deployed a JVM application. The "but the user needs Java installed" conversation. The GraalVM that seemed like the answer until you spent three days configuring reflection, discovered the library you need isn't compatible, and ended up shipping a `.jar` with a README explaining how to install the JDK. Everyone has lived with this long enough that it became background noise. That's just how it is. Always was. Always will be. You learned not to leave the cage. It wasn't a conscious decision. It was accumulation. You opened an issue that stayed open for months and closed without resolution. You proposed a workflow change and heard "that's how we've always done it." You started building an alternative and someone sent you three links to tools that "already do this" — none of them the way you needed, but the implicit message was clear: *quiet down, it already exists*. Over time, you stopped formulating the attempt before it even started. The resistance became automatic. Invisible. You call it being realistic. The problem with learned helplessness is that it survives context changes. Seligman's dogs stayed still even after the cage changed — exit open, no more shocks. The conditioning wasn't in the cage. It was in the behavior. Same reason developers who switch companies bring the same passive patterns with them. A new environment doesn't undo the old learning automatically. You need deliberate action to recondition — you need to try leaving a few times and discover that this time it actually works. ## Complainer is helplessness with a narrative. Nonconformist is helplessness that became fuel There's a dangerous confusion that needs to be cleared up: nonconformism is not a synonym for complaining a lot. They're opposites. The complainer has a precise diagnosis. Knows exactly what's wrong, articulates it well, can convince the room the problem is real. And does nothing. Sometimes from lack of time, sometimes from fear of public failure, but mostly because they learned — at the behavioral level, not the conscious one — that building doesn't solve anything. So they refine the diagnosis. Get increasingly sophisticated at describing the problem. Become the person everyone agrees with, laughs nervously with in standup, and who hasn't moved the needle a centimeter in two years. The complainer is the dog describing the shock with clinical precision while still lying on the electrified floor. The nonconformist feels the same discomfort. The difference is what they do with it. Look at what happens when someone ignores that conditioning. [Ken Thompson](https://github.com/ken) and [Dennis Ritchie](https://en.wikipedia.org/wiki/Dennis_Ritchie) were dissatisfied with Multics. Bureaucratic, slow, ugly. Instead of adapting their workflow to the broken system, they built Unix on a discarded machine left in a Bell Labs hallway — basically out of nonconformism and the desire to keep running a game. [Linus Torvalds](https://github.com/torvalds) found Minix too limited, sent an email to the list saying he was making "an operating system, just a hobby, won't be big and professional like GNU," and today that hobby runs on 96% of the world's servers. [DHH](https://x.com/dhh) hated building web applications the way everyone else did — extracted Rails from Basecamp and redefined what productivity in web development means. None of them were certain it would work. All of them were certain that the way things were, they weren't right. That's the distinction. Not optimism. Refusal to accept the shock as a permanent condition. And there's the argument that kills more projects than any technical difficulty: *"but X already exists."* Every time someone presents a new tool, someone shows up with three links to alternatives. The argument seems reasonable on the surface — why duplicate effort? — but it hides a false premise: that the existence of a similar solution invalidates building a better one. Docker existed when Nix gained traction. WordPress existed when Ghost launched. "It already exists" is a historical observation, not a logical argument against building. When you hear it and stop, that's not humility — it's helplessness wearing intellectual clothing. The nonconformist hears "it already exists" and thinks: *it exists, but not the way I think it should work.* That simple sentence is what separates people who use tools from people who create them. Real nonconformism has a cost most people don't want to pay: you build in public, fail in public, ship incomplete in public. [jbundle](https://github.com/avelino/jbundle) isn't finished. It will never be "done" in the sense of complete and polished before it exists — because "done" is the fiction the complainer uses to justify not shipping. You only discover what the project needs to be when other people use it, break it, and complain the right way. Shipping early isn't carelessness. It's the only honest method of discovering whether the cage door is actually open. ## The door is open. But you have to move Seligman didn't stop at the diagnosis — he studied how to reverse helplessness. The answer was physically guiding the dogs through the exit. Two, three times. Until they relearned that movement caused change. After that, they left on their own. The equivalent isn't motivation. It's not reading about productivity or taking a course. It's building something concrete that solves a real problem you have — now, with what you have, without waiting for ideal conditions. The problem of distributing JVM applications has existed for decades. The standard answer has always been "install Java" or "use GraalVM" — and anyone who's tried GraalVM in production knows the second option trades one problem for five. [jbundle](https://github.com/avelino/jbundle) was born from that irritation: packages any JVM application — Java, Clojure, Kotlin, Scala — into a self-contained binary using `jlink`. No GraalVM, no reflection configuration, no library incompatibilities. One file, zero external dependencies, runs anywhere. [JabRef](https://github.com/JabRef/jabref) — a Java-based bibliographic reference manager, one of the most active Java open source projects in existence, with over 10 years of history and thousands of academic users — is exactly the kind of software that deals with this problem every week. New user, question in the forum: "how do I install it?" Answer: install Java first. It's a shock. It's background noise. It's normalized helplessness. The solution isn't impossible. Nobody had the stubbornness to build it. Now someone does. What's the thing in your workflow that annoys you every week and that you've learned to ignore? Not the one you already solved. The one you mention in conversation as "it's annoying but you can live with it." That's the electrified floor. That's the open door. Most people will keep taking shocks and calling it professionalism. They'll get increasingly good at living with the problem — write a clearer runbook, automate the workaround, onboard the next developer into the same painful ritual with more efficiency. And the problem will keep existing, passed from generation to generation as technical inheritance, until someone decides they don't want it anymore. You have at least one project like this waiting. The question isn't whether you have the skill. It's whether you still believe that leaving the cage changes anything. --- *[github.com/avelino/jbundle](https://github.com/avelino/jbundle) — packages JVM applications into self-contained binaries. Work in progress, as it should be.* --- # Topical Authority: Why You Should Write About the Destination Before Selling the Ticket **URL**: https://avelino.run/topical-authority-destination-before-ticket/ **Published**: 2026-03-08 **Tags**: seo, content-marketing, topical-authority, organic-growth, airbnb **Word Count**: 1083 words **Summary**: Most companies only create content when someone is ready to buy. That's too late. Here's the case for building authority in the destination cluster before anyone opens their wallet. In 2020, at the worst moment of the pandemic for the travel industry, Brian Chesky said something in an earnings call that made the SEO internet lose its mind: > "What the pandemic showed us is that we can take marketing down to zero and still have 95% of the same traffic as the year before." The SEO community celebrated as if it were a personal win. But Chesky completed the thought [in a tweet](https://twitter.com/bchesky) that was almost universally ignored: > "SEO was not one of the top growth drivers for Airbnb. Most of the SEO we do have is branded — people Googling 'Airbnb'." Two apparently contradictory facts. The tension between them reveals something more interesting than either one alone. ## What Airbnb actually built Airbnb didn't build a technical SEO moat. It built a brand moat that expresses itself through SEO. When [27,000 people per month search "Airbnb in Ireland" while only 14,800 search "hotel in Ireland"](https://foundationinc.co/lab/airbnb-branding-success), that's not the result of link building. It's the result of a brand that became a verb. Kleenex. Jacuzzi. Frisbee. Airbnb. When a brand reaches that level, SEO becomes a consequence, not a cause. But the path there runs through a specific content decision: **Airbnb became an authority on destinations before it became a booking platform**. The neighborhood guides. The "Airbnb in [city]" pages. Content about what to do, where to eat, how to get around. All of it built topical authority across a cluster of entities — places, experiences, local context — that Google started associating with the domain. The result: [1.1 million pages, Domain Authority 92, 18 million monthly organic visitors](https://foundationinc.co/lab/airbnb-branding-success). And traffic that survived the pandemic not because the SEO was good, but because the brand was strong enough to generate branded demand that no other platform could capture. ## The mechanism underneath Google doesn't rank pages. It ranks sources. Since 2012, with the Knowledge Graph, Google shifted from keyword matching to entity understanding — places, people, concepts, and the relationships between them. A search for "things to do in Lisbon" isn't a keyword query. It's a query about a geographic entity and its associated properties. In 2023, Google Search Central [officially confirmed](https://developers.google.com/search/blog/2023/05/understanding-news-topic-authority) what SEOs had suspected for years: **topical authority is an explicit ranking signal**. Domains that demonstrate deep, consistent coverage of a topic cluster get preferential treatment in results for that cluster. The academic foundation for this goes back to 2002, to a paper by Taher Haveliwala at Stanford: [Topic-Sensitive PageRank](http://www-cs-students.stanford.edu/~taherh/papers/topic-sensitive-pagerank.pdf). The core insight: a single authority score per domain is a blunt instrument. Topic-specific authority scores deliver substantially higher precision. Google has been refining that logic for over two decades. The practical implication: if you publish deep, original, consistent content about specific destinations, Google starts treating your domain as a reference in that cluster. That authority transfers — transactional pages within the same cluster become easier to rank. It's a compounding investment. Not linear. ## The psychology the algorithm merely formalizes But there's an older mechanism underneath all of this, with nothing to do with Google. Robert Zajonc published a paper in 1968 called ["Attitudinal Effects of Mere Exposure"](https://cdn.isr.umich.edu/pubFiles/historicPublications/Theattitudinaleffects_2360_.PDF) — now with over 6,000 citations — establishing something inconvenient for anyone who believes purchase decisions are rational: **repeated exposure to a stimulus increases positive attitude toward it, independently of conscious awareness**. No persuasion required. No click necessary. The effect is stronger when exposure is incidental. A 1989 meta-analysis by Bornstein across 200+ experiments showed that stimuli perceived below the conscious threshold produce larger effects than consciously perceived ones. For content marketing, this reframes the entire calculation. A reader consuming "best restaurants in Porto" published by your brand isn't thinking about buying anything. They're planning a trip. But the brand appeared in a positive, useful context. That association deposits into long-term memory. Weeks later, when the purchase decision arrives, the brand is already in the consideration set — not because of retargeting, but because of accumulated familiarity. Shapiro, MacInnis, and Heckler documented this in [a 1997 Journal of Consumer Research paper](https://academic.oup.com/jcr/article/24/1/94/1835396): incidental exposure to brand content increased the probability of the product entering the consumer's consideration set, even with no explicit memory of the exposure. The consumer doesn't remember reading the article. They just feel like they've heard of the brand before. ## What this means in practice The strategy has a technical name: **topical authority via contextual interlinking**. You build authority in the destination's semantic cluster — everything Google understands as related to a place: attractions, food, transport, best time to visit, local tips. Inside that content, the link to the product appears naturally, as a logical next step, not an interruption. The effect is dual: - **Algorithmic:** authority in the cluster increases rankings for transactional pages within it - **Psychological:** repeated exposure in an informational context builds brand preference before purchase intent exists Kevin Indig, former Director of SEO at Shopify, [documented](https://www.growth-memo.com/p/how-to-measure-topical-authority) that pages with high topical authority gain traffic 57% faster than low-authority equivalents. HubSpot, after restructuring 12,000+ posts into topic clusters, [documented consistent ranking improvements](https://cdn2.hubspot.net/hubfs/53/assets/hubspot.com/research/reports/Topic%20Clusters%20SEO%20Report.pdf) — and that was before BERT and MUM made Google even more sensitive to topical depth. ## What kills the strategy The failure mode is predictable: generic content anyone could have written. A list of attractions copy-pasted from Wikipedia builds no authority. It adds nothing to the knowledge graph. Google's Helpful Content Update was explicit about this: expertise in the topic matters. "Who is uniquely positioned to write this?" is the right question. The second thing that kills it: treating it as a campaign. Topical authority is built through sustained coverage. You don't publish 10 articles about a destination in January and move on. You own the topic long-term. And the third trap: writing for the product, not the reader. Destination content that works answers real questions from people planning a trip — not from people who've already decided to buy. Conversion is a consequence, not the direct objective of the content. --- Airbnb zeroed its marketing budget and kept 95% of its traffic because it had built something paid media can't buy: brand familiarity at scale, deposited over years of useful presence in the travel planning journey. [Ross Simmonds at Foundation](https://foundationinc.co/lab/airbnb-branding-success) put it well: the SEO moat Airbnb built is real — but what powers it is the brand, not the other way around. It wasn't technical SEO that did it. It was the decision to become a destination authority before becoming a booking platform. The ticket, the room, the service — those come after. First comes the destination. --- # Open Source Contributions - March 2026 **URL**: https://avelino.run/foss/2026/03/ **Published**: 2026-03-01 **Word Count**: 1211 words **Summary**: Open source activity in March 2026: PRs, reviews, issues, comments across multiple repositories. This month (March 2026) I contributed across open-source projects with pull requests, code reviews, issues and discussions, spanning multiple repositories and areas of impact. ## 2026-03-31 - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [add headless sync with ChronDB for block-level versioning](https://github.com/avelino/roam-tui/pull/32) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Register remote transport classes for GraalVM reflection](https://github.com/avelino/chrondb/pull/108) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Expose remote repository operations through FFI bindings](https://github.com/avelino/chrondb/pull/106) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [setup_remote fails in native-image: URIish constructor not found](https://github.com/avelino/chrondb/issues/107) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [FFI bindings cannot use remote repositories (push, pull, fetch, clone)](https://github.com/avelino/chrondb/issues/105) ## 2026-03-30 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Fix CLI transport broken subcommands and missing auto-discovery](https://github.com/avelino/mcp/pull/48) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add persistent tool cache for instant serve startup](https://github.com/avelino/mcp/pull/46) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Parallelize backend discovery and shutdown](https://github.com/avelino/mcp/pull/43) - ✅ Reviewed PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Bump rustls-webpki from 0.103.9 to 0.103.10](https://github.com/avelino/roam-tui/pull/31#pullrequestreview-4029504636) (Approved) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [CLI transport: hyphenated subcommands break on execution and tools/call fails without prior tools/list](https://github.com/avelino/mcp/issues/47) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [serve: slow backends block tools/list and cause SIGPIPE](https://github.com/avelino/mcp/issues/45) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Server hangs on Ctrl+C requiring second signal to exit](https://github.com/avelino/mcp/issues/42) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Backend tool discovery is sequential — slow startup with multiple servers](https://github.com/avelino/mcp/issues/41) ## 2026-03-29 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add --health flag, JSONC config support, and gh CLI discovery](https://github.com/avelino/mcp/pull/40) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add CLI-to-MCP bridge with auto-discovery from --help](https://github.com/avelino/mcp/pull/39) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Avelino/product is not a role its a moment](https://github.com/avelino/avelino.run/pull/109) - ✅ Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Validate URL on `mcp add --url` before saving to config](https://github.com/avelino/mcp/pull/29#pullrequestreview-4027202901) (Approved) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Support CLI tools as MCP servers (auto-discovery via --help)](https://github.com/avelino/mcp/issues/38) ## 2026-03-25 - ✅ Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Bump rustls-webpki from 0.103.9 to 0.103.10](https://github.com/avelino/mcp/pull/37#pullrequestreview-4008559922) (Approved) ## 2026-03-23 - 🔀 Opened PR in [avelino/calblend](https://github.com/avelino/calblend): [Add desktop app with Tauri for macOS, Linux and Windows](https://github.com/avelino/calblend/pull/2) ## 2026-03-20 - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Bump tar from 0.4.44 to 0.4.45](https://github.com/avelino/jbundle/pull/67#pullrequestreview-3984573580) (Approved) - ✅ Reviewed PR in [avelino/mcp](https://github.com/avelino/mcp): [Bump tar from 0.4.44 to 0.4.45](https://github.com/avelino/mcp/pull/36#pullrequestreview-3984575741) (Approved) ## 2026-03-19 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add single-path API, embedded SQL, and standalone CLI](https://github.com/avelino/chrondb/pull/104) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [No CLI tool for quick database interactions](https://github.com/avelino/chrondb/issues/103) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [SQL query engine is only accessible through a running server](https://github.com/avelino/chrondb/issues/102) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Opening a database requires too much internal knowledge](https://github.com/avelino/chrondb/issues/101) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [ChronDB is too hard to use as an embedded database](https://github.com/avelino/chrondb/issues/100) ## 2026-03-18 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add idle timeout to Rust SDK for GraalVM isolate lifecycle](https://github.com/avelino/chrondb/pull/98) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Generate multi-language bindings from Rust SDK via UniFFI and NAPI-RS](https://github.com/avelino/chrondb/issues/99) ## 2026-03-17 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add lazy initialization and adaptive idle shutdown for backends](https://github.com/avelino/mcp/pull/35) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Fix HTTP+SSE transport for Claude Code compatibility](https://github.com/avelino/mcp/pull/33) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Lazy initialization and adaptive auto-shutdown for backend MCP servers](https://github.com/avelino/mcp/issues/34) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Fix HTTP+SSE transport compatibility with Claude Code client](https://github.com/avelino/mcp/issues/32) ## 2026-03-16 - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add audit logging for all CLI and proxy operations](https://github.com/avelino/mcp/pull/31) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add server-side authentication and ACL for proxy mode](https://github.com/avelino/mcp/pull/28) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add proxy mode to expose all servers as a single MCP endpoint](https://github.com/avelino/mcp/pull/26) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [fix: capture child process stderr and handle malformed config gracefully](https://github.com/avelino/mcp/pull/24) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add CI/CD pipelines and Homebrew distribution](https://github.com/avelino/mcp/pull/23) - 🔀 Opened PR in [avelino/mcp](https://github.com/avelino/mcp): [Add human-friendly default output with auto-detection](https://github.com/avelino/mcp/pull/22) - 🔀 Opened PR in [limonkufu/gradient-gcal-event-merge](https://github.com/limonkufu/gradient-gcal-event-merge): [Merge busy events from other calendars](https://github.com/limonkufu/gradient-gcal-event-merge/pull/2) - 🔀 Opened PR in [avelino/firefox-airtraffic](https://github.com/avelino/firefox-airtraffic): [Add negate flag to routing rules](https://github.com/avelino/firefox-airtraffic/pull/3) - ✅ Reviewed PR in [avelino/firefox-airtraffic](https://github.com/avelino/firefox-airtraffic): [Bump yauzl and web-ext](https://github.com/avelino/firefox-airtraffic/pull/1#pullrequestreview-3953987890) (Approved) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Add audit log for MCP proxy calls using ChronDB](https://github.com/avelino/mcp/issues/30) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [HTTP server mode for mcp serve with authentication](https://github.com/avelino/mcp/issues/27) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Proxy mode: expose all configured servers as a single MCP endpoint](https://github.com/avelino/mcp/issues/25) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Human-friendly default output — stop dumping raw JSON](https://github.com/avelino/mcp/issues/21) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Pre-built binaries for releases](https://github.com/avelino/mcp/issues/20) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [GitHub Actions action for CI/CD usage](https://github.com/avelino/mcp/issues/19) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Nix flake](https://github.com/avelino/mcp/issues/18) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Homebrew formula](https://github.com/avelino/mcp/issues/17) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [OAuth callback uses fixed port range — conflicts with other processes](https://github.com/avelino/mcp/issues/16) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Config manager panics on malformed JSON structure](https://github.com/avelino/mcp/issues/15) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [`mcp add --url` does not validate the URL](https://github.com/avelino/mcp/issues/14) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [MCP_TIMEOUT does not apply to HTTP transport](https://github.com/avelino/mcp/issues/13) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Child process stderr is silenced — server errors are invisible](https://github.com/avelino/mcp/issues/12) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Add `mcp --health` for connection check](https://github.com/avelino/mcp/issues/11) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Retry with backoff on HTTP 429 and 503](https://github.com/avelino/mcp/issues/10) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Add `mcp config path` to print config file location](https://github.com/avelino/mcp/issues/9) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Add `mcp config edit` to open config in $EDITOR](https://github.com/avelino/mcp/issues/8) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [WebSocket transport support](https://github.com/avelino/mcp/issues/7) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Human-readable table output for --list](https://github.com/avelino/mcp/issues/6) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Shell completions for bash, zsh, and fish](https://github.com/avelino/mcp/issues/5) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Filter tools by name in --list](https://github.com/avelino/mcp/issues/4) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Add `mcp update` command to refresh server config from registry](https://github.com/avelino/mcp/issues/3) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Support single-line JSON output for scripting](https://github.com/avelino/mcp/issues/2) - 🐛 Opened issue in [avelino/mcp](https://github.com/avelino/mcp): [Support --dry-run flag for tool calls](https://github.com/avelino/mcp/issues/1) - 🐛 Opened issue in [limonkufu/gradient-gcal-event-merge](https://github.com/limonkufu/gradient-gcal-event-merge): [busy event merge](https://github.com/limonkufu/gradient-gcal-event-merge/issues/1) ## 2026-03-15 - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Restructure UI and command layers for single responsibility](https://github.com/avelino/roam-tui/pull/30) - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add CLI subcommands exposing all Roam SDK operations](https://github.com/avelino/roam-tui/pull/29) - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add 7 new MCP tools and improve existing tool descriptions](https://github.com/avelino/roam-tui/pull/27) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [CLI subcommands: expose MCP tools as first-class CLI interface](https://github.com/avelino/roam-tui/issues/28) ## 2026-03-14 - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Bump quinn-proto from 0.11.13 to 0.11.14](https://github.com/avelino/jbundle/pull/66#pullrequestreview-3949213690) (Approved) - ✅ Reviewed PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Bump quinn-proto from 0.11.13 to 0.11.14](https://github.com/avelino/roam-tui/pull/26#pullrequestreview-3949233729) (Approved) ## 2026-03-13 - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add cross-compilation, dry-run, install script and improve error output](https://github.com/avelino/jbundle/pull/65) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Reduce binary size with single-pass compression](https://github.com/avelino/jbundle/pull/64) ## 2026-03-12 - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add `--java-home` flag to reuse existing JDK and basic Windows support](https://github.com/avelino/jbundle/pull/63) - 🔍 Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Feature: display banner only on the first run](https://github.com/avelino/jbundle/pull/62#pullrequestreview-3938149572) (Changes requested) - 🔍 Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Feature: tri-state banner size option](https://github.com/avelino/jbundle/pull/61#pullrequestreview-3938140152) (Changes requested) ## 2026-03-08 - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add MCP server with npm distribution](https://github.com/avelino/roam-tui/pull/25) - 🐛 Opened issue in [leggett/simplify](https://github.com/leggett/simplify): [hide task button](https://github.com/leggett/simplify/issues/895) ## 2026-03-03 - 🐛 Opened issue in [openclaw/openclaw](https://github.com/openclaw/openclaw): [openclaw status shows stale app version from wizard.lastRunVersion instead of running gateway version](https://github.com/openclaw/openclaw/issues/32913) ## 2026-03-01 - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add lazy page creation from [[links]] and Quick Switcher](https://github.com/avelino/roam-tui/pull/24) - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add lazy page creation from [[links]] and Quick Switcher](https://github.com/avelino/roam-tui/pull/23) - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add Quick Switcher popup for fuzzy page navigation ](https://github.com/avelino/roam-tui/pull/22) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-plugin-skill](https://github.com/avelino/roamresearch-plugin-skill): 2 commit(s) - [See commits](https://github.com/avelino/roamresearch-plugin-skill/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/jbundle](https://github.com/avelino/jbundle): 18 commit(s) - [See commits](https://github.com/avelino/jbundle/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/calblend](https://github.com/avelino/calblend): 17 commit(s) - [See commits](https://github.com/avelino/calblend/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/mcp](https://github.com/avelino/mcp): 57 commit(s) - [See commits](https://github.com/avelino/mcp/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/roam-tui](https://github.com/avelino/roam-tui): 20 commit(s) - [See commits](https://github.com/avelino/roam-tui/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 3 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/tabbar-shortcut-chrome](https://github.com/avelino/tabbar-shortcut-chrome): 3 commit(s) - [See commits](https://github.com/avelino/tabbar-shortcut-chrome/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/chrondb](https://github.com/avelino/chrondb): 17 commit(s) - [See commits](https://github.com/avelino/chrondb/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) - 🔨 Push to [avelino/firefox-airtraffic](https://github.com/avelino/firefox-airtraffic): 12 commit(s) - [See commits](https://github.com/avelino/firefox-airtraffic/commits?author=avelino&since=2026-03-01T00:00:00Z&until=2026-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # A CTO's daily life is chaotic by design — what changes is how fast you react **URL**: https://avelino.run/cto-daily-life-chaotic-by-design/ **Published**: 2026-02-18 **Tags**: cto, ai, productivity, leadership, agents **Word Count**: 927 words **Summary**: The CTO role will never be organized. Information exists but is scattered across 15 tools. Since December 2025 I've been using AI agents as a layer between me and the chaos — and what changed wasn't the organization, it was the speed. A CTO's daily life has no pattern. On a typical Monday I write a board document, run 1:1s with direct reports, discuss strategy with other C-levels, analyze production crashes, help a data scientist think through an algorithm, and still try to keep processes running. All in the same day. Sometimes in the same hour. If you expect this post to teach you how to organize all of that, close the tab. It won't happen. Chaos is a feature, not a bug. ## The problem was never lack of information The information exists. It's in Slack, Sentry, GitHub, the calendar, Honeycomb metrics, Todoist tickets. The problem is it's scattered across 15 different tools and nobody synthesizes it for you. The time between "something happened" and "I know it happened" is what separates a CTO who reacts from a CTO who fights fires. And most of the time, that gap is too wide — not because you're incompetent, but because it's humanly impossible to track everything in real time. I tried everything. Dashboards, check-in routines, Slack alert channels. It partially worked, but the filter was still me. And my filter has limits. ## Since December 2025 I've had a copilot At the end of 2025, I started using AI agents integrated into my workflow. I'm not talking about ChatGPT open in a browser tab. I'm talking about a system that connects to the tools I already use and works as an intelligence layer between me and the chaos. In practice, I configured agents that: - **Monitor production incidents** every minute. When something is truly P1 — site down, critical flow broken — I get a notification with context: what's happening, how many users are affected, which squad owns it, and a concrete suggestion for the first step. It's not a generic "500 errors increasing" alert. It's "the purchase flow is 100% broken, 431 events in the last hour, squad X owns this, suggest escalating to infra". - **Compile a morning briefing** before my first meeting. Sentry errors compared to the previous day, SLOs burning budget, relevant Slack threads, PRs waiting for review, pending tasks. All translated from technical language to business impact. It's not "LockError in Redis with 7,605 events". It's "processing queue stalling, potentially impacting customer transactions". - **Sync my personal calendars** with the corporate one automatically, creating busy blocks. Seems trivial, but it was something I did manually and frequently forgot. - **Filter GitHub and Slack notifications** by relevance. Out of 50 threads per day, I see 5. The ones that need my decision or direct input. The rest is information I absorb in the morning briefing. ## What this is not It's not magic. It doesn't replace strategic thinking. It doesn't make decisions for me. The agent doesn't know that architecture decision X will impact the Q3 roadmap. Doesn't know that employee Y is demotivated and needs a conversation. Doesn't know that the board wants to see metric Z in the next presentation. What it does is eliminate the collection work. Those two hours a day I spent navigating between Slack, Sentry, GitHub, and the calendar to build a mental map of what's happening — gone. Information arrives synthesized, prioritized, and with context. And that frees up something priceless: **time to think**. A CTO who only reacts doesn't lead. But to stop reacting, you first need to know what's happening without spending half your day finding out. ## Three months later I've been using this setup every day since December. What actually changed: **Reaction time dropped dramatically.** P1 incidents I used to discover 15-20 minutes later (when someone mentioned me on Slack) now arrive in under 2 minutes with full context. **Decision quality improved.** Not because I got smarter. Because context arrives faster and more complete. Deciding with information is different from deciding with intuition. **Fewer "alignment" meetings.** Half the meetings I used to have were to collect information that now arrives automatically. I canceled several and nobody missed them. **More time for work that matters.** Strategic documents, quality 1:1s, thinking about hiring, reviewing architecture. The CTO work that actually moves the needle. ## The chaos won't go away — but your response can be better If you're a CTO or tech leader, you know: chaos is inevitable. Software breaks, people leave, priorities shift, the market surprises. No tool will turn your day into a neatly organized calendar of color-coded blocks. In 1986, Andrew Grove wrote in [*High Output Management*](https://www.amazon.com/High-Output-Management-Andrew-Grove/dp/0679762884) that a manager's work is measured by the output of the teams under their influence — not by the number of meetings they attend or emails they answer. Grove argued that managerial leverage comes from activities that multiply the results of many people at once. The problem is that, in practice, most CTOs spend their day collecting information instead of acting on it. AI is not a threat to the CTO role. It's leverage in the sense Grove described. Every minute you don't spend navigating between tools to understand what's happening is a minute you can invest in decisions that move the company. Context arrives faster, more complete, and you act before — not after. We don't need to run from AI. We need to stop treating it as a tech curiosity and start using it for what it really is: **an extension of our ability to process chaos**. The right question isn't "how do I organize everything?". It's **"how fast do I get to the problem?"**. And if today's answer is "depends on when someone pings me on Slack" — maybe it's time to rethink who (or what) is doing that filtering for you. --- # Open Source como Bem Público: Alemanha e França já entenderam, e o Brasil? **URL**: https://avelino.run/open-source-bem-publico-brasil/ **Published**: 2026-02-04 **Tags**: open-source, politica-publica, brasil, comunidade **Word Count**: 583 words **Summary**: O Brasil roda 90% da sua infraestrutura digital em cima de open source e finge que isso nasceu em árvore. A Alemanha quer reconhecer como bem público, a França já dá incentivo fiscal. E nós? A Alemanha quer reconhecer open source como bem público. A França já dá incentivo fiscal. E o Brasil? O Brasil roda 90% da sua infraestrutura digital em cima de open source e finge que isso nasceu em árvore. Não precisa copiar a Alemanha. Mas precisa que a gente, que vive isso, assuma a responsabilidade de traduzir open source pra linguagem de negócio, de política pública, de impacto real. ## O que está acontecendo lá fora Na Alemanha, contribuidores lançaram uma [petição para reconhecer oficialmente contribuições open source como voluntariado para o bem público](https://www.openpetition.de/petition/online/anerkennung-der-arbeit-an-open-source-als-ehrenamt-in-deutschland). Isso habilitaria: - Reconhecimento fiscal, como isenções de impostos para voluntários - Proteção legal mais forte para contribuidores - Facilitação de status de organização sem fins lucrativos para projetos open source - Reembolso legal de despesas e emissão de recibos de doação Na França, já existe um sistema que permite que indivíduos reduzam seus impostos ao doar para associações reconhecidas como de interesse público. A pergunta que fica: se software é um bem público, contribuir para ele não deveria ser tratado como serviço público? ## E no Brasil? Se o mercado não valoriza, se o governo não reconhece, se a empresa não investe — é porque a gente não soube vender. A gente tratou open source como algo que "quem é da área entende" e esqueceu que valor que não é comunicado simplesmente não existe. Mesmo sendo CTO _("poderia" estar longe do código)_ contribuo com muitos projetos open source há anos. O que eu vejo na prática: empresas consomem open source como commodity, devs brasileiros talentosíssimos contribuem no tempo livre (leia-se: madrugada), e não existe nenhum reconhecimento institucional — nem fiscal, nem legal, nem cultural. ## A culpa é nossa também Vou ser honesto: nós, engenheiros de software, falhamos em comunicar o valor do open source de forma que o resto do mundo entenda. A gente fala de _"contribuição", "comunidade", "pull request"_ — e o CEO, o investidor, o legislador não fazem a menor ideia do que isso significa na prática. Não sabem que aquela lib que sustenta o core do produto da empresa deles é mantida por um dev em Florianopolis às 2h da manhã. ## O que precisa mudar Não é sobre esperar o governo agir. É sobre nós, que vivemos open source, assumirmos a responsabilidade de traduzir esse valor para quem toma decisões. - **Para o CEO**: aquela lib que você usa de graça economiza meses de desenvolvimento e milhões em licenciamento - **Para o investidor**: open source é vantagem competitiva — empresas que contribuem atraem os melhores engenheiros - **Para "seu time"**: estragegia de atração e retenção de profissionais — cada pessoa se motiva por alguma coisa, open source pode e _é_ uma das coisas que sempre usei como estrategia de técnologia da empresas que passei - **Para o legislador**: 90% da infraestrutura digital brasileira depende de software mantido por voluntários sem nenhum suporte institucional Enquanto a Alemanha discute reconhecimento formal e a França já oferece incentivo fiscal, o Brasil segue consumindo open source como se fosse ar — **essencial, mas invisível**. A mudança começa quando a gente para de tratar open source como assunto técnico e começa a tratar como o que realmente é: infraestrutura crítica. ## Por que escrevi isso O [Samuel Berthe](https://www.linkedin.com/feed/update/urn:li:activity:7424710335871471616/) publicou no LinkedIn sobre a petição alemã e o incentivo fiscal francês, e me marcou perguntando como era no Brasil. Ao invés de responder só num comentário, [compartilhei minha opinião num post](https://www.linkedin.com/feed/update/urn:li:activity:7424743405362159617/). Mas o LinkedIn tem alcance limitado e conteúdo efêmero — resolvi transformar em blogpost para que a opinião fique acessível de verdade. --- # Open Source Contributions - February 2026 **URL**: https://avelino.run/foss/2026/02/ **Published**: 2026-02-01 **Word Count**: 553 words **Summary**: February 2026 highlights include 8 repositories, 14 pull requests, and 18 issues, showcasing significant contributions and enhancements to various projects. Explore the contributions made in February 2026, featuring 8 active repositories with notable progress. This timeline outlines key events, including new pull requests, issue openings, and code pushes, reflecting the ongoing development and collaboration within the community. ## 2026-02-28 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [new layout](https://github.com/avelino/awesome-go/pull/6065) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fix(ci): add safe.directory config to fix git fetch in container](https://github.com/avelino/awesome-go/pull/6064) - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add Quick Switcher popup for fuzzy page navigation](https://github.com/avelino/roam-tui/pull/21) ## 2026-02-27 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Claude/automate pr review 8eg fz](https://github.com/avelino/awesome-go/pull/6057) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Migrate PR quality checks from Node.js to Go](https://github.com/avelino/awesome-go/pull/6055) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [redesign: clean modern theme with automatic light/dark mode](https://github.com/editor-bootstrap/vim-bootstrap/pull/446) ## 2026-02-26 - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Add slash commands menu for insert mode](https://github.com/avelino/roam-tui/pull/20) - 🔀 Opened PR in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Split app.rs into modules and restructure as lib+bin SDK](https://github.com/avelino/roam-tui/pull/19) ## 2026-02-25 - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Pomodoro timer inline rendering](https://github.com/avelino/roam-tui/issues/18) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Render block embeds with full content](https://github.com/avelino/roam-tui/issues/17) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Render inline queries ({{query}} blocks)](https://github.com/avelino/roam-tui/issues/16) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Export daily notes and pages to JSON/Markdown](https://github.com/avelino/roam-tui/issues/15) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Light theme support](https://github.com/avelino/roam-tui/issues/14) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Navigation history: back/forward page stack](https://github.com/avelino/roam-tui/issues/13) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Multi-block selection for batch operations](https://github.com/avelino/roam-tui/issues/12) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Render attribute syntax (key:: value)](https://github.com/avelino/roam-tui/issues/11) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Create new pages from [[links]] or Quick Switcher](https://github.com/avelino/roam-tui/issues/10) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Slash commands menu in insert mode](https://github.com/avelino/roam-tui/issues/9) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Unlinked References: discover implicit connections](https://github.com/avelino/roam-tui/issues/8) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [All Pages view: list and navigate all graph pages](https://github.com/avelino/roam-tui/issues/7) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Move blocks up/down (reorder siblings)](https://github.com/avelino/roam-tui/issues/6) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Block zoom / focus mode with breadcrumb](https://github.com/avelino/roam-tui/issues/5) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Sidebar: split-pane view for reference pages](https://github.com/avelino/roam-tui/issues/4) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Linked References (backlinks) panel](https://github.com/avelino/roam-tui/issues/3) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Quick Switcher: fuzzy page finder popup](https://github.com/avelino/roam-tui/issues/2) - 🐛 Opened issue in [avelino/roam-tui](https://github.com/avelino/roam-tui): [Page navigation: follow [[links]] to open pages](https://github.com/avelino/roam-tui/issues/1) ## 2026-02-24 - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add `--build-args` flag for passing extra arguments to build tools](https://github.com/avelino/jbundle/pull/60) - 🔀 Opened PR in [businho/sentry-deduplicate-integration](https://github.com/businho/sentry-deduplicate-integration): [add sentry-sdk v2 support while keeping v1 compatibility](https://github.com/businho/sentry-deduplicate-integration/pull/2) - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Update quick-start.md with shadowJar details](https://github.com/avelino/jbundle/pull/58#pullrequestreview-3846116643) (Approved) ## 2026-02-18 - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [Add openclaw as a supported AI tool](https://github.com/avelino/spuff/pull/15) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [post: A CTO's daily life is chaotic by design](https://github.com/avelino/avelino.run/pull/104) - ✅ Reviewed PR in [avelino/spuff](https://github.com/avelino/spuff): [build(deps): bump the cargo group across 1 directory with 2 updates](https://github.com/avelino/spuff/pull/14#pullrequestreview-3820988408) (Approved) ## 2026-02-06 - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add analyze subcommand for JAR inspection](https://github.com/avelino/jbundle/pull/56) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Show full jlink and jdeps command output on failure](https://github.com/avelino/jbundle/pull/55) - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Bump time from 0.3.45 to 0.3.47](https://github.com/avelino/jbundle/pull/54#pullrequestreview-3761909622) (Approved) - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Bump bytes from 1.11.0 to 1.11.1](https://github.com/avelino/jbundle/pull/51#pullrequestreview-3761906954) (Approved) ## 2026-02-02 - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Feature: implemented compact banner option for the wrapper](https://github.com/avelino/jbundle/pull/48#pullrequestreview-3742045796) (Approved) ## Commits - 🔨 Push to [avelino/roam-tui](https://github.com/avelino/roam-tui): 13 commit(s) - [See commits](https://github.com/avelino/roam-tui/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 7 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) - 🔨 Push to [avelino/jbundle](https://github.com/avelino/jbundle): 6 commit(s) - [See commits](https://github.com/avelino/jbundle/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) - 🔨 Push to [businho/sentry-deduplicate-integration](https://github.com/businho/sentry-deduplicate-integration): 5 commit(s) - [See commits](https://github.com/businho/sentry-deduplicate-integration/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) - 🔨 Push to [avelino/spuff](https://github.com/avelino/spuff): 3 commit(s) - [See commits](https://github.com/avelino/spuff/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) - 🔨 Push to [avelino/roamresearch-todoist-backup](https://github.com/avelino/roamresearch-todoist-backup): 1 commit(s) - [See commits](https://github.com/avelino/roamresearch-todoist-backup/commits?author=avelino&since=2026-02-01T00:00:00Z&until=2026-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # FFI with GraalVM Native Image: The Real Work of Maintaining a Library That Crosses Language Boundaries **URL**: https://avelino.run/ffi-graalvm-native-image-real-work/ **Published**: 2026-01-29 **Tags**: ffi, graalvm, native-image, rust, clojure, database, open-source, chrondb **Word Count**: 2157 words **Summary**: It's not about compiling to native and calling it done. It's about stack overflows in unexpected places, locks that survive crashes, and data that vanishes between processes. Battle documentation from maintaining ChronDB. Exposing a library via FFI seems simple on paper. You compile your code to `.so`, export some functions with `extern "C"`, write bindings in the target language. Done, interoperability achieved. Except that's not how it works in practice. At least not when your lib is a database written in Clojure, compiled with GraalVM native-image, that needs to manage Git and Lucene internally, and will be called from Rust in environments ranging from dev laptops to CI containers with 8MB of stack. Over the past few months, I've worked on this exact scenario with [ChronDB](https://github.com/moclojer/chrondb). Every bug fixed became a lesson about how different languages coexist in the same process — and about everything that can go wrong in that coexistence. ## The Scenario: Why FFI with GraalVM? ChronDB is a temporal database. It uses Git as storage (each write is a commit) and Apache Lucene for full-text indexing. The core is Clojure running on the JVM. The problem: not everyone wants (or can) run a JVM. Rust developers want a crate. Python developers want a pip package. Embedding an entire JVM in each application isn't viable. The solution: GraalVM native-image compiles Java/Clojure bytecode to native binary. You generate a `libchrondb.so` that can be loaded via `dlopen` from any language. No ~~JVM~~, no classpath, no **JAR hell**. ``` ┌─────────────────────────────────────┐ │ Your application (Rust/Python/Go) │ ├─────────────────────────────────────┤ │ dlopen + FFI │ ├─────────────────────────────────────┤ │ libchrondb.so (GraalVM native) │ │ ├── SubstrateVM runtime │ │ ├── Clojure core │ │ ├── JGit (Git operations) │ │ └── Lucene (indexing) │ └─────────────────────────────────────┘ ``` It works. Until it doesn't. ## Problem 1: StackOverflowError on `put()` First real issue that appeared. User opens the database, does `get()`, all good. Calls `put()`, crash: ``` Fatal error: StackOverflowError: Enabling the yellow zone of the stack did not make any stack space available. ``` ### Why it happens When you compile Java to native-image, GraalVM embeds a minimalist runtime called SubstrateVM. Each "instance" of this runtime is an **Isolate** — an execution context with its own heap and state. When external code calls an FFI function (`@CEntryPoint`), SubstrateVM needs to: 1. Register the calling thread in the runtime (so GC knows about it) 2. Configure stack guards (yellow zone, red zone) 3. Allocate space to capture stack trace if an exception occurs That third point is the problem. SubstrateVM allocates space for a **complete** stack trace at the entry point. With **Clojure + JGit + Lucene**, a `put()` has hundreds of frames: ``` ChronDB_put (entry point) └→ clojure.lang.RT.var() └→ chrondb.lib/lib-put ├→ JGit ObjectInserter.insert() │ ├→ PackInserter → SHA1.digest() │ └→ RefUpdate → FileChannel.lock() └→ Lucene IndexWriter.addDocument() └→ DocumentsWriter → DefaultIndexingChain └→ TermsHashPerField → ByteBlockPool ``` GraalVM needs ~64MB of stack for this. Default Linux stack? 8MB. macOS varies, but usually less than needed. ### The solution that doesn't work Documentation suggests `RUST_MIN_STACK=64MB`. Doesn't work because: - Only affects threads created **after** the env var is set - Main thread already exists - Runtime threads **(Tokio, Rayon)** use their own defaults ### The real solution Ensure that **all** FFI calls happen on a thread with sufficient stack. I implemented a dedicated worker thread: ```rust impl ChronDB { pub fn open(data_path: &str, index_path: &str) -> Result { let (command_tx, command_rx) = mpsc::channel(); // Worker with 64MB stack let handle = thread::Builder::new() .stack_size(64 * 1024 * 1024) .spawn(move || { let lib = load_native_lib(); let db_handle = unsafe { lib.open(data_path, index_path) }; // All FFI calls here while let Ok(cmd) = command_rx.recv() { match cmd { Command::Put { key, value, tx } => { let result = unsafe { lib.put(db_handle, &key, &value) }; tx.send(result); } Command::Shutdown => break, } } })?; Ok(Self { command_tx, handle }) } } ``` User calls `db.put()`, internally it becomes a message to the worker, worker executes FFI with 64MB stack, returns result via channel. Transparent to the user. Works in any environment. ## Problem 2: Database Won't Open After Crash Second issue. User kills the process with Ctrl+C in the middle of an operation. Tries to reopen: ``` Database(OpenFailed("")) ``` Empty error. Very helpful for debugging. ### Why it happens JGit and Lucene use file locking to prevent concurrent access: - Git: `HEAD.lock`, `index.lock`, `refs/heads/main.lock` - Lucene: `write.lock` These are **advisory locks** from the operating system. The kernel releases them automatically when the process terminates... normally. But the **`.lock` file stays on disk**. And JGit checks for file existence, not the lock itself: ```java // JGit LockFile.java public boolean lock() throws IOException { if (lockFile.exists()) { return false; // Assumes another process has the lock } // ... } ``` > Kill -9, OOM killer, power loss — any abnormal termination leaves the file orphaned. ### The solution Before opening, verify if locks are actually active. The technique: try to acquire the OS advisory lock. If you succeed, the file is orphaned. ```clojure (defn orphaned-lock? [lock-file] (try (with-open [channel (FileChannel/open (.toPath lock-file) (into-array [StandardOpenOption/WRITE]))] (if-let [lock (.tryLock channel)] (do (.release lock) true) ; Got it = orphaned false)) ; Didn't get it = in use (catch OverlappingFileLockException _ false))) (defn cleanup-orphaned-locks [directory] (doseq [f (find-lock-files directory)] (when (orphaned-lock? f) (.delete f)))) ``` The kernel maintains a lock table by inode. Process died? Kernel already cleaned up its locks. If `tryLock()` succeeds, no living process has the lock. And about the empty error? Fixed too: ```clojure ;; Before: returned nil silently (defn lib-open [data-path index-path] (when-let [storage (create-storage data-path)] (when-let [index (create-index index-path)] (register-handle storage index)))) ;; After: propagates error with context (defn lib-open [data-path index-path] (try (let [storage (create-storage data-path) index (create-index index-path)] (register-handle storage index)) (catch Exception e (log/error e "lib-open failed" {:data-path data-path}) -1))) ``` ## Problem 3: Data Disappears Between Processes Third issue, the most frustrating. Flow: ```bash myapp save-state # Saves data to ChronDB myapp load-state # Data doesn't exist ``` Log from both commands: ``` Resetting corrupted state database... ``` Every invocation detected "corruption" and reset. ### Why it happens The initialization code always called `Git.init()`: ```clojure (defn create-storage [path] (-> (Git/init) (.setDirectory (io/file path)) (.call) (.getRepository))) ``` `Git.init()` internally calls `repository.create()`, which rewrites `HEAD` to point to an empty branch. Even if the repository exists with data. **Each process:** init → empty HEAD → "where's my data?". ### The solution Check before creating: ```clojure (defn repository-exists? [path] (let [git-dir (io/file path ".git")] (and (.exists git-dir) (.isDirectory git-dir) (.exists (io/file git-dir "HEAD")) (.isDirectory (io/file git-dir "objects"))))) (defn lib-open [data-path index-path] (let [storage (if (repository-exists? data-path) (open-existing-repository data-path) (create-new-repository data-path)) ...] ...)) ``` Seems obvious in retrospect. But when you're focused on making it work, it's easy to treat "open" and "create" as the same operation. ## Problem 4: Multiple Instances Corrupt Data Fourth issue. User's code: ```rust fn process_a() { let db = ChronDB::open("/data", "/index")?; db.put("key", value)?; } fn process_b() { let db = ChronDB::open("/data", "/index")?; // Same path! let v = db.get("key")?; // Sometimes works, sometimes doesn't } ``` ### Why it happens Each `open()` created a new worker thread, a new GraalVM Isolate, a new JGit Repository instance and Lucene IndexWriter. OS advisory locks work **between processes**, not between threads in the same process accessing via different handles. Two Isolates in the same process can open the same files — and start overwriting each other's data. ### The solution Singleton per path. One instance per (data_path, index_path) combination: ```rust lazy_static! { static ref REGISTRY: Mutex>> = Mutex::new(HashMap::new()); } impl ChronDB { pub fn open(data_path: &str, index_path: &str) -> Result { let key = PathPair::new(data_path, index_path); let mut registry = REGISTRY.lock().unwrap(); // Reuse if exists if let Some(weak) = registry.get(&key) { if let Some(worker) = weak.upgrade() { return Ok(Self { worker }); } } // Create new let worker = Arc::new(SharedWorker::new(data_path, index_path)?); registry.insert(key, Arc::downgrade(&worker)); Ok(Self { worker }) } } ``` `Weak` in the registry allows the worker to be dropped when nobody uses it anymore. Next `open()` on the same path creates a new worker. ## What I Learned ### GraalVM native-image isn't "compile to native" The first illusion that broke: native-image doesn't eliminate the runtime, it just embeds it. SubstrateVM is there — with GC, thread management, stack guards, safepoints. Everything the JVM does, SubstrateVM does too, just ahead-of-time instead of JIT. This means you're not distributing "pure native code". You're distributing a minimalist VM with your code pre-compiled inside. And that VM has requirements: needs heap, needs stack, needs to register threads, needs space for stack traces. When I read that SubstrateVM allocates space for a complete stack trace at every `@CEntryPoint` entry point, I understood why 8MB wasn't enough. It's not that our code is inefficient — it's that the runtime needs to be prepared to capture hundreds of frames if something goes wrong. With Clojure (which adds var resolution frames), JGit (Git operations are deep), and Lucene (indexing has many layers), the potential stack trace is enormous. The lesson: **understand the runtime you're distributing**. Reading the [SubstrateVM documentation](https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/native-image/SubstrateVM/) about Isolates, stack guards, and thread attachment changed how I think about the problem. ### Bindings aren't the API — they're a protection layer The initial temptation was to make "thin" bindings: translate the exported C functions 1:1 to Rust idioms. `ChronDB_open` becomes `ffi::open()`, `ChronDB_put` becomes `ffi::put()`. Simple. This approach transfers **all runtime requirements** to the user. Need 64MB of stack? User's problem to configure. Orphaned lock? User's problem to clean up. Multiple instances? User's problem to coordinate. What worked was inverting the mindset: **bindings are a protection layer between the native runtime and user code**. ``` ┌─────────────────────────────────────────────┐ │ User code │ │ db.put("key", value) // Simple API │ ├─────────────────────────────────────────────┤ │ Protection layer │ │ - Worker thread with adequate stack │ │ - Singleton per path │ │ - Orphaned lock cleanup │ │ - Create vs open verification │ │ - Errors with context │ ├─────────────────────────────────────────────┤ │ FFI calls (controlled environment) │ ├─────────────────────────────────────────────┤ │ libchrondb.so │ └─────────────────────────────────────────────┘ ``` The user never calls FFI directly. Every call goes through the layer that ensures the conditions necessary for the runtime to work. Worker thread solves stack. Singleton solves concurrency. Cleanup solves previous crashes. ### Documentation is not a solution **"Configure `RUST_MIN_STACK=64MB` before using"** seems reasonable. It's not. First, because **it doesn't work** — that env var only affects threads created afterward, not the main thread. Second, because even if it worked, **nobody reads runtime requirements documentation**. People install the crate, call `open()`, and expect it to work. Third — and most importantly — because **if you need to document an environment requirement, you haven't finished the work**. The lib should create that environment internally. This was the most important mindset shift: every documented requirement is a design failure. If the runtime needs 64MB of stack, the lib creates a thread with 64MB. If the runtime leaves orphaned locks, the lib cleans up before opening. If multiple instances corrupt data, the lib ensures singleton. The work doesn't end when the function executes. It ends when the user doesn't need to know anything about the runtime to use the lib. ### FFI is translation between worlds with different physics Rust has ownership, lifetimes, RAII. Clojure has GC, immutability, vars. GraalVM has Isolates, safepoints, compressed references. Each world has its rules about what happens when: - An object goes out of scope - A thread terminates - A process crashes - Memory runs out FFI isn't "calling a function from another language". It's **translating between worlds with different physical rules**. The `long handle` that Clojure returns is an index in an internal table — if the GC moves the object, the handle remains valid. But if the Isolate is destroyed, all handles become invalid instantly. Understanding this changes how you design the boundary. You don't think "which function to expose?". You think "which invariants of my world do I need to protect? which invariants of the other world do I need to respect?". In our case: - **Protect from Clojure side**: handles are only valid while the Isolate exists; GC can pause at safepoints; IO operations can block - **Respect from Rust side**: ownership needs to be clear; errors need to be Result, not exceptions; resources need to be released in Drop ### The real cost of FFI with GraalVM After solving the problems, I calculated what the protection layer adds: - **Latency**: ~50-100μs per operation (channel send/recv + context switch to worker) - **Memory**: ~64MB for worker stack + channel overhead - **Complexity**: ~500 lines of infrastructure code in bindings For a database where operations are IO-bound (Git write, Lucene index), 100μs is noise. 64MB is acceptable for any modern machine. 500 lines is the cost of not having to explain to every user how to configure stack size. **The tradeoff was worth it!** But it's important to know it exists. "Transparent" FFI doesn't exist — either you pay the cost in the lib, or the user pays in bugs and configuration. ## Links - [ChronDB](https://github.com/moclojer/chrondb) - [PR #89 - Worker thread architecture](https://github.com/moclojer/chrondb/pull/89) - [PR #93 - Fix repository-exists](https://github.com/moclojer/chrondb/pull/93) - [PR #95 - Singleton pattern](https://github.com/moclojer/chrondb/pull/95) If you're exposing a lib via FFI, I hope this battle documentation is useful. The problems are predictable — after you encounter them for the first time. It wasn't as simple as I thought it would be. I thought I'd just turn ChronDB into a `.so` and with a simple layer in the native language (e.g., Rust) I'd have ChronDB native in that language. --- # FFI with GraalVM Native Image: The Real Work of Maintaining a Library That Crosses Language Boundaries **URL**: https://avelino.run/ffi-graalvm-native-image-real-work/ **Published**: 2026-01-29 **Tags**: ffi, graalvm, native-image, rust, clojure, database, open-source, chrondb **Word Count**: 2157 words **Summary**: It's not about compiling to native and calling it done. It's about stack overflows in unexpected places, locks that survive crashes, and data that vanishes between processes. Battle documentation from maintaining ChronDB. Exposing a library via FFI seems simple on paper. You compile your code to `.so`, export some functions with `extern "C"`, write bindings in the target language. Done, interoperability achieved. Except that's not how it works in practice. At least not when your lib is a database written in Clojure, compiled with GraalVM native-image, that needs to manage Git and Lucene internally, and will be called from Rust in environments ranging from dev laptops to CI containers with 8MB of stack. Over the past few months, I've worked on this exact scenario with [ChronDB](https://github.com/moclojer/chrondb). Every bug fixed became a lesson about how different languages coexist in the same process — and about everything that can go wrong in that coexistence. ## The Scenario: Why FFI with GraalVM? ChronDB is a temporal database. It uses Git as storage (each write is a commit) and Apache Lucene for full-text indexing. The core is Clojure running on the JVM. The problem: not everyone wants (or can) run a JVM. Rust developers want a crate. Python developers want a pip package. Embedding an entire JVM in each application isn't viable. The solution: GraalVM native-image compiles Java/Clojure bytecode to native binary. You generate a `libchrondb.so` that can be loaded via `dlopen` from any language. No ~~JVM~~, no classpath, no **JAR hell**. ``` ┌─────────────────────────────────────┐ │ Your application (Rust/Python/Go) │ ├─────────────────────────────────────┤ │ dlopen + FFI │ ├─────────────────────────────────────┤ │ libchrondb.so (GraalVM native) │ │ ├── SubstrateVM runtime │ │ ├── Clojure core │ │ ├── JGit (Git operations) │ │ └── Lucene (indexing) │ └─────────────────────────────────────┘ ``` It works. Until it doesn't. ## Problem 1: StackOverflowError on `put()` First real issue that appeared. User opens the database, does `get()`, all good. Calls `put()`, crash: ``` Fatal error: StackOverflowError: Enabling the yellow zone of the stack did not make any stack space available. ``` ### Why it happens When you compile Java to native-image, GraalVM embeds a minimalist runtime called SubstrateVM. Each "instance" of this runtime is an **Isolate** — an execution context with its own heap and state. When external code calls an FFI function (`@CEntryPoint`), SubstrateVM needs to: 1. Register the calling thread in the runtime (so GC knows about it) 2. Configure stack guards (yellow zone, red zone) 3. Allocate space to capture stack trace if an exception occurs That third point is the problem. SubstrateVM allocates space for a **complete** stack trace at the entry point. With **Clojure + JGit + Lucene**, a `put()` has hundreds of frames: ``` ChronDB_put (entry point) └→ clojure.lang.RT.var() └→ chrondb.lib/lib-put ├→ JGit ObjectInserter.insert() │ ├→ PackInserter → SHA1.digest() │ └→ RefUpdate → FileChannel.lock() └→ Lucene IndexWriter.addDocument() └→ DocumentsWriter → DefaultIndexingChain └→ TermsHashPerField → ByteBlockPool ``` GraalVM needs ~64MB of stack for this. Default Linux stack? 8MB. macOS varies, but usually less than needed. ### The solution that doesn't work Documentation suggests `RUST_MIN_STACK=64MB`. Doesn't work because: - Only affects threads created **after** the env var is set - Main thread already exists - Runtime threads **(Tokio, Rayon)** use their own defaults ### The real solution Ensure that **all** FFI calls happen on a thread with sufficient stack. I implemented a dedicated worker thread: ```rust impl ChronDB { pub fn open(data_path: &str, index_path: &str) -> Result { let (command_tx, command_rx) = mpsc::channel(); // Worker with 64MB stack let handle = thread::Builder::new() .stack_size(64 * 1024 * 1024) .spawn(move || { let lib = load_native_lib(); let db_handle = unsafe { lib.open(data_path, index_path) }; // All FFI calls here while let Ok(cmd) = command_rx.recv() { match cmd { Command::Put { key, value, tx } => { let result = unsafe { lib.put(db_handle, &key, &value) }; tx.send(result); } Command::Shutdown => break, } } })?; Ok(Self { command_tx, handle }) } } ``` User calls `db.put()`, internally it becomes a message to the worker, worker executes FFI with 64MB stack, returns result via channel. Transparent to the user. Works in any environment. ## Problem 2: Database Won't Open After Crash Second issue. User kills the process with Ctrl+C in the middle of an operation. Tries to reopen: ``` Database(OpenFailed("")) ``` Empty error. Very helpful for debugging. ### Why it happens JGit and Lucene use file locking to prevent concurrent access: - Git: `HEAD.lock`, `index.lock`, `refs/heads/main.lock` - Lucene: `write.lock` These are **advisory locks** from the operating system. The kernel releases them automatically when the process terminates... normally. But the **`.lock` file stays on disk**. And JGit checks for file existence, not the lock itself: ```java // JGit LockFile.java public boolean lock() throws IOException { if (lockFile.exists()) { return false; // Assumes another process has the lock } // ... } ``` > Kill -9, OOM killer, power loss — any abnormal termination leaves the file orphaned. ### The solution Before opening, verify if locks are actually active. The technique: try to acquire the OS advisory lock. If you succeed, the file is orphaned. ```clojure (defn orphaned-lock? [lock-file] (try (with-open [channel (FileChannel/open (.toPath lock-file) (into-array [StandardOpenOption/WRITE]))] (if-let [lock (.tryLock channel)] (do (.release lock) true) ; Got it = orphaned false)) ; Didn't get it = in use (catch OverlappingFileLockException _ false))) (defn cleanup-orphaned-locks [directory] (doseq [f (find-lock-files directory)] (when (orphaned-lock? f) (.delete f)))) ``` The kernel maintains a lock table by inode. Process died? Kernel already cleaned up its locks. If `tryLock()` succeeds, no living process has the lock. And about the empty error? Fixed too: ```clojure ;; Before: returned nil silently (defn lib-open [data-path index-path] (when-let [storage (create-storage data-path)] (when-let [index (create-index index-path)] (register-handle storage index)))) ;; After: propagates error with context (defn lib-open [data-path index-path] (try (let [storage (create-storage data-path) index (create-index index-path)] (register-handle storage index)) (catch Exception e (log/error e "lib-open failed" {:data-path data-path}) -1))) ``` ## Problem 3: Data Disappears Between Processes Third issue, the most frustrating. Flow: ```bash myapp save-state # Saves data to ChronDB myapp load-state # Data doesn't exist ``` Log from both commands: ``` Resetting corrupted state database... ``` Every invocation detected "corruption" and reset. ### Why it happens The initialization code always called `Git.init()`: ```clojure (defn create-storage [path] (-> (Git/init) (.setDirectory (io/file path)) (.call) (.getRepository))) ``` `Git.init()` internally calls `repository.create()`, which rewrites `HEAD` to point to an empty branch. Even if the repository exists with data. **Each process:** init → empty HEAD → "where's my data?". ### The solution Check before creating: ```clojure (defn repository-exists? [path] (let [git-dir (io/file path ".git")] (and (.exists git-dir) (.isDirectory git-dir) (.exists (io/file git-dir "HEAD")) (.isDirectory (io/file git-dir "objects"))))) (defn lib-open [data-path index-path] (let [storage (if (repository-exists? data-path) (open-existing-repository data-path) (create-new-repository data-path)) ...] ...)) ``` Seems obvious in retrospect. But when you're focused on making it work, it's easy to treat "open" and "create" as the same operation. ## Problem 4: Multiple Instances Corrupt Data Fourth issue. User's code: ```rust fn process_a() { let db = ChronDB::open("/data", "/index")?; db.put("key", value)?; } fn process_b() { let db = ChronDB::open("/data", "/index")?; // Same path! let v = db.get("key")?; // Sometimes works, sometimes doesn't } ``` ### Why it happens Each `open()` created a new worker thread, a new GraalVM Isolate, a new JGit Repository instance and Lucene IndexWriter. OS advisory locks work **between processes**, not between threads in the same process accessing via different handles. Two Isolates in the same process can open the same files — and start overwriting each other's data. ### The solution Singleton per path. One instance per (data_path, index_path) combination: ```rust lazy_static! { static ref REGISTRY: Mutex>> = Mutex::new(HashMap::new()); } impl ChronDB { pub fn open(data_path: &str, index_path: &str) -> Result { let key = PathPair::new(data_path, index_path); let mut registry = REGISTRY.lock().unwrap(); // Reuse if exists if let Some(weak) = registry.get(&key) { if let Some(worker) = weak.upgrade() { return Ok(Self { worker }); } } // Create new let worker = Arc::new(SharedWorker::new(data_path, index_path)?); registry.insert(key, Arc::downgrade(&worker)); Ok(Self { worker }) } } ``` `Weak` in the registry allows the worker to be dropped when nobody uses it anymore. Next `open()` on the same path creates a new worker. ## What I Learned ### GraalVM native-image isn't "compile to native" The first illusion that broke: native-image doesn't eliminate the runtime, it just embeds it. SubstrateVM is there — with GC, thread management, stack guards, safepoints. Everything the JVM does, SubstrateVM does too, just ahead-of-time instead of JIT. This means you're not distributing "pure native code". You're distributing a minimalist VM with your code pre-compiled inside. And that VM has requirements: needs heap, needs stack, needs to register threads, needs space for stack traces. When I read that SubstrateVM allocates space for a complete stack trace at every `@CEntryPoint` entry point, I understood why 8MB wasn't enough. It's not that our code is inefficient — it's that the runtime needs to be prepared to capture hundreds of frames if something goes wrong. With Clojure (which adds var resolution frames), JGit (Git operations are deep), and Lucene (indexing has many layers), the potential stack trace is enormous. The lesson: **understand the runtime you're distributing**. Reading the [SubstrateVM documentation](https://docs.oracle.com/en/graalvm/enterprise/20/docs/reference-manual/native-image/SubstrateVM/) about Isolates, stack guards, and thread attachment changed how I think about the problem. ### Bindings aren't the API — they're a protection layer The initial temptation was to make "thin" bindings: translate the exported C functions 1:1 to Rust idioms. `ChronDB_open` becomes `ffi::open()`, `ChronDB_put` becomes `ffi::put()`. Simple. This approach transfers **all runtime requirements** to the user. Need 64MB of stack? User's problem to configure. Orphaned lock? User's problem to clean up. Multiple instances? User's problem to coordinate. What worked was inverting the mindset: **bindings are a protection layer between the native runtime and user code**. ``` ┌─────────────────────────────────────────────┐ │ User code │ │ db.put("key", value) // Simple API │ ├─────────────────────────────────────────────┤ │ Protection layer │ │ - Worker thread with adequate stack │ │ - Singleton per path │ │ - Orphaned lock cleanup │ │ - Create vs open verification │ │ - Errors with context │ ├─────────────────────────────────────────────┤ │ FFI calls (controlled environment) │ ├─────────────────────────────────────────────┤ │ libchrondb.so │ └─────────────────────────────────────────────┘ ``` The user never calls FFI directly. Every call goes through the layer that ensures the conditions necessary for the runtime to work. Worker thread solves stack. Singleton solves concurrency. Cleanup solves previous crashes. ### Documentation is not a solution **"Configure `RUST_MIN_STACK=64MB` before using"** seems reasonable. It's not. First, because **it doesn't work** — that env var only affects threads created afterward, not the main thread. Second, because even if it worked, **nobody reads runtime requirements documentation**. People install the crate, call `open()`, and expect it to work. Third — and most importantly — because **if you need to document an environment requirement, you haven't finished the work**. The lib should create that environment internally. This was the most important mindset shift: every documented requirement is a design failure. If the runtime needs 64MB of stack, the lib creates a thread with 64MB. If the runtime leaves orphaned locks, the lib cleans up before opening. If multiple instances corrupt data, the lib ensures singleton. The work doesn't end when the function executes. It ends when the user doesn't need to know anything about the runtime to use the lib. ### FFI is translation between worlds with different physics Rust has ownership, lifetimes, RAII. Clojure has GC, immutability, vars. GraalVM has Isolates, safepoints, compressed references. Each world has its rules about what happens when: - An object goes out of scope - A thread terminates - A process crashes - Memory runs out FFI isn't "calling a function from another language". It's **translating between worlds with different physical rules**. The `long handle` that Clojure returns is an index in an internal table — if the GC moves the object, the handle remains valid. But if the Isolate is destroyed, all handles become invalid instantly. Understanding this changes how you design the boundary. You don't think "which function to expose?". You think "which invariants of my world do I need to protect? which invariants of the other world do I need to respect?". In our case: - **Protect from Clojure side**: handles are only valid while the Isolate exists; GC can pause at safepoints; IO operations can block - **Respect from Rust side**: ownership needs to be clear; errors need to be Result, not exceptions; resources need to be released in Drop ### The real cost of FFI with GraalVM After solving the problems, I calculated what the protection layer adds: - **Latency**: ~50-100μs per operation (channel send/recv + context switch to worker) - **Memory**: ~64MB for worker stack + channel overhead - **Complexity**: ~500 lines of infrastructure code in bindings For a database where operations are IO-bound (Git write, Lucene index), 100μs is noise. 64MB is acceptable for any modern machine. 500 lines is the cost of not having to explain to every user how to configure stack size. **The tradeoff was worth it!** But it's important to know it exists. "Transparent" FFI doesn't exist — either you pay the cost in the lib, or the user pays in bugs and configuration. ## Links - [ChronDB](https://github.com/moclojer/chrondb) - [PR #89 - Worker thread architecture](https://github.com/moclojer/chrondb/pull/89) - [PR #93 - Fix repository-exists](https://github.com/moclojer/chrondb/pull/93) - [PR #95 - Singleton pattern](https://github.com/moclojer/chrondb/pull/95) If you're exposing a lib via FFI, I hope this battle documentation is useful. The problems are predictable — after you encounter them for the first time. It wasn't as simple as I thought it would be. I thought I'd just turn ChronDB into a `.so` and with a simple layer in the native language (e.g., Rust) I'd have ChronDB native in that language. --- # LLM como Copiloto de Investigação: Debugando Produção com Claude Code e MCPs **URL**: https://avelino.run/claude-code-mcp-production-debugging/ **Published**: 2026-01-27 **Tags**: claude-code, mcp, debugging, observability, honeycomb, sentry, production, llm, developer-experience **Word Count**: 1338 words **Summary**: Como uso Claude Code integrado com Honeycomb, Sentry e Slack para investigar bugs em produção de forma assíncrona. Não é sobre gerar código — é sobre ter um copiloto que cruza dados de múltiplas fontes enquanto você foca na solução. Debugar em produção é um exercício de context-switching infinito. Alguém reporta um bug no Slack. Você abre o Honeycomb pra ver traces. Pula pro Sentry pra encontrar exceptions. Volta pro código pra entender o fluxo. Consulta documentação pra lembrar como aquele serviço funciona. Enquanto isso, três pessoas te marcaram em outras threads perguntando "já viu isso?". O problema não é falta de dados — é **excesso de contexto fragmentado**. Cada ferramenta tem uma peça do quebra-cabeça, mas montar a imagem completa exige malabarismo mental constante. Nos últimos meses, mudei meu workflow. Em vez de ser o humano que pula entre ferramentas, transformei o Claude Code no copiloto que faz essa navegação por mim. ## O Cockpit: MCPs que Conectam Tudo A mágica está nos **MCPs (Model Context Protocol)** — integrações que permitem ao Claude acessar ferramentas externas diretamente. Minha stack atual: ```json { "mcpServers": { "sentry": { "type": "http", "url": "https://mcp.sentry.dev/mcp" }, "honeycomb": { "type": "http", "url": "https://mcp.honeycomb.io/mcp" }, "slack": { "command": "npx", "args": ["-y", "slack-mcp-server@latest", "--transport", "stdio"], "env": { "SLACK_MCP_XOXP_TOKEN": "xoxp-...", "SLACK_MCP_TEAM_ID": "..." } }, "github": { "type": "http", "url": "https://api.githubcopilot.com/mcp" } } } ``` Com essa configuração, o Claude pode: - **Slack**: Ler threads de bug reports, entender o contexto do problema - **Honeycomb**: Buscar traces, analisar latência, identificar gargalos - **Sentry**: Puxar exceptions, stack traces, frequência de erros - **GitHub**: Navegar PRs, histórico de commits, blame - **Codebase local**: Ler o código diretamente do meu terminal O Claude não "vê" cada ferramenta isoladamente — ele cruza informações. E esse é o diferencial. ## Um Caso Real: Queries Travando o Sistema Sexta-feira, 17h. O pior horário. Thread no Slack: "Sistema inteiro lento, várias telas não carregam, timeout em tudo." Esse tipo de report é o mais difícil. "Tudo lento" pode ser mil coisas: CPU, memória, rede, banco, serviço externo. Sem um ponto de entrada específico, a investigação vira caça ao tesouro. Antes do workflow com MCPs, eu: 1. Abriria Honeycomb, filtraria por latência alta no intervalo de tempo 2. Encontraria traces lentos, clicaria em cada um tentando achar padrão 3. Notaria spans de database demorados, anotaria mentalmente 4. Abriria Sentry, buscaria exceptions no mesmo período 5. Tentaria correlacionar manualmente trace ID com exception 6. Voltaria pro código, grep pelo nome do serviço suspeito 7. Leria implementação, formularia hipótese 8. Voltaria às ferramentas pra validar **Tempo médio**: depende. Às vezes **30 minutos**, às vezes **2 horas**. O problema não é cada passo — é manter o contexto mental entre eles. Pedi pro Claude: > "Sistema com lentidão generalizada nos últimos 20min. Busca no Honeycomb traces com latência > 3s, agrupa por serviço pra identificar qual está degradado. Se for banco, procura por queries lentas ou locks." O Claude encontrou o padrão: 1. **Honeycomb**: 80% dos traces lentos tinham spans de database com duração > 5s 2. **Drill-down**: As queries lentas eram todas no mesmo serviço — relatórios 3. **Sentry**: Várias exceptions de `LockWaitTimeout` no mesmo período 4. **Código local**: Encontrou a query problemática no endpoint de exportação de relatório O diagnóstico: > **Causa raiz**: O endpoint de exportação de relatório executa uma query analítica pesada (`SELECT ... GROUP BY ... ORDER BY`) sem paginação. Quando dois usuários exportam simultaneamente, a segunda query fica esperando lock da primeira. A query leva ~45s para completar, e o lock_wait_timeout é 30s — resultado: timeout em cascata. > > **Por que afeta "tudo"**: A tabela principal (`orders`) é usada por quase todos os endpoints. Enquanto a query analítica segura lock de leitura em milhões de rows, outras operações que precisam de write lock ficam enfileiradas. Efeito dominó. > > **Solução proposta**: > > 1. Mover queries analíticas para réplica de leitura (read replica) > 2. Adicionar índice composto para a query de relatório (`created_at`, `status`, `user_id`) > 3. Implementar paginação com cursor no export — processar em chunks de 10k rows > 4. Considerar materializar esse relatório em tabela separada (atualização async) Esse caso ilustra algo importante: o Claude não só achou o problema, ele explicou **por que um endpoint de relatório afetava o sistema inteiro**. Essa conexão entre lock de leitura → block de escrita → efeito dominó é exatamente o tipo de raciocínio que exige manter múltiplos conceitos na cabeça simultaneamente. ## A Estrutura do Pedido que Funciona Depois de semanas experimentando, identifiquei o padrão de prompt que funciona: ### O que funciona 1. **Contexto específico**: URL, horário, user ID, qualquer identificador concreto 2. **Escopo claro**: "últimos 30min", "serviço X", "fluxo Y" 3. **Pedido de diagnóstico, não código**: "me diz a causa" > "arruma isso" 4. **Qualificador de solução**: "definitiva, não paliativa" ### O que não funciona - ❌ "Tem um bug no checkout, descobre o que é" (muito vago) - ❌ "Escreve o fix pra esse problema" (pula a investigação) - ❌ "Olha todos os erros da última semana" (escopo impossível) A regra de ouro: **nunca peço código, peço diagnóstico + proposta de solução**. Por quê? Porque código é a parte fácil. A parte difícil é entender o problema. Quando o LLM pula direto pra código, ele frequentemente resolve o sintoma, não a causa. Quando ele precisa primeiro diagnosticar, ele é forçado a construir modelo mental do sistema — e eu posso validar esse modelo antes de qualquer implementação. ## Quando Não Funciona Seria desonesto dizer que funciona sempre. O principal limitador é **contexto muito distribuído**. Quando o bug envolve 5+ serviços, cada um com suas próprias traces e exceptions, o Claude começa a perder o fio. Ele consegue puxar dados de cada fonte, mas a correlação entre elas fica superficial. Nesses casos, uso o workflow híbrido: deixo ele fazer a primeira triagem (eliminar hipóteses óbvias), depois assumo a investigação manual nas partes que exigem correlação complexa. Também não funciona bem para: - **Race conditions**: O modelo não consegue "ver" timing de execução - **Problemas de estado**: Se o bug depende de sequência específica de eventos - **Dados que não posso compartilhar**: Às vezes o contexto necessário é sensível demais ## O Modelo Mental Certo O erro comum é tratar LLM como "desenvolvedor automático". Não é. É **copiloto de investigação**. A analogia que uso: copiloto de avião. O piloto (você) decide destino, rota, quando decolar. O copiloto (LLM) monitora instrumentos, faz checklist, alerta sobre anomalias. Você não pede pro copiloto "pilota o avião" — você pede "checa pressão do óleo" ou "confirma altitude com torre". Com debugging é igual: - ✅ "Busca traces com latência > 5s nesse serviço" - ✅ "Cruza esse exception com o código e me diz onde origina" - ✅ "Lista hipóteses do que pode causar esse comportamento" - ❌ "Arruma o bug" ## Setup Mínimo pra Testar Se você quer experimentar esse workflow, o setup mínimo: 1. **Claude Code CLI** instalado 2. **MCP do Honeycomb** (ou sua ferramenta de observabilidade) 3. **MCP do Sentry** (ou equivalente) 4. **Acesso ao codebase** no mesmo terminal Não precisa de todos os MCPs de uma vez. Comece com observabilidade + exceptions. Adicione Slack depois se fizer sentido pro seu fluxo. ## O Que Muda na Prática O ganho real não é "resolver bug em 5 minutos que levaria 2 horas". Às vezes leva o mesmo tempo. O ganho é **qualidade da investigação**. Quando eu pulava entre ferramentas, frequentemente parava na primeira hipótese plausível. "Ah, queries lentas? Deve ser índice faltando. Cria um índice." Solução paliativa. Bug volta em duas semanas. Com o LLM fazendo a correlação, ele naturalmente continua investigando além da primeira hipótese. "Query lenta, sim, mas por quê? Tem lock envolvido? Por que essa query específica trava as outras? Qual o efeito cascata?" A profundidade da investigação aumenta porque o custo cognitivo de manter contexto diminui. ## Conclusão LLMs estão mudando como escrevemos código. Mas talvez o impacto maior seja em como **investigamos sistemas**. Debugging em produção é fundamentalmente um problema de integração de contexto. Cada ferramenta tem uma peça. O trabalho humano era ser o hub que conecta tudo. Agora esse hub pode ser automatizado — não a decisão final, mas a coleta e correlação. Se você está usando LLM só pra autocompletar código, está subutilizando. Experimente como copiloto de investigação. Configure uns MCPs. Jogue um bug report e peça diagnóstico, não fix. Os links dos MCPs que uso: - [Honeycomb MCP](https://docs.honeycomb.io/integrations/mcp/) - [Sentry MCP](https://docs.sentry.io/organization/integrations/mcp/) - [Slack MCP Server](https://github.com/korotovsky/slack-mcp-server) - [GitHub MCP](https://docs.github.com/en/copilot/customizing-copilot/using-model-context-protocol) A stack que montei funciona pra mim. A sua vai ser diferente. O princípio é o mesmo: **conecte as fontes de contexto, peça diagnóstico, valide antes de implementar**. --- # ChronDB: Transforming a Clojure Database into a Polyglot Library with GraalVM Native Image and FFI **URL**: https://avelino.run/chrondb-polyglot-ffi-clojure-graalvm-native-image/ **Published**: 2026-01-25 **Tags**: chrondb, clojure, graalvm, ffi, rust, python, native-image, shared-library, open-source, database **Word Count**: 1637 words **Summary**: A deep dive into how ChronDB leverages GraalVM Native Image to compile Clojure code into native shared libraries (.so/.dylib), enabling seamless FFI integration with Rust and Python through ctypes and bindgen. [ChronDB](https://github.com/moclojer/chrondb) was born as a **server**. A time-traveling key/value database with Git as its storage engine, exposing PostgreSQL wire protocol, Redis protocol, and REST/HTTP. You'd download the server, run it, connect with your favorite client. Classic architecture. Then I started building [spuff](https://github.com/avelino/spuff) — ephemeral dev environments in the cloud. Spin up when needed, auto-destroy when forgotten. Written in Rust. For state management, I reached for SQLite. Simple, embedded, no server to manage. Just a file. But something kept nagging at me: **why SQLite?** The state I was storing was simple. Key-value pairs. Configuration. Session data. Nothing that truly needed SQL. And I already had a database designed exactly for this use case — ChronDB. Time-travel for debugging. Git-native storage for versioning. Perfect fit. Except for one problem: ChronDB was a server written in Clojure. My CLI was in Rust. I didn't want to force users to run a JVM process just to store some ephemeral state. The question became: **how do I embed ChronDB directly into a Rust binary?** I remembered solving a similar problem before. When building the [prestd plugin system](https://docs.prestd.com/plugins), we needed to expose Go code to other languages. The solution was compiling to a shared library and using FFI. Could the same approach work for Clojure? The answer was **GraalVM Native Image** — and what started as a hack to avoid SQLite became an architecture that now lets ChronDB run embedded in Rust, Python, or any language that can load a `.so` file. ## The Architecture at a Glance The system is organized in five layers, from top (user-facing) to bottom (core): 1. **Language Bindings** (Rust, Python) — Safe wrappers, JSON parsing, resource management 2. **C API** (libchrondb.so/dylib) — `@CEntryPoint` functions via GraalVM native-image `--shared` 3. **Java Bridge** (ChronDBLib.java) — Lazy-loads Clojure, converts C ↔ Java types 4. **Clojure Bridge** (chrondb.lib.core) — Handle registry, orchestrates Storage + Index 5. **ChronDB Core** — GitStorage + LuceneIndex Each layer has a specific responsibility, creating clean separation of concerns while maintaining the ability to cross language boundaries efficiently. ## Layer 1: The Clojure Core and Handle Registry At the foundation, we have pure Clojure code managing database connections. The key insight here is the **handle registry pattern** - a thread-safe mapping between integer handles and database instances: ```clojure (defonce ^:private ^AtomicInteger handle-counter (AtomicInteger. 0)) (defonce ^:private handle-registry (atom {})) (defn lib-open [data-path index-path] (try (let [storage (git/create-git-storage data-path) idx (lucene/create-lucene-index index-path)] (when (and storage idx) (lucene/ensure-index-populated idx storage nil {:async? false}) (let [handle (.getAndIncrement ^AtomicInteger handle-counter)] (swap! handle-registry assoc handle {:storage storage :index idx}) handle))) (catch Throwable _e -1))) ``` Why integers instead of pointers? Because **integers cross the FFI boundary cleanly**. An `int` is the same in C, Rust, Python, and Java. No pointer gymnastics, no memory layout concerns. The actual objects stay safely inside the JVM/native image, referenced only by their integer handle. This pattern is documented extensively in "Foreign Function Interface in Modern Programming" and follows the classic **opaque handle** design that Win32 APIs popularized decades ago. ## Layer 2: The Java Bridge with @CEntryPoint GraalVM Native Image requires a Java layer to define C-callable entry points. Each function is annotated with `@CEntryPoint`, which tells the native-image compiler to export this function with C ABI: ```java @CEntryPoint(name = "chrondb_open") public static int open(IsolateThread thread, CCharPointer dataPath, CCharPointer indexPath) { try { ensureInitialized(); String dp = toJavaString(dataPath); String ip = toJavaString(indexPath); Object result = libOpen.invoke(dp, ip); if (result instanceof Number) { return ((Number) result).intValue(); } lastError = "open returned non-numeric result"; return -1; } catch (Exception e) { lastError = e.getClass().getName() + ": " + e.getMessage(); return -1; } } ``` Notice several critical design decisions: 1. **Lazy Clojure initialization**: `ensureInitialized()` loads Clojure runtime only on first call 2. **Type conversion**: `CCharPointer` <-> `String` using GraalVM's `CTypeConversion` 3. **Error handling**: Exceptions never cross FFI boundaries - we store errors in `lastError` and return sentinel values (`-1`) 4. **IsolateThread parameter**: GraalVM requires an isolate thread context for all entry points The `ensureInitialized()` method demonstrates lazy loading of Clojure namespaces: ```java private static synchronized void ensureInitialized() { if (!initialized) { IFn require = Clojure.var("clojure.core", "require"); require.invoke(Clojure.read("chrondb.lib.core")); libOpen = Clojure.var("chrondb.lib.core", "lib-open"); libClose = Clojure.var("chrondb.lib.core", "lib-close"); libPut = Clojure.var("chrondb.lib.core", "lib-put"); // ... more function references initialized = true; } } ``` This is the **IFn pattern** - storing references to Clojure functions as `IFn` objects that can be invoked from Java. It's the standard way to call Clojure from Java, and it works perfectly inside native images. ## Layer 3: Building the Shared Library The build process has three distinct phases, orchestrated by `shared_library.clj`: ### Phase 1: Uberjar Creation ```clojure (build/-main "--uberjar") ``` Creates a single JAR containing all dependencies - the Clojure runtime, JGit, Lucene, and ChronDB itself. ### Phase 2: Java Compilation with SVM Classpath ```clojure (defn- compile-java! [graalvm-home] (let [svm-jars (find-svm-jars graalvm-home) uberjar-path (.getAbsolutePath (io/file build/jar-file)) classpath (string/join ":" (concat svm-jars [uberjar-path]))] (shell/sh "javac" "-cp" classpath "-d" "target/shared-classes" "-source" "11" "-target" "11" "java/chrondb/lib/ChronDBLib.java"))) ``` The key here is adding GraalVM's SVM (Substrate VM) JARs to the classpath. These provide the `@CEntryPoint` annotations and `CTypeConversion` utilities. ### Phase 3: Native Image Arguments ```clojure (let [shared-args (concat ["--shared" "-H:Name=libchrondb" (str "-H:Path=" target-path)] processed)] (spit shared-args-file (string/join "\n" shared-args))) ``` The `--shared` flag is the magic switch that tells native-image to produce a shared library instead of an executable. The output includes: - `libchrondb.so` (Linux) / `libchrondb.dylib` (macOS) - the shared library - `libchrondb.h` - C header with function declarations - `graal_isolate.h` - GraalVM isolate management types ## Layer 4: Python Bindings with ctypes Python's `ctypes` module provides direct access to C shared libraries. Our FFI layer configures function signatures: ```python def load_library(): lib = ctypes.CDLL(lib_path) # GraalVM Isolate Management lib.graal_create_isolate.argtypes = [c_void_p, POINTER(c_void_p), POINTER(c_void_p)] lib.graal_create_isolate.restype = c_int # ChronDB Functions lib.chrondb_open.argtypes = [c_void_p, c_char_p, c_char_p] lib.chrondb_open.restype = c_int lib.chrondb_put.argtypes = [c_void_p, c_int, c_char_p, c_char_p, c_char_p] lib.chrondb_put.restype = c_char_p return lib ``` The safe wrapper class manages the GraalVM isolate lifecycle: ```python class ChronDB: def __init__(self, data_path: str, index_path: str): self._lib = load_library() self._isolate = c_void_p() self._thread = c_void_p() ret = self._lib.graal_create_isolate( None, byref(self._isolate), byref(self._thread) ) if ret != 0: raise ChronDBError("Failed to create GraalVM isolate") self._handle = self._lib.chrondb_open( self._thread, data_path.encode('utf-8'), index_path.encode('utf-8') ) def put(self, id: str, doc: dict, branch: str = None) -> dict: json_str = json.dumps(doc).encode('utf-8') result = self._lib.chrondb_put( self._thread, self._handle, id.encode('utf-8'), json_str, branch.encode('utf-8') if branch else None ) return json.loads(result.decode('utf-8')) ``` Key Python FFI considerations: 1. **String encoding**: Always encode to UTF-8 bytes before passing to C 2. **Memory management**: GraalVM manages the returned strings; Python's ctypes handles the conversion 3. **Context managers**: Implement `__enter__`/`__exit__` for safe cleanup 4. **Library discovery**: Search multiple paths (env vars, `~/.chrondb/lib/`, system paths) ## Layer 5: Rust Bindings with bindgen Rust's approach is more compile-time focused. The `build.rs` script uses `bindgen` to generate Rust FFI declarations from C headers: ```rust let bindings = bindgen::Builder::default() .header(header_path.to_str().unwrap()) .clang_arg(format!("-I{}", lib_dir.display())) .allowlist_function("chrondb_.*") .allowlist_function("graal_create_isolate") .allowlist_function("graal_tear_down_isolate") .allowlist_type("graal_isolate_t") .allowlist_type("graal_isolatethread_t") .generate() .expect("Unable to generate bindings"); ``` The generated bindings are included at compile time: ```rust // ffi.rs include!(concat!(env!("OUT_DIR"), "/bindings.rs")); ``` The safe Rust wrapper emphasizes ownership and RAII: ```rust pub struct ChronDB { isolate: *mut ffi::graal_isolate_t, thread: *mut ffi::graal_isolatethread_t, handle: i32, } unsafe impl Send for ChronDB {} impl Drop for ChronDB { fn drop(&mut self) { if self.handle >= 0 { unsafe { ffi::chrondb_close(self.thread, self.handle); } self.handle = -1; } if !self.thread.is_null() { unsafe { ffi::graal_tear_down_isolate(self.thread); } self.thread = ptr::null_mut(); self.isolate = ptr::null_mut(); } } } ``` The `Drop` implementation ensures cleanup happens automatically. No `try`/`finally` needed - Rust's ownership system guarantees `drop` runs when the `ChronDB` instance goes out of scope. Type-safe operation methods use `CString` and `serde_json`: ```rust pub fn put(&self, id: &str, doc: &serde_json::Value, branch: Option<&str>) -> Result { let c_id = CString::new(id)?; let json_str = serde_json::to_string(doc)?; let c_json = CString::new(json_str)?; let c_branch = Self::optional_cstring(branch)?; let result = unsafe { ffi::chrondb_put( self.thread, self.handle, c_id.as_ptr() as *mut c_char, c_json.as_ptr() as *mut c_char, Self::ptr_or_null(&c_branch), ) }; self.parse_string_result(result) } ``` ## The Data Flow Let's trace a `put` operation from Python through all layers: ``` Python: db.put("user:1", {"name": "Alice"}) | v ctypes: lib.chrondb_put(thread, handle, b"user:1", b'{"name":"Alice"}', None) | v libchrondb.so: chrondb_put(IsolateThread, int, CCharPointer, CCharPointer, CCharPointer) | v ChronDBLib.java: Converts C strings to Java, calls libPut.invoke(...) | v chrondb.lib.core/lib-put: Parses JSON, calls storage/save-document | v GitStorage: Creates virtual commit with document | v LuceneIndex: Indexes document for search | v Returns JSON string back through all layers ``` Each layer handles its concerns: - **Python**: Encoding, type conversion, JSON serialization - **C ABI**: Memory layout, calling convention - **Java**: Exception handling, Clojure interop - **Clojure**: Business logic, persistence ## Why This Architecture? 1. **Single source of truth**: The Clojure implementation is canonical. Bindings are thin wrappers. 2. **No serialization overhead**: Data crosses the boundary as C strings (JSON). No complex serialization protocols needed. 3. **Consistent behavior**: Python and Rust users get identical semantics because they call the same underlying code. 4. **Maintainability**: Changes to ChronDB core automatically propagate to all bindings after rebuilding. 5. **No runtime dependencies**: The shared library is self-contained. No JVM required at runtime. ## Recommended Reading For those wanting to dive deeper into FFI and language interoperability: - **"The Rust Programming Language" (Klabnik & Nichols)** - Chapter on FFI covers unsafe Rust, CString, and calling C from Rust. Essential for understanding how bindgen-generated code works and how Rust safely interfaces with C libraries. [Source](https://doc.rust-lang.org/book/) - **"Clojure Programming" (Emerick, Carper & Grand)** - Chapter on Java interop explains the IFn interface and how to call Clojure from Java - the exact pattern we use in the Java bridge layer. [Source](https://www.oreilly.com/library/view/clojure-programming/9781449310387/) ## Conclusion The ChronDB polyglot architecture demonstrates that language boundaries are porous when you design for them. By leveraging GraalVM's native-image with `--shared`, we transform JVM code into native shared libraries that any language can consume. The key principles: 1. **Opaque handles** instead of raw pointers for cross-language object references 2. **JSON** as the universal data interchange format 3. **Error codes** instead of exceptions at the C boundary 4. **Language-idiomatic wrappers** that feel native to each ecosystem This approach scales: adding a new language binding (Go, Ruby, Node.js via N-API) requires only implementing the FFI wrapper layer. The core remains unchanged. The code is open source at [github.com/moclojer/chrondb](https://github.com/moclojer/chrondb). PRs for new language bindings are welcome. --- # jbundle **URL**: https://avelino.run/projects/jbundle/ **Published**: 2026-01-25 **Tags**: jvm, bin, java, clojure, kotlin, scala, groovy, package, graalvm, rust **Word Count**: 1009 words Package JVM applications into self-contained binaries. No JVM installation required to run the output. **[jbundle](https://github.com/avelino/jbundle)** transforms JVM applications (Clojure, Java, Kotlin, Scala, Groovy) into self-contained binaries. Previously known as `clj-pack`, the tool was renamed to reflect support for all JVM languages. ## Motivation The conventional deployment approach requires both the JAR and a JVM on the target machine. GraalVM native-image is an alternative, but presents challenges: slow compilations, complex reflection configuration, and library incompatibilities. jbundle offers a practical solution: bundles a minimal JVM runtime with your uberjar into a single executable. The result is a single file, no external dependencies, with full JVM compatibility. ## Comparison: jbundle vs GraalVM native-image | Aspect | jbundle | GraalVM | |--------|---------|---------| | **Compatibility** | 100% JVM compatible | Requires reflection config, incompatible libs | | **Build time** | Fast (jlink + packaging) | Slow (ahead-of-time compilation) | | **Binary size** | ~30-50 MB | ~20-40 MB | | **Startup (warmed)** | ~200-350ms (AppCDS) / ~10-50ms (CRaC) | ~10-50ms | | **First run** | Extract + generate CDS (~2-5s), then cached | Instant | | **Setup** | Just `jbundle` | GraalVM + native-image + config | | **Debug** | Standard JVM tools | Limited | ## Quick Start ```bash # Build from Clojure project (deps.edn or project.clj) jbundle build --input ./my-clojure-app --output ./dist/my-app # Build from Java project (pom.xml or build.gradle) jbundle build --input ./my-java-app --output ./dist/my-app # Build from pre-compiled JAR jbundle build --input ./target/app.jar --output ./dist/my-app # Run (no Java required on system) ./dist/my-app ``` ## How It Works The process follows seven steps: 1. Detects build system (deps.edn, project.clj, pom.xml, build.gradle) 2. Builds JAR (clojure/lein/mvn/gradle) 3. Downloads JDK from Adoptium (cached locally) 4. Detects modules with jdeps 5. Creates minimal runtime with jlink (~30-50 MB) 6. Creates CRaC checkpoint for instant restore (optional, Linux only) 7. Packages into multi-layer binary (runtime + compressed app.jar) The multi-layer format is: `[stub] [runtime.tar.gz] [app.jar.gz] [crac.tar.gz?]`. Each layer is cached independently by content hash in `~/.jbundle/cache/`. ## Build Error Diagnostics When a build fails, jbundle displays structured diagnostics with source context, similar to `rustc`: ``` error: Unable to resolve symbol: prntln --> src/example/core.clj:9:5 | 7 | (defn process-data [data] 8 | (let [result (map inc data)] 9 | (prntln "Processing:" result) | ^^^^^^^ symbol not found 10 | (reduce + result))) ``` Supported for all build systems. Returns raw output if format is not recognized. ## Startup Performance jbundle aims for GraalVM-level startup times without AOT compilation, using native HotSpot techniques. ### First Run vs Subsequent Runs | Metric | First run | Subsequent runs | |--------|-----------|-----------------| | **What happens** | Extract runtime + app, JVM generates AppCDS | Everything cached, JVM loads pre-processed metadata | | **Overhead** | +2-5s (extraction + CDS) | None | | **Startup (cli profile)** | ~800-1500ms | ~200-350ms (~60-75% faster) | | **Startup (server profile)** | ~1000-2000ms | ~400-600ms (~50-70% faster) | | **Startup (CRaC restore)** | ~800-1500ms | ~10-50ms (~95% faster) | **Why first run is slower:** The JVM needs to extract compressed layers, then uses `-XX:+AutoCreateSharedArchive` to generate a shared archive (`.jsa`). This is a one-time cost—the file is cached. **Why subsequent runs are faster:** The JVM loads pre-processed metadata from the `.jsa` file, skipping parsing, verification, and class layout. Combined with profile-specific flags, overhead is minimized. ### JVM Profiles The `--profile` flag selects optimized JVM flags: - **`server`** (default): No extra flags, standard HotSpot behavior. Best for long-running services. - **`cli`**: Tiered compilation with C1 only + SerialGC. Optimized for CLI tools (~200-350ms startup after first run). ### AppCDS (Class Data Sharing) Enabled by default (JDK 19+). On first run, the JVM automatically generates a shared archive (`.jsa`) with pre-processed metadata. Subsequent runs load this file, skipping parsing. Stored in `~/.jbundle/cache/app-/app.jsa`, bound to the specific app version. Disable with `--no-appcds` if you observe issues. ### CRaC (Coordinated Restore at Checkpoint) Optional (`--crac`). On supported JDKs, jbundle creates a checkpoint of the app after warmup. Subsequent runs restore from checkpoint—~10-50ms startup, comparable to native binaries. Requires JDK with CRaC (e.g., Azul Zulu with CRaC). Falls back to AppCDS + profile flags if restore fails. Linux only. ### Layered Cache The binary has independent layers, each cached by hash: ``` ~/.jbundle/cache/ rt-/ # JVM runtime (reused across rebuilds) app-/ # app.jar + app.jsa (generated on first run) crac-/ # CRaC checkpoint (if enabled) ``` Changing only application code doesn't re-extract the runtime—relevant for CI/CD and containers. ## Installation ### From Source ```bash git clone https://github.com/avelino/jbundle.git cd jbundle cargo install --path . ``` ## Usage ### Command Line Examples ```bash # Build with specific Java version jbundle build --input . --output ./dist/app --java-version 21 # Cross-platform target jbundle build --input . --output ./dist/app --target linux-x64 # Pass JVM arguments jbundle build --input . --output ./dist/app --jvm-args "-Xmx512m" # CLI profile (fast startup) jbundle build --input . --output ./dist/app --profile cli # Disable AppCDS jbundle build --input . --output ./dist/app --no-appcds # Enable CRaC (Linux, requires supported JDK) jbundle build --input . --output ./dist/app --crac # Cache info jbundle info # Clean cache jbundle clean ``` ### Configuration File Create `jbundle.toml` in your project to avoid repeating flags: ```toml # jbundle.toml java_version = 21 target = "linux-x64" shrink = true jvm_args = ["-Xmx512m", "-XX:+UseZGC"] profile = "cli" # "cli" or "server" (default: "server") appcds = true # generate AppCDS (default: true) crac = false # enable CRaC (default: false) ``` All fields are optional. Precedence is: **CLI flags > jbundle.toml > internal defaults**. ## Supported JDK Versions jbundle downloads runtimes from Adoptium. Accepted versions: | Version | Type | Status | |---------|------|--------| | `11` | LTS | Supported | | `17` | LTS | Supported | | `21` | **LTS** | **Default** | | `22` | STS | Supported | | `23` | STS | Supported | | `24` | STS | Supported | | `25` | LTS | Supported | LTS versions are recommended for production. Default is `21` when not specified. **Note:** Java 8 is not supported—jbundle requires `jlink` and `jdeps` (introduced in Java 9). ## Supported Platforms | Target | Status | |--------|--------| | `linux-x64` | Supported | | `linux-aarch64` | Supported | | `macos-x64` | Supported | | `macos-aarch64` | Supported | ## Supported Build Systems | System | Detection | |--------|-----------| | deps.edn (tools.build) | `deps.edn` in root | | Leiningen | `project.clj` in root | | Maven | `pom.xml` in root | | Gradle | `build.gradle(.kts)` in root | ## Contributing Contributions are welcome. Process: 1. Fork the repository 2. Create branch for your change 3. Make changes with tests (if applicable) 4. Open pull request ### Development ```bash # Build cargo build # Run against example projects cargo run -- build --input ./example/clojure-deps --output ./dist/app cargo run -- build --input ./example/clojure-lein --output ./dist/app cargo run -- build --input ./example/java-pom --output ./dist/app cargo run -- build --input ./example/java-gradle --output ./dist/app # After installing jbundle build --input ./example/clojure-deps --output ./dist/app # Run generated binary ./dist/app ``` ### Contribution Ideas - Windows support - Customizable `jlink` module list override - Compression options (zstd, xz) - CI/CD examples - Homebrew formula ## License MIT --- # jbundle: Distributing Clojure Without the GraalVM Pain **URL**: https://avelino.run/jbundle-distributing-clojure-without-the-graalvm-pain/ **Published**: 2026-01-23 **Tags**: clojure, rust, graalvm, cli, engineering **Word Count**: 1056 words **Summary**: How frustration with GraalVM native-image led to a Rust tool that packages Clojure apps into self-contained binaries — by embedding a minimal JVM instead of fighting reflection configs. If you've ever tried to ship a Clojure CLI tool as a single binary, you know the pain. GraalVM native-image promises native compilation, but the reality is a maze of build-time class initialization, reflection configs, and incompatible libraries. After years of fighting this battle with [chrondb](https://github.com/moclojer/chrondb) and [moclojer](https://github.com/moclojer/moclojer), I built [jbundle](https://github.com/avelino/jbundle) — a different approach entirely. ## The GraalVM native-image tax Coming from Go, where `go build` gives you a static binary in seconds, moving to Clojure for CLI tools felt like a regression in distribution. GraalVM native-image exists, but using it seriously means paying an ongoing tax. Here's what a real native-image setup looks like. This is from chrondb's `native_image.clj`: ```clojure (def base-build-time-classes ["org.apache.lucene.analysis.standard.StandardAnalyzer" "org.apache.lucene.store.FSDirectory" "org.eclipse.jetty.server.Server" "org.eclipse.jetty.servlet.ServletContextHandler" ;; ... dozens more classes "clojure.asm.ClassVisitor" "clojure.lang.Compiler"]) (def base-run-time-classes ["org.eclipse.jgit.util.FileUtils" "com.fasterxml.jackson.core.JsonFactory" ;; more classes that break if initialized at build-time ]) ``` Every dependency you add potentially requires you to figure out which of its classes must be initialized at build-time vs runtime. Get it wrong, and you get cryptic errors at compile time or, worse, at runtime. The `clj-easy/graal-build-time` project helps, but you still end up maintaining a handcrafted list of class configurations that grows with every dependency. Both chrondb and moclojer generate their native-image arguments programmatically — a Clojure namespace that outputs `reflect-config.json`, `resource-config.json`, and a `native-image-args` file with flags like `--initialize-at-build-time`, `--initialize-at-run-time`, `--no-fallback`, and platform-specific linker options. The moclojer CI even runs a tracing agent to discover reflection usage dynamically. All of this just to get a binary. The fundamental problem: GraalVM native-image requires you to know your application's runtime behavior at compile time. For a dynamic language like Clojure, that's inherently adversarial. ## A different bet: embed the runtime jbundle takes the opposite approach. Instead of eliminating the JVM, it includes a minimal one. The key insight is that `jlink` (available since JDK 9) can produce a custom JVM runtime containing only the modules your application actually uses. A typical Clojure CLI app needs `java.base`, `java.logging`, maybe `java.sql` — resulting in a runtime of ~30-50 MB instead of the full ~300 MB JDK. The final binary is a single executable file. No JVM installation required on the target machine. No `.jar` files to manage. Just `./my-app` and it runs. ## Opening the hood jbundle's pipeline has five stages: ``` Source Project → Uberjar → JDK (cached) → jlink runtime → Single Binary ``` **Stage 1: Build the uberjar.** jbundle detects your build system automatically. If it finds `deps.edn` with a `build.clj`, it runs `clojure -T:build uber`. If it finds `project.clj`, it runs `lein uberjar`. You can also pass a pre-built `.jar` directly. **Stage 2: Ensure a JDK is available.** jbundle queries the [Adoptium API](https://api.adoptium.net/v3) to download a JDK matching your target platform. Downloads are cached in `~/.jbundle/cache/jdk-{version}-{os}-{arch}` and verified via SHA256. **Stage 3: Detect required Java modules.** It runs `jdeps --print-module-deps` on your uberjar to discover which Java modules are actually referenced. If jdeps fails (common with complex JARs), it falls back to a sensible default set. **Stage 4: Create a minimal runtime.** Using `jlink` with the detected modules, it produces a stripped-down JVM: ``` jlink --module-path jmods \ --add-modules java.base,java.logging,java.sql \ --strip-debug \ --no-man-pages \ --no-header-files \ --compress=zip-6 \ --output runtime/ ``` **Stage 5: Pack everything into one file.** This is where it gets interesting. The final binary is a concatenation of two parts: ``` [shell stub script] + [payload.tar.gz] ``` The stub is a generated shell script that: 1. Computes a hash of the payload for caching. 2. On first run, extracts the payload to `~/.jbundle/cache/{hash}/`. 3. On subsequent runs, uses the cached extraction directly. 4. Executes `runtime/bin/java -jar app.jar` with the embedded runtime. The `tail -c $PAYLOAD_SIZE` trick in the stub extracts exactly the payload bytes from the end of the file. This is the same technique used by tools like `makeself` — a proven pattern for self-extracting archives. ## Why Rust? This might seem contradictory: a tool for Clojure developers, written in Rust. The reasoning is pragmatic: **The tool itself needs to be a single binary.** If jbundle required a JVM to run, we'd have a chicken-and-egg problem. You'd need Java installed to build the thing that removes the Java requirement. Rust gives us a zero-dependency static binary out of `cargo build --release`. **The problem domain is systems programming.** jbundle manipulates archives, downloads files with integrity verification, manages caches, detects platform-specific paths, and orchestrates external processes (`jdeps`, `jlink`, `clojure`). This is exactly what Rust excels at — I/O-heavy orchestration with strong guarantees. **Error handling matters here.** A packaging tool that silently produces broken binaries is worse than useless. Rust's type system (with `thiserror` for domain errors and `anyhow` for the main function) makes it hard to forget error paths. Every fallible operation is explicit in the code. **Cross-compilation is trivial.** Supporting linux-x64, linux-aarch64, macos-x64, and macos-aarch64 from a single codebase with `cargo build --target` is something Rust handles out of the box. The Rust ecosystem also provided exactly the right tools: `clap` for CLI parsing, `reqwest` for async HTTP, `tar`/`flate2`/`zip` for archive manipulation, `indicatif` for progress bars, and `tokio` for async I/O. The entire tool compiles in seconds and produces a ~10 MB binary. ## The trade-off jbundle doesn't produce native code. Your application still runs on the JVM, with JVM startup time and memory characteristics. The binaries are larger than what GraalVM native-image would produce (~50-80 MB vs ~20-40 MB for a typical CLI app). But you gain something valuable: **it works with every Clojure library, every time.** No reflection configs. No build-time vs runtime class initialization. No incompatible dependencies. No multi-minute native compilation. No tracing agents. If your app runs on `java -jar`, jbundle can package it. For CLI tools where startup time is critical (sub-100ms), GraalVM native-image is still the right choice — if you're willing to pay the maintenance cost. For everything else — services, tools where a 1-2 second startup is acceptable, applications with complex dependency trees — jbundle removes an entire category of build infrastructure. ## The real lesson Sometimes the best solution isn't the technically purest one. GraalVM native-image is impressive engineering, but it fights against Clojure's dynamic nature. jbundle accepts the JVM for what it is and focuses on the actual user problem: distribution. One command, one binary, runs anywhere. That's the Go developer experience I was missing, adapted to Clojure's reality. --- > **Note:** Previously known as clj-pack. Renamed to jbundle to reflect support for all JVM languages, not just Clojure. --- # When Product Breaks, It Breaks Trust **URL**: https://avelino.run/when-product-breaks-it-breaks-trust/ **Published**: 2026-01-06 **Tags**: product, reliability, brand, growth, leadership **Word Count**: 505 words **Summary**: Incidents happen. The product lesson is learning to measure what you lose, protect the brand, rebuild with patience, and only then return to acquisition. Product breaks. Not because someone was careless, but because reality is ruthless. Systems live inside a web of dependencies, past decisions, and bets that only show their true price when something fails. At some point, what worked yesterday stops delivering today. No warning. No graceful transition. It just stops fulfilling the core promise. When that happens, the most common mistake is to label it a technical problem. It isn't. It's a product problem. Because product lives in the user's mind, not in the repo. From the outside, there is no architecture, no context, no justification. There's only continuity—or the absence of it. It worked. Now it doesn't. The relationship breaks right there. These moments reveal how resilient the product really was. Often the incident didn't create fragility; it exposed it. And that's where patience becomes a strategic skill. Not passive patience—waiting for the fire to cool down—but active patience: resisting the urge to "get back to normal" before understanding what "normal" was actually costing you. Before acting, measure. Measure not just lost revenue, but shaken confidence. How many users felt insecure? How many started doubting the predictability of the product? How many tied the frustration directly to your brand? Product impact rarely shows up only in financial dashboards; it shows up in the quiet user who doesn't come back. Getting the house in order starts with that honesty. Sustainable growth requires more than speed. It requires structure, predictability, and choices that can survive time. It requires abandoning the illusion that shortcuts don't charge interest. A mature product isn't one that never fails; it's one designed with the assumption that failures will happen. This kind of thinking didn't come out of nowhere for me. In 2022, when I stepped into a C-level role focused on product, an employee gifted me a book that felt almost too obvious at the time: _Inspired_ by Marty Cagan. Only later—after real incidents with real consequences—did it stop being "a good read" and start functioning as a practical reference. The central message is simple and uncomfortable: product is not the feature list, not delivery velocity, not the stack. Product is the promise working reliably in real life. And that promise must survive bad days. It must survive external changes, accumulated decisions, and dependencies you don't control. When it doesn't, the work isn't "patch fast and move on." The work is to learn, reinforce, and evolve the system as a whole. Another recurring trap is believing the way out is to accelerate acquisition to offset losses. It's the opposite. Acquisition amplifies everything—including fragility. Bringing more users into an unstable core doesn't create growth; it creates scaled disappointment. Growth isn't scaling traffic. It's scaling the amount of trust you deliver per user. In the end, every growing product collides with reality like this. The difference between teams that mature and teams that spiral isn't the incident itself. It's the response. You can use a crisis as an excuse to run faster. Or you can use it as an inflection point to build better. --- # Distribution Is Not a Detail. It Is the Product. **URL**: https://avelino.run/distribution-is-not-a-detail-it-is-the-product/ **Published**: 2026-01-01 **Tags**: product, distribution, strategy, simplicity, product development, user experience, habit, routine **Word Count**: 395 words **Summary**: Most products fail not because of missing features, but because they don't live where users already are. Distribution is the central decision — it defines frequency, format, and limits. If the product doesn't fit into someone's daily routine, it simply doesn't exist. Most products are built as if the problem were a lack of features. More screens, more options, more control. But what kills products is rarely that. What kills them is distance. The product is not where the user lives. A product is not just what you build. A product is what shows up. If the user has to remember that you exist, decide to open something, or step out of their natural daily flow to use you, you're already at a disadvantage. Good products don't ask for attention. They appear at the right moment, in the right place, without requiring conscious effort. Habit always beats intention. People don't want more things to manage. They want fewer decisions throughout the day. Anything that depends on deliberate effort, constant motivation, or a "I'll check it later" mindset tends to die. Products that survive anchor themselves in what already happens, not in what should happen. There is an obsession with adding. More functionality, more screens, more possibilities. But for more than a decade now, it has been clear that simplicity is not an aesthetic choice, it is a strategy. Products that last do fewer things, in fewer places, with more clarity. Complexity is rarely a sign of ambition. Most of the time, it is a lack of decision. Distribution is that decision. Where the product lives defines its frequency, its format, its language, and its limits. When this choice is wrong, everything that comes after becomes compensation. Onboarding to explain too much. Notifications to remind. Features to justify existence. None of that fixes the core problem. Truly good products don't need to be remembered. They are present. They don't compete with the user's daily life, they fit into it. The closer a product is to someone's routine, the less surface area it needs. Fewer screens, fewer choices, less explanation. Recurrence replaces complexity. That's why the right question was never "what else can we build?". The right question is "where does this product already fit without getting in the way?". That answer comes before the first line of code. And it should kill most ideas before they ever turn into a backlog. Distribution is not the path to the product. It is not what comes after. It is the central decision. If the product does not live where the user already is every day, it simply does not exist. --- # Open Source Contributions - January 2026 **URL**: https://avelino.run/foss/2026/01/ **Published**: 2026-01-01 **Word Count**: 1260 words **Summary**: January 2026 saw 13 repositories with 47 pull requests and 43 issues, highlighting a month of significant contributions and advancements. In January 2026, a vibrant month of development unfolded across 13 repositories. With a total of 104 contributions, including 47 pull requests and 43 issues, this timeline showcases the collaborative efforts and innovations driving progress in the projects. Explore the significant milestones and contributions made throughout the month. ## 2026-01-30 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [change org: from moclojer to avelino](https://github.com/avelino/chrondb/pull/96) - 🔀 Opened PR in [JabRef/jabref](https://github.com/JabRef/jabref): [WIP: jbundle: fork test](https://github.com/JabRef/jabref/pull/14954) - ✅ Reviewed PR in [avelino/roamresearch-todoist-backup](https://github.com/avelino/roamresearch-todoist-backup): [chore(deps): bump lodash from 4.17.21 to 4.17.23](https://github.com/avelino/roamresearch-todoist-backup/pull/5#pullrequestreview-3729996345) (Approved) ## 2026-01-29 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Fix concurrent access causing file lock conflicts in FFI bindings](https://github.com/avelino/chrondb/pull/95) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [feat: add Gradle multi-project support with auto-detection](https://github.com/avelino/jbundle/pull/43) - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add SSL development libraries as pre-req](https://github.com/avelino/jbundle/pull/40#pullrequestreview-3722628080) (Approved) ## 2026-01-28 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [fix: preserve data when reopening database via FFI](https://github.com/avelino/chrondb/pull/94) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [fix: preserve data when reopening database via FFI](https://github.com/avelino/chrondb/pull/93) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Optimize GitHub Actions to reduce macOS runner usage](https://github.com/avelino/chrondb/pull/92) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [fix: improve error reporting when database open fails](https://github.com/avelino/chrondb/pull/90) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [fix: use dedicated thread with 64MB stack for FFI calls](https://github.com/avelino/chrondb/pull/89) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [make documantation](https://github.com/avelino/jbundle/pull/38) - ✅ Reviewed PR in [avelino/jbundle](https://github.com/avelino/jbundle): [feat(build): enable more aggressive optimizations for Release](https://github.com/avelino/jbundle/pull/37#pullrequestreview-3716748402) (Approved) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [State corruption/reset on each process invocation in GitHub Actions CI](https://github.com/avelino/chrondb/issues/91) ## 2026-01-27 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [graalvm 22](https://github.com/avelino/chrondb/pull/88) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Fix lib-open to return -1 on failure and document stack requirements](https://github.com/avelino/chrondb/pull/85) - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [Add Docker as local provider using bollard API](https://github.com/avelino/spuff/pull/13) - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [transfer responsibility to the agent](https://github.com/avelino/spuff/pull/11) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [StackOverflowError on Linux CI environments (GitHub Actions) - GraalVM native-image stack requirements](https://github.com/avelino/chrondb/issues/87) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Database fails to open with orphan lock files after crash](https://github.com/avelino/chrondb/issues/86) - 🐛 Opened issue in [avelino/spuff](https://github.com/avelino/spuff): [Suporte a Docker como provider local](https://github.com/avelino/spuff/issues/12) ## 2026-01-26 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Avelino/autodownload rust so notfound](https://github.com/avelino/chrondb/pull/83) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add runtime auto-download for Rust native library](https://github.com/avelino/chrondb/pull/82) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [pipeline: release](https://github.com/avelino/jbundle/pull/34) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [add pipeline progress indicator with numbered steps](https://github.com/avelino/jbundle/pull/33) - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [add more ai tools](https://github.com/avelino/spuff/pull/10) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [StackOverflowError on put operation with GraalVM native image (macOS arm64)](https://github.com/avelino/chrondb/issues/84) ## 2026-01-25 - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [migrate local state from SQLite to ChronDB](https://github.com/avelino/spuff/pull/9) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Add full jbundle documentation to project page](https://github.com/avelino/avelino.run/pull/96) ## 2026-01-24 - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add multi-layer binary format with AppCDS and CRaC support](https://github.com/avelino/jbundle/pull/31) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add retry and file locking for JDK downloads](https://github.com/avelino/jbundle/pull/26) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add jbundle.toml project configuration support](https://github.com/avelino/jbundle/pull/25) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Project Leyden: AOT compilation and condensed JVM execution](https://github.com/avelino/jbundle/issues/30) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [CRaC: checkpoint/restore for near-instant startup](https://github.com/avelino/jbundle/issues/29) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [JVM startup profiles: cli vs server execution modes](https://github.com/avelino/jbundle/issues/28) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [AppCDS: pre-computed class data sharing for startup reduction](https://github.com/avelino/jbundle/issues/27) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Add optional jbundle.toml configuration file](https://github.com/avelino/jbundle/issues/24) ## 2026-01-23 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [add shared library build and language bindings](https://github.com/avelino/chrondb/pull/79) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [fixed graalvm native image](https://github.com/avelino/chrondb/pull/78) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add rustc-style build error diagnostics](https://github.com/avelino/jbundle/pull/23) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Support Java projects (Maven and Gradle)](https://github.com/avelino/jbundle/pull/21) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [detect minimum Java version from JAR class files](https://github.com/avelino/jbundle/pull/20) - 🔀 Opened PR in [avelino/jbundle](https://github.com/avelino/jbundle): [Add --shrink flag for safe JAR size reduction](https://github.com/avelino/jbundle/pull/1) - 🔀 Opened PR in [Roam-Research/roam-depot](https://github.com/Roam-Research/roam-depot): [Avelino ext updates](https://github.com/Roam-Research/roam-depot/pull/1192) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Friendly build error diagnostics with source context (rustc-style)](https://github.com/avelino/jbundle/issues/22) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Embedded packaging configuration in JAR (META-INF)](https://github.com/avelino/jbundle/issues/19) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Structured build output with per-phase metrics](https://github.com/avelino/jbundle/issues/18) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Smart resource reachability analysis for shrink](https://github.com/avelino/jbundle/issues/17) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Runtime tracing for accurate module detection](https://github.com/avelino/jbundle/issues/16) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Build optimization profiles (dev, balanced, size)](https://github.com/avelino/jbundle/issues/15) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Interactive HTML build report for JAR analysis](https://github.com/avelino/jbundle/issues/14) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Lock file for JDK cache to prevent concurrent corruption](https://github.com/avelino/jbundle/issues/13) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Validate project's minimum Java version requirement](https://github.com/avelino/jbundle/issues/12) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Retry with exponential backoff for JDK download](https://github.com/avelino/jbundle/issues/11) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Full pipeline progress indicator](https://github.com/avelino/jbundle/issues/10) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Support .jbundle.edn as project config file](https://github.com/avelino/jbundle/issues/9) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Lazy runtime extraction for faster startup](https://github.com/avelino/jbundle/issues/8) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Dry-run mode (--dry-run)](https://github.com/avelino/jbundle/issues/7) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Manual jlink module override (--jlink-modules)](https://github.com/avelino/jbundle/issues/6) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Alternative compression algorithms (zstd, xz)](https://github.com/avelino/jbundle/issues/5) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [jbundle analyze — JAR analysis before packaging](https://github.com/avelino/jbundle/issues/4) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Pre-compiled binaries in GitHub Releases](https://github.com/avelino/jbundle/issues/3) - 🐛 Opened issue in [avelino/jbundle](https://github.com/avelino/jbundle): [Homebrew formula for easy installation](https://github.com/avelino/jbundle/issues/2) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Publish shared library artifacts on GitHub Releases for easy installation](https://github.com/avelino/chrondb/issues/81) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [Embedded ChronDB: language bindings for use outside the JVM](https://github.com/avelino/chrondb/issues/80) ## 2026-01-22 - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Fix SQL query parsing and add remote storage support](https://github.com/avelino/chrondb/pull/77) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add optional JSON Schema validation per namespace](https://github.com/avelino/chrondb/pull/76) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [ Add DDL support for CREATE/DROP TABLE and branch functions](https://github.com/avelino/chrondb/pull/75) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [Add `IN`, `NOT IN`, `BETWEEN`, `IS NULL` operators to SQL](https://github.com/avelino/chrondb/pull/74) - 🔀 Opened PR in [avelino/chrondb](https://github.com/avelino/chrondb): [feat: Add durability, performance, and observability infrastructure](https://github.com/avelino/chrondb/pull/63) - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [Add GitHub Copilot CLI as AI tool option](https://github.com/avelino/spuff/pull/8) - 🔀 Opened PR in [avelino/roamresearch-todoist-backup](https://github.com/avelino/roamresearch-todoist-backup): [Add block reconciler for incremental sync](https://github.com/avelino/roamresearch-todoist-backup/pull/4) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement EXPLAIN for query analysis](https://github.com/avelino/chrondb/issues/73) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement basic authentication (password, md5)](https://github.com/avelino/chrondb/issues/72) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement basic subqueries (scalar, IN clause)](https://github.com/avelino/chrondb/issues/71) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement basic DDL (CREATE TABLE, DROP TABLE, SHOW TABLES)](https://github.com/avelino/chrondb/issues/70) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement DISTINCT keyword and HAVING clause](https://github.com/avelino/chrondb/issues/69) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement SQL:2011 temporal syntax (AS OF SYSTEM TIME, FOR SYSTEM_TIME)](https://github.com/avelino/chrondb/issues/68) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement PostgreSQL type system (OIDs, type coercion)](https://github.com/avelino/chrondb/issues/67) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement transaction boundaries (BEGIN/COMMIT/ROLLBACK)](https://github.com/avelino/chrondb/issues/66) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement IN, BETWEEN, IS NULL/IS NOT NULL operators](https://github.com/avelino/chrondb/issues/65) - 🐛 Opened issue in [avelino/chrondb](https://github.com/avelino/chrondb): [feat(sql): Implement Extended Query Protocol (Parse/Bind/Describe/Execute)](https://github.com/avelino/chrondb/issues/64) ## 2026-01-21 - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [Add SSHFS-based volume mounting for bidirectional file sync](https://github.com/avelino/spuff/pull/7) ## 2026-01-20 - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [Add AI coding tools selection](https://github.com/avelino/spuff/pull/6) - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [fixed format](https://github.com/avelino/spuff/pull/3) - 🔀 Opened PR in [avelino/spuff](https://github.com/avelino/spuff): [Avelino/spuff yaml project spec](https://github.com/avelino/spuff/pull/1) - 🐛 Opened issue in [avelino/spuff](https://github.com/avelino/spuff): [Feature: Volume Mounting Support (Docker Compose-like API via SSHFS)](https://github.com/avelino/spuff/issues/5) - 🐛 Opened issue in [avelino/spuff](https://github.com/avelino/spuff): [Feature: AI Coding Environment Selection](https://github.com/avelino/spuff/issues/4) ## 2026-01-06 - 🔀 Opened PR in [avelino/roamresearch-ouraring](https://github.com/avelino/roamresearch-ouraring): [Refactor: extract shared utilities and formatters](https://github.com/avelino/roamresearch-ouraring/pull/3) ## 2026-01-05 - 🔀 Opened PR in [Roam-Research/roam-depot](https://github.com/Roam-Research/roam-depot): [ouraring upgrade version: fixed any bugs](https://github.com/Roam-Research/roam-depot/pull/1167) - 🔀 Opened PR in [avelino/roamresearch-ouraring](https://github.com/avelino/roamresearch-ouraring): [Fix null handling in formatters and improve docs](https://github.com/avelino/roamresearch-ouraring/pull/2) - 🔀 Opened PR in [avelino/roam-depot](https://github.com/avelino/roam-depot): [ouraring upgrade version: fixed any bugs](https://github.com/avelino/roam-depot/pull/1) ## 2026-01-01 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Add article: Distribution Is Not a Detail. It Is the Product.](https://github.com/avelino/avelino.run/pull/89) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 12 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-ouraring](https://github.com/avelino/roamresearch-ouraring): 6 commit(s) - [See commits](https://github.com/avelino/roamresearch-ouraring/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/jbundle](https://github.com/avelino/jbundle): 38 commit(s) - [See commits](https://github.com/avelino/jbundle/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 20 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-ical](https://github.com/avelino/roamresearch-ical): 6 commit(s) - [See commits](https://github.com/avelino/roamresearch-ical/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/roam-block-reconciler](https://github.com/avelino/roam-block-reconciler): 7 commit(s) - [See commits](https://github.com/avelino/roam-block-reconciler/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-todoist-backup](https://github.com/avelino/roamresearch-todoist-backup): 5 commit(s) - [See commits](https://github.com/avelino/roamresearch-todoist-backup/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/chrondb-test-remote-db](https://github.com/avelino/chrondb-test-remote-db): 1 commit(s) - [See commits](https://github.com/avelino/chrondb-test-remote-db/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/spuff](https://github.com/avelino/spuff): 75 commit(s) - [See commits](https://github.com/avelino/spuff/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [Roam-Research/roam-depot](https://github.com/Roam-Research/roam-depot): 1 commit(s) - [See commits](https://github.com/Roam-Research/roam-depot/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) - 🔨 Push to [avelino/chrondb](https://github.com/avelino/chrondb): 62 commit(s) - [See commits](https://github.com/avelino/chrondb/commits?author=avelino&since=2026-01-01T00:00:00Z&until=2026-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Why complexity steals agility from companies **URL**: https://avelino.run/why-complexity-steals-agility-from-companies/ **Published**: 2025-12-12 **Tags**: leadership, complexity, agility, organizational design, technical debt, systems thinking, simplicity, management, scaling **Word Count**: 640 words **Summary**: Agility doesn't disappear because people got worse — it disappears because systems became too heavy to move. How complexity accumulates silently and what it really takes to stay nimble. It takes a while to notice. No company wakes up one day thinking, "That's it, we're slow now." Agility fades quietly, disguised as growth, good intentions, and decisions that made sense at the time. In the beginning, everything is simple. Not because it was well designed, but because it's still small. The system fits in people's heads. You change something today and see the effect tomorrow. You fail fast, fix fast. Agility shows up almost as a side effect of size. The problem starts when the company grows, the system grows with it, and no one goes back to ask whether what was built still makes sense. Every decision becomes permanent. Every exception turns into a rule. Every shortcut becomes a foundation. Complexity accumulates like dust. It doesn't bother you at first. Then it starts to weigh everything down. One of the clearest signs that something is wrong is when the way the company works stops living in the systems and starts living in people. When you hear things like "this only works because so-and-so knows how it works" or "better not touch this right now." I've seen this too many times. And it always ends the same way: fear of change, slowness, and dependence on heroes. That often gets mistaken for maturity. It isn't. It's operational fragility with a layer of experience on top. When systems become hard to understand, companies try to compensate with process. More meetings, more checkpoints, more alignment. It all starts with good intentions. But process doesn't create clarity. It only tries to limit the damage caused by its absence. Eventually, even obvious decisions start requiring too much context. I've written before about how [reorganizing teams isn't a crisis, it's maintenance](https://avelino.run/reorganizing-team-isnt-crisis-its-maintenance/). The same logic applies to systems and technical decisions. When maintenance is postponed for too long, the cost stops being organizational and becomes structural. Collapse doesn't happen because someone made a mistake — it happens because no one took care of things. Meanwhile, the cost of mistakes goes up. What used to be just learning now affects customers, revenue, reputation, sometimes even regulators. The company feels that pressure but keeps deciding as if mistakes were still cheap. When it finally realizes they aren't, it goes into defensive mode. And caution without clarity turns into paralysis. Agility doesn't disappear because people got worse. It disappears because the system became too heavy to move. The most common reaction is to hire more people. I've done it. I've seen it happen. It works for a short while. Then it gets worse. More people in confusing systems only increase coordination costs and noise. The company grows in effort, not in speed. That's when I learned — the hard way — that talent density isn't about hiring brilliant people. It's about having people who know how to reduce complexity, not just survive inside it. People who can explain systems, not only operate them. Who value predictability over heroics. Who understand that code, process, and architecture exist to make the company easier to change — not harder. Companies that depend on saviors are always one burnout away from chaos. Agility, in the end, isn't about moving faster. It's about tripping less. It comes from removing everything that gets in the way: too many exceptions, decisions that are hard to explain, tribal context, solutions that only work for the people who built them. It comes from accepting that simplification isn't a loss of sophistication — it's a gain of control. Complexity doesn't kill companies all at once. It just makes everything take longer, cost more, and depend on more people than it should. The companies that stay agile aren't the loudest or the most elaborate. They're the ones that can explain how they work — and change direction — without drama. Simplicity isn't aesthetics. It's survival disguised as a technical choice. --- # Employees don't need to think like owners **URL**: https://avelino.run/employees-dont-need-think-like-owners/ **Published**: 2025-12-09 **Tags**: leadership, career, psychology, erikson, professional development, workplace culture, adult responsibility, generativity, employee engagement, management **Word Count**: 1454 words **Summary**: Why 'think like an owner' is a toxic corporate trend. Using Erik Erikson's developmental psychology to reframe what it really means to be a responsible professional — without burning out or losing yourself. **They need to think like responsible adults** There's a corporate trend that's been annoying me for years: "think like an owner". Sounds pretty on a culture slide, but in practice it usually turns into two things: 1. Employees blaming themselves for not "giving enough"; 2. Companies using guilt and romanticism to squeeze unpaid extra hours. Employees don't need to think like owners. Employees need to think like **responsible adults**. And the person who frames this way better than any leadership book is Erik H. Erikson, the psychoanalyst who mapped human development into eight stages from infancy to old age in the classic *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*. What he calls "psychosocial crises" is exactly the kind of conflict that shows up inside companies when we treat adults like teenagers who need a "dad-boss" or like mini-entrepreneurs playing pretend. Let's break it down. ## What does Erikson actually say about "adult life"? Erikson lays out eight stages of development, each one with a central tension (a conflict) we need to face: trust vs. mistrust, autonomy vs. shame, initiative vs. guilt, industry vs. inferiority, identity vs. role confusion, intimacy vs. isolation, generativity vs. stagnation, integrity vs. despair. When we talk work and career, three of these matter a lot (as presented in *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*): - **Identity vs. role confusion (adolescence):** The core question is: *"Who am I? What role do I play in the world?"* When that's unresolved, adults glue their identity to the company: "I am Company X". That's where you get the employee who sacrifices themselves to the point of self-destruction thinking that's maturity. It's not. It's hanging your ego on someone else's balance sheet. - **Intimacy vs. isolation (young adulthood):** The question shifts to: *"Can I connect deeply without losing myself?"* At work, that's the ability to build strong bonds with the team, the product, the customer — **without fusion**. I care a lot, but I don't become the company. I connect, but I don't dissolve. - **Generativity vs. stagnation (midlife):** Now comes the most "adult" question of all: *"Does my life actually count for something?"* Generativity is the concern with building something beyond yourself: kids, projects, legacy, people you helped grow. At work, it's when you stop playing just the "my job title" game and start caring about the real impact of what you deliver. When a company says "think like an owner", in practice it's trying to skip over stages of human psychology that Erikson describes in *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*. He's basically saying: **you don't need to be an owner to behave like an adult**. You need to deal with identity, connection, and generativity in a mature way. ## A responsible adult isn't the one who dies for the company ### It's the one who knows when to stop "Wearing the company jersey" means knowing when to stop for today, because tomorrow there's more and you need to perform tomorrow too. That's an adult definition. In Erikson's logic in *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*, maturity rests on two simple (and often ignored) things: - **Healthy autonomy:** I know how to take care of my own life. - **Sustained responsibility:** I can keep delivering over time, not just in random hero bursts. When a company only celebrates the 2 a.m. hero, it's rewarding **infantilized behavior**: people who need to prove their worth through visible sacrifice instead of consistent results. A responsible adult does a different kind of math: - If I pull an all-nighter today, I destroy my thinking tomorrow; - If that becomes a pattern, quality drops; - If quality drops, my real value goes down, no matter how "dedicated" I look. So: **knowing when to stop is part of professional ethics**, not laziness. It's not lack of commitment — it's commitment to continuity. It's the same generativity Erikson marks as a sign of adult life in *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*: building something that lasts, not burning yourself out in a cycle of heroics and collapse. ## Be selfish about your career ### Generativity starts with you The phrase is intentionally sharp: **be selfish about your career.** But this is adult selfishness, not teenager selfishness. In *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*, Erikson shows that the identity crisis (who am I, what role do I play) comes before the capacity to give yourself to others in a mature way. In other words: you only become genuinely useful to others once you stop living to please any random authority figure. In the work context, that leads to a very direct consequence: - You're not at the company to "look good for the boss"; - You're there to **grow as a professional** and, through that growth, **deliver more value**. That flips the game: - Instead of thinking "how do I impress my boss?", you think "what technical and behavioral skills make me more valuable in the market — and how do I use that to generate more results here?". That's generativity applied to your career: I develop myself, and that development overflows into impact — on the team, the product, the customer. Being selfish about your career means: - studying with intent, not just reacting to whatever lands on your lap; - hunting for projects that increase your complexity, not just your comfort; - negotiating a context that allows you to perform long term, not just fight fires. That's not being "less loyal" to the company. It's being loyal to what, in Erikson's view in *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*, defines adult life: **the capacity to build, guide, care, and create impact**. ## Are you a cost or an investment? ### The math an adult does without drama Here's a line that hurts, but clarifies: > Your yearly financial impact for the company has to be way higher than your total comp. Otherwise you're not an investment — you're just a cost. When Erikson talks about "industry vs. inferiority" in *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*, he's describing that phase where a person starts to ask: *"Can I actually produce something that works in the real world?"* Lots of people reach adulthood without really crossing that bridge — and then they run from any objective metric. In a company, the test is brutally simple: - If what you produce doesn't pay your own salary (and then some), the math doesn't work; - The company might hold you for a while because of potential, a bet, or context… but **reality always wins in the end**. Thinking like a responsible adult means accepting this math, no drama, no soap opera: - What is the direct or indirect impact of my work on revenue, margin, cost, risk, growth? - What decisions do I make day-to-day that shift that curve? - What am I learning this year that will dramatically increase my ability to generate value next year? Erikson helps again: generativity is about *"making your life count"* — at work, that becomes *"making your payroll time count"*. If you're a manager, the question scales: is your **team** a cost or an investment? Your job isn't shielding people from any discomfort. Your job is helping them walk through these professional development crises: - give context so they understand the game (identity); - build strong bonds without fusion (intimacy); - demand real impact, not just visible effort (industry and generativity). ## Wearing the jersey WITHOUT becoming its hostage "Wearing the jersey" turned toxic because it was hijacked by lazy management culture: instead of building context, leadership throws guilt. Instead of designing systems, it leans on "ownership spirit". If we rewrite this with Erikson and *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)* on the table, the message changes: - **I don't want you thinking like an owner.** Owners deal with capital risk, control, leverage over decisions, legal exposure — it's a different game. - I want you thinking like a **responsible adult**, someone who: - knows their limits and defends them (clear identity); - connects deeply with the team without disappearing inside it (mature intimacy); - delivers results that cover their cost and still leave a legacy (generativity, not stagnation). This is a far more robust view — psychologically and economically — than the theater of the "employee-entrepreneur". ## Reference For anyone who wants the original source: > **Erikson, E. H. (1982). *[The Life Cycle Completed](https://www.amazon.com/Life-Cycle-Completed-Extended-Version/dp/0393317722)*. New York: W. W. Norton & Company.** It's a short, straight-to-the-point book where he revisits the eight stages of human development and unpacks what it really means to mature over a lifetime — including the adult phase, where work, caring for others, and legacy show up with full force. To wrap it up: don't push people to "think like owners". Owners already have their own mess to deal with. Push people to **think like adults**: protect their own energy, be intelligently selfish with their careers, and deliver results that make any "cost cutting" conversation sound ridiculous when their name comes up. That's not fluffy culture talk. That's developmental psychology wired straight into how work actually functions in the real world. --- # Reorganizing a Team Isn't a Crisis: It's Maintenance **URL**: https://avelino.run/reorganizing-team-isnt-crisis-its-maintenance/ **Published**: 2025-12-06 **Tags**: team management, leadership, talent density, reorganization, hiring, team building, staff engineering, organizational design, people management, high performance teams **Word Count**: 556 words **Summary**: Why treating team reorganization as routine maintenance rather than a crisis leads to better outcomes. Exploring talent density, role evolution, and the uncomfortable decisions leaders must make to build high-performing teams Companies treat reorganization like a five-alarm fire. It's bizarre. The engine starts vibrating, the chassis rattles, and everyone insists "it'll pass." It won't. **Good teams don't break because you adjust them — they break because you don't.** The truth is far less dramatic and far more operational: reorganizing is maintenance. It's the 10,000 km service. It's the fine-tuning that separates a team that moves from a team that accelerates. And, in the end, the equation is almost always the same: **Trade quantity for talent density.** The only math that works for product companies. This isn't motivational fluff. It's empirically solid. Geoff Smart and Randy Street, in the classic *[Who](https://www.amazon.com/dp/0345504194)*, go straight to the point: great hiring is the only structural advantage that doesn't decay. Bad hiring, on the other hand, compounds negatively. One A-player lifts the entire team. Three B-players just occupy seats and generate drag. The math never balances. Ben Horowitz, in *[The Hard Thing About Hard Things](https://www.amazon.com/dp/0062273205)*, describes the natural rhythm of growing companies: people join, people leave, responsibilities shift, structures evolve. This isn't a leadership failure — it's what happens when you're trying to build something that matters. Static teams are great… for static companies. In the real world, **high performance is flow, not stillness**. Reed Hastings doubles down in *[No Rules Rules](https://www.amazon.com/dp/1984877860)*: talent density is the primary accelerant of organizational performance. Not processes. Not rituals. Not frameworks. **Exceptional people in critical roles.** People who solve, simplify, deliver. People who raise the bar without asking permission. And this brings us to the most uncomfortable part — the one managers avoid but leaders confront: **roles that outlive their usefulness.** In my own case, years ago we created a "Principal Engineer" role. It served a purpose: it helped a former team member grow. It made sense at the time. But contexts evolve, people move on, and teams transform. And like in many companies, the title stayed behind — a relic from a past that no longer exists. To be blunt, I never stopped to question whether the role still made sense. When I finally did, the answer was obvious. It didn't. Will Larson explains this clearly in *[The Staff Engineer's Path](https://www.amazon.com/dp/1484271901)*: Staff and Principal roles exist to solve actual organizational problems, not to decorate résumés. When a title becomes ornamental, it stops aligning and starts confusing. It creates boundaries where there should be collaboration. It creates fuzzy expectations where there should be clear ownership. So I removed it. No drama. No poetry. No "transition process." **A title that doesn't accelerate becomes an obstacle. And obstacles get removed.** This is what many leaders miss: reorganizing isn't a commentary on the past — it's a commitment to the future. It isn't a judgment of those who left — it's clarity for those who stay. It isn't a plot twist — it's routine maintenance. If you lead a team and fear changing the structure, the issue isn't the change. It's the anesthesia. Mature teams don't fear movement. They fear silence. They fear ambiguity. When you communicate with blunt honesty, explain the why, and show the path, the team exhales. And when you add truly exceptional talent, the team grows. Always. That's the maintenance great companies do. No makeup. No noise. No melodrama. Just responsibility for what matters: **building with ambition, alongside people who want to play to win.** --- # Open Source Contributions - December 2025 **URL**: https://avelino.run/foss/2025/12/ **Published**: 2025-12-01 **Word Count**: 246 words **Summary**: December 2025 highlights significant contributions with 20 activities across 9 repositories, including 5 pull requests and 6 issues. Explore the timeline of December 2025, showcasing key contributions and activities across various repositories. This month features a total of 20 events, including push events, pull requests, and issues, reflecting the ongoing collaborative efforts and enhancements in the open-source community. ## 2025-12-22 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [ Add global external-body folder configuration](https://github.com/moclojer/moclojer/pull/344) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Complete documentation overhaul with Django-style structure](https://github.com/moclojer/moclojer/pull/343) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Statistical latency distributions (normal, exponential, percentile-based)](https://github.com/moclojer/moclojer/issues/350) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Global variables shared across all endpoints](https://github.com/moclojer/moclojer/issues/349) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Faker library integration for realistic mock data generation](https://github.com/moclojer/moclojer/issues/348) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Structured HTTP transaction logging with configurable output](https://github.com/moclojer/moclojer/issues/347) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Data buckets: shared key-value store across endpoints](https://github.com/moclojer/moclojer/issues/346) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Automatic CRUD routes with in-memory persistence](https://github.com/moclojer/moclojer/issues/345) ## 2025-12-21 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Add Postman Collection v2.1 support](https://github.com/moclojer/moclojer/pull/342) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Add Claude Code GitHub Workflow](https://github.com/moclojer/moclojer/pull/341) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Add unified AI assistant guidelines with AGENTS.md](https://github.com/moclojer/moclojer/pull/340) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 11 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-ouraring](https://github.com/avelino/roamresearch-ouraring): 2 commit(s) - [See commits](https://github.com/avelino/roamresearch-ouraring/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-export-block](https://github.com/avelino/roamresearch-export-block): 3 commit(s) - [See commits](https://github.com/avelino/roamresearch-export-block/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 5 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-ical](https://github.com/avelino/roamresearch-ical): 12 commit(s) - [See commits](https://github.com/avelino/roamresearch-ical/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 11 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [avelino/roamresearch-todoist-backup](https://github.com/avelino/roamresearch-todoist-backup): 6 commit(s) - [See commits](https://github.com/avelino/roamresearch-todoist-backup/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [moclojer/clj-rq](https://github.com/moclojer/clj-rq): 1 commit(s) - [See commits](https://github.com/moclojer/clj-rq/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) - 🔨 Push to [Roam-Research/roam-depot](https://github.com/Roam-Research/roam-depot): 3 commit(s) - [See commits](https://github.com/Roam-Research/roam-depot/commits?author=avelino&since=2025-12-01T00:00:00Z&until=2025-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Failing on Purpose: Building a Postmortem Culture That Cuts Across the Entire Company **URL**: https://avelino.run/failing-on-purpose-building-postmortem-culture-across-company/ **Published**: 2025-11-25 **Tags**: postmortem, blameless culture, leadership, organizational culture, resilience, learning from failure, incident management, SRE, complex systems, team building **Word Count**: 1725 words **Summary**: Exploring how to build a company-wide postmortem culture that goes beyond engineering, turning every incident into a learning opportunity instead of a blame game, inspired by Dave Zwieback's Beyond Blame At some point in my life as a CTO (technology leader) I noticed something uncomfortable: we talked a lot about "learning from mistakes", but in practice, what happened after an incident looked a lot more like "put out the fire + find who's to blame + move on" than actual learning. That's when I stumbled on [*Beyond Blame – Learning from Failure and Success*](https://www.amazon.com/Beyond-Blame-Learning-Failure-Success-ebook/dp/B016CJ5HUA/ref=tmm_kin_swatch_0), by Dave Zwieback, and two hard truths finally clicked: 1. In complex systems, **failure is not an exception, it's an operating mode**; 2. And if the company's first reaction is to point fingers, you kill any chance of becoming more resilient. Zwieback writes that failure is inevitable and that post-incident analysis, conducted openly and without blame, is the best way to learn from outages and near-misses. When I read that, it matched everything I'd already seen in production: it's not about stopping the world from breaking; it's about how you react when it inevitably does. There's one important detail though: **if this learning only happens inside engineering, it's not culture — it's a silo**. What I want to share here is exactly that shift: how I went from a postmortem practice restricted to tech to a learning culture that involves product, operations, support, finance, sales and whoever else is affected. And how the ideas in [*Beyond Blame – Learning from Failure and Success*](https://www.amazon.com/Beyond-Blame-Learning-Failure-Success-ebook/dp/B016CJ5HUA/ref=tmm_kin_swatch_0) helped me structure this in a more honest and less "slideware" way. ![Failing on Purpose: Building a Postmortem Culture That Cuts Across the Entire Company](/blog/failing-on-purpose-building-postmortem-culture-across-company.png) ## When "human error" becomes an excuse to stop thinking Before this book, I'd already seen the classic pattern: incident happens, a group gathers, someone raises a hand and says something like "it was human error". Investigation over. Everyone goes back to their desk relieved because there's now a "root cause" to document. Zwieback tears this down pretty precisely: he insists that **"human error is a symptom — never the cause — of deeper problems in the system"**. That idea sounds subtle, but it changes everything. When you accept that "nobody wakes up in the morning wanting to do a bad job" and that the person made that decision because, in their head, it made sense given the information they had at that moment, the focus shifts from the person's morality to the system's design: - what kind of deadline pressure existed there? - what information wasn't visible? - which alarm didn't fire? - what process quietly pushed the team toward the shortcut? The book also grounds the discussion in a complex-systems view: you can't use a linear cause-and-effect model in environments where everything is moving all the time. Zwieback pulls from people like Richard Cook (*How Complex Systems Fail*), Erik Hollnagel (Safety-II) and Sidney Dekker (human error) to show that **we learn very little because we try to cram complex stories into overly simple narratives**. Once that sunk in, I became that annoying person who says "I don't accept 'human error' as a root cause". ## The reality check: when only engineering learns, nobody learns In the beginning, our postmortems looked very familiar: engineers, SRE/infra, maybe a PM. We'd open logs, build a timeline, discuss technical decisions, propose improvements. For the people in the room, it was useful. For the rest of the company, nothing changed. But the real impact of incidents is never purely technical. It shows up in: - support having to improvise explanations with zero context, - operations reworking processes based on intuition, - product getting pressured without understanding the root cause, - finance seeing rework costs materialize out of nowhere, - sales dealing with angry customers without a clear story. In other words: **engineering was learning, everyone else was just getting punched in the face**. At the time, I sold myself the narrative of "at least we're doing postmortems". After reading [*Beyond Blame – Learning from Failure and Success*](https://www.amazon.com/Beyond-Blame-Learning-Failure-Success-ebook/dp/B016CJ5HUA/ref=tmm_kin_swatch_0) and connecting it with everything I'd seen in SRE, the penny dropped: the way we were doing it was better than nothing, but way below the potential. The culture was still "IT fixes, everyone else hopes for the best". A real learning culture only starts when the incident becomes a **company-level event**, not just a technical one. ## Flipping the script: from team postmortem to company postmortem The change wasn't magical. It was slow, awkward and full of friction. But a few principles helped a lot. The first was a conscious decision that **postmortems would be blame-free in practice, not just in slides**. That meant that I, as a leader, started opening those conversations by owning my own judgment errors: "I approved this path", "I let this risk pass", "I prioritized X over Y and that contributed". When leadership assumes systemic responsibility, the rest of the team understands this isn't a trial of individuals, it's a review of the system. The second was bringing other departments to the table. Not as "guests", but as essential parts of the story. When you put someone from support, someone from operations, someone from product and sometimes even someone from finance in the same room, the timeline stops being just "at 10:32 the pod restarted" and becomes "at 10:35 the call center started getting hammered", "at 10:40 ops began manually reshuffling schedules", "at 10:55 sales received a furious voice message from a key customer". The narrative turns uncomfortable, human and complete. The third was letting go of the temptation to tell a "single clean story". [*Beyond Blame – Learning from Failure and Success*](https://www.amazon.com/Beyond-Blame-Learning-Failure-Success-ebook/dp/B016CJ5HUA/ref=tmm_kin_swatch_0) spends a lot of time on how our urge to "close the loop" makes us invent tidy stories with a villain and a single trigger, and how that sabotages learning. In our process, I started insisting on multiple perspectives: "how did you see this from your side?", "what else was happening in your area at the time?", "what information did you have when you made that call?". That plurality is what surfaces the real conditions. Once all of that started to take root, the atmosphere shifted. The default emotion stopped being "who screwed up?" and became "what in our system makes this kind of failure likely?". That's a completely different level of discussion. ## Mental tools I carry into every postmortem One of the most useful things about [*Beyond Blame – Learning from Failure and Success*](https://www.amazon.com/Beyond-Blame-Learning-Failure-Success-ebook/dp/B016CJ5HUA/ref=tmm_kin_swatch_0) is how it combines complexity theory, cognitive psychology and engineering practice into a set of lenses you can reuse all the time. A few of them stuck with me. The first is the idea that **the so-called "root cause" is almost never a single thing**. In discussions inspired by the book, some people like to provoke by saying "the only root cause is change" — everything else is a stack of conditions that build up until something tips over. Once you internalize that, you stop looking for a magic button or a scapegoat and instead map layers of context: code changes, team changes, process changes, business pressure. The second is paying attention to **hindsight bias**. After we know the outcome, everything looks obvious. "Clearly we shouldn't have deployed that day", "it was obvious that alarm was misconfigured". At the time, it wasn't obvious. The book connects this with how our brain reconstructs stories after the fact. Today, during a postmortem, I stop conversations that sound like "how could nobody see this?" and redirect them to "what signals existed at the time?" and "why, given those signals, did that decision seem reasonable?". The third is to look not only at what went wrong, but at **what usually goes right**. Hollnagel calls this Safety-II: instead of only studying accidents, you also study why on most days nothing blows up. Once we brought that into our reviews, we started explicitly recording: "what prevented this incident from being worse?", "what quick decision helped reduce impact?". That shifts the tone of the conversation, protects team morale and, more importantly, gives you material to strengthen practices that already work. Taken together, these lenses move the discussion away from "this person made a mistake" to "our system routinely produces this kind of decision; what can we change to make better decisions easier?". ## When the culture actually sticks After you practice this kind of review consistently for a while, you start seeing signs that the culture has flipped. People bring small incidents up for review without being asked. Non-technical teams start asking to join postmortems for incidents that affected their KPIs. PMs, ops and support begin speaking the same language around risk, resilience, SLOs. And, maybe most importantly: **you see people saying "I messed up here" without fear, because they trust that the error will be turned into learning, not punishment**. On the more "hard" side, numbers begin to move: fewer repeats of the same incident pattern, shorter time to detection, less cross-team noise during incident response, fewer panicked decisions made in the dark. It's not magic; it's deliberate practice of learning from failure. There's one detail here that I consider central as a leader: every time the company takes an incident seriously, runs a deep review, communicates the lessons learned and shows clearly what changed because of it, you're sending a very strong cultural signal: **"we don't waste pain here"**. ## Failing with purpose [*Beyond Blame – Learning from Failure and Success*](https://www.amazon.com/Beyond-Blame-Learning-Failure-Success-ebook/dp/B016CJ5HUA/ref=tmm_kin_swatch_0) is marketed as a book about postmortems and outages, but to me it's really a book about how to treat adults in complex systems. It starts from the premise that every system will fail and that the only way to survive is to **turn each failure into a learning lab**, not a blame theatre. In my experience, the magic happens when you can take that beyond engineering. When sales, product, operations, support and finance all see value in reviewing real problems together, you no longer have "a culture in IT"; you have "a culture in the company". You are going to fail. We all are. The choice is whether you're going to fail chaotically, repeating the same patterns, or **fail on purpose**, turning each incident into a chance to strengthen the organization's collective muscle. If you want to go deeper into this, read [*Beyond Blame – Learning from Failure and Success*](https://www.amazon.com/Beyond-Blame-Learning-Failure-Success-ebook/dp/B016CJ5HUA/ref=tmm_kin_swatch_0), by Dave Zwieback. It's short, direct and fits uncomfortably well with the reality of anyone living in production, under pressure, with real people on the other side. The rest is practice: opening your calendar, opening your data and, most of all, letting go of the need to always be "right" so you can finally start to learn. --- # Talent Attraction as a Core Pillar in Technical Leadership Evaluation **URL**: https://avelino.run/talent-attraction-core-pillar-technical-leadership-evaluation/ **Published**: 2025-11-17 **Tags**: technical leadership, talent attraction, recruiting, leadership evaluation, networking, team building, hiring, leadership, people management, organizational culture **Word Count**: 753 words **Summary**: Exploring why talent attraction is a fundamental evaluation criterion for technical leaders, examining how building relationships, networking, and creating a strong talent pipeline directly impacts team performance, culture, and long-term organizational success One thing I've learned over the years is that technical leadership is evaluated on far more than just delivery, architecture decisions, or code quality. There are a few core pillars that define whether a technical leader is actually leading — and **talent attraction is one of the most important pillars in that evaluation**. If I'm not intentionally bringing great people closer, building relationships, and strengthening the talent ecosystem around my team, then I'm not fulfilling the role. A leader who can't attract talent eventually limits the team, the culture, the roadmap, and the future. ## Why Talent Attraction Matters in Leadership Evaluation Talent attraction isn't a "nice-to-have" or a bonus activity. It's an explicit criterion in how technical leadership should be assessed because: - teams depend on who we bring in, - culture depends on who we surround ourselves with, - innovation depends on diversity of thought, - long-term velocity depends on having the right people, not just the right process. When I'm evaluated as a leader, people don't look only at *what* I deliver. They look at *who* I attract, how I represent the team externally, and whether I'm actively creating a strong pipeline for the future. ## The Questions I Use to Evaluate Myself To stay honest with myself — and to avoid the comfort zone — I revisit a few questions regularly. They help me measure whether I'm meeting this leadership pillar or neglecting it. ### 1. Am I actively building relationships with professionals outside my team? If the answer is no, I have to ask: **What have I done this month to change that?** Leadership evaluation expects me to show intentionality here. Relationships don't just happen — I need to create them. ### 2. How much time am I investing in staying connected to talent? If I claim I value this pillar but invest zero time in it, the inconsistency is obvious. Networking, community presence, open-source engagement, writing, participating in discussions — all of this counts. And if I'm not doing any of it, I'm failing a core dimension of technical leadership evaluation. ### 3. Does my team have a clear value proposition for potential candidates? When someone considers joining my team, what story do I tell? Impact, culture, learning, autonomy, mission — if I can't articulate this clearly and consistently, it affects how I'm evaluated as a leader. A leader who can't communicate the value of the team won't attract the right people. ## Networking Is Not "Extra Work." It Is Leadership Work For some time, I treated networking as something I'd do "when I had time." That was a mistake. Leadership evaluation doesn't separate "core duties" from "relationship building." Both are core duties. When I started treating networking, visibility, and relationship-building as part of my job — not an optional activity — everything changed: - hiring became easier, - performance increased, - the team became more diverse in thinking, - the culture grew stronger, - and the organization saw me as a more complete leader. This is why talent attraction is such a central evaluation pillar: it influences every other pillar indirectly. ## How I Practice This Consistently I moved away from big, sporadic recruitment efforts and instead built small habits: - I reserve 1 hour a week to talk to interesting people; - I stay engaged with tech communities; - I write publicly about what we're building; - I keep in touch with strong candidates, even when there's no open role; - I make the team's challenges and achievements visible. This consistency shows up clearly when leadership evaluates my impact. ## A Book That Reinforced My Thinking **[Remarkable Tech Talent: A Technical Leader's Guide to Recruiting the Best People in Your Industry* — **Paul Turner**]()** Two quotes that stuck with me and shaped how I view this leadership pillar: > "Technical leaders who want to secure the best workforce know that talent is rare, time is valuable, and competition is intense." > "If you want the best possible technical business, you need the best possible technical people." These lines made me realize that attracting talent isn't luck — it's leadership behavior. And it is absolutely something for which leaders should be evaluated. ## Conclusion Talent attraction is not a secondary activity. It is one of the **core pillars used to evaluate technical leadership** — right alongside technical depth, execution quality, architectural thinking, and strategic clarity. If I'm not investing consciously, consistently, and personally in bringing great people closer, I'm not delivering on the full responsibility of being a technical leader. Building a strong team starts with me. And it begins with showing up, connecting, learning, and staying close to exceptional people. --- # Developer Resistance to AI in Programming: Psychology and Data **URL**: https://avelino.run/developer-resistance-ai-programming-psychology-data/ **Published**: 2025-11-16 **Tags**: AI, LLMs, developer psychology, coding assistants, AI adoption, developer resistance, productivity, software development, programming **Word Count**: 1965 words **Summary**: Exploring why developers resist AI coding tools through recent data on adoption rates and psychological factors, while discussing how AI can be a powerful ally when used with discernment and business context understanding In recent years, AI tools based on LLMs (large language models) have become widely available to assist with programming. Platforms like GitHub Copilot and ChatGPT promise to autocomplete code, suggest solutions, and boost developer productivity. Even with all this potential, many developers show resistance or hesitation when it comes to adopting these tools in their daily work. This blog post explores **why** that happens, bringing together **recent data** on AI adoption and **psychological aspects** that help explain this reluctance. We'll also discuss how AI can be a powerful ally for developers – as long as it's used with discernment and a solid understanding of the business context (which only humans actually have). ## The Rise of AI Coding Tools The adoption of AI coding assistants has grown rapidly. According to a Google DORA report (2025), **90% of technology professionals already use AI in their workflows**, a jump of 14% compared to the previous year ([source: observer.com](https://observer.com)). These assistants are used for tasks ranging from writing code snippets to executing tests and performing security reviews ([observer.com](https://observer.com)). Leading companies are investing heavily in this space – and in fact, **85% of developers say AI has made them more productive**, although 41% say the improvement was only "slight" ([observer.com](https://observer.com)). Despite the initial optimism, it's not all sunshine and rainbows. **Trust in AI tools has not grown at the same pace as adoption.** Only 24% of developers say they trust AI-generated code "a lot," while almost a third admit they trust it "very little" or not at all ([observer.com](https://observer.com)). Other surveys confirm this caution: more developers **distrust** AI accuracy (46%) than **trust** it (33%), and only a small fraction (~3%) report full confidence in the assistant's responses ([survey.stackoverflow.co](https://survey.stackoverflow.co)). In other words, AI has entered the workflow, but **with one foot out the door**. Many developers see it "as an assistant, not a partner," as a Google Cloud research lead put it ([observer.com](https://observer.com)). This paradox – **high availability of AI versus low trust** – sets the stage for understanding where the resistance comes from. ## Resistance to Change Is Real It's no surprise there's hesitation. Resisting change in the workplace is a very common human reaction, especially when it involves disruptive innovation. With the new wave of AI tools, this shows up as **lower-than-expected adoption** and **shy usage of more advanced features**. For example, a large study with **28,698 software engineers** showed that **only 41%** used an AI coding assistant in the first year after it was introduced, even with organizational encouragement ([papers.ssrn.com](https://papers.ssrn.com)). In certain groups, adoption was even lower – only **31% of women engineers** and **39% of developers over 40** used the tool at all ([papers.ssrn.com](https://papers.ssrn.com)). These numbers illustrate how strong the **cultural and psychological barrier** to adoption can be, even when the technology is already there. From an organizational standpoint, **three out of four companies report that the hardest part of implementing AI is getting people to change how they work** ([bain.com](https://bain.com)). Under pressure or tight deadlines, many developers "fall back to old habits" instead of using the new tool ([bain.com](https://bain.com)). This resistance doesn't mean stubbornness for no reason – there are usually **legitimate concerns** underneath it. Next, we'll look at the main **psychological factors** that make developers wary of relying on AI. ## Why Are Developers Afraid? (Psychological Factors) ### Fear of Losing Their Job or Relevance A latent concern is that AI might make developers obsolete. **Almost half of professionals (49%) fear that automation will replace their role in the next five years** ([about.gitlab.com](https://about.gitlab.com)). This fear of substitution can drive resistance: some people avoid adopting the tool so they don't "train their own replacement." On top of that, some worry that using AI could **undermine their importance on the team** – after all, if "anyone with AI" can produce code, where does that leave the value of the human specialist? Research points exactly to this: some engineers are concerned that AI "hurts their role" within the team ([bain.com](https://bain.com)). This sense of vulnerability in their job is a powerful reason to keep AI at arm's length. ### Fear of Appearing Less Competent Developers tend to be proud of their ability to solve complex problems. Admitting they need help from an AI can sound, to some, like a sign of lack of competence. A recent academic study describes this as a **"competence penalty"**: in an experiment, engineers who used AI to help write code received **competence ratings 9% lower** (for the exact same output) compared to those who did not use AI – and women were penalized even more heavily ([papers.ssrn.com](https://papers.ssrn.com)). In other words, there is a perception (and sometimes a reality) that those who rely on AI are seen as less capable. Many developers **anticipate this stigma** and therefore avoid using the tool to protect their professional reputation ([papers.ssrn.com](https://papers.ssrn.com)). Put simply, **ego and identity** are on the line: *"If I don't write every line myself, am I less of a developer?"* That mindset can drag adoption down, especially in cultures that glorify the lone hero who codes everything by hand. ### Distrust in the Accuracy and Quality of AI-Generated Code Programmers are naturally skeptical – finding errors and bugs is literally part of the job. With AI, it's no different. There is a **trust deficit** when it comes to AI-generated answers. As mentioned earlier, the majority do not fully trust AI-suggested code (only ~3% trust it blindly) ([survey.stackoverflow.co](https://survey.stackoverflow.co)). More experienced developers are the most cautious group, with the highest rate of "no trust at all" (20%) among experience levels ([survey.stackoverflow.co](https://survey.stackoverflow.co)). This caution is justified: AI models often provide solutions that are **"almost correct, but not quite"**, which can introduce subtle errors and require extra debugging later ([arstechnica.com](https://arstechnica.com)). Many developers report frustration when AI hallucinates incorrect code or provides context-free suggestions – for example, a generic solution that simply doesn't apply to the specific case at hand. Each failure reduces trust and reinforces the idea that it's safer to rely on your own knowledge. If you're going to review every line of AI-generated code in detail, **some developers prefer to write everything from scratch**. ### Attachment to Control and Comfort Zone Software development is not just a technical activity – it's also a craft of **authorship and control**. Handing part of that control over to a machine can feel uncomfortable. Many developers are proud of understanding **every line of code they write**; with AI generating entire blocks, there is a real fear of becoming a passive operator. Unsurprisingly, most people see AI as "just an assistant that suggests things," and hesitate to "hand over the wheel" completely ([observer.com](https://observer.com)). There's also the habit factor: years of experience shape personal workflows. Under pressure, professionals usually choose what they already know – even if the new tool might theoretically be better ([bain.com](https://bain.com)). Learning to use AI effectively (writing good prompts, interpreting and debugging its output) takes time and a mindset shift. Without proper training, the novelty can feel more like an obstacle than a help. In fact, companies note that **AI skill gaps** (for example, knowing how to review AI-generated code) contribute to AI being used **far below its potential** ([bain.com](https://bain.com)). In short, **changing habits is hard** – and in everyday work, many people prefer to stick with familiar tools and methods, where they feel in control. ## AI as an Ally: Balancing Productivity and Caution Despite all the resistance, it's important to highlight that those who manage to **integrate AI into their work** see **real, tangible benefits**. Studies show **10–15% productivity gains** in teams that adopt coding assistants, even when you factor in some amount of rework ([bain.com](https://bain.com)). AI tools can **automate repetitive tasks**, suggest standardized solutions, and even help generate tests, freeing developers to focus on more creative or higher-level challenges. It's no coincidence that organizations that embrace AI strategically are **shipping software faster and more reliably** ([observer.com](https://observer.com)). A leadership guideline from DX sums it up well: > "Developers who leverage AI will outperform those who resist adoption." ([getdx.com](https://getdx.com)) In other words, there is a real **opportunity cost** in ignoring these tools – in the long run, those who learn to use them well will be able to deliver more value. However, "embracing" AI doesn't mean doing it blindly. The key is to **balance machine efficiency with human expertise**. No AI knows: - the domain of your business - the specific rules of your application - the exact needs of your users The people who have that knowledge are **developers and product teams**. As one researcher put it, *"AI is only as good as the data it has access to"*. If we don't provide proper context, it will give generic and potentially useless answers ([observer.com](https://observer.com)). It's up to the developer to provide the right instructions and, above all, **critically validate the result** before shipping anything. AI tools still make logical mistakes and do not truly understand business intent on their own – they should not be treated as infallible oracles, but as an **incredibly fast (and sometimes clumsy) pair programmer**. Practically speaking, this means: - reviewing each generated snippet - writing and running tests - adjusting details as needed The best teams are integrating AI with good engineering practices: code reviews focused on checking whether the AI suggestion really does what it should, automated tests to catch regressions, and **clear policies** on where it's acceptable to rely on AI-generated code (for example, maybe fine for an internal script, but not for a critical module without human audit) ([bain.com](https://bain.com)). ## Conclusion: Conscious Adaptation The arrival of AI in software development brings a mix of **excitement and anxiety**. We've seen that many developers resist it out of fear of losing space, protecting their reputation, or simply technical caution – and these concerns are valid. On the other hand, **completely ignoring AI** can mean falling behind in productivity and professional growth. The ideal path lies in the **middle ground**: adopting these tools as **allies**, without giving up critical thinking. Remember: **responsibility for the shipped code is still ours.** As professionals, we need to understand and **own** what we deliver to users – and no AI is going to change that. Instead of seeing AI as a competitor, it's far more productive to view it as an **extension of our capabilities**. It helps us write code, but it cannot replace our understanding of the problem or our creativity in solving it. While AI takes care of the boilerplate, it's up to us to ensure the final product respects business rules, is secure, and is high quality. Those who learn to use these tools with discernment will get **the best of both worlds**: speed and quality. In short, **AI can help us a lot – as long as we never give up understanding what we're delivering**. After all, the ones who truly know the terrain (and see the bigger picture) are **humans, not machines**. With an adjusted mindset (less fear, more openness) and solid engineering practices, we can **embrace innovation without losing control of the steering wheel**. The result is a developer who is more productive **and** more valuable – exactly because they know how to leverage new tools without compromising technical excellence. ## Sources - Gai, Phyliss et al. *Competence Penalty Is a Barrier to the Adoption of New Technology*. SSRN, 2025. [https://papers.ssrn.com](https://papers.ssrn.com) - Stack Overflow. *2025 Developer Survey – AI*. Stack Overflow Surveys. [https://survey.stackoverflow.co](https://survey.stackoverflow.co) - Dey, Victor. *Google Study Shows A.I. Writes Code, But Developers Still Don't Fully Trust It*. *Observer*, Sep. 2025. [https://observer.com](https://observer.com) - Acar, Oguz et al. *Research: The Hidden Penalty of Using AI at Work*. *Harvard Business Review*, Aug. 2025. [https://hbr.org](https://hbr.org) - Salvador, Emilio. *6 strategies to help developers accelerate AI adoption*. GitLab Blog, Oct. 2024. [https://about.gitlab.com](https://about.gitlab.com) - *From Pilots to Payoff: Generative AI in Software Development*. Bain & Company Tech Report, 2025. [https://bain.com](https://bain.com) - *AI Code Generation: Best Practices for Enterprise Adoption in 2025*. DX Blog, 2025. [https://getdx.com](https://getdx.com) - Stokel-Walker, Chris. *Trust in AI coding tools is plummeting*. LeadDev, Jul. 2025. [https://arstechnica.com](https://arstechnica.com) --- # Automating newsletter delivery with Hugo, Resend, and GitHub Actions: building an active community around your static site **URL**: https://avelino.run/automating-newsletter-hugo-resend-github-actions-building-active-community/ **Published**: 2025-11-02 **Tags**: hugo, resend, github actions, newsletter, automation, community, email marketing **Word Count**: 1540 words **Summary**: A practical guide to building a Substack-like newsletter system for Hugo sites using Resend.com and GitHub Actions, with automatic post detection, duplicate prevention, and community engagement mechanisms Building an audience around a static site is fundamentally different from social media. While platforms like Twitter or LinkedIn provide built-in notification systems, static sites are silent by default. Your readers discover your content only if they remember to check back—which they rarely do. This is the core problem: **how do you keep your community engaged when your publishing platform has no native notification system?** The answer isn't to abandon static sites for dynamic platforms. It's to add the missing notification layer through automation. In this article, I'll show you how to build a Substack-like newsletter system for Hugo sites using [Resend.com](https://resend.com?ref=avelino.run) and GitHub Actions—complete with duplicate prevention, automatic post detection, and community engagement mechanisms. ## The static site engagement problem Static site generators like Hugo excel at performance, simplicity, and hosting economics. They generate pure HTML, CSS, and JavaScript that can be served from CDNs for pennies. But this architectural strength creates an engagement weakness: there's no server-side logic to notify readers when new content is published. Traditional solutions have significant drawbacks: - **RSS feeds**: Require readers to actively use feed readers—most don't - **Social media announcements**: Fragment your audience across platforms and create dependency on external networks (see [Interactions: IRL vs. Social Media - What Really Matters?](https://avelino.run/interactions-irl-vs-social-media-what-really-matters) for why direct channels matter) - **Email newsletters**: Manual effort creates friction; posts often go unannounced or get announced inconsistently The gap between "publishing" and "notifying" leads to a classic problem: you write great content, but your audience never knows it exists. Engagement metrics stagnate, and the community you're trying to build remains dormant. ## The automation solution: Hugo + Resend + GitHub Actions The solution is to automate the entire notification flow: 1. **Detect new posts automatically** when you commit to your repository 2. **Extract content metadata** (title, description, URL) from markdown frontmatter 3. **Send broadcast emails** via Resend's broadcast API to all subscribers 4. **Prevent duplicate sends** by tracking what's already been delivered 5. **Update state automatically** in version control for auditability This creates a closed loop: write → commit → publish → notify. No manual steps, no forgotten announcements, no duplicate sends. ### Why this architecture works **GitHub Actions as the orchestrator**: Actions trigger on git events, making them perfect for "content published" detection. The workflow runs in a sandboxed environment with access to your repository state, git history, and secrets. (For more on GitHub Actions workflows, see [How to reuse workflow in GitHub Action pipeline](https://avelino.run/how-to-reuse-workflow-in-github-action-pipeline).) **Resend for email delivery**: Resend's broadcast API is designed for newsletters. Unlike transactional email APIs, broadcasts are optimized for one-to-many sends with built-in unsubscribe handling and delivery tracking. **State management in git**: Tracking sent posts in `.newsletter_state.json` keeps the system auditable and reproducible. Every change is versioned, making it easy to understand what was sent when. **Hugo frontmatter as the data source**: Markdown frontmatter already contains title, description, and URL—everything needed to generate newsletter content without additional configuration. ## Implementation: building the system The implementation consists of three components: ### 1. GitHub Actions workflow The workflow triggers on pushes to `content/blog/**` and executes the newsletter script: ```yaml name: Newsletter on new post on: push: branches: [main] paths: - "content/blog/**" jobs: send-broadcast: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 2 # Needed for git diff - uses: actions/setup-node@v4 with: node-version: "20" - name: Install deps run: npm ci || npm i - name: Send newsletter broadcast run: node .github/scripts/send_newsletter.mjs env: RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }} RESEND_AUDIENCE_ID: ${{ secrets.RESEND_AUDIENCE_ID }} NEWSLETTER_FROM: ${{ secrets.NEWSLETTER_FROM }} SITE_BASE_URL: ${{ secrets.SITE_BASE_URL }} - name: Commit newsletter state run: | git config user.name "GitHub Actions" git config user.email "actions@github.com" git add .newsletter_state.json git commit -m "update newsletter state [skip ci]" || echo "no changes" git push ``` See the full implementation: [`.github/workflows/newsletter.yml`](https://github.com/avelino/avelino.run/blob/main/.github/workflows/newsletter.yml) Key design decisions: - **`fetch-depth: 2`**: Required to compare `HEAD~1` and `HEAD` for detecting new files - **Path-based triggering**: Only runs when blog content changes, reducing unnecessary executions - **Automatic state commit**: Updates the tracking file and commits it back, creating an audit trail ### 2. Newsletter script The script handles detection, extraction, and sending: ```javascript import fs from 'fs'; import path from 'path'; import { Resend } from 'resend'; import matter from 'gray-matter'; import { execSync } from 'child_process'; // Detect new files via git diff const diff = execSync('git diff --name-status HEAD~1 HEAD').toString(); const added = diff .split('\n') .map(l => l.trim().split('\t')) .filter(p => p[0] === 'A' && p[1] && p[1].startsWith('content/blog/')) .map(p => p[1]) .filter(f => /\.(md|mdx)$/.test(f)); // Read state to prevent duplicates const statePath = path.join(process.cwd(), '.newsletter_state.json'); let state = { lastSent: [] }; if (fs.existsSync(statePath)) { state = JSON.parse(fs.readFileSync(statePath, 'utf8')); } // Process each new post for (const postPath of added) { const fileId = postPath.replace(/^content\/blog\//, ''); if (state.lastSent.includes(fileId)) { continue; // Skip already sent posts } // Extract frontmatter and content const raw = fs.readFileSync(postPath, 'utf8'); const { data, content } = matter(raw); // Generate email HTML const html = generateEmailHTML(data, content); // Send broadcast const resend = new Resend(process.env.RESEND_API_KEY); await resend.broadcasts.create({ audienceId: process.env.RESEND_AUDIENCE_ID, from: process.env.NEWSLETTER_FROM, subject: `Novo post: ${data.title}`, html, }); // Update state state.lastSent.push(fileId); fs.writeFileSync(statePath, JSON.stringify(state, null, 2)); } ``` See the full implementation: [`.github/scripts/send_newsletter.mjs`](https://github.com/avelino/avelino.run/blob/main/.github/scripts/send_newsletter.mjs) The script's logic: - **Git-based detection**: Uses `git diff` to find files added in the latest commit—more reliable than file timestamps - **Frontmatter parsing**: Uses `gray-matter` to extract Hugo frontmatter, including custom URL fields - **Duplicate prevention**: Checks `.newsletter_state.json` before sending, ensuring posts are only sent once - **Broadcast API**: Uses Resend's broadcast endpoint, which is optimized for newsletter delivery ### 3. State management The `.newsletter_state.json` file tracks all sent posts: ```json { "lastSent": [ "blog/2025-11-automating-newsletter-hugo-resend-github-actions.md", "blog/2025-10-open-source-governance-reference-leading-engineering-teams.md" ] } ``` See the current state file: [`.newsletter_state.json`](https://github.com/avelino/avelino.run/blob/main/.newsletter_state.json) This file is: - **Versioned in git**: Full history of what was sent when - **Human-readable**: Easy to inspect and debug - **Immutable**: Posts are never removed from the list, preventing re-sends even if the file is reset ## Community engagement mechanisms The automation doesn't just solve the technical problem—it creates engagement patterns. This aligns with broader principles of [community building in open source](https://avelino.run/communication-the-hidden-backbone-of-successful-open-source-rojects), where consistent, automated communication channels reduce friction and enable scalable engagement: ### 1. Consistent delivery timing Readers learn when to expect your content. Automation ensures every post is announced, building trust through reliability. ### 2. Zero-friction publishing No manual steps means you're more likely to publish consistently. The system removes the "I should announce this on email" mental overhead. ### 3. Direct relationship with readers Email newsletters create a direct channel that you own. Unlike social media platforms, there's no algorithm deciding who sees your content. This direct communication is [the most efficient way to scale your outreach](https://avelino.run/text-e-a-forma-mais-eficiente-de-escalar-sua-comunicacao), as text-based communication allows for asynchronous, thoughtful engagement. ### 4. Analytics and feedback Resend provides delivery analytics: open rates, click rates, and subscriber growth. This data helps you understand what resonates with your audience. ### 5. Unsubscribe handling Resend automatically handles unsubscribe requests and maintains compliance with email regulations (GDPR, CAN-SPAM). The system respects user preferences without manual intervention. ## Technical considerations and edge cases ### Handling multiple posts in one commit The script processes all new posts in a commit sequentially. If you publish multiple posts at once, each gets its own broadcast email—readers see all new content, not just the latest. ### URL generation from Hugo permalinks Hugo's permalink configuration can generate URLs that don't match the file path. The script handles this by: 1. Checking frontmatter `url` field first (Hugo's explicit URL) 2. Falling back to `slug` if present 3. Defaulting to filename-based slug if neither exists This ensures newsletter links always point to the correct published URL. ### Initial state population When setting up the system, populate `.newsletter_state.json` with existing posts to prevent re-sending: ```bash find content/blog -name "*.md" | sed 's|^content/||' | jq -R -s 'split("\n") | map(select(length > 0))' > .newsletter_state.json ``` ### Error handling The script exits on error, causing the GitHub Action to fail. This surfaces issues immediately: - Missing environment variables - Resend API errors - File system errors Action logs show exactly what went wrong, making debugging straightforward. ## Comparison with alternatives | Approach | Pros | Cons | |----------|------|------| | **Manual email** | Full control, personal touch | Time-consuming, easy to forget | | **RSS to email services** | No code required | Limited customization, service dependency | | **WordPress plugins** | Easy setup | Requires WordPress, plugin maintenance | | **This solution** | Automated, version-controlled, scalable | Requires GitHub, initial setup | The automated approach scales: whether you publish once a month or daily, the system handles it without additional effort. ## Conclusion: automation as community infrastructure Building an active community around static content requires making your publishing system "push" rather than "pull." Automation transforms static sites from silent archives into active communication channels. The Hugo + Resend + GitHub Actions combination provides: - **Zero-maintenance operation**: Write and commit—the system handles the rest - **Duplicate prevention**: State management ensures posts are never sent twice - **Audit trail**: Git history shows exactly what was sent when - **Scalability**: Handles one post or hundreds without additional configuration - **Direct ownership**: You own the subscriber list, email templates, and delivery mechanism Most importantly, this system turns consistency into a default behavior rather than a conscious effort. When publishing becomes as simple as `git commit && git push`, you're more likely to maintain the publishing cadence that keeps communities engaged. The technical details matter, but the real value is in creating infrastructure that supports long-term community building. Automation removes friction, and removing friction enables consistency. **Consistency is what builds engaged communities.** --- ### Implementation resources - **Full implementation**: [avelino/avelino.run repository](https://github.com/avelino/avelino.run) - [GitHub Actions workflow](https://github.com/avelino/avelino.run/blob/main/.github/workflows/newsletter.yml) - [Newsletter script](https://github.com/avelino/avelino.run/blob/main/.github/scripts/send_newsletter.mjs) - [Email template](https://github.com/avelino/avelino.run/blob/main/.github/scripts/NewsletterTemplate.mjs) - [State file](https://github.com/avelino/avelino.run/blob/main/.newsletter_state.json) - [Resend Broadcast API Documentation](https://resend.com/docs/api-reference/broadcasts?ref=avelino.run) - [GitHub Actions Documentation](https://docs.github.com/en/actions?ref=avelino.run) - [Hugo Content Management](https://gohugo.io/content-management/?ref=avelino.run) - [gray-matter Package](https://github.com/jonschlinkert/gray-matter?ref=avelino.run) --- # Open Source Contributions - November 2025 **URL**: https://avelino.run/foss/2025/11/ **Published**: 2025-11-01 **Word Count**: 392 words **Summary**: November 2025 highlights 15 active repositories with 31 contributions, showcasing significant advancements and collaborations in open-source projects. In November 2025, the open-source community made remarkable strides with 15 repositories contributing to a total of 31 activities, including 9 pull requests and 12 pushes. This timeline captures each significant event, illustrating the collaborative efforts and innovative developments that shaped the month. ## 2025-11-30 - 🔀 Opened PR in [Roam-Research/roam-depot](https://github.com/Roam-Research/roam-depot): [feat: add Oura Ring extension metadata](https://github.com/Roam-Research/roam-depot/pull/1130) - 🔀 Opened PR in [Roam-Research/roam-depot](https://github.com/Roam-Research/roam-depot): [add extension: Todoist Backup (read-only backup of Todoist tasks intoyour graph)](https://github.com/Roam-Research/roam-depot/pull/1129) ## 2025-11-29 - 🔀 Opened PR in [avelino/roamresearch-ouraring](https://github.com/avelino/roamresearch-ouraring): [Disable recurring scheduling and sync on load](https://github.com/avelino/roamresearch-ouraring/pull/1) - 🔀 Opened PR in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [feat: initial Oura → Roam Research export scaffolding](https://github.com/avelino/training-personal-data/pull/13) ## 2025-11-26 - ✅ Reviewed PR in [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): [Capturing error in Barte "refund_transaction"](https://github.com/buserbrasil/barte-python-sdk/pull/35#pullrequestreview-3512351974) (Approved) ## 2025-11-22 - 🔀 Opened PR in [Roam-Research/roam-depot](https://github.com/Roam-Research/roam-depot): [Add Export Block extension](https://github.com/Roam-Research/roam-depot/pull/1113) - ✅ Reviewed PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [Bump tmp from 0.2.1 to 0.2.4](https://github.com/avelino/monotropic-theme-vscode/pull/25#pullrequestreview-3496584130) (Approved) - ✅ Reviewed PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [Bump js-yaml from 4.1.0 to 4.1.1](https://github.com/avelino/monotropic-theme-vscode/pull/27#pullrequestreview-3496582257) (Approved) - ✅ Reviewed PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [build(deps): bump js-yaml from 4.1.0 to 4.1.1](https://github.com/avelino/flexoki-logseq/pull/14#pullrequestreview-3496528885) (Approved) ## 2025-11-13 - ✅ Reviewed PR in [avelino/roamresearch-export-block](https://github.com/avelino/roamresearch-export-block): [[ImgBot] Optimize images](https://github.com/avelino/roamresearch-export-block/pull/1#pullrequestreview-3459558592) (Approved) ## 2025-11-06 - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [feat(blocks): robust @label → #label converter preserves wiki-link and email context](https://github.com/avelino/logseq-todoist-backup/pull/18) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Bump resend from 6.4.0 to 6.4.1](https://github.com/avelino/avelino.run/pull/64#pullrequestreview-3427679591) (Approved) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Bump axios from 1.13.1 to 1.13.2](https://github.com/avelino/avelino.run/pull/65#pullrequestreview-3427678161) (Approved) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Bump react-dom from 18.3.1 to 19.2.0](https://github.com/avelino/avelino.run/pull/63#pullrequestreview-3427676962) (Approved) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Bump react from 18.3.1 to 19.2.0](https://github.com/avelino/avelino.run/pull/62#pullrequestreview-3427675630) (Approved) ## 2025-11-02 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Improve newsletter script fallback detection](https://github.com/avelino/avelino.run/pull/61) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Debug email sending via resend.com](https://github.com/avelino/avelino.run/pull/60) - 🔀 Opened PR in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [update pool-config: document all supported config keys in README, clarify inheritance and defaults usage](https://github.com/moclojer/clj-rq/pull/23) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Bump the npm_and_yarn group across 1 directory with 3 updates](https://github.com/avelino/avelino.run/pull/59#pullrequestreview-3408764848) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 17 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/logseq-libs](https://github.com/avelino/logseq-libs): 1 commit(s) - [See commits](https://github.com/avelino/logseq-libs/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/roamresearch-ouraring](https://github.com/avelino/roamresearch-ouraring): 10 commit(s) - [See commits](https://github.com/avelino/roamresearch-ouraring/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/training-personal-data](https://github.com/avelino/training-personal-data): 1 commit(s) - [See commits](https://github.com/avelino/training-personal-data/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/roamresearch-export-block](https://github.com/avelino/roamresearch-export-block): 6 commit(s) - [See commits](https://github.com/avelino/roamresearch-export-block/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 12 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/roamresearch-todoist-backup](https://github.com/avelino/roamresearch-todoist-backup): 5 commit(s) - [See commits](https://github.com/avelino/roamresearch-todoist-backup/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [moclojer/clj-rq](https://github.com/moclojer/clj-rq): 2 commit(s) - [See commits](https://github.com/moclojer/clj-rq/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): 1 commit(s) - [See commits](https://github.com/avelino/logseq-todoist-backup/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): 1 commit(s) - [See commits](https://github.com/buserbrasil/barte-python-sdk/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 1 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2025-11-01T00:00:00Z&until=2025-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Motivation is Personal: Leading Large Tech Teams **URL**: https://avelino.run/motivation-is-personal-leading-large-tech-teams/ **Published**: 2025-10-09 **Tags**: motivation, leadership, tech management, peopleware, startup **Word Count**: 550 words **Summary**: Practical experience, deep reflections, and literary reference: individual motivation from the lens of tech leadership in a fast-growing startup. Talking about motivation might seem simple to those who have never led a large team. From my perspective, running the day-to-day technology of a Brazilian startup with over 260 people, it’s impossible to ignore how motivation is diverse, fluid, and deeply personal. ## Motivation on the technology floor Nothing is more valuable than recognizing the real context of each team member. This is not just LinkedIn talk. Here at Buser, working with multidisciplinary teams makes it clear: what drives a backend engineer doesn’t necessarily inspire a frontend engineer; a product manager seeks a sense of belonging, while an SRE developer is motivated by radical autonomy. 📖 *Peopleware* sums up the essence of this challenge: > “The biggest mistake managers make is to assume that everyone is motivated by the same things that motivate themselves.” > — [Peopleware, Tom DeMarco & Timothy Lister](https://www.amazon.com/dp/0321934113) Recognizing that each person is searching for something different is a basic requirement for anyone leading technology at scale—ignore this, and you’re aiming only for mediocre results. ## Leadership experience: how I personalize motivation When I became CTO, I thought technical skills were everything. I quickly realized culture, rituals, and listening weighed even more. The real work is in understanding nuances: - Implementing 1:1 sessions to listen to personal ambitions [https://avelino.run/quote/lifestyle/foco-em-evoluir-e-auto-conhecimento/](https://avelino.run/quote/lifestyle/foco-em-evoluir-e-auto-conhecimento/); - Setting flexible goals so no one feels boxed in; - Encouraging challenges in areas that bring fulfillment, not just operational results. In my daily routine, the feedback that brought the most development almost never came from formal meetings—but from honest conversations, over coffee, while cycling, or during retrospectives where the team risks showing vulnerability. ## Discipline’s role when motivation swings Motivation is necessary, but not sufficient. I had to adapt and learn that discipline is what sustains the journey [https://avelino.run/quote/lifestyle/transformando-dores-musculares-em-amor/](https://avelino.run/quote/lifestyle/transformando-dores-musculares-em-amor/). Not every day is the best day to innovate, implement, or debug. From sports—and I bring this to management—I learned that routine and consistency amplify results. Early in my career, I sought motivation in the adrenaline of delivering features. Over time, I realized the true value is creating an environment where people grow regardless of the “motivation peak” of the moment. > “Projects fail not for lack of techniques, but for ignoring human factors. Motivated and respected teams avoid waste and deliver better solutions.” > — [Peopleware, Tom DeMarco & Timothy Lister](https://www.amazon.com/dp/0321934113) ## Customizing culture and goals: real startup cases Buser’s engineering culture evolved to embrace multiple motivational styles. A few practices that have proven effective: - I allow engineers to propose their own challenges, rather than only accepting top-down goals; - Celebrating both small and big wins, creating moments of authentic recognition; - Giving frank feedback, including the need to reinvent processes when we notice collective demotivation. None of this works unless the leader is willing to be vulnerable, correct course, and make room for others’ vulnerability. There’s no recipe—just trust. ## References and further reading - Peopleware: Productive Projects and Teams — Tom DeMarco & Timothy Lister [https://www.amazon.com/dp/0321934113](https://www.amazon.com/dp/0321934113) - Foco em evoluir e auto conhecimento [https://avelino.run/quote/lifestyle/foco-em-evoluir-e-auto-conhecimento/](https://avelino.run/quote/lifestyle/foco-em-evoluir-e-auto-conhecimento/) - Transformando dores musculares em prazer [https://avelino.run/quote/lifestyle/transformando-dores-musculares-em-amor/](https://avelino.run/quote/lifestyle/transformando-dores-musculares-em-amor/) - 3 passos importantes para cumprir metas [https://avelino.run/quote/3-passos-importantes-para-cumprir-nosso-objetivo-e-metas/](https://avelino.run/quote/3-passos-importantes-para-cumprir-nosso-objetivo-e-metas/) - Por que devemos ter objetivo e metas? [https://avelino.run/quote/por-que-devemos-ter-objetivo-e-metas/](https://avelino.run/quote/por-que-devemos-ter-objetivo-e-metas/) --- Leading tech in a startup with hundreds of people is, above all, a constant exercise in humility, attentive listening, and adaptation. Motivation is personal, it shifts—and the only certainty is that no book or technique replaces hands-on experience with the team on the ground. --- # The open source governance model as a reference for leading engineering teams **URL**: https://avelino.run/open-source-governance-reference-leading-engineering-teams/ **Published**: 2025-10-02 **Tags**: open source, software engineering, team management, leadership, organizational culture, organizational psychology **Word Count**: 675 words **Summary**: A deep analysis of how open source governance principles — transparency, meritocracy, and autonomy with accountability — can serve as a practical reference for leading engineering teams, grounded in organizational science and experience in OSS communities Technology leadership is at a breaking point. The traditional command-and-control model, born in the industrial era, is cracking under the adaptive complexity of engineering teams. Rajeev Peshawaria opens his book *[Open Source Leadership](https://www.amazon.com/Open-Source-Leadership-Reinventing-Management/dp/1260108368?utm_source=avelino.run)* with a pointed provocation: > *“Leadership can no longer be about command and control. It must be about influence and inspiration.”* If projects like [Linux](https://www.kernel.org/), [Kubernetes](https://kubernetes.io/), and [Apache](https://www.apache.org/) were built by distributed communities with open governance and without rigid hierarchical structures, why do corporate engineering leaders still cling to old models? ![The open source governance model as a reference for leading engineering teams](/blog/governanca-open-source-referencia-lideranca-times-engenharia.png) ## The crisis of the traditional model: what organizational science shows us Organizational science has already accumulated evidence against command-and-control. - **Psychological Safety**: Amy Edmondson showed in her seminal study that teams with higher psychological safety share mistakes, learn faster, and perform better ([PDF – MIT](https://web.mit.edu/curhan/www/docs/Articles/15341_Readings/Group_Performance/Edmondson%20Psychological%20safety.pdf)). Recent studies reinforce this effect as a buffer against burnout ([PMC 2024](https://pmc.ncbi.nlm.nih.gov/articles/PMC11176475/)), and there is already work linking psychological safety to the software engineering environment ([arXiv 2025](https://arxiv.org/abs/2508.03369)). - **Hackman and team effectiveness**: Richard Hackman proposed that high-performing teams depend on five conditions: clear purpose, well-defined boundaries, consistent norms and roles, organizational support, and competent coaching ([Hackman – What Makes for a Great Team](https://www.scribd.com/document/460323981/Hackman-What-Makes-for-a-Great-Team)). These findings already show that rigid environments, based on fear or hierarchy alone, destroy performance. This is where open source logic comes in as a viable alternative. ## Open source governance: mechanisms that work OSS governance survives at global scale because it created institutional coordination mechanisms: - **Radical transparency**: issues, PRs, and decisions are public. As Peshawaria says: > *“In a transparent world, secrecy is the enemy of trust. Leadership today is about being open, even when it is uncomfortable.”* This visibility accelerates learning and collective trust. - **Technical meritocracy (broadened)**: > *“Open source leadership is about democratizing power, but not equalizing it. Influence flows to those who add the most value.”* Studies show that leadership in OSS emerges not only from technical contribution but also from communication skills and community influence ([arXiv – Follow the Leader, 2022](https://arxiv.org/abs/2203.10871)). In other words, technical merit matters, but reputation and social capital coexist. - **Autonomy with accountability**: the *fork* symbolizes maximum freedom but carries the cost of maintenance. This mechanism regulates autonomy. In companies, the parallel is to allow squads to explore alternatives, as long as they own outcome and integration metrics. These mechanisms echo Hackman’s conditions: purpose, norms, boundaries, and support. OSS applies them in a radical way; corporations can use them as an adapted reference. ## How I think: a CTO and maintainer’s critical reading My experience connects both worlds: OSS and corporate management. - **Documented decisions**: in communities, PRs function as a public court. At Buser and in OSS projects, adopting open RFCs helped me create legitimacy and institutional memory. - **Fluid leadership**: in OSS, leadership is emergent and temporary. In corporate settings, adopting this flow — specialists taking on roles according to context — works better than fixing authority. Peshawaria sums it up: > *“The open source world thrives because leadership is temporary, emergent, and conditional upon contribution.”* - **Burnout and centralization**: both in OSS and in corporations, when a few people concentrate critical responsibilities, the result is exhaustion. The path is always to distribute leadership. OSS is a mirror: it shows that teams can function without rigid hierarchy, as long as they have purpose, transparency mechanisms, and healthy meritocracy. ## Conclusion Open source is not romanticism; it is the largest social laboratory of technology governance in history. If volunteer communities created systems that sustain the internet, there is no excuse for corporate teams to remain stuck in the 1920 model. The central lesson is clear: engineering leadership is not HR resource control, but **building systems where autonomy, purpose, and accountability can flourish**. This is the reference. The rest is an illusion of control. --- ### External references cited - Edmondson, A. (1999). [*Psychological Safety and Learning Behavior in Work Teams*](https://web.mit.edu/curhan/www/docs/Articles/15341_Readings/Group_Performance/Edmondson%20Psychological%20safety.pdf) - Ma, J. et al. (2024). [*The impact of psychological safety on employees’ well-being and performance*](https://pmc.ncbi.nlm.nih.gov/articles/PMC11176475/) - Hackman, J. (2004). [*What Makes for a Great Team*](https://www.scribd.com/document/460323981/Hackman-What-Makes-for-a-Great-Team) - Maltby, A. et al. (2022). [*Follow the Leader: Technical and Inspirational Leadership in OSS*](https://arxiv.org/abs/2203.10871) - Edmondson, A. et al. (2025). [*Psychological Safety in Software Engineering Teams*](https://arxiv.org/abs/2508.03369) --- # Open Source Contributions - October 2025 **URL**: https://avelino.run/foss/2025/10/ **Published**: 2025-10-01 **Word Count**: 917 words **Summary**: October 2025 saw significant contributions across 9 repositories, with 19 pull requests and 31 reviews, showcasing robust collaboration and development efforts. Explore the timeline of contributions for October 2025, highlighting a dynamic month of collaboration with 19 open pull requests, 31 reviews, and a total of 74 contributions across 9 repositories. ## 2025-10-31 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: Git-backed transaction notes and core helpers](https://github.com/moclojer/chrondb/pull/62) ## 2025-10-30 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat(ast): unify query engine across all protocols with new AST system](https://github.com/moclojer/chrondb/pull/61) ## 2025-10-27 - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [configurar alias de status do todoist](https://github.com/avelino/logseq-todoist-backup/pull/17) - ✅ Reviewed PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [chore(deps-dev): bump vite from 7.1.9 to 7.1.11](https://github.com/avelino/logseq-todoist-backup/pull/16#pullrequestreview-3382638496) (Approved) ## 2025-10-21 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Pardnchiu/go-jwt](https://github.com/avelino/awesome-go/pull/5881#pullrequestreview-3362115208) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add argus to Configuration section](https://github.com/avelino/awesome-go/pull/5876#pullrequestreview-3359795550) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added oras to Distributed Systems Section](https://github.com/avelino/awesome-go/pull/5878#pullrequestreview-3359792969) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add boring](https://github.com/avelino/awesome-go/pull/5883#pullrequestreview-3359787651) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fix. Add correct URL to Obreron package entry](https://github.com/avelino/awesome-go/pull/5887#pullrequestreview-3359783961) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [updated .codeclimate.yml](https://github.com/avelino/awesome-go/pull/5884#pullrequestreview-3359779758) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add trpc-agent-go](https://github.com/avelino/awesome-go/pull/5793#pullrequestreview-3359775774) (Changes requested) ## 2025-10-18 - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [feat: add debug logger util and expose debug log setting](https://github.com/avelino/logseq-todoist-backup/pull/15) - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [feat: Consistent inline label conversion, journal-style pages, and docs](https://github.com/avelino/logseq-todoist-backup/pull/13) - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [Task and page organization: distribute tasks across journal-style pages by date](https://github.com/avelino/logseq-todoist-backup/pull/12) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add pardnchiu/go-cron - brief description](https://github.com/avelino/awesome-go/pull/5741#pullrequestreview-3353605439) (Approved) - 🐛 Opened issue in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [option to display sync log (`console.log`)](https://github.com/avelino/logseq-todoist-backup/issues/14) - 🐛 Opened issue in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [using the `todoist.md` page for sync will be impossible for complete backup](https://github.com/avelino/logseq-todoist-backup/issues/11) ## 2025-10-17 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove archived repos](https://github.com/avelino/awesome-go/pull/5695#pullrequestreview-3351687763) (Approved) - ✅ Reviewed PR in [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): [build(deps-dev): Bump vite from 6.2.7 to 6.3.6](https://github.com/avelino/logseq-export-block/pull/10#pullrequestreview-3352332470) (Approved) - 🐛 Opened issue in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [todoist subtask support in logseq subblock](https://github.com/avelino/logseq-todoist-backup/issues/10) - 🐛 Opened issue in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [convert todoist label to logseq hashtag](https://github.com/avelino/logseq-todoist-backup/issues/9) ## 2025-10-14 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat(cli): introduce ChronDB CLI utility for backup, restore, export, import and scheduling](https://github.com/moclojer/chrondb/pull/60) ## 2025-10-13 - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [Preserve editor focus and add comment/title filters](https://github.com/avelino/logseq-todoist-backup/pull/8) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sqlz](https://github.com/avelino/awesome-go/pull/5863#pullrequestreview-3333334109) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Implement comprehensive tagging system for project categorization](https://github.com/avelino/awesome-go/pull/5861#pullrequestreview-3330646071) (Changes requested) ## 2025-10-12 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Backup and Restore: Tar/Bundle-based Repository Snapshots for ChronDB](https://github.com/moclojer/chrondb/pull/59) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [feat: add lancet utility library](https://github.com/avelino/awesome-go/pull/5859#pullrequestreview-3329620704) (Approved) ## 2025-10-11 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [docs: update license references from GPLv3 to AGPLv3](https://github.com/moclojer/chrondb/pull/58) ## 2025-10-10 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [build(native-image): add cross-platform GraalVM native-image workflow](https://github.com/moclojer/chrondb/pull/57) ## 2025-10-09 - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [docs: add missing function docstrings to all functions](https://github.com/avelino/logseq-todoist-backup/pull/7) - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [Sync Todoist Comments into Logseq](https://github.com/avelino/logseq-todoist-backup/pull/6) - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [fixed sync completed](https://github.com/avelino/logseq-todoist-backup/pull/5) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [feat: adding github.com/samber/hot - in memory caching lib](https://github.com/avelino/awesome-go/pull/5729#pullrequestreview-3319620667) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Bifrost Gateway](https://github.com/avelino/awesome-go/pull/5749#pullrequestreview-3319601708) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add golang-rest-api-template to Project Layout section](https://github.com/avelino/awesome-go/pull/5751#pullrequestreview-3319574129) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add flow](https://github.com/avelino/awesome-go/pull/5738#pullrequestreview-3319551136) (Changes requested) ## 2025-10-08 - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [fix: preserve completed task history and status in Logseq sync](https://github.com/avelino/logseq-todoist-backup/pull/4) - 🔀 Opened PR in [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): [Preserve completed Todoist tasks in Logseq backup](https://github.com/avelino/logseq-todoist-backup/pull/3) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add roamer](https://github.com/avelino/awesome-go/pull/5809#pullrequestreview-3314166663) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Updated README with expandable table of content.](https://github.com/avelino/awesome-go/pull/5069#pullrequestreview-3312447618) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adds Cillium eBPF Golang library to the Performance list](https://github.com/avelino/awesome-go/pull/5071#pullrequestreview-3312444450) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add bore to networking section](https://github.com/avelino/awesome-go/pull/5081#pullrequestreview-3312436757) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add leberKleber/go-mpris](https://github.com/avelino/awesome-go/pull/5100#pullrequestreview-3312433664) (Approved) ## 2025-10-07 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Pi](https://github.com/avelino/awesome-go/pull/5815#pullrequestreview-3309593633) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add VarMQ - Storage agnostic message queue and worker pool](https://github.com/avelino/awesome-go/pull/5819#pullrequestreview-3309592189) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add GitLab Merge Alert - WeChat Work notification service](https://github.com/avelino/awesome-go/pull/5821#pullrequestreview-3309588555) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fluent, streaming‑first HTTP client for Go — zero external dependencies.](https://github.com/avelino/awesome-go/pull/5842#pullrequestreview-3309495682) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Gocopper](https://github.com/avelino/awesome-go/pull/5843#pullrequestreview-3309492760) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/5844#pullrequestreview-3309490529) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add: Coldfire security research library](https://github.com/avelino/awesome-go/pull/5845#pullrequestreview-3309487530) (Changes requested) ## 2025-10-06 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [feat(ci): improve GraalVM native image build using real test routes](https://github.com/moclojer/moclojer/pull/332) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/checkout from 4 to 5](https://github.com/moclojer/moclojer/pull/331#pullrequestreview-3305597522) (Approved) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Streaming] Changefeed / CDC per Branch (Server-Sent Events or Redis PubSub)](https://github.com/moclojer/chrondb/issues/56) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Schema-lite] Optional JSON Schema Validation per Namespace](https://github.com/moclojer/chrondb/issues/55) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Recovery] Point-in-Time Snapshot and Copy-on-Write Restore](https://github.com/moclojer/chrondb/issues/54) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Legal/Bug] Unify License Reference (GPLv3 vs AGPL-3.0)](https://github.com/moclojer/chrondb/issues/53) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Ops/Security] Hardened Docker Image + SBOM + Signature](https://github.com/moclojer/chrondb/issues/52) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Performance] Benchmark Suite and Profiling Setup](https://github.com/moclojer/chrondb/issues/51) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[DX/CLI] ChronDB Command-Line Interface (CLI)](https://github.com/moclojer/chrondb/issues/50) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Merge Strategy] Configurable Conflict Resolution Policies](https://github.com/moclojer/chrondb/issues/49) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Concurrency] Define Locking and Isolation Model for Git-based Storage](https://github.com/moclojer/chrondb/issues/48) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Protocol/PostgreSQL] MVP PostgreSQL Wire Protocol Implementation](https://github.com/moclojer/chrondb/issues/47) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [[Protocol/Redis] Support RESP3 and Cursor-based SCAN + Key History Command](https://github.com/moclojer/chrondb/issues/46) ## 2025-10-02 - 🔀 Opened PR in [logseq/marketplace](https://github.com/logseq/marketplace): [feat: logseq-todoist-backup plugin](https://github.com/logseq/marketplace/pull/673) ## 2025-10-01 - 🔀 Opened PR in [buserbrasil/notion-webhook](https://github.com/buserbrasil/notion-webhook): [feat: persist and expose Notion breadcrumbs in content snapshots](https://github.com/buserbrasil/notion-webhook/pull/3) - 🐛 Opened issue in [buserbrasil/notion-webhook](https://github.com/buserbrasil/notion-webhook): [Persist Notion entity breadcrumbs and include in stored snapshot](https://github.com/buserbrasil/notion-webhook/issues/2) ## Commits - 🔨 Push to [avelino/logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup): 33 commit(s) - [See commits](https://github.com/avelino/logseq-todoist-backup/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 24 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 10 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) - 🔨 Push to [buserbrasil/notion-webhook](https://github.com/buserbrasil/notion-webhook): 3 commit(s) - [See commits](https://github.com/buserbrasil/notion-webhook/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 3 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) - 🔨 Push to [logseq/marketplace](https://github.com/logseq/marketplace): 1 commit(s) - [See commits](https://github.com/logseq/marketplace/commits?author=avelino&since=2025-10-01T00:00:00Z&until=2025-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # When Danger Knocks on the Door: Learning to Handle CVEs in Open Source **URL**: https://avelino.run/when-danger-knocks-learning-to-handle-cves-in-open-source/ **Published**: 2025-09-08 **Tags**: open source security, CVE response, vulnerability disclosure, Log4Shell, Heartbleed, Open Source **Word Count**: 1437 words **Summary**: Learn how open source projects handle CVEs. From Heartbleed and Log4Shell to the prestd advisory, explore lessons on vulnerability disclosure, fast fixes, and building trust in software security. **TL;DR:** _Vulnerabilities test trust. Fast fixes, clear communication, and disciplined process turn crises into credibility._ > "This weekend, my open-source project **[prestd](https://github.com/prest/prest/)** was hit with its second CVE-like advisory ([GHSA-p46v-f2x8-qp98](https://github.com/prest/prest/security/advisories/GHSA-p46v-f2x8-qp98)). We rallied the community and shipped a fix within hours. Intense—and gratifying: proof that crises can teach trust." ![When Danger Knocks on the Door: Learning to Handle CVEs in Open Source](/blog/when-danger-knocks-learning-to-handle-cves-in-open-source.png) That rollercoaster is a reminder: some projects sprint, others stall. To see why, let’s connect a fresh incident to infamous CVEs, grounded practice, and a few enduring ideas. ## What a CVE Really Signals A **CVE (Common Vulnerabilities and Exposures)** entry isn’t just a line in [MITRE’s database](https://www.cve.org/). It’s a public test of how a project earns and maintains trust. As Bruce Schneier wrote in _Secrets and Lies_, “security is a process, not a product.” A CVE spotlights where the process broke—and where it can be strengthened. Eric Raymond’s _The Cathedral and the Bazaar_ argues that “given enough eyes, all bugs are shallow.” The reality: those eyes need discipline, incentives, and time. Without them, the shallow becomes deep. Trust here is multi-dimensional. It is technical, social, and temporal: it rests on code quality, test coverage, reproducible builds, and safe defaults; on norms of disclosure, maintainer responsiveness, and independent review; and on how quickly an issue travels from report to triage, fix, release, and finally adoption. Most postmortems reveal that it’s rarely a single failure. It’s a chain: a sharp edge in API design, a missing test, an inattentive review, an overburdened maintainer, a release delayed by packaging friction, and then slow adoption downstream. CVEs make that chain visible. ## When Time Was the Differentiator **Heartbleed (OpenSSL, 2014 – CVE-2014-0160)** — the patch landed quickly, but ecosystem patching took months. Fixing code is the easy part; getting updates deployed is the real work. ([NVD link](https://nvd.nist.gov/vuln/detail/CVE-2014-0160)) **Log4Shell (Log4j, 2021 – CVE-2021-44228)** — fixes were prepared under embargo, but the package’s ubiquity demanded weeks of stabilization. A classic tragedy-of-the-commons case. ([NVD link](https://nvd.nist.gov/vuln/detail/CVE-2021-44228)) **JASBUG (Microsoft, 2015 – CVE-2015-0008)** — a design flaw that persisted for more than a year; sometimes architecture, not effort, is the bottleneck. ([NVD link](https://nvd.nist.gov/vuln/detail/CVE-2015-0008)) **XZ Utils Backdoor (2024 – CVE-2024-3094)** — malicious code slipped into the supply chain; rollback was the fix, and collective vigilance made the difference. ([NVD link](https://nvd.nist.gov/vuln/detail/CVE-2024-3094)) **prestd (this case)** — advisory published, fix shipped quickly, transparency preserved. No CVE (yet), but already a sign of maturity. ([GHSA advisory](https://github.com/prest/prest/security/advisories/GHSA-p46v-f2x8-qp98)) ## The Race Against Delay Well-run projects often ship fixes in days, but public databases and ecosystem updates can lag by weeks. That gap—between “fixed” and “deployed”—is where attackers thrive. Time is typically lost in report quality (incomplete details drive back-and-forth), reproduction (flaky environments and missing fixtures), patch and review (risky fixes need independent eyes and backports), release engineering (packaging, signing, changelogs, and pipelines), and finally adoption (downstreams must notice, prioritize, test, and deploy). The lesson isn’t “no bugs,” it’s “minimize delay.” A useful lens is queueing theory: when triage and release run “hot” (utilization near 100%), wait times explode. Security benefits from deliberate slack—reserved capacity for surprises. ## Why Some Projects Respond Faster Teams respond faster when ownership is clear (named security team, on-call, escalation paths), playbooks are pre-approved (conduct under embargo, scoping, who to involve), releases are boring and automated (tags, signatures, reproducibility), observability is real (time-to-triage, time-to-fix, time-to-adopt), and the culture privileges blameless learning. If you can’t measure cycle times by stage, the next incident will measure them for you—publicly. ## Coordinated Vulnerability Disclosure, Practically Coordinated Vulnerability Disclosure (CVD) balances user safety and transparency when there’s a trusted intake channel (SECURITY.md, security@, portal) with responder rotation. A healthy flow acknowledges the report within 24–72 hours, requests a POC, and agrees on an embargo; reproduces the issue in a controlled environment, assigns severity, and maps affected versions; develops the fix on a private branch with least-privilege review; prepares the advisory (CVE or GHSA), release notes, and upgrade guidance; coordinates publication timing, signs and distributes artifacts, notifies registries and distros; and, after release, publishes the postmortem, credits the reporter, and outlines hardening steps. A typical timeline might be: Day 0, receipt and acknowledgment with a triage owner; Days 1–2, reproduction confirmed, severity and scope defined, embargo agreed; Days 2–4, fix implemented with tests, backports prepared, advisory drafted; Day 5, coordinated publication, release cut, downstreams notified; Days 5–10, monitoring, hotfixes if needed, and postmortem published. ## Severity Is Not the Whole Story CVSS helps, but it isn’t sufficient. Environmental and temporal factors dominate real risk: exploitability depends on configuration, exposure, and available mitigations; impact varies with data sensitivity, privilege boundaries, and blast radius; and patch risk matters—a theoretically “low” severity can be urgent if the fix is trivial and consumption massive. Use CVSS as input, not the decision function. ## Supply Chain Security, Pragmatically In the supply chain, defense in depth means using SLSA as a maturity guide to guarantee provenance and verifiable builds; signing artifacts with Sigstore (cosign) and enforcing verification in CI/CD; publishing useful SBOMs accompanied by VEX to explain unaffected cases and cut noise; betting on reproducible builds by pinning compilers and base images; and “vendor less, review more”—remove gratuitous dependencies and prefer well-maintained libraries. ## A Maintainer’s Playbook (Practical and Repeatable) The maintainer’s playbook is simple and repeatable: acknowledge and triage (confirm receipt, assess severity, identify affected versions and configurations), secure the channel (move to a private, trusted medium, respect reasonable embargoes), reproduce and test (MRE and a failing test before the fix), patch with independent review prioritizing least-risk, prepare releases (backports when needed, changelog, notes, and upgrade guide), coordinate disclosure (request a CVE or publish a GHSA with CWE, severity, and credits), notify downstreams (signed releases, registries, distros, and integrators), and close with postmortem and hardening (document root cause, remove footguns, automate guardrails). Two tactical additions change outcomes: keep a private “security staging” branch with CI ready for hotfixes, and maintain a pre-approved backport matrix to eliminate debate during incidents. ## Habits That Pay Off Before the Next CVE There are habits that compound before the next incident: reduce fragile dependencies by preferring simple, audited components; automate scanning (SAST/DAST, secrets, dependency and container scans in CI); invest in tests and fuzzing where risk is concentrated; publish `SECURITY.md` and `security.txt` to create clear reporting paths; ship SBOMs and sign releases to raise traceability and upgrade confidence; and practice least privilege by default with narrow scopes, time-bound tokens, and safe defaults. ## Governance and Funding Realities in OSS Security Open source security often fails on incentives, not technique. Maintainers are volunteers or underfunded, and incident response competes with life; corporate consumers frequently externalize risk and internalize benefit, delaying updates for “business reasons”; and funding models rarely tie revenue to security outcomes—reputation does not scale alone. What works in practice includes maintenance-focused sponsorships, paid LTS, funded security audits, and vendor policies that reward prompt updates. ## Books That Ground the Mindset Alguns livros ajudam a calibrar a mentalidade: _Secrets and Lies_ (Bruce Schneier) lembra que confiança é processo; _The Cathedral & the Bazaar_ (Eric S. Raymond) mostra o poder da transparência com disciplina; _Security Engineering_ (Ross Anderson) expõe o caráter técnico, social, político e econômico da segurança; _The Phoenix Project_ (Gene Kim) ilustra como falhas viram aprendizado; e _Antifragile_ (Nassim Nicholas Taleb) argumenta que sistemas podem ganhar com o estresse quando bem desenhados. ## What This Episode Teaches Your prestd incident isn’t a global meltdown like Heartbleed. It’s a clear, useful signal: fast fixes, transparent communication, and timely updates build trust. That’s the work. The deeper lesson: cultivate structures—governance, automation, and incentives—that make the “fast, transparent, adoptable” path the default. Every CVE (or GHSA) is both a scar and a badge. Open source isn’t just code; it’s shared infrastructure that deserves guardrails more than heroics. ## In Closing Handling a CVE isn’t about erasing risk. It’s about turning risk into credibility. Ship the fix fast, communicate honestly, and help the ecosystem update. That’s how vulnerabilities become learning curves—not landmines. --- ## Appendix: Practical Templates ### Advisory (GHSA/CVE) Skeleton - Affected package and versions - Summary and impact (what an attacker can do) - Vulnerable configurations and preconditions - Severity (CVSS base, temporal/environmental notes) - Proof of concept (optional or delayed) - Mitigations and workarounds (if any) - Fixed versions and upgrade guidance - Credits and acknowledgments - Timeline (received, confirmed, fixed, released) ### Release Notes Skeleton (Security Release) - Summary of fixes with issue/advisory links - Upgrade notes (breaking changes, deprecations) - Backport coverage by branch - Verification steps (hashes, signatures) ### Coordinated Disclosure Email (Reporter → Maintainer) - Clear subject: Security issue in `[project-name]` `[version]` - Steps to reproduce and minimal POC - Impact description and likely severity - Affected versions and configurations - Suggested embargo window and availability for coordination ### Postmortem Outline - What happened (narrative timeline) - Technical root cause and contributing factors - Detection and response timeline metrics - What went well / what didn’t - Concrete preventive actions with owners and dates --- # Open Source Contributions - September 2025 **URL**: https://avelino.run/foss/2025/09/ **Published**: 2025-09-01 **Word Count**: 374 words **Summary**: September 2025 saw 10 repositories contributing 25 total events, including 13 pull requests and 8 pushes, enhancing project collaboration and security. In September 2025, the development community engaged in significant contributions across 10 repositories, showcasing a variety of activities including 13 pull requests, 3 reviews, and 8 pushes. This timeline highlights the collaborative efforts and key developments made throughout the month, reflecting the ongoing commitment to improving projects and addressing security concerns. ## 2025-09-30 - 🔀 Opened PR in [logseq/logseq](https://github.com/logseq/logseq): [feat(mobile): add background cloud sync for mobile app](https://github.com/logseq/logseq/pull/12138) ## 2025-09-29 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fix: use sticky-pull-request-comment for quality check report](https://github.com/avelino/awesome-go/pull/5824) ## 2025-09-28 - ✅ Reviewed PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [Bump tar-fs from 2.1.3 to 2.1.4](https://github.com/avelino/monotropic-theme-vscode/pull/26#pullrequestreview-3277509577) (Approved) ## 2025-09-26 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Enhance field parsing in columnsByRequest to handle space-separated values](https://github.com/prest/prest/pull/941#pullrequestreview-3271347037) (Changes requested) ## 2025-09-25 - 🔀 Opened PR in [buserbrasil/notion-webhook](https://github.com/buserbrasil/notion-webhook): [fix(webhook): prevent premature garbage collection of background tasks](https://github.com/buserbrasil/notion-webhook/pull/1) ## 2025-09-19 - 🔀 Opened PR in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [Oura weekly insights: fix sleep duration, robust logging, English standardization, GPT struct outputs, weekly workflow, and tests](https://github.com/avelino/training-personal-data/pull/11) ## 2025-09-18 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [feat(github_contributions): add support for issue comment contributions](https://github.com/avelino/avelino.run/pull/58) ## 2025-09-15 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fix(postgres): prevent SQL injection in `tsquery` operator](https://github.com/prest/prest/pull/940) ## 2025-09-14 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [feat: add new Tailwind-based style and visual improvements to site](https://github.com/editor-bootstrap/vim-bootstrap/pull/442) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [feat: add automated PR quality checks for CONTRIBUTING.md standards](https://github.com/avelino/awesome-go/pull/5810) ## 2025-09-13 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): ["redesign" and change Dracula UI to Tailwind](https://github.com/editor-bootstrap/vim-bootstrap/pull/441) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add plugin management API endpoints and CLI flag](https://github.com/editor-bootstrap/vim-bootstrap/pull/439) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [change dracula ui to tailwindcss](https://github.com/editor-bootstrap/vim-bootstrap/issues/440) ## 2025-09-11 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [ci(test): run test suite via docker-compose-test.yml and document usage](https://github.com/prest/prest/pull/939) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fix(security): unify identifier validation; enforce in templates, groupby, and path params to prevent SQLi (fixes #937, GHSA-p46v-f2x8-qp98)](https://github.com/prest/prest/pull/938) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/spf13/viper from 1.19.0 to 1.21.0](https://github.com/prest/prest/pull/936#pullrequestreview-3214007896) (Approved) ## 2025-09-06 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fix(postgres): improve `_returning` param handling for SQL injection safety](https://github.com/prest/prest/pull/935) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 19 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) - 🔨 Push to [buserbrasil/notion-webhook](https://github.com/buserbrasil/notion-webhook): 13 commit(s) - [See commits](https://github.com/buserbrasil/notion-webhook/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) - 🔨 Push to [avelino/training-personal-data](https://github.com/avelino/training-personal-data): 13 commit(s) - [See commits](https://github.com/avelino/training-personal-data/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 6 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 4 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) - 🔨 Push to [talkdai/landing-page](https://github.com/talkdai/landing-page): 1 commit(s) - [See commits](https://github.com/talkdai/landing-page/commits?author=avelino&since=2025-09-01T00:00:00Z&until=2025-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Cultivating a Healthy Codebase: Beyond Code That Just Works **URL**: https://avelino.run/cultivating-a-healthy-evolvable-codebase/ **Published**: 2025-08-05 **Tags**: Software Architecture, Code Quality, Technical Debt, Clean Code, Staff Engineer **Word Count**: 1999 words **Summary**: A deep dive into software engineering principles for building a healthy, maintainable, and evolvable codebase. Learn how Clean Architecture, SOLID, TDD, and the Staff Engineer mindset can boost your team's agility and long-term productivity by minimizing technical debt. In software engineering, there's an inconvenient truth every experienced developer knows: the difference between a project that accelerates over time and one that grinds to a halt lies not in the brilliance of its initial code, but in its ability to evolve. Let's be honest. We've all felt that chill down our spine when tasked with modifying a critical module. That fear that a small change could trigger a cascade of unpredictable side effects. This feeling is a symptom. The diagnosis? A hostile codebase. A hostile codebase is expensive. It drains productivity, frustrates developers, and turns innovation into a risk management exercise. The goal of this article is to dive deep into the principles and practices that transform a software liability into a strategic asset: a **healthy, friendly, and evolvable codebase**. ## The "Why": Architecture as an Enabler of Agility The agility to implement, test, and change behaviors doesn't happen by chance. It is a direct consequence of deliberate architectural decisions. The ultimate goal of a good architecture is to minimize the cost of change over the software's lifecycle. ### The Dependency Rule and Clean Architecture Robert C. Martin, in his seminal book **"Clean Architecture,"** provides us with the most powerful guideline: **The Dependency Rule**. > High-level modules should not depend on low-level modules. Both should depend on abstractions. Source code dependencies should always point inwards, towards higher-level policies. In practical terms, this means that your business logic (the rules that generate value for the company) should know nothing about the database you use, the web framework you've chosen, or the user interface you render. ![Clean Architecture Diagram](/blog/cultivating-a-healthy-evolvable-codebase.jpg) *(Source: The Clean Coder Blog)* **Why is this so transformative?** 1. **Inherent Testability:** If your business logic doesn't depend on a real database or web server, you can test it in milliseconds, using test doubles (mocks/stubs) in place of dependencies. Testing fast is the foundation for changing fast. 2. **Interchangeability:** Imagine this scenario: the marketing team requests a new feature to log customer anniversary events, which can have varied data structures. To implement this efficiently, the engineering team concludes that the best approach is to migrate the profile storage to PostgreSQL to leverage the powerful `jsonb` data type. * **In a coupled architecture**, this would be a nightmare. The business logic would be entangled with calls to the old database, requiring a dangerous, high-risk rewrite across multiple parts of the system. * **In a clean architecture**, the business logic (the "heart of the system") doesn't know which database is used. It only communicates with an abstraction, an interface like `IProfileRepository`. Implementing this new feature becomes a surgical task: we create a new `PostgresProfileRepository` class that implements the existing interface and "plug" it into the system. The core of the software remains untouched, stable, and oblivious to this major infrastructure change. The technical decision serves the business, without the business becoming a hostage to the technology. 3. **Focus:** Developers working on business logic can focus on the business problem ("what are the rules for an anniversary event?") without being distracted by the complexities of the infrastructure. ### The SOLID Principles at the Micro Level If Clean Architecture is the urban plan for our software city, the **SOLID** principles are the building codes for each structure. They help us implement the Dependency Rule at the class and module level. * **(S) Single Responsibility Principle:** A class should have one, and only one, reason to change. A `TaxCalculator` class should not be responsible for saving the result to the database. This isolates the impact of changes. * **(O) Open/Closed Principle:** Software should be open for extension but closed for modification. Instead of changing an existing class to add a new payment type, you create a new implementation of a `PaymentMethod` interface. This prevents breaking what already works. * **(L) Liskov Substitution Principle:** Subtypes must be substitutable for their base types without altering the correctness of the program. This ensures that the abstraction you've created is reliable and that polymorphism works as expected. * **(I) Interface Segregation Principle:** No client should be forced to depend on methods it does not use. Creating small, focused interfaces (`Payable`, `Refundable`) is better than a monolithic `FinancialManager` interface. * **(D) Dependency Inversion Principle:** This is the heart of the Dependency Rule at the code level. Instead of a `UserService` directly instantiating a `PostgresRepository`, it depends on an `IUserRepository` interface. The concrete implementation (Postgres, MongoDB, etc.) is "injected" from the outside. ## The "How": Disciplined Practices for Maintaining Health Having a good architectural design is not enough. We need daily disciplines to build and maintain quality. ### Test-Driven Development (TDD) is Not About Testing Contrary to its name, the primary benefit of TDD is not the resulting test suite (though that's an excellent side effect). **TDD is a design discipline.** The **Red-Green-Refactor** cycle forces us to: 1. **Red (Write a failing test):** Think first about the desired interface and behavior. What do I want this code to do? How will I use it? This forces the creation of clean, focused APIs. 2. **Green (Write the simplest code to pass the test):** Focus on making one thing work, avoiding over-engineering. 3. **Refactor (Improve the code's design):** With the safety of the test suite, we can now improve the internal structure of the code. This is where we apply SOLID principles, remove duplication, and increase clarity, knowing we haven't broken anything. TDD is what makes refactoring safe and, therefore, feasible to practice continuously. ### Refactoring: The Continuous Hygiene of Code Michael Feathers, in **"Working Effectively with Legacy Code,"** brilliantly defines legacy code: **legacy code is simply code without tests**. Why? Because without tests, we cannot refactor it safely. Refactoring should not be a "project" scheduled for the next quarter. It should be a continuous practice, like washing the dishes after cooking. It is the "Boy Scout Rule" applied to software: > "Always leave the campground cleaner than you found it." When fixing a bug or adding a small feature, take the opportunity to make a small improvement: rename a variable to be clearer, extract a complex method into smaller ones, break a dependency. This compounding effect of improvements is what prevents the codebase from deteriorating. ## The "Culture": The Human Factor and Technical Leadership None of the practices above survive in a vacuum. They need to be sustained by an engineering culture that values quality, collaboration, and, crucially, technical leadership. ### The Staff Engineer's Perspective: The Architect and Guardian of Codebase Health The existence of a healthy codebase is not an accident but the result of deliberate and persistent technical leadership. In her book **"The Staff Engineer's Path,"** Tanya Reilly deconstructs the senior engineer (Staff+) role, showing that their greatest contribution comes not from the volume of code they write, but from their ability to act as a **force multiplier** for the entire team. In the context of a codebase, this multiplication takes very concrete and profound forms. Let's abandon the simplistic view that the Staff Engineer just "writes the hardest code." Their real job is to ensure that the easy code to write is also the right, sustainable code. #### 1. Seeing the Forest, Not Just the Trees: "Big-Picture Thinking" One of the fundamental distinctions Reilly points out is the shift from local optimizations to a systemic view. * A **Senior Engineer** sees a performance problem (an N+1 query, for example), fixes it efficiently, and moves on. The local problem is solved. * A **Staff Engineer** sees the same problem and asks, "*Why did this happen? Why didn't our ORM, our code review tools, or our tests warn us about this? This is the third time this month we've fixed an N+1 issue. Does our data access layer promote this type of error? Do we need a new abstraction or a specific linter to prevent this entire class of bugs in the future?*" This is the application of **"Big-Picture Thinking."** The Staff Engineer isn't just fixing a leak; they are analyzing the entire plumbing system to understand why the pipes keep bursting. For the codebase, this translates to: * **Influencing Architecture:** Advocating for architectural changes that eliminate entire classes of problems, rather than applying countless "band-aids." * **Defining Technical Strategy:** Helping to draw a map of where the codebase needs to evolve in the next 1-2 years to support business goals, identifying the most strategic technical debt to pay down *now*. #### 2. The "Glue Work": The Invisible Work That Upholds Quality Reilly gives special attention to "Glue Work"—the often invisible and unglamorous work that connects people, systems, and processes. In a codebase, this "glue work" is the immune system that keeps it healthy. The Staff Engineer is the primary agent of this work, acting as the **"guardian of technical quality"**: * **Establishing and Automating Standards:** It's not enough to say "write tests." The Staff Engineer ensures the CI/CD pipeline is fast, reliable, and blocks code without adequate coverage. They define linting and formatting rules that are applied automatically, making the quality standard the path of least resistance. * **Improving the Developer Experience (DX):** A build that takes 15 minutes? A development environment that takes a day to set up? This is friction that encourages shortcuts and frustrates the team. The Staff Engineer invests time in optimizing these tools, knowing that a fast feedback loop is essential for safe refactoring and experimentation. * **Writing the Important Documentation:** Not the documentation that repeats what the code already says, but the documentation that explains the **why**. Documenting an architectural decision, the reasons for choosing one technology over another, or the trade-offs of a complex module. This is the knowledge that prevents future teams from repeating past mistakes. #### 3. "You're a Role Model Now": Leading by Example The Staff Engineer leads by example. Their code is not just functional; it is a teaching tool. * **Exemplary Pull Requests:** Their PRs are clear, well-described, with tests that not only prove functionality but also document behavior. They demonstrate the patterns the team should follow. * **Code Reviews That Raise the Bar:** In a code review, they go beyond "missing semicolon." They ask strategic questions: "*Is this new dependency aligned with our long-term vision? Have we considered how this approach will scale? Is there a simpler way to solve this that will be easier for the next developer to maintain?*" They use the CR as a mentoring opportunity, raising the technical level of the entire team. In short, a Staff Engineer's contribution to a friendly and evolvable codebase is less about their individual output and more about creating a **socio-technical system** where quality is a natural outcome. They don't just build good "buildings" (features); they design the "city" (architecture), write the "zoning laws" (standards), and ensure the "transportation routes" (pipelines and DX) are efficient for all the other builders. They transform codebase health from a heroic individual effort into a collective, manageable responsibility. ## Conclusion: An Investment with an Exponential Return Building and maintaining a friendly codebase is not a luxury; it's an economic necessity for any tech company that wants to move quickly and sustainably. It is an effort that combines an **architecture** focused on separation of concerns, daily **practices** of TDD and refactoring, and a **culture** of collaboration led by engineers who think systemically. The initial cost of adopting these disciplines is paid back multiple times over by increased development velocity, a decrease in critical bugs, and, perhaps most importantly, a happier and more engaged engineering team. A healthy codebase is a living organism. It breathes, grows, and adapts. And our job as engineers is to be its best caregivers. > We talked about staff responsibility, but this extends to all team members (especially leaders). It's important that **each team member takes responsibility** and works together to ***maintain healthy code***. --- ### Further Reading * **Martin, Robert C.** [*Clean Code: A Handbook of Agile Software Craftsmanship*](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/). Prentice Hall, 2008. * **Martin, Robert C.** [*Clean Architecture: A Craftsman's Guide to Software Structure and Design*](https://www.amazon.com/Clean-Architecture-Craftsmans-Software-Structure/dp/0134494164/). Prentice Hall, 2017. * **Feathers, Michael C.** [*Working Effectively with Legacy Code*](https://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052/). Prentice Hall, 2004. * **Reilly, Tanya.** [*The Staff Engineer's Path: A Guide for Individual Contributors Navigating Growth and Change*](https://www.amazon.com/Staff-Engineers-Path-Individual-Contributors/dp/1098118731/). O'Reilly Media, 2022. * **Fowler, Martin.** [*Refactoring: Improving the Design of Existing Code* (2nd Edition)](https://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Signature/dp/0134757599/). Addison-Wesley, 2018. --- # Open Source Contributions - August 2025 **URL**: https://avelino.run/foss/2025/08/ **Published**: 2025-08-01 **Word Count**: 109 words **Summary**: August 2025 highlights key contributions with 4 repos, 3 pushes, and 1 new pull request, showcasing ongoing development and collaboration. In August 2025, significant contributions were made across four repositories, reflecting a robust engagement in code development. This timeline encapsulates the month's activities, including push events, pull requests, and reviews, illustrating the collaborative spirit and progress in software enhancement. ## 2025-08-05 - 🔀 Opened PR in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [Melhorar o software existente](https://github.com/avelino/training-personal-data/pull/9) ## 2025-08-04 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 7.1.0 to 7.2.0](https://github.com/avelino/bots.clj.social/pull/184#pullrequestreview-3083486426) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 5.5.6 to 5.7.0](https://github.com/avelino/bots.clj.social/pull/186#pullrequestreview-3083484758) (Approved) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-08-01T00:00:00Z&until=2025-08-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 2 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2025-08-01T00:00:00Z&until=2025-08-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-08-01T00:00:00Z&until=2025-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The Code Doesn't Speak for Itself: Why Experienced Tech Professionals Must Master the Art of Negotiation **URL**: https://avelino.run/the-code-doesnt-speak-for-itself-negotiation-for-tech-professionals/ **Published**: 2025-07-16 **Tags**: negotiation for engineers, tech career, data science salary, leadership development, difficult conversations, never split the difference **Word Count**: 833 words **Summary**: For software engineers and data scientists, logic reigns. But career growth demands a different skill: negotiation. Learn why your value needs to be articulated. In the universe of software engineering and data science, we operate under the empire of logic and merit. An elegant piece of code, an algorithm that saves millions in cloud costs, or a model that boosts user retention by 5% are irrefutable truths. We believe, almost as an article of faith, that our work will speak for itself. We expect technical excellence to be noticed and, naturally, rewarded. However, for experienced professionals, this is one of the most dangerous fallacies for career growth. Value, no matter how obvious it may seem to you, needs to be translated, communicated, and yes, negotiated. ![The Code Doesn't Speak for Itself: Why Experienced Tech Professionals Must Master the Art of Negotiation](/blog/the-code-doesnt-speak-for-itself-negotiation-for-tech-professionals.png) ## The Anatomy of the Difficult Conversation: Aligning Perceptions of Value The root of the problem is rarely bad faith. Your manager is not necessarily trying to undervalue you. The challenge is that you and the leadership are operating with different sets of information and priorities. This is where the teachings of ["Difficult Conversations: How to Discuss What Matters Most"](https://www.amazon.com/Difficult-Conversations-Discuss-What-Matters/dp/0143118447) become an essential guide. The book argues that the fundamental mistake we make is assuming difficult conversations are about facts, when they are actually about conflicting perceptions and feelings. > Difficult conversations are almost never about getting the facts right. They are about conflicting perceptions, interpretations, and values. They are not about what a contract *says*, but about what a contract *means*. For a technical professional, the "What Happened?" conversation is our strong suit. You don't say, "I worked hard." You say, "I led the project to refactor our data pipeline, which reduced latency by 40% and allowed the BI team to generate real-time reports, unlocking X new business initiatives." You use facts, metrics, and business impact as your foundation, separating the person (you) from the problem (the misalignment between contribution and compensation). The challenge is to understand that your facts, however solid, do not represent the whole story for the other party. ## Strategic Timing and Tactical Empathy: When and How to Negotiate Once you are armed with the data that quantifies your value, the question becomes one of *timing*. This is where the wisdom of Chris Voss, a former FBI hostage negotiator and author of ["Never Split the Difference"](https://www.amazon.com/Never-Split-Difference-Negotiating-Depended/dp/0062407805), is transformative. Voss teaches that the best moment to negotiate is right after you have created value for the other side. Did you just deliver a critical project ahead of schedule? Did you close a security vulnerability that could have cost millions? That is your moment of maximum leverage. The value you provided is fresh and undeniable. The approach, however, is not confrontational. Voss advocates for "tactical empathy"—understanding your manager's perspective, not to agree with it, but to comprehend it. > Tactical empathy is understanding the feelings and mindset of another in the moment and also hearing what is behind those feelings so you can increase your influence in all the moments that follow. Your negotiation should be framed as a solution for them. "I know that retaining senior talent is a priority for you. I want to continue delivering this level of impact here, and for that to be sustainable for me in the long term, we need to ensure my total compensation reflects this contribution." You are not asking; you are collaborating toward a mutual goal: keeping a high-performing asset (you) motivated and productive. ## Strategic Negotiation: When to Accept Less (Temporarily) What if the opportunity of your dreams requires a lateral move or even a small step back in compensation? For an experienced professional, this can be a masterstroke, *if* done consciously. Perhaps you are migrating from web development to Machine Learning, or you want the experience of scaling a system from 1 million to 100 million users. In these cases, you are negotiating for something beyond salary: experience and career capital. The key is to treat this as an explicit negotiation. In the initial conversation, you might say, "I understand this is the budget for the position. My goal is to demonstrate X and Y within the next 6 months. Once that value is clearly delivered, I'd like to schedule a conversation to reassess and align my compensation with the market standard for someone with that contribution." This transforms acceptance into a conditional agreement. And to ensure your achievements don't get lost in the day-to-day, the practice of keeping a ["Brag Document"](https://jvns.ca/blog/brag-documents/), as popularized by Julia Evans, becomes your most powerful tool. It's not vanity; it's a factual record for a future, data-driven conversation. ## Conclusion: You Are the Architect of Your Career For tech professionals, senior growth transcends the ability to write code or analyze data. It requires the ability to articulate value, influence decisions, and architect one's own career. Negotiating your compensation, especially after delivering significant results, is not an act of confrontation. It is the logical conclusion of your work: ensuring that the system (your career and your company) properly recognizes and rewards the efficiency and value you have injected into it. Your code is brilliant, but it's your voice that will ensure your impact is fully understood and valued. --- # Open Source Contributions - July 2025 **URL**: https://avelino.run/foss/2025/07/ **Published**: 2025-07-01 **Word Count**: 169 words **Summary**: July 2025 saw 11 contributions across 8 repositories, including 3 new pull requests and significant updates to enhance code quality and functionality. Explore the contributions made in July 2025, highlighting the collaborative efforts across various projects. This timeline showcases a total of 11 contributions, including multiple push events and impactful pull requests aimed at improving code quality and user experience. ## 2025-07-19 - ✅ Reviewed PR in [avelino/nexpress](https://github.com/avelino/nexpress): [build(deps): Bump on-headers, compression and express-session](https://github.com/avelino/nexpress/pull/5#pullrequestreview-3035530491) (Approved) ## 2025-07-09 - 🔀 Opened PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [feat: add comprehensive linting pipeline with stylelint and code quality tools](https://github.com/avelino/flexoki-logseq/pull/12) ## 2025-07-08 - ✅ Reviewed PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [Bump tar-fs from 2.1.2 to 2.1.3](https://github.com/avelino/monotropic-theme-vscode/pull/24#pullrequestreview-2997929872) (Approved) ## 2025-07-05 - 🔀 Opened PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [fix: Inline Block References Display Issue – Styling/Spacing Problem](https://github.com/avelino/flexoki-logseq/pull/11) - 🔀 Opened PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [fix: improve CSS formatting and add menu styling for better readability](https://github.com/avelino/flexoki-logseq/pull/10) ## Commits - 🔨 Push to [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): 8 commit(s) - [See commits](https://github.com/avelino/flexoki-logseq/commits?author=avelino&since=2025-07-01T00:00:00Z&until=2025-07-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-07-01T00:00:00Z&until=2025-07-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2025-07-01T00:00:00Z&until=2025-07-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-07-01T00:00:00Z&until=2025-07-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2025-07-01T00:00:00Z&until=2025-07-31T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 1 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2025-07-01T00:00:00Z&until=2025-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # LLMs and the Future of Development: Amplifiers or Threats to Product Thinking? **URL**: https://avelino.run/llms-future-development-product-thinking/ **Published**: 2025-06-13 **Tags**: LLMs development, artificial intelligence code, product thinking future, development automation, technology strategy **Word Count**: 904 words **Summary**: Definitive analysis of how LLMs impact software development and why product thinking becomes even more crucial for navigating this technological transformation with strategic intelligence. *This is the conclusion of our series about the evolution of product delivery since 2022. If you haven't read the previous parts, I recommend starting with the [first part](/silent-revolution-product-minded-developers-software-delivery-2022) about technical improvements and then the [second part](/product-thinking-real-business-results-user-experience) about business impact and user experience, to have the complete context of this analysis.* ![LLMs and Product Thinking](/blog/llms-future-development-product-thinking.png) We arrive at the most fascinating and controversial aspect of current software development evolution: how Large Language Models fit into the improvement trajectory we've analyzed. This isn't a peripheral issue; it's central to understanding whether the positive evolution we've documented will continue or if we'll face new challenges that could compromise the gains we've achieved. ## The Role of LLMs: Amplifiers or Distractors of Improvement? The emergence of Large Language Models as everyday tools for developers adds a fascinating and complex layer to this evolution. It's impossible to discuss the improvement in deliveries from 2022 to now without addressing how LLMs fit into this trajectory, because they represent both an opportunity and a risk for the continuity of this positive evolution. LLMs are contributing to improvements in genuinely transformative ways. The acceleration of routine tasks is real and measurably significant. Boilerplate code generation, unit test creation, basic documentation elaboration, and even legacy code refactoring are tasks that can be dramatically accelerated with intelligent use of LLMs. More importantly, this acceleration isn't just about speed; it can effectively free up developers' mental capacity to focus on more complex problems and strategic product thinking. The facilitation of exploration and prototyping also represents a qualitative advance. LLMs allow developers to test ideas and approaches more quickly and with lower initial investment, creating space for more experimentation and iteration. This is particularly valuable for product-minded developers, because it allows exploring more alternatives before committing to a specific direction. However, LLMs also introduce risks that require constant vigilance and dramatically reinforce the need for product thinking as a safeguard. The risk of superficiality is real and dangerous. The ease of generating code can seduce developers into accepting solutions without deeply understanding the underlying problem or the solution's implications. This is precisely the type of thinking that the product-minded developer needs to actively combat. The quality and security of LLM-generated code varies drastically and doesn't always meet the standards necessary for production software. Human curation, guided by deep understanding of the product and business requirements, becomes not just valuable but essential. Product-minded developers are uniquely positioned to exercise this curation effectively, because they understand not just the code, but the business context and long-term implications of different technical choices. Perhaps the most subtle but potentially most harmful risk is excessive focus on the tool at the expense of the problem. Enthusiasm for new technologies can divert attention from what really matters: solving real user problems and adding measurable business value. This is a pattern we see repeatedly in the tech industry, and LLMs aren't immune to it. LLMs are, fundamentally, tools. Powerful and transformative tools, yes, but still tools. Their real value for improving deliveries only materializes when they're guided by strong product thinking. They can help developers build faster, but it's exclusively product thinking that ensures we're building the right thing, in the right way, for the right reason. ## Conclusion: Enhanced Deliveries Through Strategic Human Intelligence The journey from 2022 to today offers compelling evidence that product thinking isn't a passing trend or consulting jargon, but a fundamental pillar for sustainable evolution of software engineering. The improvements we observe in software deliveries whether in speed, strategic alignment with business, or user experience quality are direct reflections of teams and individual developers who have deeply internalized the importance of understanding not just the technical "how," but the strategic "why" and the real impact of their work. This evolution is particularly notable because it happened organically, emerging from practice and experience, not from corporate mandates or imposed methodologies. Developers discovered for themselves that when they truly understand the problem they're solving and the value they're creating, their work becomes not just more effective, but more satisfying and meaningful. LLMs add a fascinating new dimension to this scenario, offering genuine potential to dramatically amplify developers' capabilities. They represent one of the most powerful tools we've ever had available for accelerating software development. However, paradoxically, they also reinforce the critical need for sharp human discernment and clear strategic vision qualities that are inherent to the product-minded developer. The fundamental challenge remains unchanged, even in a world with LLMs: utilize all available tools and knowledge not to simply produce more code, but to deliver solutions that truly transform and add lasting, measurable value. The evolution of recent years is clear and encouraging, demonstrating that when developers embrace a product mindset, the entire development ecosystem benefits. Product thinking continues to be the compass that guides us in the right direction, especially in a rapidly transforming technological environment. It's not just about writing better code; it's about deeply understanding why we're writing code, for whom, and how our work connects to larger and more meaningful objectives. This understanding is what transforms developers into true value architects, capable of navigating any technological change while maintaining focus on what really matters: creating solutions that make a real difference in people's lives and business success. > This is the conclusion of the series about product delivery evolution. If you've reached here without reading the previous parts, I recommend starting with the [first part](/silent-revolution-product-minded-developers-software-delivery-2022) and [second part](/product-thinking-real-business-results-user-experience) for the complete experience. --- # From Theoretical to Tangible: How Product Thinking Generated Real Business Results and Transformed User Experience **URL**: https://avelino.run/product-thinking-real-business-results-user-experience/ **Published**: 2025-06-11 **Tags**: business impact, user experience, developer collaboration, software ROI, UX development **Word Count**: 800 words **Summary**: Explore how developers transformed product thinking into tangible business results and user experience, evolving from theory to practice with measurable impact since 2022. *If you haven't read the first part of this series about [The Silent Revolution](/silent-revolution-product-minded-developers-software-delivery-2022), I recommend starting there to understand the complete context of the transformation we're analyzing.* ![Product Thinking](/blog/product-thinking-real-business-results-user-experience.png) After exploring how technical improvements materialized since 2022, we arrive at the heart of the transformation: the moment when product thinking ceased being an aspirational concept to become an engine of measurable results for both business and user experience. ## Focus on Business Impact: From Requirement to Reality The most notable transformation since 2022 is perhaps how the focus on business impact migrated from the theoretical realm to everyday practice. In 2022, we talked about the need for this focus; today, we see its concrete materialization in the corridors of tech companies. Product-minded developers are no longer occasional guests in strategic discussions; they've become active and valued participants in product roadmap decisions and business KPI definition. This evolution reflects a more mature understanding by leadership that product-minded developers bring a unique and valuable perspective: they understand both technical possibilities and limitations, and can translate business objectives into executable solutions. More importantly, they question assumptions and propose alternatives that purely business stakeholders might not have considered. The use of data to guide development has also evolved dramatically. Developers aren't just consuming product usage dashboards; they're actively participating in metrics definition, questioning how new features can be measured in terms of impact on company results, and more critically, using this data to influence technical decisions. They've learned to ask questions like: "How will we know if this implementation is working?" even before starting to code. Value-based prioritization has become second nature. The question "What's the business impact of this?" has evolved from a formal check to a constant mental filter. This change is profound because it fundamentally alters how technical problems are approached. Developers begin evaluating not just the technical elegance of a solution, but its effectiveness in moving business metrics. The direct consequence is more consistent and predictable business result delivery. Software ceases to be perceived as a necessary cost center and consolidates as an active growth engine. Whether optimizing existing operations, opening new markets through innovative features, or directly increasing revenue through better conversion and user retention, software developed with product thinking demonstrates tangible and trackable ROI. ## User Experience (Customer) Improvement: The Heart of Value Delivery User experience has always been theoretically central to product thinking, but from 2022 onwards, we've witnessed its elevation from concept to practical obsession. Developers have viscerally internalized that every line of code they write has a direct and measurable impact on the customer journey. This awareness has fundamentally transformed collaboration between disciplines. Collaboration with designers and UX researchers has evolved from functional coordination to true strategic partnership. Product-minded developers have learned that their technical perspective not only complements the design process but often enriches it in unexpected ways. They bring insights about what's technically possible within performance and resource constraints, allowing designers to explore more ambitious and innovative solutions. More importantly, they anticipate technical implications of UX decisions, preventing problems that would only manifest in production. This deeper partnership has resulted in a remarkable ability to anticipate user needs and friction points. Developers no longer wait for detailed specifications about edge cases; they identify them proactively, thinking about how real users will interact with the solution under real, not ideal, conditions. They ask questions like: "What if the user has slow internet?", "What if they try to do this on mobile?", "What if they make this common mistake?". This anticipation translates into more robust software and smoother experiences. The focus on performance, accessibility, and usability has definitively migrated from the "nice-to-have" category to an essential component of any delivery. Product-minded developers understand that a slow application is an application that fails in its mission, regardless of how elegant the code might be. They've internalized that accessibility isn't compliance; it's market expansion. They know that usability isn't cosmetic; it's fundamental for adoption and retention. The result is software that transcends mere functionality to become genuinely pleasant to use. This isn't a minor achievement; in a saturated market, user experience is often the decisive competitive differentiator. Software developed with this mindset solves users' problems efficiently, contributing directly to customer satisfaction, retention, and advocacy. But there's a disruptive element that adds complexity to this entire evolution: the emergence of Large Language Models as everyday tools for developers. **In the final part of this series, we'll explore how LLMs fit into this improvement trajectory, representing both an opportunity and a risk for the continuity of this positive evolution, and what this means for the future of software development.** > This is the second part of the series. If you missed the [first part](/silent-revolution-product-minded-developers-software-delivery-2022), I recommend reading it before continuing. Next week, we'll conclude by exploring the role of LLMs in this evolution. --- # The Silent Revolution: How Product-Minded Developers Transformed Software Delivery Since 2022 **URL**: https://avelino.run/silent-revolution-product-minded-developers-software-delivery-2022/ **Published**: 2025-06-09 **Tags**: product thinking, developers, software delivery, time to market, technical quality **Word Count**: 573 words **Summary**: Discover how product-minded developers revolutionized software delivery since 2022, improving development cycles, technical quality, and strategic alignment with industry data. ![Silent Revolution](/blog/silent-revolution-product-minded-developers-software-delivery-2022.png) In *2022*, I dove deep into the crucial importance of *"[Product-Minded Developers](https://avelino.run/pessoas-desenvolvedoras-com-pensamento-de-produto-engenharia-de-produto/)"*. The thesis was simple but powerful: go beyond code for code's sake, focusing on solving real business problems and driving the company toward its objectives. It was about transforming lines of code into tangible value. Fast-forward to today, much has evolved. New technologies, like LLMs, have become ubiquitous, integrating into developers' workflows. But beyond the tools, the fundamental question remains: how has that product mindset translated into concrete improvements in software delivery? What has effectively changed for the better from 2022 to now? ## What Have We Delivered from 2022 to Today? Continuous and Measurable Improvement The transformation we've observed since 2022 in teams that embraced product thinking goes far beyond mere superficial changes in processes. We're witnessing a silent but profound revolution in how software is conceived, developed, and delivered. This evolution manifests first in development cycles, which have become significantly more agile and lean. When developers truly understand the "why" behind each feature they build, a laser focus naturally emerges on what's essential versus what's merely desirable. This deep understanding of purpose results in something business metrics capture immediately: a notable reduction in Time to Market for features that truly move the business needle. It's not just about building faster, but building with strategic intelligence. Teams have organically refined their agile practices, discovering that when each team member understands the impact of their work, deliveries naturally become more frequent and incremental, because there's shared clarity about what constitutes deliverable value. Parallel to this, we observe a fundamental shift in software's adherence to business needs. The constant dialogue between developers and product areas has evolved from a formality to an organic necessity. Product-minded developers don't wait for complete specifications; they ask questions, challenge assumptions, and propose solutions that often surprise business stakeholders with their strategic depth. The result is solutions intrinsically linked to the company's strategic objectives, where every line of code written has a clear and measurable purpose. Quality, both perceived and technical, has experienced equally impressive evolution. There's an interesting paradox here: when developers care deeply about the problem they're solving, they naturally build more robust and scalable solutions. This isn't coincidence; it's consequence. A deep understanding of the problem leads to more solid architectural decisions, because the developer can anticipate how the solution will need to evolve. The concern shifts from merely "it works" to encompass "it works well, is maintainable, is scalable, and solves the user's problem effectively in the long term." Industry data corroborates this evolution. The ["State of DevOps Report"](https://services.google.com/fh/files/misc/2024_final_dora_report.pdf) consistently demonstrates that high-performing teams, which generally internalize many product thinking principles like focus on value flow and rapid feedback, continue improving fundamental metrics such as deployment frequency and lead time for changes, while maintaining low failure rates. This isn't a statistical accident; it's empirical evidence that when developers think like product owners, the entire delivery cycle optimizes itself. But technical improvements are just one face of this transformation. The real revolution happened when developers began to understand and directly influence business impact and user experience. **In the next part of this series, we'll explore how this mindset migrated from the theoretical realm to tangible business results, and how collaboration with other disciplines evolved to create genuinely transformative user experiences.** > This is the first part of a series about the evolution of product delivery. Continue reading to discover the business impact and user experience transformation. --- # Open Source Contributions - June 2025 **URL**: https://avelino.run/foss/2025/06/ **Published**: 2025-06-01 **Word Count**: 350 words **Summary**: June 2025 saw 22 contributions across 9 repositories, including 4 pull requests and 8 issues, enhancing project functionality and addressing user concerns. In June 2025, contributors engaged actively across multiple repositories, resulting in significant enhancements and bug fixes. This timeline showcases the key contributions made throughout the month, including open pull requests, reviews, and newly created issues that highlight ongoing improvement efforts in the projects. ## 2025-06-30 - 🔀 Opened PR in [businho/django-connexion](https://github.com/businho/django-connexion): [feat: migrate from Connexion 2.x to 3.x while maintaining backward compatibility](https://github.com/businho/django-connexion/pull/10) - ✅ Reviewed PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [feat: support progress bars on pages](https://github.com/avelino/flexoki-logseq/pull/5#pullrequestreview-2971485854) (Approved) - 🐛 Opened issue in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [sidebar graph switch text has light font - making it impossible to read](https://github.com/avelino/flexoki-logseq/issues/9) - 🐛 Opened issue in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [sidebar recent topic text has light font - making it impossible to read](https://github.com/avelino/flexoki-logseq/issues/8) - 🐛 Opened issue in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [cloud sync menu text has light font - making it impossible to read](https://github.com/avelino/flexoki-logseq/issues/7) - 🐛 Opened issue in [businho/django-connexion](https://github.com/businho/django-connexion): [update connexion version to 3](https://github.com/businho/django-connexion/issues/11) ## 2025-06-23 - ✅ Reviewed PR in [SectorLabs/django-postgres-extra](https://github.com/SectorLabs/django-postgres-extra): [Make multi-day partitions deterministic and aligned](https://github.com/SectorLabs/django-postgres-extra/pull/263#pullrequestreview-2949462419) (Approved) ## 2025-06-22 - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Export ChronDB snapshot as `.gitbundle` for backup and audit purposes](https://github.com/moclojer/chrondb/issues/45) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Add operation flags using `git-notes` for special ChronDB events](https://github.com/moclojer/chrondb/issues/44) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Add transaction context using `git-notes` for ChronDB operations](https://github.com/moclojer/chrondb/issues/43) ## 2025-06-09 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 5.2.4 to 5.2.5](https://github.com/avelino/bots.clj.social/pull/182#pullrequestreview-2909651835) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 13.2 to 13.4](https://github.com/moclojer/moclojer/pull/327#pullrequestreview-2910557138) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Global configuration valid for all endpoints, starting with external content folder setup](https://github.com/moclojer/moclojer/issues/328) ## 2025-06-08 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [fix: improve async handling and connection management for Redis client](https://github.com/avelino/bots.clj.social/pull/181) ## 2025-06-07 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [fix: improve Redis client connection handling and async processing](https://github.com/avelino/bots.clj.social/pull/180) ## 2025-06-05 - 🔀 Opened PR in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [refactor: implement pipeline design to simplify data flow chaining](https://github.com/avelino/training-personal-data/pull/8) ## 2025-06-02 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.7.1 to 2.8.0](https://github.com/avelino/bots.clj.social/pull/177#pullrequestreview-2887664998) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 5.0.1 to 5.1.1](https://github.com/avelino/bots.clj.social/pull/179#pullrequestreview-2887663210) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 8 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-06-01T00:00:00Z&until=2025-06-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 7 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2025-06-01T00:00:00Z&until=2025-06-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 5 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-06-01T00:00:00Z&until=2025-06-30T23:59:59Z) - 🔨 Push to [avelino/training-personal-data](https://github.com/avelino/training-personal-data): 3 commit(s) - [See commits](https://github.com/avelino/training-personal-data/commits?author=avelino&since=2025-06-01T00:00:00Z&until=2025-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Mental Obesity: When Consuming Knowledge Becomes a Cognitive Burden **URL**: https://avelino.run/mental-obesity-consuming-knowledge-cognitive-burden/ **Published**: 2025-05-01 **Tags**: mental obesity, cognitive overload, information fatigue, productivity and learning, knowledge without application **Word Count**: 864 words **Summary**: Mental obesity is the burnout caused by information overload — discover how excess knowledge without action harms your focus and growth We live in the age of information, where access to knowledge is virtually limitless. Books, courses, podcasts, articles, videos — everything is just a click away. For ambitious professionals, this abundance seems like a blessing. But increasingly, many people find themselves consuming content relentlessly without applying what they learn in real life. This phenomenon is known as **mental obesity**. ![Mental Obesity: When Consuming Knowledge Becomes a Cognitive Burden](/blog/mental-obesity-consuming-knowledge-cognitive-burden.png) ## What Is Mental Obesity? Mental obesity refers to the excessive accumulation of information without proper digestion, reflection, or practical implementation. Just as physical obesity results from consuming more calories than the body can burn, mental obesity stems from absorbing more knowledge than the mind can process or transform into action. This concept is closely linked to **cognitive overload**, a state where the brain’s processing capacity is exceeded, leading to mental fatigue, difficulty focusing, impaired learning, and reduced productivity. According to John Sweller's **Cognitive Load Theory**, the human brain has a limited working memory, and overwhelming it with disconnected content compromises both decision-making and long-term retention. ## The Trap of Knowledge Without Execution In high-performance environments — particularly startups and tech-driven companies — it's common to see people chasing non-stop learning. But without active application, this accumulation of knowledge often leads to frustration, the illusion of progress, and a paralyzing sense of stagnation. As shown in a study published in *"Ciência & Saúde Coletiva"*, mere knowledge acquisition is not sufficient to produce behavioral change. Transformation requires embodiment — turning theory into lived experience. 🔗 [Access the article](https://www.scielo.br/j/csc/a/Yc3tZVBddPswyW9J9qpKMQn/?lang=pt) ## Psychological Effects of Mental Obesity: The Mind Under Constant Pressure Mental obesity is not just a metaphor — it’s a phenomenon with **real psychological consequences**. Continuous exposure to high volumes of information without pauses or reflection creates a state of **chronic hyperstimulation**. The prefrontal cortex, responsible for executive functions like planning, decision-making, and inhibitory control, becomes overloaded. This often leads to declining mental clarity, diminished analytical capacity, and difficulty in setting priorities. One of the most common effects is the emergence of **persistent diffuse anxiety** — often described as the feeling of "always being behind" or "not keeping up with the world." This is exacerbated by constant comparisons, especially in digital environments, and by an internalized fear of falling behind. As the brain saturates with inputs and lacks integration time, it either shuts down (procrastination) or goes into hyperdrive (workaholism), both dysfunctional coping mechanisms. Another critical impact is the **erosion of cognitive self-esteem**. When we consume high-quality knowledge — technical books, advanced courses, dense academic papers — but fail to turn it into action, we start to question our own competence: "Maybe I’m not as capable as I thought?" This disconnect between intention and behavior can trigger cycles of **self-doubt**, reinforcing a mismatch between identity and performance. Over time, this contributes to demotivation, powerlessness, and in more severe cases, **cognitive burnout** — a mental exhaustion not from work volume, but from unprocessed knowledge. There's also the issue of **psychic fragmentation**. The human mind thrives on **narrative integration** — the ability to weave information into meaningful context. When flooded with disconnected content, the mind struggles to create coherence. The result? Scattered thinking, impaired sustained attention, and ironically, **lower creativity**, since true creativity requires synthesis and symbolic depth — both undermined by informational excess. Ultimately, the solution isn’t simply to consume less, but to **relearn how to consume**: to prioritize depth over breadth, action over accumulation, and integration over superficiality. Knowledge must return to being a tool for transformation, not a product for collection. ## Cognitive Symptoms Checklist If you suspect you're experiencing mental obesity, here are a few indicators: - You consume more content than you apply. - You feel guilty for not reading more — even after finishing a book. - You constantly start new courses but rarely finish or implement them. - You feel stuck or anxious despite learning “a lot.” - You struggle to focus or retrieve what you’ve read just days before. ## Strategies to Reverse Mental Obesity 1. **Act Before You Accumulate More** Don’t read a second article before acting on the first. Execution must precede further intake. 2. **Set Transformation Goals** Don’t just set goals to "learn X"; define *what you’ll do differently* once you learn it. 3. **Reintroduce Cognitive Fasting** Take regular breaks from content. Let your mind breathe and synthesize ideas. 4. **Reread and Reflect** Repetition deepens integration. Instead of consuming something new, re-engage with material and connect it to real-life challenges. 5. **Practice Contextual Learning** Read only what’s directly applicable to your current problem — and test it immediately. ## 🚀 Final Thoughts: Learning as a Tool, Not an Escape True learning is transformative, not performative. In a culture that often celebrates reading volume or certifications, we must remember that **accumulation without transformation is intellectual stagnation**. Knowledge should not be a refuge from action, but a catalyst for it. Mental obesity is the result of a system — personal and social — that values appearing informed more than being changed. To fight it, we must reframe our relationship with knowledge and reclaim the **discipline of depth**. --- ### 🧠 Scientific References - Sweller, J. (1988). *Cognitive load during problem solving: Effects on learning*. Cognitive Science, 12(2), 257–285. [doi](https://doi.org/10.1016/0364-0213(88)90023-7) - Paas, F. et al. (2003). *Cognitive load measurement as a means to advance cognitive load theory*. Educational Psychologist, 38(1), 63–71. --- # Open Source Contributions - May 2025 **URL**: https://avelino.run/foss/2025/05/ **Published**: 2025-05-01 **Word Count**: 581 words **Summary**: May 2025 saw 11 repos contributing 46 events, including 15 PRs, enhancing project features and fixing issues across multiple repositories. In May 2025, the contributions across 11 repositories marked a significant month of collaboration and development. With a total of 46 events comprising pushes, pull requests, and issues, this timeline showcases the ongoing commitment to enhancing project features, improving documentation, and addressing user needs. Explore the detailed contributions that shaped this dynamic month. ## 2025-05-30 - 🔀 Opened PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [feat: improve block embed styling and focus states](https://github.com/avelino/flexoki-logseq/pull/4) - 🔀 Opened PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [feat: add enhanced styling for numbered lists in flexoki theme](https://github.com/avelino/flexoki-logseq/pull/3) - 🔀 Opened PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [feat: major v2.0 design system overhaul with accessibility and performance improvements](https://github.com/avelino/flexoki-logseq/pull/2) ## 2025-05-28 - 🔀 Opened PR in [logseq/marketplace](https://github.com/logseq/marketplace): [feat: add Flexoki theme for Logseq](https://github.com/logseq/marketplace/pull/654) - ✅ Reviewed PR in [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): [[ImgBot] Optimize images](https://github.com/avelino/flexoki-logseq/pull/1#pullrequestreview-2873353283) (Approved) ## 2025-05-24 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docs: restructure documentation for better organization](https://github.com/moclojer/moclojer/pull/325) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 19 to 20](https://github.com/moclojer/moclojer/pull/324#pullrequestreview-2866561440) (Approved) ## 2025-05-19 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.3.196 to 1.3.204](https://github.com/avelino/bots.clj.social/pull/176#pullrequestreview-2851960228) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.1.4 to 7.1.6](https://github.com/avelino/bots.clj.social/pull/175#pullrequestreview-2851959672) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.10.3 to 7.1.0](https://github.com/avelino/bots.clj.social/pull/173#pullrequestreview-2851958439) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.7.0 to 5.0.1](https://github.com/avelino/bots.clj.social/pull/172#pullrequestreview-2851742684) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 5.0.9 to 5.2.3](https://github.com/avelino/bots.clj.social/pull/171#pullrequestreview-2851741516) (Approved) ## 2025-05-16 - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Time Series Query Support](https://github.com/moclojer/chrondb/issues/42) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Integration with CDC (Change Data Capture) Tools](https://github.com/moclojer/chrondb/issues/41) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Multi-tenancy Support and Isolation](https://github.com/moclojer/chrondb/issues/40) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Advanced Query and Index Support with Lucene](https://github.com/moclojer/chrondb/issues/39) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Authentication and Access Control](https://github.com/moclojer/chrondb/issues/38) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Implementation of Compression and Storage Optimization](https://github.com/moclojer/chrondb/issues/37) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Notification and Event Support for Database Changes - hooks architecture](https://github.com/moclojer/chrondb/issues/36) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Backup and Restore Implementation](https://github.com/moclojer/chrondb/issues/35) ## 2025-05-09 - 🔀 Opened PR in [avelino/nexpress](https://github.com/avelino/nexpress): [feat: add npm package build and publish workflow](https://github.com/avelino/nexpress/pull/4) - 🔀 Opened PR in [avelino/nexpress](https://github.com/avelino/nexpress): [test: add more unit tests for nexpress](https://github.com/avelino/nexpress/pull/3) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [feat: add code review contributions to GitHub activity](https://github.com/avelino/avelino.run/pull/57) - 🔀 Opened PR in [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): [fix: improve italic and strikethrough formatting](https://github.com/avelino/logseq-export-block/pull/9) - ✅ Reviewed PR in [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): [build(deps-dev): Bump vite from 6.2.4 to 6.2.7](https://github.com/avelino/logseq-export-block/pull/8#pullrequestreview-2829419796) (Approved) ## 2025-05-08 - 🔀 Opened PR in [avelino/nexpress](https://github.com/avelino/nexpress): [ci: add GitHub Actions workflow for running tests](https://github.com/avelino/nexpress/pull/2) - 🔀 Opened PR in [avelino/nexpress](https://github.com/avelino/nexpress): [feat: initial project structure and documentation](https://github.com/avelino/nexpress/pull/1) ## 2025-05-07 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [docs: improve documentation structure and content](https://github.com/moclojer/chrondb/pull/34) ## 2025-05-04 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: Add SQL history functions for document versioning](https://github.com/moclojer/chrondb/pull/31) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Refactor Error Handling and Add Retries for I/O Operations](https://github.com/moclojer/chrondb/issues/33) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Standardize ChronDB Logging System](https://github.com/moclojer/chrondb/issues/32) ## 2025-05-02 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: change license from MIT to GPLv3](https://github.com/moclojer/chrondb/pull/29) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Implement SQL functions for document history access](https://github.com/moclojer/chrondb/issues/30) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [License Conflict: Proposal to Relicense ChronDB as GPLv3](https://github.com/moclojer/chrondb/issues/28) ## 2025-05-01 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat(version-control): add Git-based document history access](https://github.com/moclojer/chrondb/pull/27) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 6 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 7 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 2 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [logseq/marketplace](https://github.com/logseq/marketplace): 1 commit(s) - [See commits](https://github.com/logseq/marketplace/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [avelino/flexoki-logseq](https://github.com/avelino/flexoki-logseq): 14 commit(s) - [See commits](https://github.com/avelino/flexoki-logseq/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 5 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): 2 commit(s) - [See commits](https://github.com/avelino/logseq-export-block/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [avelino/nexpress](https://github.com/avelino/nexpress): 7 commit(s) - [See commits](https://github.com/avelino/nexpress/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 16 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2025-05-01T00:00:00Z&until=2025-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The Power of Two Days: Neuroscience Behind the 48-Hour Rule for Effective Feedback **URL**: https://avelino.run/the-power-of-two-days-neuroscience-behind-the-48-hour-rule-for-effective-feedback/ **Published**: 2025-04-21 **Tags**: constructive feedback, neuroscience and leadership, how to give feedback, people management, timing of feedback **Word Count**: 584 words **Summary**: Feedback given within 48 hours after an event is more effective, empathetic, and constructive. This article explores the neuroscience behind this optimal window, grounded in David Rock's Your Brain at Work Experienced leaders know that giving feedback is not about pointing out mistakes — it's about **fostering development without damaging psychological safety**. The practice of **waiting up to 48 hours after an incident to give feedback** is rooted not just in behavioral wisdom but also in **neuroscience**. ![The Power of Two Days: Neuroscience Behind the 48-Hour Rule for Effective Feedback](/blog/the-power-of-two-days-neuroscience-behind-the-48-hour-rule-for-effective-feedback.png) This article deeply explores, through the lens of _Your Brain at Work_ ([Amazon](https://www.amazon.com/dp/0061771295)), by organizational neuroscientist **David Rock**, the brain mechanisms that make this time window the most effective for transforming feedback into growth — not trauma. ## The Biology of Threat: Why the Brain Rejects Poorly Timed Feedback When receiving feedback, the brain doesn't just process information — it **evaluates social threat in milliseconds**. According to Rock, criticism or correction can be perceived as a **status threat**, activating the **limbic system**, specifically the **amygdala**, the brain's fear and threat detection center. > "_The human brain responds to social threats with the same intensity as it does to physical threats._" > — David Rock In this state, the employee becomes **defensive**, impairing active listening, working memory, and rational processing. Trying to coach someone in this state is like **trying to teach during a fire drill** — survival trumps learning. **Waiting 48 hours** allows the amygdala to calm down and gives the **prefrontal cortex — responsible for executive function and empathy — a chance to take control.** ## The SCARF Model: Engineering a Safer Feedback Conversation David Rock's **SCARF** model explains how the brain reacts to five social domains: 1. **Status** – perception of relative importance. 2. **Certainty** – ability to predict the future. 3. **Autonomy** – sense of control over events. 4. **Relatedness** – sense of social connection. 5. **Fairness** – perception of fair exchanges. Poorly timed feedback can threaten **several of these simultaneously**. Thoughtful feedback, given with **intent, space, and structure**, mitigates these threats and **engages the brain cognitively, not reactively**. How the 48-hour delay helps: - Scheduling the conversation reinforces **Certainty**. - Sharing context and facts strengthens **Fairness** and **Relatedness**. - Inviting collaboration supports **Autonomy**. This creates a space of **learning** rather than **defensiveness**. ## Neurophysiology of Emotional Regulation: Why Time Matters Rock introduces the concept of the **"refractory state"** — a period after emotional activation when: - People **cannot process new information** effectively; - Working memory is impaired; - Focus is on self-protection, not learning. > "_It's futile to rationalize with someone in a refractory state. They may hear your words, but they're not processing them._" > — David Rock **Waiting 48 hours** ensures that both leader and employee exit the refractory state, enabling a conversation grounded in awareness, cognition, and empathy. ## Contextual Memory and Feedback Validity Rock also stresses the importance of **episodic memory** in meaningful feedback. After 2–3 days: - Leaders may forget important nuances; - Employees may reinterpret or mentally "close" the event; - Feedback may feel disconnected or punitive. The 48-hour window balances **recency** (preserving contextual memory) and **emotional regulation**, maximizing feedback impact. ## How to Apply This in Leadership Practice **Day 0 (incident):** - Document the facts, context, and consequences. - Avoid emotional or spontaneous feedback. **Day 1 (reflection):** - Reassess the true impact and intention. - Draft your message based on facts, not judgments. - Plan a SCARF-aware conversation. **Day 2 (delivery):** - Schedule and create a safe space for the dialogue. - Use frameworks like SBI (Situation, Behavior, Impact). - Invite reflection and co-create next steps. ## Conclusion The 48-hour rule for giving feedback is more than a best practice — it's **applied neuroscience in leadership**. Instead of reacting and risking trust, leaders who respect this window elevate themselves as **intentional, conscious, and effective** communicators. Great leaders don't just correct — **they shape safer, sharper, and more self-aware brains.** --- # Sometimes we try to escape from some technology, but it's no use! **URL**: https://avelino.run/quote/2025-04-03-735-/ **Published**: 2025-04-03 **Tags**: quote, skip **Word Count**: 59 words It's common at the beginning of a software engineering career to want to *"escape"* from certain technology stacks (for example JavaScript, Java, etc). After I understood that **adding value is the delivery to the business**, it made me not care about the stack I'm using. I enjoy programming and it's possible to write good software **regardless of the stack**. --- # Why We Changed the Site's Color Palette — Making Reading a More Pleasant Experience **URL**: https://avelino.run/why-we-changed-the-site-color-palette-2025/ **Published**: 2025-04-02 **Tags**: UX, usability, design, color palette, color psychology, accessibility, reading, UI, frontend **Word Count**: 268 words **Summary**: A deep dive into the pivotal role of communication in open source, providing maintainers with actionable insights to cultivate engaged, dynamic communities If you’ve visited [avelino.run](https://avelino.run) recently, you may have noticed: the visual vibe is softer, calmer — and that’s completely intentional. We redesigned the site’s color palette with one goal in mind: **to make your reading experience more comfortable**. And yes, there’s science behind it. ![Why We Changed the Site's Color Palette — Making Reading a More Pleasant Experience](/blog/why-we-changed-the-site-color-palette.png) ## 🧠 The Psychology of Color and Visual Fatigue Studies in interface design and cognitive neuroscience show that **pure white backgrounds and high-contrast elements** can cause eye strain during extended reading sessions. A study published in the *International Journal of Human-Computer Studies* points out that soft, lightly tinted backgrounds can reduce visual stress and help readers stay focused for longer. So we replaced the pure white background with `#FAF9F6`, a soft lavender tone that keeps the clarity of white while being easier on the eyes. ## 🎨 The New Color Palette Our focus was to create a harmonious, accessible experience with a modern and welcoming vibe. Here's the palette: - **Background:** `#FAF9F6` – soft lavender that diffuses light and reduces glare. - **Main Text:** `#4A4A4A` – dark gray for clean, high-contrast readability without harshness. - **Links and Highlights:** `#E6E6FA` – a soft lavender accent that complements the background. - **Buttons/CTAs:** `#BA55D3` – a vibrant purple for elements that need to stand out. - **Borders/Dividers:** `#E0E0E0` – light gray to organize content gently and subtly. ## 💡 Our Goal Is Simple We want reading on this site to feel as effortless as a good conversation. No fatigue. No distraction. Just clarity, flow, and focus. --- **Reference:** Bauerly, M., & Liu, Y. (2006). *Computational modeling and experimental investigation of effects of compositional elements on interface and design aesthetics*. [International Journal of Human-Computer Studies, 64(8), 670–682](https://www.sciencedirect.com/science/article/pii/S1071581906000048?via%3Dihub). --- # Communication: The Hidden Backbone of Successful Open Source Projects **URL**: https://avelino.run/communication-the-hidden-backbone-of-successful-open-source-rojects/ **Published**: 2025-04-01 **Tags**: open source maintenance, community building, project communication, contributor engagement, technical documentation **Word Count**: 500 words **Summary**: A deep dive into the pivotal role of communication in open source, providing maintainers with actionable insights to cultivate engaged, dynamic communities In the open source ecosystem, code is often celebrated as the star. However, behind every thriving open source project lies a less visible yet crucial factor: effective communication. Successful maintainers recognize that writing good code is just a small fraction of their responsibility; their primary role revolves around fostering community engagement, clarifying project goals, and facilitating collaboration. ![Communication: The Hidden Backbone of Successful Open Source Projects](/blog/communication-the-hidden-backbone-of-successful-open-source-rojects.png) ## Why Communication Trumps Code in Open Source Maintenance Open source maintainers face the dual challenge of advancing technical excellence while simultaneously nurturing a vibrant community. Nadia Eghbal, in her seminal work *["Working in Public: The Making and Maintenance of Open Source Software"](https://www.amazon.com/Working-Public-Making-Maintenance-Software/dp/0578675862)*, highlights this evolution, stressing that maintainers today spend significantly more time managing communication channels, contributions, and relationships than simply coding. Practical examples from successful projects like [Awesome-Go](https://github.com/avelino/awesome-go) underscore the value of communication-driven maintenance. Awesome-Go is more than a curated list; it's a hub of engagement that demonstrates how clear guidelines and active interactions amplify community contributions. The project’s effective communication strategies include: - **Clear Contribution Guidelines:** Awesome-Go provides explicit instructions on how contributors can propose new additions, update content, and even remove outdated entries. This transparency significantly reduces barriers for newcomers. - **Transparent Roadmaps and Decisions:** Each decision on whether a library or tool gets added is transparently discussed in public issues and pull requests. Contributors always understand why certain items are accepted or rejected, which maintains trust and accountability. - **Community-Driven Documentation:** By keeping documentation clear and continuously updated through community input, Awesome-Go ensures that its content remains reliable and accessible. This transforms documentation into a powerful asynchronous communication channel. ## Building a Robust Communication Framework In *["The Art of Community"](https://www.amazon.com/Art-Community-Building-Participation-Practice/dp/0596156715)*, Jono Bacon emphasizes communication infrastructure as essential to a project's longevity and health. Effective open source projects cultivate clear, responsive communication channels—such as issue trackers, forums, chat platforms (like Slack, Discord, or Matrix), and mailing lists—that make contributors feel acknowledged and valued. For instance, Awesome-Go leverages GitHub Issues extensively not only for discussing the quality of libraries but also for engaging contributors through constructive feedback and mentorship. This proactive engagement encourages continuous, high-quality participation. ## Practical Tips to Enhance Communication in Your Project To elevate communication in your open source project, consider the following practical steps: 1. **Establish Clear Contribution Processes:** Clearly document how users can get involved, what contributions are needed, and how decisions are made. 2. **Actively Facilitate Discussions:** Regularly engage with contributors by promptly responding to questions, feedback, and issues. Acknowledging contributions, even small ones, fosters a welcoming environment. 3. **Invest in Comprehensive Documentation:** View documentation as a living communication channel. Keep it updated, clear, and community-driven to encourage continuous improvement. 4. **Regularly Communicate Vision and Goals:** Ensure contributors understand the project’s direction by maintaining and sharing transparent, frequently updated roadmaps. When a potential contributor asks, "Where can I help?" it often signals a need for clearer communication. Successful projects proactively anticipate this question, guiding contributors seamlessly toward impactful involvement. By **prioritizing communication**, open source projects like Awesome-Go transform passive users into dedicated advocates and active community participants, ultimately ensuring the project’s sustainability and growth. --- # Open Source Contributions - April 2025 **URL**: https://avelino.run/foss/2025/04/ **Published**: 2025-04-01 **Word Count**: 237 words **Summary**: April 2025 saw 6 repositories contribute a total of 17 events, including 10 pull requests and significant advancements in SQL support. In April 2025, the development community made notable strides across six repositories, marked by a total of 17 contributions. This timeline highlights key events, including 10 newly opened pull requests that enhanced SQL functionalities and infrastructure, showcasing the collaborative efforts driving innovation in the projects. ## 2025-04-11 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: Add SQL Protocol Benchmark Infrastructure](https://github.com/moclojer/chrondb/pull/26) - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [refactor: improve SQL implementation and protocol handling](https://github.com/moclojer/chrondb/pull/25) - ✅ Reviewed PR in [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): [Update build script](https://github.com/avelino/logseq-export-block/pull/6#pullrequestreview-2760332071) (Approved) ## 2025-04-10 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat(sql): implement INNER/LEFT JOIN support](https://github.com/moclojer/chrondb/pull/24) ## 2025-04-08 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: Add full-text search support via PostgreSQL to_tsquery syntax](https://github.com/moclojer/chrondb/pull/23) - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [fix(sql): case-insensitive LIKE operator and normalize operator compa…](https://github.com/moclojer/chrondb/pull/22) - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: add SQL schema support for multi-tenant data isolation](https://github.com/moclojer/chrondb/pull/21) - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [refactor: improve storage structure documentation and implementation](https://github.com/moclojer/chrondb/pull/20) ## 2025-04-07 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: improve numeric ID handling in SQL functions](https://github.com/moclojer/chrondb/pull/19) - 🔀 Opened PR in [wellwelwel/awesomeyou](https://github.com/wellwelwel/awesomeyou): [feat(avelino): add prestd and moclojer](https://github.com/wellwelwel/awesomeyou/pull/27) ## 2025-04-05 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat(sql): add welcome message on client connection](https://github.com/moclojer/chrondb/pull/18) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 37 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-04-01T00:00:00Z&until=2025-04-30T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 31 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2025-04-01T00:00:00Z&until=2025-04-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 5 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2025-04-01T00:00:00Z&until=2025-04-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-04-01T00:00:00Z&until=2025-04-30T23:59:59Z) - 🔨 Push to [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): 2 commit(s) - [See commits](https://github.com/avelino/logseq-export-block/commits?author=avelino&since=2025-04-01T00:00:00Z&until=2025-04-30T23:59:59Z) - 🔨 Push to [wellwelwel/awesomeyou](https://github.com/wellwelwel/awesomeyou): 1 commit(s) - [See commits](https://github.com/wellwelwel/awesomeyou/commits?author=avelino&since=2025-04-01T00:00:00Z&until=2025-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The Power of Deliberate Focus: Eliminating Distractions in a World of Informational Abundance **URL**: https://avelino.run/the-power-of-deliberate-focus-eliminating-distractions-in-a-world-of-informational-abundance/ **Published**: 2025-03-07 **Tags**: deep focus, elimination of distractions, cognitive productivity, selective attention, essentialism **Word Count**: 1684 words **Summary**: Explore advanced strategies to systematically eliminate distractions and cultivate deep focus in a hyperconnected world. Discover how the strategic subtraction of stimuli can amplify results and bring mental clarity to your most significant goals. Explore advanced strategies to systematically eliminate distractions and cultivate deep focus in a hyperconnected world. Discover how the strategic subtraction of stimuli can amplify results and bring mental clarity to your most significant goals. ![The Power of Deliberate Focus: Eliminating Distractions in a World of Informational Abundance](/blog/the-power-of-deliberate-focus-eliminating-distractions-in-a-world-of-informational-abundance.png) ## The Attention Economy: Our Scarcest Resource In an era where information is infinite, our attention has become the most valuable and contested resource. As Thomas Davenport observes in "The Attention Economy," we live in a paradox: while information multiplies exponentially, our capacity to process it remains limited. This discrepancy creates what psychologists call "attention poverty" – a condition where our cognitive capacity is constantly fragmented among multiple stimuli. Modern neuroscience confirms: the human brain was not designed for multitasking. When we try to process multiple streams of information simultaneously, we aren't really performing parallel tasks, but rather rapidly switching between them, with a significant cognitive cost. Each switch represents a small death of deep focus, a phenomenon that neuroscientist Adam Gazzaley calls "task-switching cost." This cost is not trivial. Studies from Stanford University demonstrate that people who frequently switch between multiple tasks show reduced capacity to filter irrelevant information, compromised working memory, and greater difficulty switching between tasks – creating a vicious cycle of chronic distraction. ## The Illusion of Busy Productivity Our culture celebrates constant busyness as synonymous with productivity, creating what philosopher Byung-Chul Han calls the "burnout society." We are perpetually exhausted, not from producing meaningful results, but from the continuous effort to process an overwhelming volume of stimuli. Greg McKeown, in "Essentialism," identifies this phenomenon as "the busyness fallacy" – confusing movement with progress. True productivity, McKeown argues, is not about doing more, but doing the right thing – that which significantly moves the needle toward our most important objectives. [Source](https://www.amazon.com/Essentialism-Disciplined-Pursuit-Greg-McKeown/dp/0804137382) This distinction is crucial: activity is not accomplishment. As Peter Drucker astutely observed: "There is nothing so useless as doing efficiently that which should not be done at all." ## The Neuroscience of Deep Focus To understand the value of focus, we must understand how our brain processes information. When we engage in deep work – periods of intense concentration without distractions – we activate what neuroscientists call the "executive attention network," a neural system that enables complex thinking, problem-solving, and creativity. Cal Newport, in "Deep Work," presents compelling evidence that this capacity for deep concentration is not just a preference in work style, but a neurological requirement for producing work of exceptional value. Myelination – the biological process that strengthens neural connections – occurs most efficiently during periods of sustained attention. [Source](https://www.amazon.com/Deep-Work-Focused-Success-Distracted/dp/1455586692) Paradoxically, as digital tools make shallow work easier, the capacity for deep work becomes simultaneously rarer and more valuable. As Newport observes: "The ability to perform deep work is becoming increasingly rare precisely at the time it is becoming increasingly valuable in our economy." ## The Architecture of Distraction: Understanding the Adversary To effectively combat distractions, we must first understand their anatomy. Nir Eyal, in "Indistractable," offers a useful taxonomy, categorizing distractions as external and internal. [Source](https://www.amazon.com/Indistractable-Control-Your-Attention-Choose/dp/194883653X) ### External Distractions: The Environment Conspires Against Focus External distractions are evident: notifications, interruptions, environmental noise. Less obvious is how these distractions are meticulously designed to capture our attention. As Tristan Harris, former Google ethical designer, reveals: "Thousands of engineers work daily to make these technologies more persuasive and difficult to resist." The attention economy is not accidental; it's architected. Apps and platforms are deliberately designed to maximize "screen time" through mechanisms such as: - **Variable rewards**: Notifications and updates that arrive at unpredictable intervals, creating the same dopamine pattern that makes slot machines addictive - **Social reciprocity**: Mechanisms that exploit our evolutionary need to respond to social interactions - **Fear of missing out**: Interfaces that exploit our aversion to loss, creating anxiety about what we might be missing ### Internal Distractions: The Enemy Within More insidious than external distractions are the internal ones – those impulses that arise from within. As Eyal observes, most distractions begin internally, with emotional discomfort that we seek to alleviate through escape behaviors. Research by Matthew Killingsworth and Daniel Gilbert of Harvard University revealed that we spend almost 47% of our waking hours with our mind wandering. This "default mode" of thinking is associated with lower levels of happiness and reduced productivity. Mindfulness meditation offers a window into this phenomenon. Experienced practitioners report not the absence of distractive thoughts, but a greater ability to observe them without identifying with them. As Jon Kabat-Zinn, pioneer of mindfulness-based meditation, explains: *"You can't stop the waves, but you can learn to surf."* ## Advanced Strategies to Eliminate Distractions With this deeper understanding, we can develop more sophisticated interventions to cultivate focus: ### 1. Redesigning the Choice Architecture Behavioral psychologist Richard Thaler introduced the concept of *"choice architecture"* – the idea that the way options are presented profoundly influences our decisions. We can apply this principle to create environments that favor focus: - **Asymmetric friction**: Deliberately increase friction for distractive behaviors (e.g., removing social media apps from your phone, requiring login via browser) while reducing friction for deep work (e.g., preparing work materials in advance) - **Powerful defaults**: Configure your environment so that the default behavior is focus, not distraction (e.g., site blockers activated by default during work hours) - **Contextual cues**: Create rituals and signals that indicate to the brain when it's time to focus (e.g., a dedicated workspace, specific music, or even a piece of clothing that symbolizes *"deep work mode"*) ### 2. Energy Management, Not Just Time Management Jim Loehr and Tony Schwartz, in "The Power of Full Engagement," argue convincingly that energy, not time, is the fundamental resource of productivity. We may have 24 hours a day, but our cognitive energy is finite and fluctuating. Advanced energy management strategies include: - **Circadian alignment**: Identify your natural periods of cognitive peak (usually 2-4 hours after waking for most people) and fiercely protect these periods for deep work - **Strategic oscillation**: Deliberately alternate between periods of intense focus (usually 90-120 minutes) and complete recovery, respecting the body's natural ultradian cycles - **Cognitive nutrition**: Recognize that certain activities fuel our attention capacity (e.g., moderate exercise, adequate sleep, meaningful social interaction) while others deplete it (e.g., trivial decisions, unresolved conflicts) ### 3. Cultivating High-Quality Relationships Social network researcher Nicholas Christakis has demonstrated that behaviors, emotions, and even concentration levels are "contagious" within social networks. His research reveals that we are significantly more likely to adopt the habits of the people we spend the most time with. Strategies for cultivating a social ecosystem that supports focus include: - **Communities of practice**: Join groups of people committed to deep work and deliberate growth - **Social contracts**: Establish explicit agreements with colleagues about availability and response expectations - **Strategic distancing**: Consciously reduce exposure to people whose distraction habits are incompatible with your goals As Jim Rohn observed: *"You are the average of the five people you spend the most time with."* Choose wisely. ### 4. Transcending the Focus/Distraction Dichotomy The most advanced practitioners of focus recognize that true mastery is not about completely eliminating distraction, but about developing a more sophisticated relationship with attention. Mihaly Csikszentmihalyi, in his research on the state of "flow," discovered that optimal engagement occurs when we alternate between intense focus and periods of mental diffusion – what neuroscientists call the "default network mode." This mode, far from being unproductive, is essential for creativity, knowledge integration, and complex problem-solving. Barbara Oakley, in "A Mind for Numbers," calls this alternating between "focused" and "diffuse" modes of thinking. True cognitive mastery comes not from the relentless suppression of distraction, but from the ability to navigate fluidly between these complementary modes. ## The Practice of Discernment: The Essential Meta-Skill At the center of all these strategies is a fundamental meta-skill: discernment. As Gary Keller argues in "The ONE Thing," the question is not simply to eliminate distractions, but to identify what deserves our attention in the first place. [Source](https://www.amazon.com/ONE-Thing-Surprisingly-Extraordinary-Results/dp/1885167776) Discernment requires deep self-knowledge – clarity about your values, purpose, and objectives. As Peter Drucker observed: "There is nothing so useless as doing efficiently what should not be done at all." Questions to cultivate discernment include: 1. **What is my unique contribution?** What can I do that combines my talents, passions, and what the world needs? 2. **What can I eliminate without consequences?** Which activities, if abandoned completely, would not have a significant negative impact? 3. **Where is the leverage?** Which few activities produce the majority of valuable results? James Clear, in "Atomic Habits," reminds us that small consistent improvements lead to extraordinary results over time. Applying this principle to focus, we can see that a radical immediate transformation is not necessary, but rather a commitment to the incremental improvement of our attention capacity. [Source](https://www.amazon.com/Atomic-Habits-Proven-Build-Break/dp/0735211299) ## Conclusion: Attention as Spiritual Practice At a deeper level, the practice of focus transcends productivity and touches the spiritual domain. As Simone Weil wrote: "Attention is the rarest and purest form of generosity." When we deliberately choose where to direct our attention, we are essentially deciding what we will allow to shape our consciousness. In this sense, attention management is not just a productivity technique, but an existential practice – an affirmation of what we value and who we choose to be. In a world that incessantly competes for our attention, the ability to consciously direct our focus may be the most radical act of self-determination available to us. As William James, the father of American psychology, observed: "My experience is what I agree to attend to." By eliminating distractions and cultivating deep focus, we are not just optimizing our productivity – we are reclaiming our cognitive autonomy and creating space for what is truly meaningful to flourish in our lives. --- **Keywords:** deep focus, elimination of distractions, cognitive productivity, selective attention, essentialism --- **Bibliographic References:** 1. McKeown, G. (2014). Essentialism: The Disciplined Pursuit of Less. Crown Business. [Amazon](https://www.amazon.com/Essentialism-Disciplined-Pursuit-Greg-McKeown/dp/0804137382) 2. Newport, C. (2016). Deep Work: Rules for Focused Success in a Distracted World. Grand Central Publishing. [Amazon](https://www.amazon.com/Deep-Work-Focused-Success-Distracted/dp/1455586692) 3. Clear, J. (2018). Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones. Avery. [Amazon](https://www.amazon.com/Atomic-Habits-Proven-Build-Break/dp/0735211299) 4. Keller, G., & Papasan, J. (2013). The ONE Thing: The Surprisingly Simple Truth Behind Extraordinary Results. Bard Press. [Amazon](https://www.amazon.com/ONE-Thing-Surprisingly-Extraordinary-Results/dp/1885167776) 5. Eyal, N. (2019). Indistractable: How to Control Your Attention and Choose Your Life. BenBella Books. [Amazon](https://www.amazon.com/Indistractable-Control-Your-Attention-Choose/dp/194883653X) --- # Open Source Contributions - March 2025 **URL**: https://avelino.run/foss/2025/03/ **Published**: 2025-03-01 **Word Count**: 501 words **Summary**: March 2025 saw 14 repositories with 42 contributions, including 10 open PRs and 11 issues, showcasing significant collaboration and development activity. Explore the contributions made in March 2025, highlighting key activities across 14 repositories. This timeline captures the collaborative efforts, including open pull requests, reviews, and issues raised, reflecting the vibrant development community's progress and innovations. ## 2025-03-31 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.7.0 to 2.7.1](https://github.com/avelino/bots.clj.social/pull/162#pullrequestreview-2728496242) (Approved) - 🐛 Opened issue in [bmorphism/babashka-mcp-server](https://github.com/bmorphism/babashka-mcp-server): [Port the project's Javascript code to ClojureScript](https://github.com/bmorphism/babashka-mcp-server/issues/2) ## 2025-03-29 - 🔀 Opened PR in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [feat: add weekly health insights workflow by GPT](https://github.com/avelino/training-personal-data/pull/7) - 🔀 Opened PR in [logseq/marketplace](https://github.com/logseq/marketplace): [feat(plugin): add Export Block plugin](https://github.com/logseq/marketplace/pull/635) - ✅ Reviewed PR in [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): [[ImgBot] Optimize images](https://github.com/avelino/logseq-export-block/pull/2#pullrequestreview-2727201270) (Approved) - ✅ Reviewed PR in [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): [Bump esbuild and vite](https://github.com/avelino/logseq-export-block/pull/1#pullrequestreview-2727200868) (Approved) - ✅ Reviewed PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [Bump tar-fs from 2.1.1 to 2.1.2](https://github.com/avelino/monotropic-theme-vscode/pull/23#pullrequestreview-2727314745) (Approved) ## 2025-03-24 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.6.1 to 4.6.2](https://github.com/moclojer/moclojer/pull/323#pullrequestreview-2711408746) (Approved) ## 2025-03-23 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [fix: groupby applied unnecessarily in SQL execution](https://github.com/moclojer/chrondb/pull/17) ## 2025-03-20 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docs: add Moclojer configuration specification](https://github.com/moclojer/moclojer/pull/319) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [feat: add websocket support and upgrade clojure version to 1.12.0](https://github.com/moclojer/moclojer/pull/318) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Fix flaky latency tests by adding tolerance buffer](https://github.com/moclojer/moclojer/issues/321) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Change clj-http to http-kit](https://github.com/moclojer/moclojer/issues/320) ## 2025-03-18 - 🐛 Opened issue in [chhabrakadabra/logseq-plugin-copilot](https://github.com/chhabrakadabra/logseq-plugin-copilot): [support for multiple LLMs](https://github.com/chhabrakadabra/logseq-plugin-copilot/issues/30) - 🐛 Opened issue in [chhabrakadabra/logseq-plugin-copilot](https://github.com/chhabrakadabra/logseq-plugin-copilot): [format markdown output](https://github.com/chhabrakadabra/logseq-plugin-copilot/issues/29) ## 2025-03-17 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.5.1 to 5.0.9](https://github.com/avelino/bots.clj.social/pull/161#pullrequestreview-2689773559) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.1.3 to 7.1.4](https://github.com/avelino/bots.clj.social/pull/158#pullrequestreview-2689771057) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [websocket support](https://github.com/moclojer/moclojer/issues/316) ## 2025-03-12 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Add PostgreSQL protocol support to ChronDB](https://github.com/moclojer/chrondb/pull/16) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [support for the postgresql protocol](https://github.com/moclojer/chrondb/issues/15) ## 2025-03-11 - 🐛 Opened issue in [kepano/flexoki](https://github.com/kepano/flexoki): [logseq theme](https://github.com/kepano/flexoki/issues/107) ## 2025-03-10 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 3 to 4](https://github.com/moclojer/moclojer/pull/314#pullrequestreview-2671884375) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 13.1 to 13.2](https://github.com/moclojer/moclojer/pull/315#pullrequestreview-2671882894) (Approved) ## 2025-03-08 - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [function to bring key history](https://github.com/moclojer/chrondb/issues/14) ## 2025-03-05 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [WIP: feat: add GraalVM native-image support](https://github.com/moclojer/chrondb/pull/13) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [Implement GraalVM Native Image support for binary distribution](https://github.com/moclojer/chrondb/issues/12) ## 2025-03-04 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat(redis): Redis protocol server implementation](https://github.com/moclojer/chrondb/pull/11) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [support for the redis protocol](https://github.com/moclojer/chrondb/issues/10) ## 2025-03-03 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [refactor: rewrite git storage implementation to use virtual commits](https://github.com/moclojer/chrondb/pull/9) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.6.0 to 4.6.1](https://github.com/moclojer/moclojer/pull/310#pullrequestreview-2654780338) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 4.2.0 to 4.2.2](https://github.com/moclojer/moclojer/pull/313#pullrequestreview-2654778466) (Approved) ## 2025-03-01 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [fix: handle json parse error in build-body function](https://github.com/moclojer/moclojer/pull/312) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 25 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [avelino/training-personal-data](https://github.com/avelino/training-personal-data): 3 commit(s) - [See commits](https://github.com/avelino/training-personal-data/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 8 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 55 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 3 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [logseq/marketplace](https://github.com/logseq/marketplace): 1 commit(s) - [See commits](https://github.com/logseq/marketplace/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 3 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [moclojer/.github](https://github.com/moclojer/.github): 4 commit(s) - [See commits](https://github.com/moclojer/.github/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [avelino/logseq-export-block](https://github.com/avelino/logseq-export-block): 9 commit(s) - [See commits](https://github.com/avelino/logseq-export-block/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 49 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2025-03-01T00:00:00Z&until=2025-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The Importance of Selecting Your Company: Free Yourself from Those Who Harm You **URL**: https://avelino.run/the-importance-of-selecting-your-company-free-yourself-from-those-who-harm-you/ **Published**: 2025-02-23 **Tags**: toxic relationships, mental well-being, emotional health, personal growth, self-care **Word Count**: 469 words **Summary**: Surrounding yourself with people who make you feel good is essential for a happy and healthy life. Learn to identify toxic relationships and distance yourself from negative people. Discover how to cultivate positive relationships and strengthen your mental and emotional health ![The Importance of Selecting Your Company: Free Yourself from Those Who Harm You](/blog/the-importance-of-selecting-your-company-free-yourself-from-those-who-harm-you.png) **Have you ever stopped to think about how the people around you influence your life?** Often, we get used to certain companions without realizing that they might be harming us. In this post, we'll explore the importance of carefully selecting the people we surround ourselves with and how this can positively impact our well-being. ## Why select your company? Living with toxic, negative people or those who don't share our values can generate stress, anxiety and even low self-esteem. These relationships can drain our energy, prevent us from achieving our goals and compromise our happiness. On the other hand, surrounding ourselves with positive people, who support and inspire us, can boost our personal and professional growth, increase our self-confidence and provide us with a lighter and happier life. ## How to identify people who don't do you good? * **Pay attention to how you feel:** After interacting with certain people, do you feel more energized or more exhausted? More motivated or more demotivated? If the answer is negative, maybe it's time to rethink that relationship. * **Observe patterns of behavior:** Toxic people often exhibit behaviors such as constant negativity, excessive criticism, lack of empathy and disrespect for boundaries. * **Trust your intuition:** Sometimes, we feel that something is wrong in a relationship, even without knowing how to explain why. Trust your instincts and don't ignore these signs. ## How to distance yourself from toxic people? * **Set clear boundaries:** Communicate your needs and boundaries assertively and don't allow them to be disrespected. * **Learn to say no:** Don't feel obligated to accept invitations or requests that make you feel uncomfortable. * **Seek support:** Talk to friends, family or a professional about your difficulties and ask for help to deal with these situations. * **Prioritize your well-being:** Remember that you have the right to distance yourself from people who harm you. **It's also important to recognize that some relationships may never be more than circles of laughter.** While deep, meaningful connections are essential, it's also healthy to have friends with whom you can simply relax, have fun, and share lighthearted moments. These relationships can be a source of joy and stress relief, even if they don't necessarily involve deep emotional intimacy. ## Important references To deepen your view of healthy interpersonal relationships, I recommend reading the books: * "[How to Win Friends & Influence People](https://www.amazon.com/How-Win-Friends-Influence-People/dp/0671027034)" by *Dale Carnegie*: A classic guide to building positive and meaningful relationships. * "[Emotional Intelligence](https://www.amazon.com/Emotional-Intelligence-Matter-More-Than/dp/055338371X)" by *Daniel Goleman*: Will help you better understand your emotions and those of other people, making it easier to recognize harmful relationships. **Conclusion:** Selecting the people around us is an act of self-love and care for our mental and emotional health. By prioritizing our well-being and distancing ourselves from toxic people, we open space for healthier, happier and more meaningful relationships. > **remember:** you deserve to be surrounded by people who do you good! --- # From Experiment to Classroom: The Unexpected Journey of RumLang and the Power of Open Source **URL**: https://avelino.run/from-experiment-to-classroom-rumlang-journey-and-open-source/ **Published**: 2025-02-19 **Tags**: rumlang, lisp, golang, open-source, computer-science, education, programming-languages **Word Count**: 418 words **Summary**: Discover how RumLang, a Lisp dialect created during a Go conference, evolved from a personal experiment to teaching material in universities, illustrating the transformative impact of open source in computer science education. ![RumLang Mascot](/blog/runlang-mascot.png) During a Go conference, an experiment was born that no one could have predicted its educational reach. RumLang emerged not from an elaborate plan, but from the confluence between a love for Common Lisp and the opportune moment of a Go conference. This functional language, which harmonizes Lisp's elegance with the practicality of the Go ecosystem, demonstrates how moments of creativity can transcend their modest origins. ## The Theoretical Foundation Programming language development has a rich academic tradition, documented in seminal works such as "Concepts of Programming Languages" by Robert W. Sebesta [Source](https://www.amazon.com/Concepts-Programming-Languages-Robert-Sebesta/dp/013394302X) and "Programming Language Pragmatics" by Michael L. Scott [Source](https://www.amazon.com/Programming-Language-Pragmatics-Michael-Scott/dp/0124104096). RumLang, although born as a "playful experiment," incorporates fundamental principles from these works in its implementation. ## The Power of Open Source in Academia What makes RumLang's story particularly fascinating is its journey from experimentation to the classroom. This path reflects a larger trend in computer science education, where open source projects serve as bridges between theory and practice. As detailed in "The Architecture of Open Source Applications" [Source](https://www.amazon.com/Architecture-Open-Source-Applications/dp/1257638017), the transparency of open source provides unique learning opportunities. ## Unexpected Educational Impact RumLang's adoption as study material in universities both within and outside Brazil demonstrates an interesting phenomenon: educational value can emerge from unexpected sources. This transition from "experiment" to teaching tool exemplifies what Peter Seibel explores in "Practical Common Lisp" [Source](https://www.amazon.com/Practical-Common-Lisp-Peter-Seibel/dp/1590592395) - Lisp's ability to serve as a vehicle for deep understanding of programming concepts. ## The Future and Lessons Learned RumLang, available at , stands as a testament to the transformative potential of open source. Its story teaches us that a project's value isn't measured solely by conventional metrics of success, but also by its educational impact and ability to inspire. The project demonstrates how the combination of: * Free experimentation * Open source * Foundation in classical principles * Integration with modern technologies can create valuable educational tools, even when that wasn't the initial goal. ## Conclusion RumLang's journey is a powerful reminder that innovation and educational impact can emerge from the most unexpected places. What began as a "playful experiment" during a conference transformed into a case study that inspires students and educators, proving that the true value of open source transcends its original intentions. This story teaches us that, in the software development world, today's "experiments" can become tomorrow's educational tools, as long as they're openly shared with the community. RumLang continues as a living example of how unpretentious experimentation, when combined with the power of open source, can create waves of impact that extend far beyond its modest origins. --- # ClojureScript Wrapper for @logseq/libs - Build Better Logseq Plugins **URL**: https://avelino.run/logseq-libs-cljs/ **Published**: 2025-02-16 **Tags**: clojurescript, logseq-plugin, logseq-development, @logseq/libs, cljs, functional-programming, open-source, plugin-development **Word Count**: 771 words **Summary**: A native ClojureScript wrapper for @logseq/libs enabling idiomatic plugin development for Logseq. Build powerful, maintainable plugins using functional programming and REPL-driven development. ![Logseq Logo](https://cljsocial.sfo3.cdn.digitaloceanspaces.com/accounts/avatars/111/393/159/877/487/513/original/4e74f973683a2f29.png) **@logseq/libs** for *ClojureScript* provides a native bridge for developing Logseq plugins using ClojureScript. This wrapper transforms the TypeScript-based plugin API into an idiomatic ClojureScript interface, allowing developers to leverage functional programming and REPL-driven development while maintaining full compatibility with the Logseq ecosystem. ## Key Features - Write plugins in the same language as Logseq's core - Leverage ClojureScript's elegant syntax and functional programming paradigms - Benefit from ClojureScript's type system while maintaining JavaScript interop - Seamless integration with existing Logseq plugin ecosystem - Access to both ClojureScript and JavaScript libraries ## Getting Started To get started, add the following dependency to your `deps.edn`: ```edn {:deps {run.avelino/logseq-libs {:mvn/version "0.2.1.0"}}} ``` Here's a simple example of a plugin: ```clojure (ns my-awesome-plugin.core (:require [run.avelino.logseq-libs.core :as ls] [run.avelino.logseq-libs.ui :as ui])) (ls/ready! (fn [] (ui/show-msg! "Plugin loaded!") (ls/register-command-palette! {:key "hello-world" :label "Greet User" :keybinding "mod+shift+h" :callback #(ui/show-msg! "Hello from ClojureScript!")}))) ``` ## API Reference ### Core Module (`run.avelino.logseq-libs.core`) Core functionality for plugin lifecycle and settings management. ```clojure (require '[run.avelino.logseq-libs.core :as ls]) ``` #### Plugin Lifecycle - `ready! [callback]` - Initialize plugin with callback function - `disable-plugin! []` - Disable the current plugin - `reload-plugin! []` - Reload the current plugin #### Settings Management - `register-settings! [settings]` - Register plugin settings schema - `get-settings! []` - Get current plugin settings - `update-settings! [settings]` - Update plugin settings #### Command Registration - `register-command! [cmd]` - Register a single command - `register-command-palette! [cmd]` - Register a command in the command palette - `register-block-command! [cmd]` - Register a block-level command ### UI Module (`run.avelino.logseq-libs.ui`) User interface components and notifications. ```clojure (require '[run.avelino.logseq-libs.ui :as ui]) ``` #### Notifications - `show-msg! [content & opts]` - Show notification message - `show-error! [content]` - Show error notification - `show-warning! [content]` - Show warning notification #### UI Components - `open-modal! [opts]` - Open a modal dialog - `close-modal! []` - Close current modal - `show-prompt! [content & opts]` - Show prompt dialog - `show-picker! [opts]` - Show item picker dialog ### Editor Module (`run.avelino.logseq-libs.editor`) Block and page manipulation functions. ```clojure (require '[run.avelino.logseq-libs.editor :as editor]) ``` #### Page Operations - `get-current-page! []` - Get current page data - `get-page! [name]` - Get page by name - `create-page! [name content & opts]` - Create new page - `delete-page! [name]` - Delete page by name #### Block Operations - `get-block! [uuid]` - Get block by UUID - `insert-block! [uuid content & opts]` - Insert new block - `update-block! [uuid content]` - Update block content - `remove-block! [uuid]` - Remove block by UUID - `get-block-property! [uuid key]` - Get block property - `set-block-property! [uuid key value]` - Set block property ### DB Module (`run.avelino.logseq-libs.db`) Graph database queries and operations. ```clojure (require '[run.avelino.logseq-libs.db :as db]) ``` #### Queries - `q! [query & inputs]` - Execute Datalog query - `datascript-query! [query & inputs]` - Execute raw Datascript query - `get-current-graph! []` - Get current graph info - `get-pages! [& opts]` - Get all pages - `get-page-blocks! [page-name]` - Get all blocks for a page ### Git Module (`run.avelino.logseq-libs.git`) Version control operations. ```clojure (require '[run.avelino.logseq-libs.git :as git]) ``` #### Repository Operations - `get-head-commit! []` - Get current HEAD commit - `checkout! [ref]` - Checkout specific reference - `create-branch! [name]` - Create new branch - `get-branches! []` - List all branches ### Assets Module (`run.avelino.logseq-libs.assets`) File and asset management. ```clojure (require '[run.avelino.logseq-libs.assets :as assets]) ``` #### Asset Operations - `make-asset-url! [path]` - Create asset URL - `upload-asset! [file]` - Upload asset file - `list-assets! []` - List all assets - `remove-asset! [path]` - Remove asset ### Theme Module (`run.avelino.logseq-libs.theme`) Theme customization and management. ```clojure (require '[run.avelino.logseq-libs.theme :as theme]) ``` #### Theme Operations - `get-theme! []` - Get current theme - `set-theme! [theme]` - Set active theme - `toggle-theme! []` - Toggle between light/dark themes - `add-style! [style]` - Add custom CSS styles - `remove-style! [id]` - Remove custom styles ### Utils Module (`run.avelino.logseq-libs.utils`) Utility functions for common plugin operations. ```clojure (require '[run.avelino.logseq-libs.utils :as utils]) ``` #### Utility Functions - `format-date! [date format]` - Format date with specified format - `uuid! []` - Generate a new UUID - `debounce! [f ms]` - Create a debounced version of a function - `throttle! [f ms]` - Create a throttled version of a function - `parse-json! [str]` - Parse JSON string to ClojureScript data structure - `to-json! [data]` - Convert ClojureScript data to JSON string ### Macros Module (`run.avelino.logseq-libs.macros`) Useful macros for plugin development. ```clojure (require '[run.avelino.logseq-libs.macros :as macros :include-macros true]) ``` #### Available Macros - `defplugin` - Define a new plugin with lifecycle hooks - `with-promise->` - Thread-first macro for promise-based operations - `with-promise->>` - Thread-last macro for promise-based operations - `catch->error` - Catch and handle errors in promise chains ## Why ClojureScript for Logseq Plugins? 1. **Native Development**: Use the same language as Logseq's core for deeper understanding and better integration 2. **Functional Programming**: Leverage immutable data structures and functional paradigms for more reliable plugins 3. **REPL-Driven Development**: Test and modify your plugin in real-time 4. **Concise, Readable Code**: Write more expressive code with ClojureScript's elegant syntax The project provides ClojureScript wrappers for all major Logseq plugin APIs including core functionality, UI components, editor operations, database queries, git operations, and theme customization. Join us in building the future of knowledge management tools with ClojureScript! Visit our [GitHub repository](https://github.com/avelino/logseq-libs) to get started or contribute to the project. --- # Open Source Contributions - February 2025 **URL**: https://avelino.run/foss/2025/02/ **Published**: 2025-02-01 **Word Count**: 373 words **Summary**: February 2025 saw 12 repositories active, with 30 contributions including 7 pull requests and 14 issues, showcasing robust development activity. Explore the timeline of contributions for February 2025, highlighting significant activities across 12 repositories. This month featured 30 contributions, including 7 pull requests and 14 issues, reflecting a vibrant and dynamic development environment. ## 2025-02-25 - ✅ Reviewed PR in [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): [Add User-Agent header with sdk version](https://github.com/buserbrasil/barte-python-sdk/pull/27#pullrequestreview-2642105422) (Approved) ## 2025-02-24 - 🐛 Opened issue in [Exafunction/codeium-parse](https://github.com/Exafunction/codeium-parse): [readme: "codeium search" link 404](https://github.com/Exafunction/codeium-parse/issues/31) ## 2025-02-21 - 🔀 Opened PR in [buserbrasil/santander-python-sdk](https://github.com/buserbrasil/santander-python-sdk): [docs: improve project description and documentation](https://github.com/buserbrasil/santander-python-sdk/pull/16) - 🐛 Opened issue in [buserbrasil/santander-python-sdk](https://github.com/buserbrasil/santander-python-sdk): [Delete old merged branches](https://github.com/buserbrasil/santander-python-sdk/issues/20) - 🐛 Opened issue in [buserbrasil/santander-python-sdk](https://github.com/buserbrasil/santander-python-sdk): [Why do we maintain an abstract class for the client?](https://github.com/buserbrasil/santander-python-sdk/issues/19) - 🐛 Opened issue in [buserbrasil/santander-python-sdk](https://github.com/buserbrasil/santander-python-sdk): [santander status desc: could be `enum`](https://github.com/buserbrasil/santander-python-sdk/issues/18) - 🐛 Opened issue in [buserbrasil/santander-python-sdk](https://github.com/buserbrasil/santander-python-sdk): [doc: add official documentation link in readme](https://github.com/buserbrasil/santander-python-sdk/issues/17) - 🐛 Opened issue in [buserbrasil/santander-python-sdk](https://github.com/buserbrasil/santander-python-sdk): [`SantanderApiClient` receives a configuration class, raising the complexity level to use](https://github.com/buserbrasil/santander-python-sdk/issues/15) ## 2025-02-18 - 🔀 Opened PR in [logseq/marketplace](https://github.com/logseq/marketplace): [chore: remove logseq-omnivore plugin](https://github.com/logseq/marketplace/pull/624) ## 2025-02-17 - 🐛 Opened issue in [logseq/logseq](https://github.com/logseq/logseq): [block code `:results` without horizontal scroll](https://github.com/logseq/logseq/issues/11741) ## 2025-02-14 - 🔀 Opened PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [fix: correcting md-link->str function to properly extract markdown link and label](https://github.com/avelino/logseq-summarize/pull/25) ## 2025-02-13 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [WIP: feat(log): add support to export logs to file](https://github.com/moclojer/moclojer/pull/308) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Request Recording: save logs to file as an option](https://github.com/moclojer/moclojer/issues/307) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [`/sum` command fails to identify URLs in lines starting with `TODO`](https://github.com/avelino/logseq-summarize/issues/24) ## 2025-02-10 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [feat(chaos): add chaos testing support](https://github.com/moclojer/moclojer/pull/304) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [feat(middleware): add rate limit and latency middleware](https://github.com/moclojer/moclojer/pull/302) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Implementation of Chaos Testing](https://github.com/moclojer/moclojer/issues/303) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Latency Simulation and Rate Limiting Middleware](https://github.com/moclojer/moclojer/issues/301) ## 2025-02-02 - 🐛 Opened issue in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [strava integration](https://github.com/avelino/training-personal-data/issues/6) - 🐛 Opened issue in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [wahoo integration](https://github.com/avelino/training-personal-data/issues/5) ## 2025-02-01 - 🔀 Opened PR in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [WIP: feat(wahoo): initial wahoo integration](https://github.com/avelino/training-personal-data/pull/4) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [rendering with some bug - rioterm 0.1.17 (install via nixpkg)](https://github.com/raphamorim/rio/issues/932) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 20 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 7 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) - 🔨 Push to [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): 4 commit(s) - [See commits](https://github.com/avelino/logseq-summarize/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) - 🔨 Push to [avelino/training-personal-data](https://github.com/avelino/training-personal-data): 3 commit(s) - [See commits](https://github.com/avelino/training-personal-data/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) - 🔨 Push to [buserbrasil/santander-python-sdk](https://github.com/buserbrasil/santander-python-sdk): 2 commit(s) - [See commits](https://github.com/buserbrasil/santander-python-sdk/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) - 🔨 Push to [avelino/logseq-libs](https://github.com/avelino/logseq-libs): 2 commit(s) - [See commits](https://github.com/avelino/logseq-libs/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) - 🔨 Push to [logseq/marketplace](https://github.com/logseq/marketplace): 1 commit(s) - [See commits](https://github.com/logseq/marketplace/commits?author=avelino&since=2025-02-01T00:00:00Z&until=2025-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Strategic Non-Action in Leadership: A Guide to Better People Management **URL**: https://avelino.run/strategic-non-action-in-leadership-guide/ **Published**: 2025-01-27 **Tags**: leadership strategy, people management, team development, strategic leadership, management skills, organizational culture, psychological safety, talent management, leadership transition, team performance **Word Count**: 558 words **Summary**: Discover how strategic non-action in leadership can transform team dynamics, boost performance, and develop stronger leaders. Learn practical techniques for implementing strategic pauses in management, improving psychological safety, and fostering organic leadership growth in your organization. ![Strategic Non-Action in Leadership: A Guide to Better People Management](/blog/strategic-non-action-in-leadership-guide.png) Strategic non-action during critical management moments isn't merely a decision absence but a sophisticated leadership approach. According to Amy Edmondson, Harvard Business School professor, this approach is intrinsically linked to building psychological safety in teams, allowing natural patterns of leadership and collaboration to emerge organically. ## The Immediate Replacement Myth The pressure to quickly fill vacant leadership positions often leads to hasty decisions. McKinsey research shows that resilient organizations are built on foundations of psychological safety, adaptable leadership, and cohesive culture - elements that cannot be instantly imported through external hires. ## The Value of Strategic Observation The strategic pause following a key leadership departure offers substantial benefits: ### 1. Team Maturity Assessment - Reveals real team dynamics under pressure - Exposes natural problem-solving mechanisms - Shows communication patterns without formal hierarchy ### 2. Leadership Emergence - Identifies natural leaders and their spheres of influence - Reveals knowledge-sharing patterns - Demonstrates initiative-taking capabilities ### 3. Cultural Alignment - Exposes true organizational values alignment - Shows commitment to company mission - Reveals authentic team dynamics ### 4. Risk Mitigation - Prevents rushed promotion decisions - Avoids cultural mismatches - Reduces the risk of failed leadership transitions ## Building a Continuous Learning Environment The temporary absence of formal leadership can create a unique environment for developing collective competencies: ### Self-Organization Patterns - Natural workflow optimization - Spontaneous knowledge sharing - Organic problem-solving mechanisms ### Skill Development - Cross-functional collaboration - Emergency response capabilities - Leadership skill emergence ## Transforming Non-Action into Strategy To effectively implement a strategic pause: ### 1. Establish Clear Observation Metrics - Team productivity indicators - Collaboration patterns - Knowledge sharing effectiveness - Decision-making quality ### 2. Maintain Transparent Communication - Regular status updates - Clear expectations setting - Open feedback channels - Progress documentation ### 3. Document Emerging Patterns - Leadership behaviors - Problem-solving approaches - Team dynamics shifts - Knowledge transfer methods ### 4. Evaluate Impact - Productivity metrics - Team engagement levels - Project delivery quality - Client satisfaction rates ## Common Pitfalls to Avoid ### 1. Prolonged Inaction - Set clear timeframes - Define decision points - Maintain momentum ### 2. Unclear Communication - Establish regular updates - Provide clear context - Address concerns promptly ### 3. Lack of Structure - Maintain basic frameworks - Set clear boundaries - Define escalation paths ## Case Study: Strategic Non-Action Success When a key technical leader departed from a high-performing team: **Initial Phase:** - Initial reaction: Resist immediate replacement - Observation period: 3 months **Key Findings:** - Two natural leaders emerged - Knowledge sharing increased by 40% - Team productivity maintained at 95% - Improved cross-functional collaboration ## Recommended Reading For deeper insights into strategic leadership and organizational behavior: ### 1. "The Fearless Organization" by Amy Edmondson - Focus on psychological safety - Building high-performing teams - Creating innovation cultures ### 2. "Good to Great" by Jim Collins - Leadership development - Organizational transformation - Sustainable excellence ### 3. "Leading Change" by John P. Kotter - Change management - Leadership transitions - Organizational development ## Conclusion Strategic non-action, when properly executed, becomes a powerful tool for organizational development and internal talent identification. It requires courage to resist immediate action, but the insights gained often lead to more sustainable and effective leadership solutions. The key is recognizing that conscious non-action is itself a deliberate strategy, requiring careful planning, clear communication, and systematic observation. When implemented thoughtfully, it can lead to stronger teams, better leadership decisions, and more resilient organizations. --- ### References 1. Edmondson, A. (2018). [The Fearless Organization](https://www.amazon.com/Fearless-Organization-Psychological-Workplace-Innovation/dp/1119477247) 2. Collins, J. (2001). [Good to Great](https://www.amazon.com/Good-Great-Some-Companies-Others/dp/0066620996) 3. Kotter, J. P. (2012). [Leading Change](https://www.amazon.com/Leading-Change-New-Preface-Author/dp/1422186431) 4. McKinsey & Company. (2023). [Building Organizational Resilience](https://www.mckinsey.com/capabilities/people-and-organizational-performance/our-insights/raising-the-resilience-of-your-organization) 5. Harvard Business Review. (2024). [The Strategic Power of Hope](https://hbr.org/2024/12/the-strategic-power-of-hope) ### Additional Reading - [Drive: The Surprising Truth About What Motivates Us](https://www.amazon.com/Drive-Surprising-Truth-About-Motivates/dp/1594484805) by Daniel H. Pink - [Dare to Lead](https://www.amazon.com/Dare-Lead-Brave-Conversations-Hearts/dp/0399592520) by Brené Brown - [Radical Candor](https://www.amazon.com/Radical-Candor-Kim-Scott/dp/1529038340/) by Kim Scott --- # Open Source Contributions - January 2025 **URL**: https://avelino.run/foss/2025/01/ **Published**: 2025-01-01 **Word Count**: 735 words **Summary**: January 2025 saw 18 repos with 61 contributions, including 16 PRs and 25 issues, driving significant advancements in software development. Explore the key contributions and developments made in January 2025 across multiple repositories. This timeline highlights 61 contributions, including 16 pull requests and 25 newly opened issues, showcasing a collaborative effort to enhance software projects and address challenges within the community. ## 2025-01-27 - 🔀 Opened PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [feat: add visual feedback while processing tldr.chat request](https://github.com/avelino/logseq-summarize/pull/22) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [tldr.chat returning 404 - IP blocked due to too many requests](https://github.com/avelino/logseq-summarize/issues/23) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [visual feedback to the user that the request is being processed](https://github.com/avelino/logseq-summarize/issues/21) ## 2025-01-26 - 🔀 Opened PR in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [refactor: use macro to generate API functions](https://github.com/avelino/logseq-libs/pull/11) - 🔀 Opened PR in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [feat: add insertBatchBlock! function to editor module](https://github.com/avelino/logseq-libs/pull/9) - 🔀 Opened PR in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [feat(editor): add getEditingBlockContent! function](https://github.com/avelino/logseq-libs/pull/8) - 🔀 Opened PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [refactor: extract process-body function to handle response formatting](https://github.com/avelino/logseq-summarize/pull/19) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [tldr.chat: format return that breaks in logseq](https://github.com/avelino/logseq-summarize/issues/18) - 🐛 Opened issue in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [clojure macro: simplify package maintenance](https://github.com/avelino/logseq-libs/issues/10) - 🐛 Opened issue in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [test environment: do not do via mock, use the native lib](https://github.com/avelino/logseq-libs/issues/7) ## 2025-01-25 - 🔀 Opened PR in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [feat: add test infrastructure and mock system](https://github.com/avelino/logseq-libs/pull/6) - 🔀 Opened PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [feat: refactor tldr.cljs to simplify API interaction](https://github.com/avelino/logseq-summarize/pull/15) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [`/sum`: support multiple URLs](https://github.com/avelino/logseq-summarize/issues/17) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [`/sum`: ignores/removes all text and keeps only the URL to send to tldr.chat](https://github.com/avelino/logseq-summarize/issues/16) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [tldr.chat: loop until returning http status code 200](https://github.com/avelino/logseq-summarize/issues/14) - 🐛 Opened issue in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [have test environment: some functions are not behaving as they should](https://github.com/avelino/logseq-libs/issues/5) - 🐛 Opened issue in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [implement method: `logseq.Editor.insertBatchBlock`](https://github.com/avelino/logseq-libs/issues/4) - 🐛 Opened issue in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [implement method: `logseq.Editor.getEditingBlockContent`](https://github.com/avelino/logseq-libs/issues/3) - 🐛 Opened issue in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [google health (ex fit)](https://github.com/avelino/training-personal-data/issues/3) - 🐛 Opened issue in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [nutrition API](https://github.com/avelino/training-personal-data/issues/2) ## 2025-01-24 - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [use logseq-libs (cljs) as a lib to interact with logseq](https://github.com/avelino/logseq-summarize/issues/13) ## 2025-01-20 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.6.1 to 2.7.0](https://github.com/avelino/bots.clj.social/pull/155#pullrequestreview-2562173695) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump cross-fetch from 4.0.0 to 4.1.0](https://github.com/avelino/bots.clj.social/pull/154#pullrequestreview-2562170112) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.10.1 to 6.10.3](https://github.com/avelino/bots.clj.social/pull/157#pullrequestreview-2562169068) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 18 to 19](https://github.com/moclojer/moclojer/pull/297#pullrequestreview-2562661314) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.4.3 to 4.6.0](https://github.com/moclojer/moclojer/pull/298#pullrequestreview-2562659595) (Approved) ## 2025-01-18 - 🔀 Opened PR in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [clojars deploy](https://github.com/avelino/logseq-libs/pull/2) - 🔀 Opened PR in [jarodise/logseq-copilot](https://github.com/jarodise/logseq-copilot): [migration from javascript codebase to clojurescript](https://github.com/jarodise/logseq-copilot/pull/5) - 🐛 Opened issue in [avelino/logseq-libs](https://github.com/avelino/logseq-libs): [clojars: register package to simplify usage](https://github.com/avelino/logseq-libs/issues/1) - 🐛 Opened issue in [logseq/logseq](https://github.com/logseq/logseq): [`@logseq/libs` written in ClojureScript and exported to JavaScript](https://github.com/logseq/logseq/issues/11689) ## 2025-01-12 - 🔀 Opened PR in [avelino/dotfiles](https://github.com/avelino/dotfiles): [chore: migrate from brew to nix](https://github.com/avelino/dotfiles/pull/5) ## 2025-01-10 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [WIP: refactor: new package architecture](https://github.com/moclojer/chrondb/pull/7) ## 2025-01-09 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [feat: add support for file repository](https://github.com/moclojer/chrondb/pull/6) - 🔀 Opened PR in [moclojer/mockingbird](https://github.com/moclojer/mockingbird): [chore(deps): upgrade tailwindcss to v4 beta](https://github.com/moclojer/mockingbird/pull/12) - ✅ Reviewed PR in [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): [Migrate from setup.py to `pyproject.toml`](https://github.com/buserbrasil/barte-python-sdk/pull/4#pullrequestreview-2540316659) (Approved) - 🐛 Opened issue in [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): [Remove HTTP layer knowledge from model classes](https://github.com/buserbrasil/barte-python-sdk/issues/5) - 🐛 Opened issue in [moclojer/chrondb](https://github.com/moclojer/chrondb): [refactor: Replace filesystem operations with JGit internal tree API for commit handling](https://github.com/moclojer/chrondb/issues/5) - 🐛 Opened issue in [moclojer/mockingbird](https://github.com/moclojer/mockingbird): [tailwindcss upgrade to v4](https://github.com/moclojer/mockingbird/issues/11) ## 2025-01-08 - 🔀 Opened PR in [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): [refactor: change to complex objects instead of raw dictionaries](https://github.com/buserbrasil/barte-python-sdk/pull/1) - 🐛 Opened issue in [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): [Migrate from setup.py to `pyproject.toml` for Modern Python Packaging](https://github.com/buserbrasil/barte-python-sdk/issues/3) - 🐛 Opened issue in [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): [Implement `responses` library for HTTP Layer Integration Testing](https://github.com/buserbrasil/barte-python-sdk/issues/2) ## 2025-01-05 - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [vscode theme auto convert to rio theme](https://github.com/raphamorim/rio/issues/874) - 🐛 Opened issue in [raphamorim/rio-terminal-themes](https://github.com/raphamorim/rio-terminal-themes): [port bearded theme to rio](https://github.com/raphamorim/rio-terminal-themes/issues/5) ## 2025-01-03 - 🔀 Opened PR in [babashka/babashka-sql-pods](https://github.com/babashka/babashka-sql-pods): [initial support for DuckDB](https://github.com/babashka/babashka-sql-pods/pull/64) - 🔀 Opened PR in [r0man/cljs-http](https://github.com/r0man/cljs-http): [upgrade noencore to 0.3.8](https://github.com/r0man/cljs-http/pull/139) - ✅ Reviewed PR in [avelino/training-personal-data](https://github.com/avelino/training-personal-data): [build(deps): bump turtlequeue/setup-babashka from 1.5.2 to 1.7.0](https://github.com/avelino/training-personal-data/pull/1#pullrequestreview-2529369925) (Approved) - 🐛 Opened issue in [babashka/babashka-sql-pods](https://github.com/babashka/babashka-sql-pods): [duckdb support](https://github.com/babashka/babashka-sql-pods/issues/63) - 🐛 Opened issue in [r0man/noencore](https://github.com/r0man/noencore): [warnings are annoying, why not rename the functions?](https://github.com/r0man/noencore/issues/8) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [avelino/logseq-libs](https://github.com/avelino/logseq-libs): 31 commit(s) - [See commits](https://github.com/avelino/logseq-libs/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [moclojer/mockingbird](https://github.com/moclojer/mockingbird): 2 commit(s) - [See commits](https://github.com/moclojer/mockingbird/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [babashka/babashka-sql-pods](https://github.com/babashka/babashka-sql-pods): 1 commit(s) - [See commits](https://github.com/babashka/babashka-sql-pods/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [avelino/training-personal-data](https://github.com/avelino/training-personal-data): 37 commit(s) - [See commits](https://github.com/avelino/training-personal-data/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 64 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): 1 commit(s) - [See commits](https://github.com/buserbrasil/databricks-sql-driver/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 3 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): 10 commit(s) - [See commits](https://github.com/avelino/logseq-summarize/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [r0man/cljs-http](https://github.com/r0man/cljs-http): 1 commit(s) - [See commits](https://github.com/r0man/cljs-http/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [buserbrasil/barte-python-sdk](https://github.com/buserbrasil/barte-python-sdk): 26 commit(s) - [See commits](https://github.com/buserbrasil/barte-python-sdk/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 29 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2025-01-01T00:00:00Z&until=2025-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Reflections of a CTO: Learnings, Mistakes, and the Strength of the Team **URL**: https://avelino.run/reflections-of-a-cto-learnings-mistakes-and-the-strength-of-the-team/ **Published**: 2024-12-04 **Tags**: cto, Leadership lessons, Team collaboration, Learning from mistakes, Growth mindset in tech, Building strong teams, Effective leadership, Tech team management **Word Count**: 176 words **Summary**: Explore the reflections of a CTO on leadership, learning from mistakes, and the power of a strong, united team. Discover insights on building a culture of growth and collaboration to drive success in 2025 ![Reflections of a CTO: Learnings, Mistakes, and the Strength of the Team](/blog/reflections-of-a-cto-learnings-mistakes-and-the-strength-of-the-team.png) Yesterday was awesome! A day to bring together the technology team of [Buser Brasil](https://buser.com.br). An important day to reinforce what really matters: the unity of the team. We paused to look back, revisit what went right and, most importantly, what didn’t. Not to point fingers, but to ensure that these same mistakes won’t be repeated in 2025. Reflection without witch hunts, filled with a lot of learning. If there’s one thing that became clear this year, it’s that no one here is in the same place they started. Every mistake, every challenge, every victory… everything served for us to evolve as a team and as professionals. I am sure that in 2025 we will enter more experienced, more aligned, and with much more confidence in what we are capable of doing together - playing as a team. **I’ll be direct:**** a leader without a team is nothing. Having exceptional people by your side to turn ideas into reality is what makes the difference. Leading is about example, not about speeches. Let’s go all in for 2025! --- # Learnings from startups: don't get attached to projects or products to maximize value **URL**: https://avelino.run/learnings-from-startups-dont-get-attached-to-projects-or-products-to-maximize-value/ **Published**: 2024-12-03 **Tags**: Startups, Agile companies, Project management, Product development, Business value, Agile philosophy, Personal growth, Professional development, Continuous learning, Lean Startup, Scrum, Refactoring **Word Count**: 490 words **Summary**: Learn how startups and agile companies can enhance business value by not getting attached to projects or products. Discover insights from agile philosophy, personal and professional growth, and continuous learning. ![Learnings from startups: don't get attached to projects or products to maximize value](/blog/learnings-from-startups-dont-get-attached-to-projects-or-products-to-maximize-value.png) In the fast-paced world of startups and agile companies, one of the most valuable learnings is: don't get attached to a project or product. This advice is crucial to ensure that teams remain focused on delivering value to the business, rather than clinging to solutions that no longer add value. ## Why not get attached? In a startup, the ability to adapt is essential. If a product is not generating the expected user engagement, persisting in its development can result in maintenance costs without return. As Eric Ries discusses in "The Lean Startup," it is vital that companies are able to pivot quickly, redirecting efforts to initiatives that truly meet market needs and contribute to the company's strategic goals. ### The agile perspective The agile philosophy, as described by Jeff Sutherland in "Scrum: The Art of Doing Twice the Work in Half the Time," encourages teams to iterate quickly and learn from each development cycle. This means that even if a project was started with enthusiasm, it must be constantly reassessed to ensure it still makes sense in the current context and is aligned with delivering business value. ### Personal and professional growth Letting go of a project not only benefits the organization but also offers significant opportunities for personal and professional growth. Each project is a chance to learn, evolve technically, and enhance interpersonal skills. Martin Fowler, in "Refactoring: Improving the Design of Existing Code," emphasizes the importance of reflecting on the work done to identify areas for improvement and create more efficient and reusable solutions. ### Reflection and continuous learning Upon completing a project, it is crucial to reflect on what has been done. Questions like "Why did we prioritize this?" and "Why is this task a priority?" should be asked regularly. This practice not only improves the quality of work but also ensures that daily activities are aligned with the company's strategic objectives. This is fundamental to ensuring that the focus remains on delivering value. ## Conclusion The role of a developer in a startup goes beyond just writing code. It's about deeply understanding business objectives and adapting actions to better meet them. Letting go of projects is not about discarding hard work, but rather about prioritizing what truly matters and being open to new opportunities for learning and growth. By applying these principles, we can significantly contribute to organizational success while evolving as complete professionals, capable of facing the challenges of an agile and constantly changing work environment. ### References * Sutherland, J. (2014). Scrum: The Art of Doing Twice the Work in Half the Time. [Crown Business](https://www.amazon.com/Scrum-Doing-Twice-Work-Half/dp/038534645X) * Fowler, M. (2018). Refactoring: Improving the Design of Existing Code. [Addison-Wesley Professional](https://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0134757599) * Ries, E. (2011). The Lean Startup: How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses. [Crown Business](https://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-Innovation/dp/0307887898) These books are valuable resources for any professional who wants to deepen their understanding of agile management and software engineering, offering practical and theoretical insights to successfully navigate the agile environment (such as startups). --- # Open Source Contributions - December 2024 **URL**: https://avelino.run/foss/2024/12/ **Published**: 2024-12-01 **Word Count**: 394 words **Summary**: Discover key contributions for December 2024, featuring 9 repositories, 5 pull requests, and 7 issues that drive innovation in the open-source community. Welcome to the December 2024 contributions timeline, where we highlight significant activities across 9 repositories. This month saw 5 new pull requests, 10 reviews, and 7 issues, showcasing the collaborative efforts that enhance our projects. Explore the details of each contribution and their impact on the community. ## 2024-12-30 - 🔀 Opened PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [organize how i structure packages](https://github.com/avelino/logseq-summarize/pull/12) ## 2024-12-20 - 🔀 Opened PR in [avelino/dotfiles](https://github.com/avelino/dotfiles): [clear initials modules, l oad specialized modules](https://github.com/avelino/dotfiles/pull/4) - ✅ Reviewed PR in [avelino/dotfiles](https://github.com/avelino/dotfiles): [[ImgBot] Optimize images](https://github.com/avelino/dotfiles/pull/3#pullrequestreview-2517234960) (Approved) ## 2024-12-18 - 🔀 Opened PR in [jarodise/logseq-copilot](https://github.com/jarodise/logseq-copilot): [toolbar icon: change emoji to svg icon](https://github.com/jarodise/logseq-copilot/pull/2) - 🐛 Opened issue in [jarodise/logseq-copilot](https://github.com/jarodise/logseq-copilot): [llm output compatible with markdown formatting](https://github.com/jarodise/logseq-copilot/issues/4) - 🐛 Opened issue in [jarodise/logseq-copilot](https://github.com/jarodise/logseq-copilot): [proposal: replace javascript with clojurescript](https://github.com/jarodise/logseq-copilot/issues/3) - 🐛 Opened issue in [jarodise/logseq-copilot](https://github.com/jarodise/logseq-copilot): [support for other llms, e.g. claude](https://github.com/jarodise/logseq-copilot/issues/1) - 🐛 Opened issue in [missuo/claude2openai](https://github.com/missuo/claude2openai): [distribute on homebrew](https://github.com/missuo/claude2openai/issues/5) ## 2024-12-16 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.6.0 to 2.6.1](https://github.com/avelino/bots.clj.social/pull/151#pullrequestreview-2505480292) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.3.195 to 1.3.196](https://github.com/avelino/bots.clj.social/pull/152#pullrequestreview-2505478083) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.4.1 to 4.5.1](https://github.com/avelino/bots.clj.social/pull/153#pullrequestreview-2505476518) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 13.0 to 13.1](https://github.com/moclojer/moclojer/pull/296#pullrequestreview-2506862227) (Approved) ## 2024-12-13 - 🔀 Opened PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [implement infinite loop in request to handle status code in return for the loop](https://github.com/avelino/logseq-summarize/pull/11) - 🐛 Opened issue in [zen-browser/desktop](https://github.com/zen-browser/desktop): [pin notification (green) in center tab](https://github.com/zen-browser/desktop/issues/3720) ## 2024-12-12 - ✅ Reviewed PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [Bump ws from 7.5.9 to 7.5.10](https://github.com/avelino/logseq-summarize/pull/9#pullrequestreview-2500909896) (Approved) - ✅ Reviewed PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [Bump elliptic from 6.5.4 to 6.6.1](https://github.com/avelino/logseq-summarize/pull/8#pullrequestreview-2500909184) (Approved) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [handle request loop (long jump) for the API](https://github.com/avelino/logseq-summarize/issues/10) ## 2024-12-09 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 4.1.2 to 4.2.0](https://github.com/moclojer/moclojer/pull/294#pullrequestreview-2489597995) (Approved) ## 2024-12-04 - ✅ Reviewed PR in [zen-browser/desktop](https://github.com/zen-browser/desktop): [Change file extension of source file compressed with zstd from .tar.gz to .tar.zst](https://github.com/zen-browser/desktop/pull/3309#pullrequestreview-2479370786) (Approved) - ✅ Reviewed PR in [zen-browser/desktop](https://github.com/zen-browser/desktop): [bugfix: Fix Temporary Containers Automatic mode | change firefox -> zen for default cookiestore id](https://github.com/zen-browser/desktop/pull/2411#pullrequestreview-2479363550) (Approved) ## 2024-12-03 - 🔀 Opened PR in [logseq/logseq](https://github.com/logseq/logseq): [frontend/block code: set ClojureScript as a Clojure language](https://github.com/logseq/logseq/pull/11628) - 🐛 Opened issue in [logseq/logseq](https://github.com/logseq/logseq): [ClojureScript code block with `:results` does not work](https://github.com/logseq/logseq/issues/11627) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 11 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-12-01T00:00:00Z&until=2024-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 7 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-12-01T00:00:00Z&until=2024-12-31T23:59:59Z) - 🔨 Push to [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): 6 commit(s) - [See commits](https://github.com/avelino/logseq-summarize/commits?author=avelino&since=2024-12-01T00:00:00Z&until=2024-12-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 3 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-12-01T00:00:00Z&until=2024-12-31T23:59:59Z) - 🔨 Push to [jarodise/logseq-copilot](https://github.com/jarodise/logseq-copilot): 1 commit(s) - [See commits](https://github.com/jarodise/logseq-copilot/commits?author=avelino&since=2024-12-01T00:00:00Z&until=2024-12-31T23:59:59Z) - 🔨 Push to [logseq/logseq](https://github.com/logseq/logseq): 1 commit(s) - [See commits](https://github.com/logseq/logseq/commits?author=avelino&since=2024-12-01T00:00:00Z&until=2024-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2024 **URL**: https://avelino.run/foss/2024/11/ **Published**: 2024-11-01 **Word Count**: 262 words **Summary**: November 2024 saw 9 repositories contribute 19 total activities, including 13 reviews and 5 pushes, showcasing robust collaborative development efforts. Explore the timeline of contributions for November 2024, highlighting a total of 19 activities across 9 repositories. This month featured significant push events and thorough pull request reviews, reflecting a strong collaborative spirit within the community. ## 2024-11-28 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/stretchr/testify from 1.9.0 to 1.10.0](https://github.com/prest/prest/pull/906#pullrequestreview-2468186850) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/lestrrat-go/jwx/v2 from 2.1.2 to 2.1.3](https://github.com/prest/prest/pull/905#pullrequestreview-2468185620) (Approved) ## 2024-11-26 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Cleanup on Web Frameworks](https://github.com/avelino/awesome-go/pull/5490#pullrequestreview-2461995905) (Approved) ## 2024-11-18 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 12.6 to 13.0](https://github.com/moclojer/moclojer/pull/291#pullrequestreview-2443353035) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 17 to 18](https://github.com/moclojer/moclojer/pull/292#pullrequestreview-2443351931) (Approved) ## 2024-11-11 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 12.5 to 12.6](https://github.com/moclojer/moclojer/pull/290#pullrequestreview-2428007224) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.5.0 to 2.6.0](https://github.com/avelino/bots.clj.social/pull/145#pullrequestreview-2426426378) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.8.0 to 6.10.1](https://github.com/avelino/bots.clj.social/pull/149#pullrequestreview-2426425077) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.192 to 1.3.195](https://github.com/avelino/bots.clj.social/pull/150#pullrequestreview-2426420887) (Approved) ## 2024-11-04 - ✅ Reviewed PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [Bump elliptic from 6.5.7 to 6.6.0](https://github.com/avelino/logseq-summarize/pull/7#pullrequestreview-2413550662) (Approved) ## 2024-11-03 - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [Address outstanding issues, and prepare for additional changes](https://github.com/avelino/cover.run/pull/30#pullrequestreview-2411948877) (Approved) - 🐛 Opened issue in [microsoft/vcpkg](https://github.com/microsoft/vcpkg): [[libpng] Build error on arm64-osx](https://github.com/microsoft/vcpkg/issues/41936) ## 2024-11-02 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added `go-slice/slice`](https://github.com/avelino/awesome-go/pull/5469#pullrequestreview-2411744749) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [contributing guide: add 5-month maturity quality standard.](https://github.com/avelino/awesome-go/pull/5473#pullrequestreview-2411744331) (Approved) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 13 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-11-01T00:00:00Z&until=2024-11-30T23:59:59Z) - 🔨 Push to [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): 4 commit(s) - [See commits](https://github.com/avelino/logseq-summarize/commits?author=avelino&since=2024-11-01T00:00:00Z&until=2024-11-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 4 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-11-01T00:00:00Z&until=2024-11-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-11-01T00:00:00Z&until=2024-11-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2024-11-01T00:00:00Z&until=2024-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - October 2024 **URL**: https://avelino.run/foss/2024/10/ **Published**: 2024-10-01 **Word Count**: 178 words **Summary**: October 2024 saw significant contributions across 6 repositories, including 1 new pull request and 6 reviews, enhancing project collaboration and code quality. In October 2024, contributors made notable advancements in various projects, with a total of 11 contributions including pushes, issues, and pull requests. This timeline highlights key activities and their impact on ongoing development efforts. ## 2024-10-28 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 4.1.1 to 4.1.2](https://github.com/moclojer/moclojer/pull/289#pullrequestreview-2399622448) (Approved) ## 2024-10-25 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Private notification regarding moclojer.com's improper MTA-STS configuration](https://github.com/moclojer/moclojer-app/issues/368) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [revisar telas (UX/UI figma) de admin para ORG](https://github.com/moclojer/moclojer-app/issues/365) ## 2024-10-24 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add go-events](https://github.com/avelino/awesome-go/pull/5415#pullrequestreview-2391883752) (Approved) ## 2024-10-22 - 🔀 Opened PR in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [WIP: force close connection if databricks exception sql exec timeout](https://github.com/buserbrasil/databricks-sql-driver/pull/17) ## 2024-10-15 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 4.1.0 to 4.1.1](https://github.com/moclojer/moclojer/pull/288#pullrequestreview-2368807791) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.4.0 to 4.4.3](https://github.com/moclojer/moclojer/pull/287#pullrequestreview-2368804708) (Approved) ## 2024-10-07 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 16 to 17](https://github.com/moclojer/moclojer/pull/284#pullrequestreview-2352594956) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 4.0.2 to 4.1.0](https://github.com/moclojer/moclojer/pull/286#pullrequestreview-2352594063) (Approved) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-10-01T00:00:00Z&until=2024-10-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-10-01T00:00:00Z&until=2024-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Leadership by example, managing people shouldn't be a full-time job **URL**: https://avelino.run/leadership-by-example-managing-people-shouldnt-be-a-full-time-job/ **Published**: 2024-09-02 **Tags**: quote, management, leadership, software engineering, 37signals, dhh **Word Count**: 66 words I can't believe that it's the best choice for companies to have people 100% in *"management positions"*, this isn't new, it's been true since I started leading teams. The manager's job is to help people evolve professionally and to help them deliver for the company. In software engineering, there's nothing better than leadership by example. ## Blogpost relacionado: - [We once more have no full-time managers at 37signals](https://world.hey.com/dhh/we-once-more-have-no-full-time-managers-at-37signals-f8611085) --- # Open Source Contributions - September 2024 **URL**: https://avelino.run/foss/2024/09/ **Published**: 2024-09-01 **Word Count**: 148 words **Summary**: September 2024 showcased 10 contributions across 6 repositories, highlighting significant progress with new issues and pull request reviews. Explore the contributions made in September 2024, featuring a diverse range of activities across six repositories. This timeline captures key events including pushes, issue openings, and pull request reviews, illustrating the vibrant development efforts during the month. ## 2024-09-05 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Upgrade clojure to 1.12.0](https://github.com/moclojer/moclojer/issues/282) ## 2024-09-04 - 💬 Reviewed PR in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [Dynamically generating queue functions from Jedis' source code](https://github.com/moclojer/clj-rq/pull/18#pullrequestreview-2281221824) (Commented) ## 2024-09-02 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.3.6 to 4.4.0](https://github.com/moclojer/moclojer/pull/281#pullrequestreview-2275870025) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.191 to 1.2.192](https://github.com/avelino/bots.clj.social/pull/142#pullrequestreview-2275850418) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [clojars auto release via pipeline](https://github.com/moclojer/moclojer/issues/279) ## Commits - 🔨 Push to [moclojer/mockingbird](https://github.com/moclojer/mockingbird): 3 commit(s) - [See commits](https://github.com/moclojer/mockingbird/commits?author=avelino&since=2024-09-01T00:00:00Z&until=2024-09-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-09-01T00:00:00Z&until=2024-09-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 2 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2024-09-01T00:00:00Z&until=2024-09-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 1 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-09-01T00:00:00Z&until=2024-09-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-09-01T00:00:00Z&until=2024-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - August 2024 **URL**: https://avelino.run/foss/2024/08/ **Published**: 2024-08-01 **Word Count**: 404 words **Summary**: August 2024 saw 11 active repositories, 31 contributions, and significant progress across pull requests and issues, driving innovation in open-source projects. Explore the timeline of contributions for August 2024, highlighting the collaborative efforts across 11 repositories. This month featured 5 pull requests, 13 reviews, and 5 issues, showcasing a vibrant open-source community dedicated to enhancing software development. ## 2024-08-30 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Adding swagger to moclojer](https://github.com/moclojer/moclojer/pull/262#pullrequestreview-2272289741) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/rs/cors from 1.11.0 to 1.11.1](https://github.com/prest/prest/pull/898#pullrequestreview-2271730922) (Approved) ## 2024-08-29 - 💬 Reviewed PR in [moclojer/mockingbird](https://github.com/moclojer/mockingbird): [WIP: initial config for mockingbird](https://github.com/moclojer/mockingbird/pull/4#pullrequestreview-2270185459) (Commented) ## 2024-08-27 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Correct small typos on the documentation](https://github.com/moclojer/moclojer/pull/274#pullrequestreview-2263215095) (Approved) ## 2024-08-25 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Using webhook headers on its requests by default](https://github.com/moclojer/moclojer/pull/272#pullrequestreview-2259242312) (Approved) ## 2024-08-22 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Bumping to v0.3.3.1](https://github.com/moclojer/moclojer/pull/271#pullrequestreview-2255545625) (Approved) ## 2024-08-20 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Load parsed body correctly](https://github.com/moclojer/moclojer/pull/269#pullrequestreview-2249011465) (Approved) ## 2024-08-16 - 💬 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [historico de alteração de um yml](https://github.com/moclojer/moclojer-app/pull/352#pullrequestreview-2242287292) (Commented) ## 2024-08-14 - 💬 Reviewed PR in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [Dynamically generating queue functions from Jedis' source code](https://github.com/moclojer/clj-rq/pull/18#pullrequestreview-2238968551) (Commented) ## 2024-08-12 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.3.5 to 4.3.6](https://github.com/moclojer/moclojer/pull/267#pullrequestreview-2233980446) (Approved) ## 2024-08-11 - 🐛 Opened issue in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [documentation site clj-rq.moclojer.com](https://github.com/moclojer/clj-rq/issues/19) ## 2024-08-09 - ✅ Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Servico único para os jobs recorrentes](https://github.com/moclojer/moclojer-app/pull/342#pullrequestreview-2229735874) (Approved) ## 2024-08-08 - 🔀 Opened PR in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [Dynamically generating queue functions from Jedis' source code](https://github.com/moclojer/clj-rq/pull/18) ## 2024-08-06 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [design system foss](https://github.com/moclojer/moclojer-app/issues/351) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [UX/UI para criar mock - não só editor](https://github.com/moclojer/moclojer-app/issues/350) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Visão de curto prazo: o que precisamos ter para o lançamento? Ser usuário ativo do moclojer](https://github.com/moclojer/moclojer-app/issues/349) ## 2024-08-05 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.3.4 to 4.3.5](https://github.com/moclojer/moclojer/pull/266#pullrequestreview-2219394261) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.15 to 4.7.0](https://github.com/avelino/bots.clj.social/pull/141#pullrequestreview-2219021775) (Approved) ## 2024-08-03 - 🔀 Opened PR in [buserbrasil/mentirinha](https://github.com/buserbrasil/mentirinha): [db: set app name](https://github.com/buserbrasil/mentirinha/pull/5) ## 2024-08-01 - 🔀 Opened PR in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [docker/make: change --mount to -v (volume), clear](https://github.com/buserbrasil/databricks-sql-driver/pull/16) - 🔀 Opened PR in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [use `close` made in the decorator](https://github.com/buserbrasil/databricks-sql-driver/pull/15) - 🔀 Opened PR in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [do not use str import, conflict with `str` package from clojure ](https://github.com/buserbrasil/databricks-sql-driver/pull/14) - 🐛 Opened issue in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [connection remaining open from databricks sql after timeout](https://github.com/buserbrasil/databricks-sql-driver/issues/13) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 4 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) - 🔨 Push to [buserbrasil/mentirinha](https://github.com/buserbrasil/mentirinha): 4 commit(s) - [See commits](https://github.com/buserbrasil/mentirinha/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) - 🔨 Push to [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): 4 commit(s) - [See commits](https://github.com/buserbrasil/databricks-sql-driver/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) - 🔨 Push to [moclojer/mockingbird](https://github.com/moclojer/mockingbird): 3 commit(s) - [See commits](https://github.com/moclojer/mockingbird/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) - 🔨 Push to [talkdai/landing-page](https://github.com/talkdai/landing-page): 1 commit(s) - [See commits](https://github.com/talkdai/landing-page/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 1 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-08-01T00:00:00Z&until=2024-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - July 2024 **URL**: https://avelino.run/foss/2024/07/ **Published**: 2024-07-01 **Word Count**: 434 words **Summary**: July 2024: 14 repositories contributed to with 3 open PRs, 21 reviews, and 3 new issues, showcasing robust activity and collaboration in the community. Explore the timeline of contributions for July 2024, highlighting significant activities across 14 repositories. This month features 3 open pull requests, 21 reviews, and 3 newly opened issues, reflecting a vibrant community engagement and continuous improvement in projects. ## 2024-07-31 - 🔀 Opened PR in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [convert token field to secret (extend password field)](https://github.com/buserbrasil/databricks-sql-driver/pull/12) - 🐛 Opened issue in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [token field should be secret](https://github.com/buserbrasil/databricks-sql-driver/issues/11) ## 2024-07-30 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/lestrrat-go/jwx/v2 from 2.0.21 to 2.1.1](https://github.com/prest/prest/pull/894#pullrequestreview-2207604708) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/spf13/cobra from 1.8.0 to 1.8.1](https://github.com/prest/prest/pull/888#pullrequestreview-2207598909) (Approved) - ✅ Reviewed PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [Bump ws from 7.5.9 to 7.5.10](https://github.com/avelino/logseq-summarize/pull/5#pullrequestreview-2207597630) (Approved) ## 2024-07-29 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.4.5 to 2.5.0](https://github.com/avelino/bots.clj.social/pull/139#pullrequestreview-2204498622) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.188 to 1.2.191](https://github.com/avelino/bots.clj.social/pull/138#pullrequestreview-2204493992) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.14 to 4.6.15](https://github.com/avelino/bots.clj.social/pull/137#pullrequestreview-2204492032) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump ws from 8.17.0 to 8.17.1](https://github.com/avelino/bots.clj.social/pull/135#pullrequestreview-2204491121) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.4.0 to 4.4.1](https://github.com/avelino/bots.clj.social/pull/140#pullrequestreview-2204489800) (Approved) ## 2024-07-24 - ✅ Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Normalizando schemas do DB](https://github.com/moclojer/moclojer-app/pull/345#pullrequestreview-2197611195) (Approved) - 💬 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Servico único para os jobs recorrentes](https://github.com/moclojer/moclojer-app/pull/342#pullrequestreview-2197439689) (Commented) - ✅ Reviewed PR in [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): [[ImgBot] Optimize images](https://github.com/moclojer/moclojer.com/pull/9#pullrequestreview-2196870596) (Approved) ## 2024-07-22 - 💬 Reviewed PR in [Lyokone/flutterlocation](https://github.com/Lyokone/flutterlocation): [Set foreground service type to `FOREGROUND_SERVICE_TYPE_LOCATION`](https://github.com/Lyokone/flutterlocation/pull/970#pullrequestreview-2192141856) (Commented) ## 2024-07-19 - 🔍 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [open nrepl server on startup](https://github.com/moclojer/moclojer-app/pull/339#pullrequestreview-2188981640) (Changes requested) ## 2024-07-18 - 🔀 Opened PR in [vmesel/vmesel.github.io](https://github.com/vmesel/vmesel.github.io): [communications: add refe link in Avelino people](https://github.com/vmesel/vmesel.github.io/pull/4) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Update README.md](https://github.com/prest/prest/pull/892#pullrequestreview-2185680377) (Approved) - 🐛 Opened issue in [zed-industries/extensions](https://github.com/zed-industries/extensions): [d2 language](https://github.com/zed-industries/extensions/issues/1084) ## 2024-07-17 - 🔀 Opened PR in [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): [Update clj-rq-is-finally-stable.md](https://github.com/moclojer/moclojer.com/pull/8) - ✅ Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [switching to clj-rq through components](https://github.com/moclojer/moclojer-app/pull/336#pullrequestreview-2181525409) (Approved) ## 2024-07-14 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adds our current sponsors to README](https://github.com/talkdai/dialog/pull/220#pullrequestreview-2176727209) (Approved) ## 2024-07-13 - 🔍 Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bumps dialog lib to the latest version, in order to keep compatibility with the latest version](https://github.com/talkdai/dialog/pull/219#pullrequestreview-2176473608) (Changes requested) ## 2024-07-11 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [sidebar "escondendo" da impressão que o dashboard fica mexendo](https://github.com/moclojer/moclojer-app/issues/335) ## 2024-07-08 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.3.3 to 4.3.4](https://github.com/moclojer/moclojer/pull/265#pullrequestreview-2163756728) (Approved) - ✅ Reviewed PR in [talkdai/dialog-lib](https://github.com/talkdai/dialog-lib): [Bump certifi from 2024.6.2 to 2024.7.4 in the pip group across 1 directory](https://github.com/talkdai/dialog-lib/pull/9#pullrequestreview-2162815244) (Approved) ## 2024-07-05 - 🔍 Reviewed PR in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [Fault tolerant mechanisms](https://github.com/moclojer/clj-rq/pull/6#pullrequestreview-2161124512) (Changes requested) ## 2024-07-03 - 🔍 Reviewed PR in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [API improvement refactor](https://github.com/moclojer/clj-rq/pull/5#pullrequestreview-2157134561) (Changes requested) ## Commits - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 12 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-07-01T00:00:00Z&until=2024-07-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 9 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-07-01T00:00:00Z&until=2024-07-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 5 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-07-01T00:00:00Z&until=2024-07-31T23:59:59Z) - 🔨 Push to [moclojer/clj-rq](https://github.com/moclojer/clj-rq): 4 commit(s) - [See commits](https://github.com/moclojer/clj-rq/commits?author=avelino&since=2024-07-01T00:00:00Z&until=2024-07-31T23:59:59Z) - 🔨 Push to [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): 1 commit(s) - [See commits](https://github.com/buserbrasil/databricks-sql-driver/commits?author=avelino&since=2024-07-01T00:00:00Z&until=2024-07-31T23:59:59Z) - 🔨 Push to [vmesel/vmesel.github.io](https://github.com/vmesel/vmesel.github.io): 1 commit(s) - [See commits](https://github.com/vmesel/vmesel.github.io/commits?author=avelino&since=2024-07-01T00:00:00Z&until=2024-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Interactions: IRL vs. Social Media - What Really Matters? **URL**: https://avelino.run/interactions-irl-vs-social-media-what-really-matters/ **Published**: 2024-06-09 **Tags**: social interaction, social media, digital forgetting, content relevance, social memory **Word Count**: 358 words **Summary**: Find out why we forget past conversations and posts, and how it impacts our lives. ![Interactions: IRL vs. Social Media - What Really Matters?](/blog/interactions-irl-vs-social-media-what-really-matters.png) These days, the line between our offline and online interactions is super blurry. But have you ever thought about what we actually remember from these interactions? Let’s dive into why a lot of our conversations and posts lose their importance over time. ## Memory in Real-Life Interactions Do you remember everything from your last hangout with friends? Probably not. An old study by [Ebbinghaus (1885)](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4492928/) showed that we forget info quickly if we don't reinforce it. Plus, Daniel Kahneman's book, ["Thinking, Fast and Slow"](https://www.businessinsider.com/guides/learning/thinking-fast-and-slow-book-summary-review), explains that our memory only keeps the stuff with the most emotional impact. So, it's normal to remember the chats that had a special meaning at that time in your life. The rest, even if it was fun, just fades away. ## The Past on Social Media On social media, especially Twitter, this happens way faster. A tweet's "life" is basically a few minutes. A [study by Wiselytics](https://scottgraffius.com/blog/files/halflife-social-media.html) in 2014 found that most tweets lose their visibility in less than 20 minutes. But still, we don’t delete our old posts. Why not? Maybe because these posts are like a public diary of our thoughts and experiences. Even when they’re irrelevant, they show how we’ve grown and changed. ## What Really Matters If we forget most stuff in both real-life and online interactions, then what truly matters? Is it really necessary to keep a digital history? Or do these records have some symbolic value that still makes them part of who we are? Think about it: Do you remember every detail from your last friends' hangout? Or just what really mattered at that point in your life? And on social media, how many old tweets still mean something to you today? ## Conclusion In both real-life and social media interactions, we forget a lot of what we experience. What truly matters are the moments that leave a lasting impact. Understanding this helps us focus on what’s important and let the rest go. > This is the reason I don't keep a history of tweets on [x.com](https://x.com/avelinorun), it doesn't make sense. What really matters is what is happening now, what is being discussed now. What was discussed yesterday no longer matters. --- # Open Source Contributions - June 2024 **URL**: https://avelino.run/foss/2024/06/ **Published**: 2024-06-01 **Word Count**: 374 words **Summary**: June 2024 saw 15 repositories contributing 29 events, including 9 pushes and 4 issues, showcasing vibrant community engagement and development. Explore the contributions made in June 2024, where 15 repositories engaged in a dynamic array of activities, including 29 events that highlight the collaborative spirit of our community. From pushes to pull request reviews, this timeline captures the essence of our ongoing development efforts. ## 2024-06-28 - 🔍 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Separação de mocks pertencentes a `customers` e `orgs`](https://github.com/moclojer/moclojer-app/pull/327#pullrequestreview-2148674461) (Changes requested) ## 2024-06-24 - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [macOS 15 beta 2: Rio crash, not opening](https://github.com/raphamorim/rio/issues/558) ## 2024-06-20 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adds docs for new endpoints for different models](https://github.com/talkdai/dialog/pull/211#pullrequestreview-2129217251) (Approved) ## 2024-06-18 - 🔍 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Remoção de sub-domínios do Cloudflare e DigitalOcean](https://github.com/moclojer/moclojer-app/pull/322#pullrequestreview-2126376699) (Changes requested) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [separar mocks unicos de mocks de um grupo de usuarios (orgs)](https://github.com/moclojer/moclojer-app/issues/324) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [separar jobs em servico único](https://github.com/moclojer/moclojer-app/issues/323) ## 2024-06-17 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump docker/build-push-action from 5 to 6](https://github.com/moclojer/moclojer/pull/264#pullrequestreview-2123260591) (Approved) ## 2024-06-15 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sturdyc](https://github.com/avelino/awesome-go/pull/5334#pullrequestreview-2120502122) (Approved) ## 2024-06-13 - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [Log Injection](https://github.com/talkdai/dialog/issues/209) ## 2024-06-12 - ✅ Reviewed PR in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [fix connection](https://github.com/buserbrasil/databricks-sql-driver/pull/9#pullrequestreview-2114021265) (Approved) ## 2024-06-11 - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [[ImgBot] Optimize images](https://github.com/avelino/avelino.run/pull/54#pullrequestreview-2109222842) (Approved) ## 2024-06-10 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add EchoVault to Database, Caches](https://github.com/avelino/awesome-go/pull/5332#pullrequestreview-2107566517) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.4.3 to 2.4.5](https://github.com/avelino/bots.clj.social/pull/134#pullrequestreview-2108661454) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.7.7 to 6.8.0](https://github.com/avelino/bots.clj.social/pull/133#pullrequestreview-2108660393) (Approved) ## 2024-06-07 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-mongox](https://github.com/avelino/awesome-go/pull/5330#pullrequestreview-2104230019) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Fastschema: A flexible Go web framework and Headless CMS.](https://github.com/avelino/awesome-go/pull/5325#pullrequestreview-2104192475) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/urfave/negroni/v3 from 3.1.0 to 3.1.1](https://github.com/prest/prest/pull/887#pullrequestreview-2104173230) (Approved) ## 2024-06-05 - 🔀 Opened PR in [moclojer/clj-rq](https://github.com/moclojer/clj-rq): [gh action: deploy to clojars in tags generate](https://github.com/moclojer/clj-rq/pull/3) ## 2024-06-03 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.4.2 to 2.4.3](https://github.com/avelino/bots.clj.social/pull/132#pullrequestreview-2094509698) (Approved) ## 2024-06-01 - ✅ Reviewed PR in [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): [[ImgBot] Optimize images](https://github.com/moclojer/moclojer.com/pull/6#pullrequestreview-2092043092) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [moclojer/clojure-to-digitalocean-app-platform](https://github.com/moclojer/clojure-to-digitalocean-app-platform): 2 commit(s) - [See commits](https://github.com/moclojer/clojure-to-digitalocean-app-platform/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 11 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 6 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): 2 commit(s) - [See commits](https://github.com/buserbrasil/databricks-sql-driver/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [moclojer/clj-rq](https://github.com/moclojer/clj-rq): 7 commit(s) - [See commits](https://github.com/moclojer/clj-rq/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 3 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [moclojer/components](https://github.com/moclojer/components): 2 commit(s) - [See commits](https://github.com/moclojer/components/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) - 🔨 Push to [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): 6 commit(s) - [See commits](https://github.com/avelino/logseq-languagetool/commits?author=avelino&since=2024-06-01T00:00:00Z&until=2024-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The Challenge of Maintaining Open Source Projects: Why Your Project Might Not Be Used in the Future **URL**: https://avelino.run/the-challenge-of-maintaining-open-source-projects-why-your-project-might-not-be-used-in-the-future/ **Published**: 2024-05-28 **Tags**: open source, open repository, code community, project sustainability, awesome-go, software development **Word Count**: 634 words **Summary**: Learn how to ensure the sustainability of an open source project and the importance of building an active community. Understand the differences between open repositories and open source projects, and know when it’s worth opening your project to the community ![The Challenge of Maintaining Open Source Projects: Why Your Project Might Not Be Used in the Future](/blog/the-challenge-of-maintaining-open-source-projects-why-your-project-might-not-be-used-in-the-future.png) We usually kick off (or get involved in) open source projects because we have a need and believe our problem, in an abstract form, could also solve issues for others. We’re driven by endorphins (or whatever kind of motivation) and start cranking out code like there’s no tomorrow. However, it doesn’t take long to realize that just focusing on the code isn’t sustainable. We need proper documentation to help people use and chip in on the project. After months of working "solo", a few folks might show interest – that’s when the repository transitions into a true open source project. ## The Difference between Open Source and Open Repository * **Open Repository:** It’s like a "luxury" project where you and a handful of people (maybe friends or folks who can’t say no to you) contribute sporadically; * **Open Source:** This is when there’s an active community involved, not just you. In practice, an open repository can be seen as a personal collection shared with others, whereas an open source project is a vibrant ecosystem where diverse people collaborate, bringing ideas and continuous improvements. For instance, Linux is a stellar example of an open source project shaped by a global community. ## Why Projects Die? It’s super common in software engineering to lose the original need for a project after a few months or years. Problems evolve, and we need to think about new solutions and ways to tackle current challenges. Without a community to help maintain and evolve the project, it can die out due to neglect. One project I’m proud of building a strong community around is awesome-go. It’s not an easy task to motivate engineers to contribute and help maintain it. Reviewing PRs (pull requests) and manually validating if new additions meet the established criteria is tedious. However, focusing on the positive impact we have on the Go language community keeps maintainers motivated. ## When to Open Source a Project? When I face the decision of whether or not to invest my time in a new open source project, it is important for me to have a strong overview of already existing alternatives. If there are none, then it is probably a good idea. Otherwise, I think about how changes to my project, by means of approach, architecture, design, etc., could withstand the challenges of competition. However, in most cases, it is a better idea to restructure the existing project instead of writing a new package or library from scratch, whether it is private or open source. **Checklist for Deciding to Open Source a Project:** 1. Community Demand: Is there a clear, recurring need for the problem your project solves? 1. Sustainability: Do you have the time and resources (or partners) to maintain the project in the medium and long term? 1. Documentation: Does your project have clear and comprehensible documentation? 1. Contribution Interest: Is there potential interest from other developers to contribute to the project? 1. Complementarity: Are there similar projects out there? If so, does your project add enough value to justify a new development? 1. Licensing: Is the open source license you plan to use suitable for what you expect from your project? Lastly, it’s worth reflecting on **[Eric S. Raymond’s](https://www.amazon.com/stores/Eric-S.-Raymond/author/B000APZT1U)** thoughts from his book, *[The Cathedral and the Bazaar (1999)](https://www.amazon.com/Cathedral-Bazaar-Musings-Accidental-Revolutionary/dp/0596001088/)*, where he outlines the principles of open source development and how an active community can transform a personal project into something influential. Opening and maintaining an open source project is a constant challenge that demands more than just coding. You need to build an engaged community, have a solid documentation strategy, and, above all, have the resilience to keep improving and adapting the project to new needs. > By keeping these guidelines and strategies in mind, you can overcome challenges and ensure the sustainability of your open source project, making sure it stays relevant and useful for a long time. --- # Founders are special; founders need to be in charge **URL**: https://avelino.run/founders-are-special-founders-need-to-be-in-charge/ **Published**: 2024-05-03 **Tags**: founders, in charge, push people, achieve success, Eric Schmidt **Word Count**: 46 words **Summary**: Quote on founders' unique roles and driving success, citing Elon > "Founders are special; founders need to be in charge. The founders are difficult to work with. Push people hard to achieve success. As much as we can dislike Elon's personal behavior, look at what he gets out of people." by [Eric Schmidt](https://www.linkedin.com/in/eric-e-schmidt/) ex CEO at Google --- # Open Source Contributions - May 2024 **URL**: https://avelino.run/foss/2024/05/ **Published**: 2024-05-01 **Word Count**: 404 words **Summary**: May 2024 highlights include 31 contributions across 13 repositories, with significant pushes and active pull request reviews driving project progress. May 2024 was a dynamic month for our development community, showcasing a total of 31 contributions across 13 repositories. The timeline below details key activities, including push events, pull requests, and issue tracking, reflecting our commitment to continuous improvement and collaboration. ## 2024-05-30 - ✅ Reviewed PR in [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): [[ImgBot] Optimize images](https://github.com/moclojer/moclojer.com/pull/4#pullrequestreview-2088654013) (Approved) ## 2024-05-28 - 💬 Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Adding swagger to moclojer](https://github.com/moclojer/moclojer/pull/262#pullrequestreview-2081628324) (Commented) ## 2024-05-23 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [chore: track code coverage in PRs](https://github.com/avelino/awesome-go/pull/5312#pullrequestreview-2073078087) (Changes requested) ## 2024-05-21 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump requests from 2.31.0 to 2.32.0 in the pip group across 1 directory](https://github.com/talkdai/dialog/pull/192#pullrequestreview-2068143090) (Approved) ## 2024-05-20 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.3.6 to 4.4.0](https://github.com/avelino/bots.clj.social/pull/130#pullrequestreview-2065764557) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.13 to 4.6.14](https://github.com/avelino/bots.clj.social/pull/131#pullrequestreview-2065753524) (Approved) ## 2024-05-16 - ✅ Reviewed PR in [moclojer/p001](https://github.com/moclojer/p001): [Load and expose environment on entrypoint](https://github.com/moclojer/p001/pull/2#pullrequestreview-2060889340) (Approved) ## 2024-05-15 - 🔀 Opened PR in [moclojer/p001](https://github.com/moclojer/p001): [WIP: change debian to ubuntu: squid deb](https://github.com/moclojer/p001/pull/1) ## 2024-05-13 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.1.2 to 7.1.3](https://github.com/avelino/bots.clj.social/pull/129#pullrequestreview-2052177862) (Approved) ## 2024-05-12 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adds LCEL and Langserve support ](https://github.com/talkdai/dialog/pull/185#pullrequestreview-2051456736) (Approved) ## 2024-05-10 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [dev/build: distribute the jar for software should use uberjar](https://github.com/moclojer/moclojer/pull/260) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docker imagem error on run ](https://github.com/moclojer/moclojer/issues/259) ## 2024-05-09 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump tqdm from 4.66.2 to 4.66.3 in the pip group across 1 directory](https://github.com/talkdai/dialog/pull/184#pullrequestreview-2048146522) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Error in webhook request](https://github.com/moclojer/moclojer/issues/258) ## 2024-05-06 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.7.5 to 6.7.7](https://github.com/avelino/bots.clj.social/pull/128#pullrequestreview-2040455564) (Approved) ## 2024-05-04 - 🐛 Opened issue in [thunderbird/thunderbird-website](https://github.com/thunderbird/thunderbird-website): [Caldata `Brazil-Holidays.ics` 404](https://github.com/thunderbird/thunderbird-website/issues/572) ## 2024-05-03 - 🔍 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Bug `unauthorized` na criacao de dominio](https://github.com/moclojer/moclojer-app/pull/294#pullrequestreview-2038686007) (Changes requested) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [[ImgBot] Optimize images](https://github.com/avelino/avelino.run/pull/53#pullrequestreview-2037970925) (Approved) ## 2024-05-02 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.1.0 to 7.1.2](https://github.com/avelino/bots.clj.social/pull/127#pullrequestreview-2035599580) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.7.2 to 6.7.5](https://github.com/avelino/bots.clj.social/pull/126#pullrequestreview-2035598828) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.4.1 to 2.4.2](https://github.com/avelino/bots.clj.social/pull/125#pullrequestreview-2035598085) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [moclojer/clojure-to-digitalocean-app-platform](https://github.com/moclojer/clojure-to-digitalocean-app-platform): 2 commit(s) - [See commits](https://github.com/moclojer/clojure-to-digitalocean-app-platform/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 7 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 7 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 12 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [moclojer/clj-rq](https://github.com/moclojer/clj-rq): 22 commit(s) - [See commits](https://github.com/moclojer/clj-rq/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 7 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [talkdai/dialog](https://github.com/talkdai/dialog): 1 commit(s) - [See commits](https://github.com/talkdai/dialog/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [moclojer/p001](https://github.com/moclojer/p001): 18 commit(s) - [See commits](https://github.com/moclojer/p001/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) - 🔨 Push to [moclojer/components](https://github.com/moclojer/components): 1 commit(s) - [See commits](https://github.com/moclojer/components/commits?author=avelino&since=2024-05-01T00:00:00Z&until=2024-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - April 2024 **URL**: https://avelino.run/foss/2024/04/ **Published**: 2024-04-01 **Word Count**: 537 words **Summary**: April 2024 saw 10 repositories active with 41 contributions, including 9 pull requests and 13 issues, showcasing significant community engagement and development progress. Welcome to the April 2024 contributions timeline. This month highlights a robust collaborative effort across 10 repositories, with 41 contributions including open pull requests and newly opened issues, reflecting the community's commitment to enhancing project development. ## 2024-04-30 - 🔍 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [WIP Jedis Implementation](https://github.com/moclojer/moclojer-app/pull/288#pullrequestreview-2031932097) (Changes requested) ## 2024-04-29 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.3.2 to 4.3.3](https://github.com/moclojer/moclojer/pull/257#pullrequestreview-2029244442) (Approved) ## 2024-04-26 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [code style linter, used clojure-lsp](https://github.com/moclojer/moclojer/pull/256) ## 2024-04-25 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [we should be able to create a dev and prod config](https://github.com/moclojer/moclojer/pull/255) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [handler erro exception easy return, but maintains error 500](https://github.com/moclojer/moclojer/pull/254) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/rs/cors from 1.10.1 to 1.11.0](https://github.com/prest/prest/pull/879#pullrequestreview-2022467187) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Improve error handler on the route level](https://github.com/moclojer/moclojer/issues/253) ## 2024-04-24 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [doc/template: write example read dynamic http header request](https://github.com/moclojer/moclojer/pull/252) ## 2024-04-23 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [json output format support](https://github.com/moclojer/moclojer/pull/246#pullrequestreview-2016894198) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [HTTP header parameters as variables](https://github.com/moclojer/moclojer/issues/251) ## 2024-04-22 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [doc/release: update changelog](https://github.com/moclojer/moclojer/pull/250) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.3.1 to 4.3.2](https://github.com/moclojer/moclojer/pull/249#pullrequestreview-2015341333) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.7.0 to 6.7.2](https://github.com/avelino/bots.clj.social/pull/123#pullrequestreview-2014251397) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump turtlequeue/setup-babashka from 1.5.2 to 1.7.0](https://github.com/avelino/bots.clj.social/pull/122#pullrequestreview-2014249909) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.9 to 7.1.0](https://github.com/avelino/bots.clj.social/pull/120#pullrequestreview-2014249151) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.187 to 1.2.188](https://github.com/avelino/bots.clj.social/pull/124#pullrequestreview-2014224853) (Approved) ## 2024-04-20 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [histórico de alteração do yaml - estrutura de dados](https://github.com/moclojer/moclojer-app/issues/279) ## 2024-04-19 - 🔀 Opened PR in [swyxio/devtools-angels](https://github.com/swyxio/devtools-angels): [Add me :D](https://github.com/swyxio/devtools-angels/pull/57) ## 2024-04-18 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Documentation of the moclojer specification (moclojer yaml)](https://github.com/moclojer/moclojer/issues/245) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [logger encoder output format (json)](https://github.com/moclojer/moclojer/issues/244) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [`:webhook :if` é "opcional"](https://github.com/moclojer/moclojer-app/issues/275) ## 2024-04-17 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [log/request: add host request](https://github.com/moclojer/moclojer/pull/242) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump idna from 3.6 to 3.7 in the pip group across 1 directory](https://github.com/talkdai/dialog/pull/179#pullrequestreview-2004819453) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [log request: host/domain improve](https://github.com/moclojer/moclojer/issues/241) ## 2024-04-16 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [`configurar logtail:` centralizar logs em um unico lugar](https://github.com/moclojer/moclojer-app/issues/273) ## 2024-04-08 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [ Do not generate the jar with uberjar, but with `b/jar` instead](https://github.com/moclojer/moclojer/pull/237) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 15 to 16](https://github.com/moclojer/moclojer/pull/238#pullrequestreview-1986976751) (Approved) ## 2024-04-07 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [conditions to control execution, `:if` in spec](https://github.com/moclojer/moclojer/pull/236) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [yaml linter: validar estrutura do webhook](https://github.com/moclojer/moclojer-app/issues/267) ## 2024-04-05 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [webhook: conditions to control execution aka `if`](https://github.com/moclojer/moclojer/issues/235) ## 2024-04-04 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump the pip group across 1 directory with 1 update](https://github.com/talkdai/dialog/pull/167#pullrequestreview-1979378520) (Approved) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [Add support to LangServe with FastAPI](https://github.com/talkdai/dialog/issues/170) ## 2024-04-03 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [status do dns na pagina de detalhe (editor) do mock](https://github.com/moclojer/moclojer-app/issues/265) ## 2024-04-02 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [`:malli.core/invalid-type in []`: erro na validação do yaml - impossibilitando salvar](https://github.com/moclojer/moclojer-app/issues/262) ## Commits - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 43 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2024-04-01T00:00:00Z&until=2024-04-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 13 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-04-01T00:00:00Z&until=2024-04-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 11 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-04-01T00:00:00Z&until=2024-04-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 10 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-04-01T00:00:00Z&until=2024-04-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 4 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-04-01T00:00:00Z&until=2024-04-30T23:59:59Z) - 🔨 Push to [talkdai/dialog-server-tutorial](https://github.com/talkdai/dialog-server-tutorial): 1 commit(s) - [See commits](https://github.com/talkdai/dialog-server-tutorial/commits?author=avelino&since=2024-04-01T00:00:00Z&until=2024-04-30T23:59:59Z) - 🔨 Push to [talkdai/dialog](https://github.com/talkdai/dialog): 1 commit(s) - [See commits](https://github.com/talkdai/dialog/commits?author=avelino&since=2024-04-01T00:00:00Z&until=2024-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The Importance of Business Metrics for Senior Software Engineers **URL**: https://avelino.run/the-importance-of-business-metrics-for-senior-software-engineers/ **Published**: 2024-04-01 **Tags**: Senior Software Engineer, Business Metrics, Technical Leadership, Career Advancement, IT Business Strategy **Word Count**: 692 words **Summary**: Discover how business metrics elevate the career of senior engineers and why they are essential for technical leadership roles ![The Importance of Business Metrics for Senior Software Engineers](/blog/the-importance-of-business-metrics-for-senior-software-engineers.jpg) In the career evolution of a software engineer, an increase in technical skill and the ability to solve complex problems is observed, as well as a significant expansion in the scope of their responsibilities. As engineers advance to more senior roles – including positions like Staff Engineer – it becomes imperative to align even more closely with the business metrics and objectives of the organization. But why is this alignment so crucial, and how does it manifest in practice? ## Understanding the Impact Beyond the Code For engineers at the beginning of their career, the focus tends to be primarily technical: writing clean code, adhering to best practices, and solving the problem at hand. However, as one advances, the ability to understand the "why" behind the code becomes equally important. Senior engineers, and especially Staff Engineers, must be able to comprehend how their technical decisions directly impact business metrics, whether they are aimed at increasing revenue, optimizing costs, or improving user experience. ## Proximity to the Business Being close to business metrics implies active participation in strategy definition processes and decision-making. Engineers at more advanced levels are expected to: * **Understand Business Goals:** Have clarity about what the organization aims to achieve and how technology can be a vector for these objectives; * **Influence Technical Directions:** Use their technical expertise to guide decisions that optimize business outcomes, without neglecting the quality and sustainability of the software; * **Monitor and Interpret Metrics:** Be capable of interpreting performance data and using it to propose improvements and innovations that leverage business objectives. ## Strategic Protagonism The position of Staff Engineer confers a strategic protagonism within organizations. This is a figure that transcends the barriers of specific teams and possesses a holistic view of engineering and its intersection with other areas of the company. This professional should not only be involved in the modeling of technical solutions but is also fundamental for: * **Promoting a Metrics Culture:** Encourage the team to adopt a business-oriented mindset, where success is measured not only in lines of code but in the impact generated; * **Ensure Cross-Functional Alignment:** Facilitate communication between engineering and other areas of the company, ensuring that everyone is moving in the same direction. ## Conclusion As software engineers progress in their careers, there is an increasing need for a deep understanding and direct action on business metrics and objectives. For Staff Engineers, this is not just an expectation but an intrinsic necessity of the role they play. Their success is not measured only by the code they write but by the tangible impact they generate on the company's growth and innovation. After all, at the intersection of technology and business lie both the greatest challenges and the most significant opportunities for creating value. ## References 1. **[Staff Engineer: Leadership beyond the management track](https://www.amazon.com/Staff-Engineer-Leadership-beyond-management/dp/1736417916/)** by Will Larson. This book is an essential guide for engineers looking to advance their careers without necessarily following a management path. Larson discusses the challenges and strategies for becoming an influential staff engineer who works closely with business metrics and significantly contributes to strategic directions; 1. **[Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations](https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations/dp/1942788339/)** by Nicole Forsgren, Jez Humble, and Gene Kim. Essential for understanding how technical, cultural, and business practices impact organizational performance. The book provides research-based insights on how technology can be strategically aligned with business objectives to accelerate growth. 1. **[The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win](https://www.amazon.com/Phoenix-Project-DevOps-Helping-Business/dp/1942788290/)** by Gene Kim, Kevin Behr, and George Spafford. Although presented in a narrative format, this book addresses crucial concepts about how the integration between IT operations and business can solve longstanding problems and boost business success. It's an engaging read that illustrates the importance of interdepartmental collaboration and the impact of technology on business outcomes. 1. **[Measure What Matters: Online Tools for Understanding Customers, Social Media, Engagement, and Key Relationships](https://www.amazon.com/Measure-What-Matters-Understanding-Relationships/dp/0470920106/)** by Katie Delahaye Paine. Although not strictly focused on software engineering, this book provides valuable insights into measuring and interpreting business metrics. The ability to measure success and understand the impact of actions is crucial for senior engineers looking to positively influence the direction of their projects and the organization as a whole. --- # Why We Avoid Leaving the Comfort Zone: Perspectives from Psychology and Neuroscience **URL**: https://avelino.run/why-we-avoid-leaving-the-comfort-zone-perspectives-from-psychology-and-neuroscience/ **Published**: 2024-03-03 **Tags**: comfort zone, software engineer, evolutionary adaptation, professional burnout, social Expectations **Word Count**: 669 words **Summary**: Dive into the multidimensional factors hindering software engineers from leaving their comfort zones. From evolutionary adaptation, energetic cost of change, anxiety, professional burnout to social expectations, get insights on overcoming barriers for personal and professional growth. ![Why We Avoid Leaving the Comfort Zone: Perspectives from Psychology and Neuroscience](/blog/why-we-avoid-leaving-the-comfort-zone-perspectives-from-psychology-and-neuroscience.jpg) > A large part of the people who read my texts are software engineers, so I decided to write speaking to them (software engineers), most likely you! 😊 Software engineers are no exception when it comes to avoiding the unknown and uncertainty. Biological, psychological, and sociocultural inclinations interact to keep software engineers in a psychological comfort zone. ## Evolutionary Adaptation We humans naturally favor the safety of familiarity. Our evolutionary past has shaped our brain to favor the "known" at the expense of the *"unknown"*. For a software engineer, this may manifest as a hesitation to learn a new programming language or adopt new methodologies. ["Motivation for Permanence: Evolution and Survival"](https://www.latercera.com/tendencias/noticia/75-cm-mas-estudio-revela-la-distancia-zona-confort-mantienen-los-peatones/450360/?source=avelino.run) (in Spanish), the article explores the evolution of the comfort zone, by testing pedestrians walking on a busy street. It suggests that the comfort zone is an evolutionary adaptation that has assisted our survival. Whenever pedestrians walk through a busy street, they are continuously avoiding collisions with incoming pedestrians. Before an encounter ends in a collision, the pedestrian decides - unconsciously - to change their route to prevent colliding with another pedestrian. Physicists from the Eindhoven University of Technology, in collaboration with researchers from the United States and Italy, analyzed 5 million pedestrian movements at the Eindhoven train station in the Netherlands. Thanks to the research, the experts discovered that people prefer to maintain - on average - a distance of at least 75 centimeters. ## The Energetic Cost of Change Neuroscience shows that the brain prefers to conserve energy. When a software engineer needs to learn a new technology or change their programming style, it forces the brain to create new neural connections and discard the old ones. This is more difficult and requires more energy than simply following what is already known. ["Homeostasis and Balance: Biology of the Comfort Zone"](https://javiermorodo.com/la-ciencia-de-sentirse-incomodo/?soruce=avelino.run) (in Spanish), the article explores why it is essential to be in an uncomfortable zone seeking learning and professional evolution, emphasizing that the comfort zone is a state of biological balance that the body tries to maintain. ## Anxiety and Professional Burnout Software engineers are often under pressure to solve complex problems and meet rigorous deadlines *(this is a controversial point that I need to write another blog post about, in many moments we have the possibility of saying **"no"**, but we can't or are afraid to say it)*, which can already lead them to high levels of stress. When the idea of leaving the comfort zone and embracing novelty is added to this load, it can result in overwhelming anxiety or even professional burnout. ["Anxiety and Professional Burnout as Key Factors in the Comfort Zone"](https://www.abc.es/bienestar/psicologia-sexo/abci-zona-confort-201909241614_noticia.html?source=avelino.run) (in Spanish), the article explores how ~~anxiety~~ *(crossed out because we need to learn to deal with our anxieties)* and **professional burnout** can be key factors that keep people in their comfort zone. ## Social and Structural Expectations Technology work environments are often highly structured with clear expectations. This can make software engineers stuck in certain norms and routines, making it more challenging to step out of the comfort zone. In addition, the need to keep up-to-date with rapidly changing technological innovations can sometimes cause them to opt for technologies with which they are already familiar to meet time and productivity demands. ["Comfort Zone as a Social Construct"](https://www.abc.es/bienestar/psicologia-sexo/abci-zona-confort-201909241614_noticia.html?source=avelino.run) (in Spanish), the article explores how the comfort zone is a social construct that can be shaped by societal expectations and norms. --- Several factors collaborate to keep software engineers within their comfort zones. Recognizing and understanding these elements may be the first step to overcoming the barriers to personal and professional growth. It is necessary to know oneself and ask difficult questions, such as: * What am I avoiding? * If it goes wrong, what can I do to recover? * What can I do to feel safer when stepping out of the comfort zone? > **note:** if it goes *"wrong"*, you can go back to where you came from, but with a wealth of knowledge and experience that you would never have had if you had not faced your fears. --- # Open Source Contributions - March 2024 **URL**: https://avelino.run/foss/2024/03/ **Published**: 2024-03-01 **Word Count**: 368 words **Summary**: March 2024 saw 7 repositories with 3 new pull requests, 10 reviews, and 9 issues, showcasing significant collaborative progress and enhancement across projects. In March 2024, the development landscape was bustling with activity across 7 repositories. This timeline highlights key contributions, including new pull requests, reviews, and issues that reflect ongoing collaboration and innovation within the community. ## 2024-03-30 - ✅ Reviewed PR in [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): [[ImgBot] Optimize images](https://github.com/moclojer/moclojer.com/pull/3#pullrequestreview-1970031360) (Approved) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [feature: sync em repositório git](https://github.com/moclojer/moclojer-app/issues/257) ## 2024-03-28 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 4.0.1 to 4.0.2](https://github.com/moclojer/moclojer/pull/233#pullrequestreview-1965821270) (Approved) ## 2024-03-27 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [validar ser o json de retorno do body é valido quando content-type é `application/json`](https://github.com/moclojer/moclojer-app/issues/253) ## 2024-03-18 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.4.0 to 2.4.1](https://github.com/avelino/bots.clj.social/pull/115#pullrequestreview-1942526651) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.3.5 to 4.3.6](https://github.com/avelino/bots.clj.social/pull/118#pullrequestreview-1942525574) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.182 to 1.2.187](https://github.com/avelino/bots.clj.social/pull/116#pullrequestreview-1942524700) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.6.1 to 6.7.0](https://github.com/avelino/bots.clj.social/pull/117#pullrequestreview-1942513348) (Approved) ## 2024-03-15 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [mock/create: não está publicando dns](https://github.com/moclojer/moclojer-app/issues/241) ## 2024-03-14 - 💬 Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adds testing to abstract llm and simplifies fallback handling](https://github.com/talkdai/dialog/pull/162#pullrequestreview-1937252471) (Commented) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [teste manualmente do fluxo completo - deixar o produto usável](https://github.com/moclojer/moclojer-app/issues/240) ## 2024-03-13 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [concat cols correctly for embedding generation](https://github.com/talkdai/dialog/pull/153#pullrequestreview-1935076705) (Approved) ## 2024-03-12 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [ambiente de teste que identifique problemas antes do software ir para produção ](https://github.com/moclojer/moclojer-app/issues/237) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [login: link email mandando pagina login (digitar e-mail)](https://github.com/moclojer/moclojer-app/issues/236) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [login com "pagina em branco"](https://github.com/moclojer/moclojer-app/issues/235) ## 2024-03-11 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [db/session: use context manager](https://github.com/talkdai/dialog/pull/150) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [PendingRollbackError](https://github.com/talkdai/dialog/issues/149) ## 2024-03-07 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [load_csv/feat: support multi csv field](https://github.com/talkdai/dialog/pull/147) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [embedding multiple fields, not just content/document](https://github.com/talkdai/dialog/issues/146) ## 2024-03-06 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [not having a recommended question in the know base](https://github.com/talkdai/dialog/pull/144) - 💬 Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [not having a recommended question in the know base](https://github.com/talkdai/dialog/pull/144#pullrequestreview-1920545815) (Commented) ## 2024-03-04 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 4.0.0 to 4.0.1](https://github.com/moclojer/moclojer/pull/232#pullrequestreview-1915136459) (Approved) ## Commits - 🔨 Push to [talkdai/dialog](https://github.com/talkdai/dialog): 12 commit(s) - [See commits](https://github.com/talkdai/dialog/commits?author=avelino&since=2024-03-01T00:00:00Z&until=2024-03-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 4 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-03-01T00:00:00Z&until=2024-03-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-03-01T00:00:00Z&until=2024-03-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 2 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-03-01T00:00:00Z&until=2024-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-03-01T00:00:00Z&until=2024-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - February 2024 **URL**: https://avelino.run/foss/2024/02/ **Published**: 2024-02-01 **Word Count**: 506 words **Summary**: February 2024 saw 10 repositories contribute 41 total events, including 8 pull requests and 20 reviews, enhancing collaboration and productivity. Explore the timeline of contributions for February 2024, highlighting significant activities across 10 repositories. This month featured a total of 41 events, including 8 new pull requests and 20 reviews, showcasing increased collaboration and development progress in the community. ## 2024-02-28 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [`load_csv`: clear all table rows](https://github.com/talkdai/dialog/pull/141) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Better plugins installation](https://github.com/talkdai/dialog/pull/142#pullrequestreview-1906271441) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [fix fallback usage](https://github.com/talkdai/dialog/pull/139#pullrequestreview-1905715279) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/urfave/negroni/v3 from 3.0.0 to 3.1.0](https://github.com/prest/prest/pull/866#pullrequestreview-1905718199) (Approved) ## 2024-02-26 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.5.2 to 6.6.1](https://github.com/avelino/bots.clj.social/pull/111#pullrequestreview-1900982753) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.3.4 to 2.4.0](https://github.com/avelino/bots.clj.social/pull/112#pullrequestreview-1900982008) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.3.4 to 4.3.5](https://github.com/avelino/bots.clj.social/pull/113#pullrequestreview-1900981194) (Approved) ## 2024-02-23 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [add samples for langsmith logging](https://github.com/talkdai/dialog/pull/123#pullrequestreview-1897698258) (Approved) ## 2024-02-22 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Copy static folder](https://github.com/talkdai/dialog/pull/121#pullrequestreview-1896741254) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Change document retrieval to cosine distances](https://github.com/talkdai/dialog/pull/116#pullrequestreview-1896284584) (Approved) ## 2024-02-21 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [test: uri with multi path](https://github.com/moclojer/moclojer/pull/231) - 💬 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [feat: compile release bundle only once](https://github.com/moclojer/moclojer-app/pull/214#pullrequestreview-1892603008) (Commented) ## 2024-02-20 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [settings: llm config via config](https://github.com/talkdai/dialog/pull/113) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Dont run docker build job on forks](https://github.com/talkdai/dialog/pull/112#pullrequestreview-1890622790) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.179 to 1.2.182](https://github.com/avelino/bots.clj.social/pull/110#pullrequestreview-1889698445) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.12 to 4.6.13](https://github.com/avelino/bots.clj.social/pull/109#pullrequestreview-1889697830) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.3.3 to 4.3.4](https://github.com/avelino/bots.clj.social/pull/107#pullrequestreview-1889697352) (Approved) ## 2024-02-19 - 🔀 Opened PR in [LGUG2Z/helix-vim](https://github.com/LGUG2Z/helix-vim): [save and quit (`ZZ`)](https://github.com/LGUG2Z/helix-vim/pull/30) ## 2024-02-18 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [add sentry support, used raven-clj 1.7.0](https://github.com/moclojer/moclojer/pull/229) ## 2024-02-16 - 🔀 Opened PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [improve text on the signing screen, where the magic link is sent](https://github.com/moclojer/moclojer-app/pull/207) ## 2024-02-15 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [upgrade langchain to 0.1.7](https://github.com/talkdai/dialog/pull/104) - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [fixed load csv if empty db](https://github.com/talkdai/dialog/pull/100) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump the pip group across 1 directories with 1 update](https://github.com/talkdai/dialog/pull/103#pullrequestreview-1883755614) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump aiohttp from 3.9.0 to 3.9.2](https://github.com/talkdai/dialog/pull/102#pullrequestreview-1883536098) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump fastapi from 0.104.1 to 0.109.1](https://github.com/talkdai/dialog/pull/101#pullrequestreview-1883535085) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 12.3 to 12.5](https://github.com/moclojer/moclojer/pull/228#pullrequestreview-1881645347) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.3.0 to 4.3.1](https://github.com/moclojer/moclojer/pull/227#pullrequestreview-1881644149) (Approved) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [empty database is not populating the db](https://github.com/talkdai/dialog/issues/99) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [AWarning: Did not recognize type 'vector' of column 'embedding'](https://github.com/talkdai/dialog/issues/98) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [langchain version upgrade, to `+v0.1.7`](https://github.com/talkdai/dialog/issues/97) ## 2024-02-13 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Tag Google Analytics](https://github.com/moclojer/moclojer-app/issues/204) ## 2024-02-10 - 🐛 Opened issue in [vim-airline/vim-airline-themes](https://github.com/vim-airline/vim-airline-themes): [theme rose pine support](https://github.com/vim-airline/vim-airline-themes/issues/280) ## 2024-02-07 - 💬 Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Fix Dockerfile](https://github.com/talkdai/dialog/pull/88#pullrequestreview-1868659535) (Commented) ## 2024-02-01 - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [plugin: error initial load](https://github.com/talkdai/dialog/issues/87) ## Commits - 🔨 Push to [talkdai/dialog](https://github.com/talkdai/dialog): 20 commit(s) - [See commits](https://github.com/talkdai/dialog/commits?author=avelino&since=2024-02-01T00:00:00Z&until=2024-02-29T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 14 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-02-01T00:00:00Z&until=2024-02-29T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 9 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2024-02-01T00:00:00Z&until=2024-02-29T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 6 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-02-01T00:00:00Z&until=2024-02-29T23:59:59Z) - 🔨 Push to [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): 3 commit(s) - [See commits](https://github.com/moclojer/moclojer-app/commits?author=avelino&since=2024-02-01T00:00:00Z&until=2024-02-29T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-02-01T00:00:00Z&until=2024-02-29T23:59:59Z) - 🔨 Push to [talkdai/dialog-api-key](https://github.com/talkdai/dialog-api-key): 1 commit(s) - [See commits](https://github.com/talkdai/dialog-api-key/commits?author=avelino&since=2024-02-01T00:00:00Z&until=2024-02-29T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Atypical Journey: From Anonymous Silence to CTO Stage (on Buser) **URL**: https://avelino.run/from-anonymous-silence-to-cto-stage/ **Published**: 2024-01-07 **Tags**: cto, career, leadership, buser, impostor syndrome **Word Count**: 568 words **Summary**: My path from software engineer to Chief Technology Officer (CTO) at Buser, with some reflections on what I'm learning in the process. ![embark on this journey to become a buser cto with me](/blog/from-anonymous-silence-to-cto-stage-buser.jpg) While the path to the position of Chief Technology Officer (CTO) may seem similar to many, each story is uniquely extraordinary, colored by the unique combination of experiences, struggles and intensive learning. In *["Invisible Learning"](https://www.researchgate.net/publication/284499397_Invisible_Learnings_A_commentary_on_John_Hattie%27s_book_visible_learning_A_synthesis_of_over_800_metaanalyses_relating_to_achievement)*, John Seely Brown and David Thomas discuss how learning is often an invisible path, rooted not only in formalities, but also deeply woven into the fabric of our life experiences. This is my story within [Buser](https://www.buser.com.br/). ## From Anonymity to Center Stage I joined Buser, not as CTO, but as a member of the software engineering team. Previously, I had been CTO at several companies and was enjoying the relative obscurity of this more reserved role, shying away from the limelight that usually accompanies the CTO function. In one of my first one-to-one conversations with [Tony Lampada](https://www.linkedin.com/in/tonylampada/) *- Buser's CTO at the time -* he expressed his desire to return to the engineering team, sharing his dissatisfaction with the CTO position. This is a relatively common move in technology, as described by Michael Lopp in Managing Humans. In response, I referred him to three other potential candidates, emphasizing that I wasn't interested. > was enjoying my moment of *"anonymity"* and didn't want to return to center stage *(the CTO is constantly in the spotlight)*, it's worth reading [this blogpost](https://avelino.run/qual-o-glamour-em-ser-ceo/) (sorry for being in pt-BR). ## When the Unthinkable Starts to Rumble - reflection is the way Daniel Kahneman points out in *["Fast and Slow: Two Ways of Thinking"](https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman-ebook/dp/B00555X8OA/)*, sometimes **System 2** (our slow and thoughtful thinking)*, can be born out of unexpected encounters. The conversation with Tony remained etched in my mind for two months. I decided to find an answer for myself as to why the idea of becoming CTO seemed to have taken root in my consciousness. One Monday, I acknowledged my insecurity to Tony: **"I'm sure I'm not the best person to lead a technology team of 180 people, but if you think I can handle it and learn in a timely manner, let's talk!"**. ## Continuous Learning as CTO Despite my initial doubts, I accepted the role, aware that I had a lot to learn. Inspired by Carol Dweck in *["Mindset: The New Psychology of Success"](https://www.amazon.com/Mindset-Psychology-Carol-S-Dweck-ebook/dp/B000FCKPHG/)*, adopting a growth mindset is crucial. I recognize that I'm not the best, I'm still on a journey of constant learning and improvement. I admire the talents we have at Buser, some of the best engineers I've ever met *(new professionals, but with the will to *"make it happen"*, with a great thirst for learning)* and I remain convinced that each new company represents a "new flight". Bruce Mau emphasizes in ["Massive Limit"](https://www.youtube.com/watch?v=7pDJJQCM3y8), to use previous knowledge as a basis, but **never assume it as absolute truth**. A previous history as a CTO does not equate to a perfect transition to the next one - it *requires careful adaptation to the new environment*. In short, my history in the technology hierarchies is a mosaic of reflections, uncertainties, learnings and adaptations. To all aspiring tech leaders, the advice is: be open to unforeseen challenges, welcome constant learning and the humility to adapt and mold to the ever-changing landscape. A brilliant, perplexed and eager-to-learn spirit is the true engine of growth. Of course I was ~~"afraid"~~ (created by my mental monsters), the difference was that I transformed the fear into energy to move me forward, not to block me/freeze me. > **"if it doesn't scare you, it's not big enough"** --- # Open Source Contributions - January 2024 **URL**: https://avelino.run/foss/2024/01/ **Published**: 2024-01-01 **Word Count**: 473 words **Summary**: January 2024 saw 13 repositories contribute 38 events, including 4 pull requests and 8 issues, driving innovation and collaboration in the open-source community. Explore the contributions made in January 2024 across 13 repositories. This timeline highlights key events, including pull requests, issues, and push activities, showcasing the vibrant collaboration and continuous improvement within the open-source ecosystem. ## 2024-01-29 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.2.0 to 4.3.0](https://github.com/moclojer/moclojer/pull/224#pullrequestreview-1849199759) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.8 to 7.0.9](https://github.com/avelino/bots.clj.social/pull/106#pullrequestreview-1848050684) (Approved) - 🐛 Opened issue in [haydenull/logseq-plugin-agenda](https://github.com/haydenull/logseq-plugin-agenda): [todoist: automatic synchronization](https://github.com/haydenull/logseq-plugin-agenda/issues/287) - 🐛 Opened issue in [haydenull/logseq-plugin-agenda](https://github.com/haydenull/logseq-plugin-agenda): [todoist: synchronize comments to logseq](https://github.com/haydenull/logseq-plugin-agenda/issues/286) ## 2024-01-24 - 💬 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [feat: use proxy on cloudflare requests](https://github.com/moclojer/moclojer-app/pull/176#pullrequestreview-1840148632) (Commented) ## 2024-01-22 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 3.3.3 to 4.0.0](https://github.com/moclojer/moclojer/pull/221#pullrequestreview-1837101637) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.1.0 to 4.2.0](https://github.com/moclojer/moclojer/pull/222#pullrequestreview-1837040026) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 14 to 15](https://github.com/moclojer/moclojer/pull/223#pullrequestreview-1837039398) (Approved) ## 2024-01-21 - 🐛 Opened issue in [haydenull/logseq-plugin-agenda](https://github.com/haydenull/logseq-plugin-agenda): [Subscription: create a record in journal (sync)](https://github.com/haydenull/logseq-plugin-agenda/issues/283) ## 2024-01-18 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [[FEATURE] : added ``/impl`` directory for algorithms implementation and other utility Go programs.](https://github.com/avelino/awesome-go/pull/5172#pullrequestreview-1829831708) (Changes requested) ## 2024-01-16 - 🐛 Opened issue in [pacifiquem/awesome-go](https://github.com/pacifiquem/awesome-go): [help maintain awesome-go](https://github.com/pacifiquem/awesome-go/issues/45) ## 2024-01-15 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 12.2 to 12.3](https://github.com/moclojer/moclojer/pull/218#pullrequestreview-1822137762) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 3.3.2 to 3.3.3](https://github.com/moclojer/moclojer/pull/220#pullrequestreview-1822104311) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 4.0.0 to 4.1.0](https://github.com/moclojer/moclojer/pull/219#pullrequestreview-1822103989) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.3.2 to 4.3.3](https://github.com/avelino/bots.clj.social/pull/105#pullrequestreview-1821239543) (Approved) ## 2024-01-10 - 🔀 Opened PR in [logseq/marketplace](https://github.com/logseq/marketplace): [add summarize plugin - tldr.chat](https://github.com/logseq/marketplace/pull/512) ## 2024-01-09 - ✅ Reviewed PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [Use tldr.chat public API](https://github.com/avelino/logseq-summarize/pull/3#pullrequestreview-1810534404) (Approved) ## 2024-01-08 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [change version local set](https://github.com/moclojer/moclojer/pull/216) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [moclojer/log: create interceptor request-log](https://github.com/moclojer/moclojer/pull/215) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 12.1 to 12.2](https://github.com/moclojer/moclojer/pull/217#pullrequestreview-1809525000) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [improve request logs](https://github.com/moclojer/moclojer/issues/214) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [executar os testes quando tiver alteração - monorepo e seus desafios](https://github.com/moclojer/moclojer-app/issues/150) ## 2024-01-07 - ✅ Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [ start moclojer foss](https://github.com/moclojer/moclojer-app/pull/120#pullrequestreview-1807658337) (Approved) ## 2024-01-06 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [fix typo on function](https://github.com/moclojer/moclojer/pull/213#pullrequestreview-1807099265) (Approved) ## 2024-01-05 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docker: fix the problem of uploading/running the docker image](https://github.com/moclojer/moclojer/pull/211) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docker no main manifest attribute, in /app/moclojer.jar](https://github.com/moclojer/moclojer/issues/210) - 🐛 Opened issue in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [use moclojer to mock api (tldr.chat endpoints)](https://github.com/avelino/logseq-summarize/issues/2) ## 2024-01-04 - ✅ Reviewed PR in [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): [Bump browserify-sign from 4.2.1 to 4.2.2](https://github.com/avelino/logseq-summarize/pull/1#pullrequestreview-1803419544) (Approved) ## 2024-01-01 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.5.1 to 6.5.2](https://github.com/avelino/bots.clj.social/pull/104#pullrequestreview-1799770507) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [avelino/logseq-libs](https://github.com/avelino/logseq-libs): 2 commit(s) - [See commits](https://github.com/avelino/logseq-libs/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [moclojer/codemirror-cljs](https://github.com/moclojer/codemirror-cljs): 2 commit(s) - [See commits](https://github.com/moclojer/codemirror-cljs/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 10 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [logseq/marketplace](https://github.com/logseq/marketplace): 1 commit(s) - [See commits](https://github.com/logseq/marketplace/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 3 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) - 🔨 Push to [avelino/logseq-summarize](https://github.com/avelino/logseq-summarize): 16 commit(s) - [See commits](https://github.com/avelino/logseq-summarize/commits?author=avelino&since=2024-01-01T00:00:00Z&until=2024-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Challenge, Comfort and Growth: The Art of Being Addicted to Change **URL**: https://avelino.run/challenge-comfort-and-growth-the-art-of-being-addicted-to-change/ **Published**: 2023-12-28 **Tags**: change, growth, carreer, professional evolution, comfort zone, personal development **Word Count**: 388 words **Summary**: Explore the fascinating universe of someone who loves change, understands discomfort as an ally and that leaving the comfort zone is always an opportunity for growth. Discover how failure is just a starting point and not an end. ![Challenge, Comfort and Growth: The Art of Being Addicted to Change](/blog/2023-12-28-challenge-comfort-and-growth-the-art-of-being-addicted-to-change.jpg) Change is a constant in my life, and I accept each one with a resilient countenance and an open heart. The discomfort generated by each transformation is not an enemy, but a stimulus that I use to improve my environment and who I am on the inside. If a change doesn't produce the expected results, instead of giving in to discouragement, I return to where I started. I treat each failure as a learning opportunity, a challenge to improve my understanding and adapt my next agenda for change. **In general, there are three types of person when we talk about change:** 1. **Those who are afraid of change:** These individuals feel paralyzed when faced with a new situation. The fear of the unknown freezes their steps, preventing them from leaving their current position; 2. **Those who avoid change:** These people can manage change, but prefer to avoid it as much as possible. Change is only seen as a last resort; 3. **Change addicts:** This third type - my type - is the one who takes change naturally. We feel a certain enthusiasm in the face of the unknown, and we love the "chill in the belly" caused by the expectation of the new. I certainly fall into the category of **change addicts**. In the book *["The Courage to Be Imperfect"](https://www.amazon.com/coragem-ser-imperfeito-vulnerabilidade-vergonha-ebook/dp/B00EP0NNG4/)* by **[Brené Brown](https://www.amazon.com/stores/Bren%C3%A9-Brown/author/B001JP45BA)**, there's a quote that I love: *"Vulnerability is not knowing how to control or predict. It's the ability to breathe through our insecurity and make it happen anyway"*. This reflects what it's like to be a person addicted to change: we face the unknown, accept our vulnerability and make the magic happen. It's amazing how much we can grow when we embrace change. So challenge yourself, get out of your comfort zone and see how surprising life can be. Vulnerability can be a real catalyst for personal growth and authenticity. When we allow ourselves to be vulnerable, we create space to embrace our uncertainties and face our deepest fears. By exposing ourselves in this way, we demonstrate courage and authenticity, strengthening our human connections and encouraging mutual respect and empathy. In addition, vulnerability puts us in a state of openness that is conducive to learning, evolution and innovation. Therefore, being vulnerable is not a weakness, but a strength that can be harnessed to become better versions of ourselves. --- # Zero acceleration **URL**: https://avelino.run/zero-acceleration/ **Published**: 2023-12-20 **Tags**: quote **Word Count**: 65 words **Summary**: Drip by drip. Keep showing up, every day. One is better than zero I have been pondering about the ideas of two articles: * [Enthusiasm is Common. Endurance is Rare](https://elevatesociety.com/enthusiasm-is-common-endurance-is/) * [What is Your “Average Speed” in Your Life, Your Health, and Your Work?](https://jamesclear.com/average-speed) Both gravitates to the same idea, zero acceleration. The key is to keep a sustainable rhythm. **BUT** never zero acceleration at zero speed. Drip by drip. Keep showing up, every day. One is better than zero. --- # Open Source Contributions - December 2023 **URL**: https://avelino.run/foss/2023/12/ **Published**: 2023-12-01 **Word Count**: 621 words **Summary**: December 2023 saw 16 repositories contribute 52 actions, including 7 pull requests and 16 issues, driving progress and collaboration. Explore the December 2023 timeline showcasing significant contributions across 16 repositories. With a total of 52 actions, including 7 pull requests and 16 issues, this month highlights the collaborative efforts and advancements within the community. ## 2023-12-31 - 🐛 Opened issue in [extractus/feed-extractor](https://github.com/extractus/feed-extractor): [fetch error: cert invalid ](https://github.com/extractus/feed-extractor/issues/121) - 🐛 Opened issue in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [fetch error: cert invalid ](https://github.com/avelino/bots.clj.social/issues/103) ## 2023-12-28 - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [[ImgBot] Optimize images](https://github.com/avelino/avelino.run/pull/51#pullrequestreview-1798336998) (Approved) - ✅ Reviewed PR in [avelino/avelino](https://github.com/avelino/avelino): [u8views pixel](https://github.com/avelino/avelino/pull/2#pullrequestreview-1798330971) (Approved) - 🐛 Opened issue in [matheusfrancisco/berry](https://github.com/matheusfrancisco/berry): [markdown header fields support](https://github.com/matheusfrancisco/berry/issues/10) ## 2023-12-27 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Edit watcher server to restart the server when file change](https://github.com/moclojer/moclojer/pull/209#pullrequestreview-1797285200) (Approved) ## 2023-12-26 - 🐛 Opened issue in [matheusfrancisco/berry](https://github.com/matheusfrancisco/berry): [berry cli: native image distro (binary)](https://github.com/matheusfrancisco/berry/issues/9) ## 2023-12-25 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.11 to 4.6.12](https://github.com/avelino/bots.clj.social/pull/102#pullrequestreview-1795943955) (Approved) ## 2023-12-23 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [WIP doc/swagger support](https://github.com/moclojer/moclojer/pull/207) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [WIP: swagger/ui support](https://github.com/moclojer/moclojer/pull/206) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [automatically generate documentation - openAPI (swagger)](https://github.com/moclojer/moclojer/issues/205) ## 2023-12-21 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fix stale repos test](https://github.com/avelino/awesome-go/pull/5127#pullrequestreview-1792818518) (Approved) ## 2023-12-20 - 🔍 Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Modularized LLM model and changes from PR #76](https://github.com/talkdai/dialog/pull/80#pullrequestreview-1790414834) (Changes requested) ## 2023-12-19 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [[issue 199] fix error unsupported operation exception](https://github.com/moclojer/moclojer/pull/204#pullrequestreview-1789760871) (Approved) ## 2023-12-18 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump github/codeql-action from 2 to 3](https://github.com/moclojer/moclojer/pull/203#pullrequestreview-1787228827) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 3.1.3 to 4.0.0](https://github.com/moclojer/moclojer/pull/202#pullrequestreview-1787227584) (Approved) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [atualizar logo - esta com a versão antiga](https://github.com/moclojer/moclojer-app/issues/122) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [gravatar: coloca foto de profile no dash](https://github.com/moclojer/moclojer-app/issues/121) ## 2023-12-15 - 🔀 Opened PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [fixed mock link in sidebar](https://github.com/moclojer/moclojer-app/pull/117) - 🔀 Opened PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [fixed/view: login email sent](https://github.com/moclojer/moclojer-app/pull/115) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Update README.md](https://github.com/moclojer/moclojer/pull/197#pullrequestreview-1785048029) (Approved) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [link do mock no sidebar esta com link errado](https://github.com/moclojer/moclojer-app/issues/116) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [login: pagina de envio de e-mail "torta"](https://github.com/moclojer/moclojer-app/issues/114) ## 2023-12-12 - 💬 Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Improves prompting for RAG, enabling better handling on messages that we have no context and adds plugin system](https://github.com/talkdai/dialog/pull/76#pullrequestreview-1778417590) (Commented) ## 2023-12-11 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [swagger in docs](https://github.com/moclojer/moclojer/issues/196) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [sentry support](https://github.com/moclojer/moclojer/issues/195) ## 2023-12-10 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [specify support for the use of frameworks ](https://github.com/moclojer/moclojer/pull/190) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [specify support for the use of frameworks ](https://github.com/moclojer/moclojer/issues/191) ## 2023-12-09 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [structure to receive vector with configuration not "only" file in FS](https://github.com/moclojer/moclojer/pull/189) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [create server with vector list base](https://github.com/moclojer/moclojer/issues/188) ## 2023-12-06 - 💬 Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adding WhatsApp serializer and default structure for webhooks](https://github.com/talkdai/dialog/pull/69#pullrequestreview-1767819147) (Commented) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [refactor llm configs ](https://github.com/talkdai/dialog/pull/66#pullrequestreview-1766453698) (Approved) ## 2023-12-04 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.7 to 7.0.8](https://github.com/avelino/bots.clj.social/pull/101#pullrequestreview-1761798896) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Bruno uses plain-text files organized in related folders, in order to declare an API client tester.](https://github.com/moclojer/moclojer/issues/187) ## 2023-12-03 - ✅ Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [add build and dockerfile and app.yml](https://github.com/moclojer/moclojer-app/pull/88#pullrequestreview-1761353661) (Approved) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Documentar como subir o ambiente de desenvolvimento](https://github.com/moclojer/moclojer-app/issues/89) - 🐛 Opened issue in [rose-pine/rose-pine-theme](https://github.com/rose-pine/rose-pine-theme): [New theme for Rio Terminal](https://github.com/rose-pine/rose-pine-theme/issues/126) ## 2023-12-02 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Bump aiohttp from 3.8.6 to 3.9.0](https://github.com/talkdai/dialog/pull/70#pullrequestreview-1760844043) (Approved) ## 2023-12-01 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [devcontainer support ](https://github.com/talkdai/dialog/pull/68) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [buserbrasil/connexion-faker](https://github.com/buserbrasil/connexion-faker): 1 commit(s) - [See commits](https://github.com/buserbrasil/connexion-faker/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [rose-pine/rio-terminal](https://github.com/rose-pine/rio-terminal): 3 commit(s) - [See commits](https://github.com/rose-pine/rio-terminal/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [talkdai/dialog-whatsapp](https://github.com/talkdai/dialog-whatsapp): 2 commit(s) - [See commits](https://github.com/talkdai/dialog-whatsapp/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 30 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 3 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): 12 commit(s) - [See commits](https://github.com/moclojer/moclojer-app/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 2 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 7 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [talkdai/dialog](https://github.com/talkdai/dialog): 10 commit(s) - [See commits](https://github.com/talkdai/dialog/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) - 🔨 Push to [avelino/estimaai.com](https://github.com/avelino/estimaai.com): 1 commit(s) - [See commits](https://github.com/avelino/estimaai.com/commits?author=avelino&since=2023-12-01T00:00:00Z&until=2023-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Tech-Enabled Companies Shaping the Future **URL**: https://avelino.run/tech-enabled-companies-shaping-the-future/ **Published**: 2023-12-01 **Tags**: startups, tech-enabled, Business Success, Business Strategy, digital transformation **Word Count**: 669 words **Summary**: Discover how tech-enabled companies like Airbnb, Uber and Amazon are innovating and scaling rapidly, as we explore success beyond technology in startups ![Tech-Enabled Companies Shaping the Future](/blog/tech-enabled-companies-shaping-the-future.png) In the digital age we live in today, technology plays an essential role in all industries. Companies that use technology as a key part of their business strategy are at a competitive advantage, driving innovation and achieving success at a rapid pace. These companies are called **"tech-enabled companies"**. ## What is a tech-enabled company? A tech-enabled company is one that incorporates technology into its _DNA_. It recognizes the importance of adapting and leveraging technological solutions to optimize its internal operations, boost efficiency and improve the customer experience. Technology is not just a support for these companies, but a central element of their **business strategy**. The difference between a **tech-enabled company** and a **technology company** lies in its focus and core business nature. A tech-enabled company incorporates technology into its operations and strategies to improve efficiency, process automation and the customer experience. Technology is a support or enabler for achieving its business objectives. On the other hand, a technology company _(or "tech" company)_ has technology as its main product or service. It develops and offers innovative technological solutions, such as software, hardware, applications or platforms, which are the essential elements of its business model. In short, while a "tech-enabled" company uses technology to enhance its business, a technology company has its essence and value proposition based on the creation and supply of technological products or services. ## Advantages of tech-enabled companies Tech-enabled companies enjoy several competitive advantages. By adopting advanced technological solutions, they can: 1. **Automate tasks and processes:** Technology enables the automation of repetitive tasks, which increases productivity and frees up resources for more strategic activities; 2. **Scalability:** With the right technology, companies can easily scale their business to meet growing demand, without compromising quality or efficiency; 3. **Agility and adaptation:** Tech-enabled companies are able to quickly adapt to changes in market demands and emerging trends, seizing growth opportunities and overcoming challenges; 4. **Innovation:** Technology is a catalyst for innovation. Tech-enabled companies are constantly exploring new solutions and ideas to improve their products, services and processes. ## Examples of successful tech-enabled companies Several companies stand out as examples of success in the tech-enabled world. Here are four of them: * **Buser:** revolutionized the travel sector by employing a digital platform to connect travelers to road transport companies. Just like _Airbnb and Uber_, using technology to offer a more affordable, convenient and personalized experience to its users; * **Airbnb:** revolutionized the hospitality industry by using a digital platform to connect people who want to rent spaces with those who have accommodations available. Technology enabled Airbnb to scale globally and create a more convenient and personalized experience for travelers; * **Uber:** combining mobile technology, geolocation and electronic payments, Uber transformed the transportation industry. Its platform connects passengers to drivers, providing a more affordable, convenient and flexible service than traditional taxis; * **Amazon:** started as an online bookstore and became an e-commerce giant. The company invested heavily in technology to automate and optimize its supply chain, improve the customer experience and offer a variety of products at competitive prices. ## Not only "tech" lives the success of startups Although **tech-enabled** companies have expanded their possibilities for growth and innovation, it is important to highlight that not all startups need to be _technology companies to succeed_. Sectors such as food, health and services also offer significant opportunities for startups that offer innovative and differentiated solutions. Startups in the food sector can focus on sustainable ingredients or the delivery of healthy, ready-to-eat meals. In the health area, startups can develop technologies focused on well-being and remote monitoring. In the services sector, they can create digital platforms that facilitate on-demand services. The success of a startup does not depend only on its classification as a technology company, but on its ability to identify problems in the market and provide effective and innovative solutions. > Although **tech-enabled** companies have their advantages, other startups _(and/or companies)_ also have room to shine, the important thing is to find the right combination of innovation and value proposition for the target market ==Do you work for a **tech-enabled** company or a **tech company**?== --- # Why talent density is crucial to long-term business success **URL**: https://avelino.run/why-talent-density-is-crucial-to-long-term-business-success/ **Published**: 2023-11-03 **Tags**: startups, Company Culture, Talent Density, Business Success, Business Strategy **Word Count**: 596 words **Summary**: Discover why talent density is the secret to long-term business success, fostering innovation, competitive advantage, and a culture of excellence. ![Why talent density is crucial to long-term business success](/blog/why-talent-density-is-crucial-to-long-term-business-success.jpeg) The concept of talent density is a pivotal factor in the sustainable growth and long-term success of any business. It’s a strategy that has been championed by leading companies like Netflix and has become a cornerstone of their corporate culture. Talent density refers to the concentration of high-performing individuals within an organization. It’s not just about having a few star players, but rather ensuring that every team member is a key contributor to the company’s success. There are several stages of a company, each stage requires people/teams with different characteristics. I have no doubt that talent density is the best way to grow sustainably. > I understand companies that are in the moment of accelerated growth and have large teams to “deliver faster”, but one day this law arrives and leads managers to make difficult decisions thinking about what is best for the company. ## Implementing Talent Density in Your Company 1. **Selective Hiring:** Avoid rushing the hiring process. Take the time to find individuals who not only have the necessary skills, but also align with the company’s values and culture; 2. **Performance Recognition:** Acknowledge and reward employees who add value. This not only motivates high performers but also sets a benchmark for success within the team; 3. **Cultural Fit and Swift Action:** Act quickly to address employees who do not fit the company culture or meet performance standards. This maintains the integrity of the team and ensures that the company’s values are upheld. I think **3 is essential**, it makes item **2 clear to all employees**. *this text came about after reading the text below.* --- [original publication](https://www.linkedin.com/feed/update/urn:li:activity:7124533032757166080/) by [Yinon Ravid](https://www.linkedin.com/in/yinonravid/) Pay more, hire less. A counterintuitive hiring principle: you save money when you pay people more. In early 2022, we changed how we hire at Albert. Here’s how we did it: Because the productivity of an A player is exponentially higher than a B player, hiring B players means that you need ten times as many people to do each task. This leads to a bloated, slow moving, bureaucratic organization. As you hire more B players, costs grow quickly because you need a lot of them, leading to long-term unprofitability. Worse, mediocre talent builds brittle systems that create ongoing fire drills, inevitably on nights and weekends. This ruins morale. In contrast, when you hire exceptional people, things get built quickly, systems run smoothly, and morale is high. Total costs go down when you hire the best people and pay them very well. In early 2022, we changed our approach at Albert. We decided to hire fewer people, focus on exceptional hires, and pay in the top 5th percentile of our competitors for leadership positions. This transformed our organization. We increased productivity and lowered overall costs. To find great people at a startup, I follow the 5 principles below, which took me a decade to understand. 1. Clear thinkers only. Find people who can explain what they do to a novice. 2. No big company people. Big company folks are uncomfortable with how much you have to do on your own at a startup. I’ve never seen this work. 3. Take your time. Only hire people who you are near-certain will be exceptional. This is very hard to stick to. Missing on a B+ candidate is a *good* thing. 4. Find people who prefer ambiguity. Project specs change multiple times for all projects at startups. 5. Challenge + discomfort = growth. Find people who embrace this principle and are willing to challenge themselves beyond comfort. Employees must grow for a company to grow. Importantly, anyone can become exceptional. Click the link above to read how. --- # Open Source Contributions - November 2023 **URL**: https://avelino.run/foss/2023/11/ **Published**: 2023-11-01 **Word Count**: 1060 words **Summary**: November 2023 saw 18 repositories with 93 contributions, including 23 pull requests and 27 reviews, enhancing project collaboration and code quality. Explore the significant contributions made in November 2023 across 18 repositories. This timeline highlights 93 total contributions, including 23 pull requests and 27 reviews, showcasing the collaborative efforts that drive innovation and quality improvements in our projects. ## 2023-11-30 - 🔀 Opened PR in [logseq/publish-spa](https://github.com/logseq/publish-spa): [doc: update the example to use version 0.3.0](https://github.com/logseq/publish-spa/pull/16) ## 2023-11-29 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 13 to 14](https://github.com/moclojer/moclojer/pull/185#pullrequestreview-1754927151) (Approved) ## 2023-11-27 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.10 to 4.6.11](https://github.com/avelino/bots.clj.social/pull/100#pullrequestreview-1749837236) (Approved) ## 2023-11-26 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [memory/llm: optional append in prompt](https://github.com/talkdai/dialog/pull/65) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [append memory to the prompt should be optional, is added by default](https://github.com/talkdai/dialog/issues/64) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [whatsapp support](https://github.com/talkdai/dialog/issues/63) ## 2023-11-25 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [add simple answer time logging](https://github.com/talkdai/dialog/pull/62#pullrequestreview-1749199665) (Approved) ## 2023-11-24 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Allow setting `model_name` in the prompt's TOML](https://github.com/talkdai/dialog/pull/51#pullrequestreview-1748208092) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Feature/database migrations](https://github.com/talkdai/dialog/pull/54#pullrequestreview-1747841512) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [add temperature option to toml](https://github.com/talkdai/dialog/pull/59#pullrequestreview-1747831954) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [fix file name in command](https://github.com/talkdai/dialog/pull/58#pullrequestreview-1747829917) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add reeflective/console](https://github.com/avelino/awesome-go/pull/4682#pullrequestreview-1748341564) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/4706#pullrequestreview-1748340478) (Changes requested) ## 2023-11-23 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [fixed bug: fallback prompt, does not exist](https://github.com/talkdai/dialog/pull/45) - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [docker image](https://github.com/talkdai/dialog/pull/43) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adds virtualenvs.create as False - installing on root Python](https://github.com/talkdai/dialog/pull/50#pullrequestreview-1746814588) (Approved) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [slow request for gpt when prompt is large](https://github.com/talkdai/dialog/issues/47) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [`process_user_intent`: this is very logical](https://github.com/talkdai/dialog/issues/46) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [when fallback config does not exist in toml](https://github.com/talkdai/dialog/issues/44) - 🐛 Opened issue in [raycast/extensions](https://github.com/raycast/extensions): [[Browser Bookmarks]...](https://github.com/raycast/extensions/issues/9386) ## 2023-11-22 - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adds censorship to requests that don't match our message embeddings](https://github.com/talkdai/dialog/pull/36#pullrequestreview-1745496275) (Approved) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Refactor chat memory usage](https://github.com/talkdai/dialog/pull/39#pullrequestreview-1744884985) (Approved) ## 2023-11-21 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [WIP: populate `BaseMemory` with `PostgresChatMessageHistory` data](https://github.com/talkdai/dialog/pull/35) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.5.0 to 6.5.1](https://github.com/avelino/bots.clj.social/pull/99#pullrequestreview-1741904293) (Approved) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [send memory to LLM](https://github.com/talkdai/dialog/issues/34) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [hallucination: when asking a question outside the content base you are responding to, we must limit](https://github.com/talkdai/dialog/issues/33) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [temperature in toml](https://github.com/talkdai/dialog/issues/32) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [model in toml](https://github.com/talkdai/dialog/issues/31) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [docker image distribution](https://github.com/talkdai/dialog/issues/30) ## 2023-11-19 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [parent rule when adding msg (reply) from llm](https://github.com/talkdai/dialog/pull/26) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [WIP: excel: add support in `.xls` format](https://github.com/moclojer/moclojer/pull/184) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [change `apache.POI` to `bb-excel`](https://github.com/moclojer/moclojer/pull/183) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Cast function to load project config from toml](https://github.com/talkdai/dialog/pull/27#pullrequestreview-1738636109) (Approved) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [message bucket: collect messages and send in a single prompt](https://github.com/talkdai/dialog/issues/28) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [remove `apache.POI` dependency - `native-image` support](https://github.com/moclojer/moclojer/issues/182) - 🐛 Opened issue in [kbosompem/bb-excel](https://github.com/kbosompem/bb-excel): [can't find sheet name in `.xls` file](https://github.com/kbosompem/bb-excel/issues/13) - 🐛 Opened issue in [kbosompem/bb-excel](https://github.com/kbosompem/bb-excel): [option to remove `:_r` key indicating](https://github.com/kbosompem/bb-excel/issues/12) ## 2023-11-18 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Categories conversation history in background](https://github.com/talkdai/dialog/pull/25) - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [llm/prompt: carregar header sub categoria](https://github.com/talkdai/dialog/pull/23) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [categorização por sessão - o que foi conversado na sessão](https://github.com/talkdai/dialog/issues/24) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [prompt por sub-categoria](https://github.com/talkdai/dialog/issues/22) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): ["relationship" of the answer to the question](https://github.com/talkdai/dialog/issues/21) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [OpenAI sensitive data is putting `XXXXXXXXXX`](https://github.com/talkdai/dialog/issues/20) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [embedding: regenerate and popularize vector when changing scope](https://github.com/talkdai/dialog/issues/19) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [improve prompt (logic) for not identifying as AI - "Peço desculpas, mas como assistente de IA"](https://github.com/talkdai/dialog/issues/18) ## 2023-11-17 - 🔀 Opened PR in [lichti/aws-draw](https://github.com/lichti/aws-draw): [devx](https://github.com/lichti/aws-draw/pull/1) - 🔀 Opened PR in [lichti/count_aws_public_ipv4](https://github.com/lichti/count_aws_public_ipv4): [how to run: make it more user-friendly (beautiful)](https://github.com/lichti/count_aws_public_ipv4/pull/1) ## 2023-11-16 - 🐛 Opened issue in [timescale/python-vector](https://github.com/timescale/python-vector): [add sqlalchemy support](https://github.com/timescale/python-vector/issues/9) ## 2023-11-15 - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [force the prompt not to say you're a model/ai](https://github.com/talkdai/dialog/pull/15) - 🔀 Opened PR in [talkdai/dialog](https://github.com/talkdai/dialog): [docker organize file structure](https://github.com/talkdai/dialog/pull/13) - 🔀 Opened PR in [rose-pine/rio-terminal](https://github.com/rose-pine/rio-terminal): [fixed selection color: with background and foreground](https://github.com/rose-pine/rio-terminal/pull/1) - ✅ Reviewed PR in [talkdai/dialog](https://github.com/talkdai/dialog): [Adds timestamp through custom memory class](https://github.com/talkdai/dialog/pull/17#pullrequestreview-1733205414) (Approved) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [not externalise that it's bot](https://github.com/talkdai/dialog/issues/14) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [replace `pgvector` with `timescaledb`](https://github.com/talkdai/dialog/issues/11) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [docker: build error](https://github.com/talkdai/dialog/issues/8) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [fastapi config recommendation](https://github.com/talkdai/dialog/issues/7) - 🐛 Opened issue in [talkdai/dialog](https://github.com/talkdai/dialog): [`DATABASE_URL` env var](https://github.com/talkdai/dialog/issues/6) ## 2023-11-13 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.4.2 to 6.5.0](https://github.com/avelino/bots.clj.social/pull/98#pullrequestreview-1726783259) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.6 to 7.0.7](https://github.com/avelino/bots.clj.social/pull/97#pullrequestreview-1726782353) (Approved) ## 2023-11-12 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [receive a map and destructuring](https://github.com/moclojer/moclojer/pull/181) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [test: unify server creation in fn](https://github.com/moclojer/moclojer/pull/179) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [webhook support](https://github.com/moclojer/moclojer/pull/177) - 🔀 Opened PR in [RiverPhillips/blog](https://github.com/RiverPhillips/blog): [Go-CFS.md: fixed typo](https://github.com/RiverPhillips/blog/pull/4) - 💬 Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [webhook support](https://github.com/moclojer/moclojer/pull/177#pullrequestreview-1726328400) (Commented) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [tests: reuse server object](https://github.com/moclojer/moclojer/issues/178) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [webhook support: background execution, with waiting time before executing](https://github.com/moclojer/moclojer/issues/176) ## 2023-11-11 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [filter in word processing before publication](https://github.com/avelino/bots.clj.social/pull/96) - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Revert "filter in word processing before publication"](https://github.com/avelino/bots.clj.social/pull/95) - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [filter in word processing before publication](https://github.com/avelino/bots.clj.social/pull/94) - 🐛 Opened issue in [babashka/nbb](https://github.com/babashka/nbb): [Could not resolve symbol: `re-matcher`](https://github.com/babashka/nbb/issues/342) - 🐛 Opened issue in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [word filter before publishing](https://github.com/avelino/bots.clj.social/issues/93) ## 2023-11-09 - 🐛 Opened issue in [cheeaun/phanpy](https://github.com/cheeaun/phanpy): [lemmy link support `!` no `@`](https://github.com/cheeaun/phanpy/issues/314) ## 2023-11-07 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add meetups in Berne and Zurich, Switzerland](https://github.com/avelino/awesome-go/pull/5098#pullrequestreview-1717445560) (Approved) ## 2023-11-06 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [readme: update appearance](https://github.com/moclojer/moclojer/pull/175) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.3.3 to 2.3.4](https://github.com/avelino/bots.clj.social/pull/91#pullrequestreview-1714592609) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.4.0 to 6.4.2](https://github.com/avelino/bots.clj.social/pull/92#pullrequestreview-1714591318) (Approved) - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Issue 746](https://github.com/prest/prest/pull/830#pullrequestreview-1714766245) (Commented) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/gorilla/mux from 1.8.0 to 1.8.1](https://github.com/prest/prest/pull/837#pullrequestreview-1714730517) (Approved) ## 2023-11-03 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding Checker library to Forms section.](https://github.com/avelino/awesome-go/pull/4917#pullrequestreview-1712464750) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update main.go](https://github.com/avelino/awesome-go/pull/5060#pullrequestreview-1712458194) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fix comment](https://github.com/avelino/awesome-go/pull/5070#pullrequestreview-1712452468) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fix repository url for etcd](https://github.com/avelino/awesome-go/pull/5087#pullrequestreview-1712451068) (Approved) ## 2023-11-02 - 🐛 Opened issue in [avelino/phanpy-app](https://github.com/avelino/phanpy-app): [react native (clojure)](https://github.com/avelino/phanpy-app/issues/2) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 13 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [lichti/aws-draw](https://github.com/lichti/aws-draw): 1 commit(s) - [See commits](https://github.com/lichti/aws-draw/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [rose-pine/rio-terminal](https://github.com/rose-pine/rio-terminal): 4 commit(s) - [See commits](https://github.com/rose-pine/rio-terminal/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [lichti/count_aws_public_ipv4](https://github.com/lichti/count_aws_public_ipv4): 1 commit(s) - [See commits](https://github.com/lichti/count_aws_public_ipv4/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 32 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [logseq/publish-spa](https://github.com/logseq/publish-spa): 1 commit(s) - [See commits](https://github.com/logseq/publish-spa/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 26 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [talkdai/dialog](https://github.com/talkdai/dialog): 33 commit(s) - [See commits](https://github.com/talkdai/dialog/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2023-11-01T00:00:00Z&until=2023-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # The Power of Writing in English for the Global Open Source Community **URL**: https://avelino.run/the-power-of-writing-in-english-for-the-global-open-source-community/ **Published**: 2023-10-24 **Tags**: open source community, global connection, FOSS, technology executive, professional growth, GitHub Stars **Word Count**: 279 words **Summary**: Discover the significance of writing in English to connect with the global open source community. Dive into the journey of a tech executive and the impact of open source contributions. ![The Power of Writing in English for the Global Open Source Community](/blog/the-power-of-writing-in-english-for-the-global-open-source-community.png) In today’s interconnected world, **writing in English for the open source community** has become a pivotal step for many professionals. It’s not just about language proficiency; it’s about bridging gaps, fostering collaboration, and amplifying the impact of open source projects on a global scale. ## The Journey to Global Connection It’s often said that taking the first step is the hardest. For many, including myself, the decision to write in English was a calculated one, influenced by the desire to connect with a broader audience and the recognition of English as a common language in the tech world. This step, although seemingly daunting, is crucial for one’s professional trajectory. > Embracing a world-class mindset means sometimes being _“selfish”_ with our careers, prioritizing growth and global reach. ## The Essence of Writing in English Why the emphasis on English? The answer lies in the heart of the open source community. Writing in English allows for a deeper connection with those who maintain, contribute, and benefit from free open source software (FOSS). Since my early days in 2008, I’ve been an active contributor to various open source projects. By 2015, I found myself maintaining projects that thousands rely on. > A quick glance at my GitHub account ([@avelino](https://github.com/avelino)) reveals a story of dedication and passion for open source contributions. ## What Lies Ahead? Change is the only constant. While the medium of communication might shift to English, the essence remains unchanged. As a technology executive and CTO at a prominent startup in Brazil, my commitment to sharing knowledge, insights, and experiences remains unwavering. The goal is simple: to add value to your professional journey. --- For any clarifications, suggestions, or feedback, please feel free to [reach out](mailto:31996+avelino@users.noreply.github.com). --- # Open Source Contributions - October 2023 **URL**: https://avelino.run/foss/2023/10/ **Published**: 2023-10-01 **Word Count**: 492 words **Summary**: October 2023 saw 9 repositories contributing 40 total activities, including 8 pull requests and 11 issues, showcasing robust collaboration and development progress. Explore the timeline of contributions for October 2023, highlighting significant activities across 9 repositories. This month featured 40 total contributions, including 8 pull requests and 11 issues, reflecting a vibrant development community dedicated to enhancing projects and collaboration. ## 2023-10-31 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/checkout from 3 to 4](https://github.com/moclojer/moclojer/pull/171#pullrequestreview-1705311984) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DavidAnson/markdownlint-cli2-action from 11 to 13](https://github.com/moclojer/moclojer/pull/172#pullrequestreview-1705311706) (Approved) ## 2023-10-30 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump actions/setup-node from 3 to 4](https://github.com/avelino/bots.clj.social/pull/90#pullrequestreview-1703584197) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.3.3 to 6.4.0](https://github.com/avelino/bots.clj.social/pull/89#pullrequestreview-1703581828) (Approved) ## 2023-10-29 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.3.2 to 2.3.3](https://github.com/avelino/bots.clj.social/pull/87#pullrequestreview-1702933761) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.3.1 to 6.3.3](https://github.com/avelino/bots.clj.social/pull/88#pullrequestreview-1702933707) (Approved) ## 2023-10-27 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [gh/action: markdown lint checker](https://github.com/moclojer/moclojer/pull/169) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [check markdown lint](https://github.com/moclojer/moclojer/issues/168) ## 2023-10-21 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [path with template render, possibility of a dynamic path](https://github.com/moclojer/moclojer/pull/167) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [doc: template eng](https://github.com/moclojer/moclojer/pull/165) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [script install fixed bash syntax typo](https://github.com/moclojer/moclojer/pull/164) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [`extend-body.path`: dynamic path support based on request](https://github.com/moclojer/moclojer/issues/166) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [doc/body: how the template works](https://github.com/moclojer/moclojer/issues/163) ## 2023-10-20 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [bash/install: fix script pos disable native-image](https://github.com/moclojer/moclojer/pull/162) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [external-body: implementation of providers (text and xlsx)](https://github.com/moclojer/moclojer/pull/161) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [include file in body endpoint return](https://github.com/moclojer/moclojer/issues/160) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [binary distribution: graalvm support (native-image)](https://github.com/moclojer/moclojer/issues/158) ## 2023-10-18 - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [build(deps): bump bl from 6.0.4 to 6.0.7](https://github.com/avelino/avelino.run/pull/50#pullrequestreview-1684972281) (Approved) ## 2023-10-15 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.178 to 1.2.179](https://github.com/avelino/bots.clj.social/pull/86#pullrequestreview-1678778967) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.3.1 to 4.3.2](https://github.com/avelino/bots.clj.social/pull/85#pullrequestreview-1678778902) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Improve build pipeline (jar and native-image)](https://github.com/moclojer/moclojer/issues/154) - 🐛 Opened issue in [andrewberls/predis](https://github.com/andrewberls/predis): [Carmine version 3 support](https://github.com/andrewberls/predis/issues/10) ## 2023-10-14 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [endpoint xlsx content support](https://github.com/moclojer/moclojer/pull/153) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [endpoint with `xlsx` content](https://github.com/moclojer/moclojer/issues/152) - 🐛 Opened issue in [mjul/docjure](https://github.com/mjul/docjure): [ODS file support](https://github.com/mjul/docjure/issues/110) ## 2023-10-12 - 🐛 Opened issue in [open-sauced/app](https://github.com/open-sauced/app): [Feature: clojure/clojurescript in interests list](https://github.com/open-sauced/app/issues/1878) ## 2023-10-06 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [log/jetty.server: only error](https://github.com/moclojer/moclojer/pull/151) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [serviço para gerar o `yaml` "único" para o serviço moclojer](https://github.com/moclojer/moclojer-app/issues/79) ## 2023-10-04 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fix #4939](https://github.com/avelino/awesome-go/pull/5033#pullrequestreview-1657944924) (Approved) ## 2023-10-02 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump actions/checkout from 3 to 4](https://github.com/avelino/bots.clj.social/pull/79#pullrequestreview-1652275724) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.2.7 to 4.3.1](https://github.com/avelino/bots.clj.social/pull/83#pullrequestreview-1652274742) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.8 to 4.6.10](https://github.com/avelino/bots.clj.social/pull/81#pullrequestreview-1652273936) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.2.0 to 6.3.1](https://github.com/avelino/bots.clj.social/pull/84#pullrequestreview-1652270749) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove the package resize under images](https://github.com/avelino/awesome-go/pull/4615#pullrequestreview-1652278324) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove mob](https://github.com/avelino/awesome-go/pull/5024#pullrequestreview-1652271982) (Approved) ## Commits - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 72 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-10-01T00:00:00Z&until=2023-10-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 10 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-10-01T00:00:00Z&until=2023-10-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-10-01T00:00:00Z&until=2023-10-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-10-01T00:00:00Z&until=2023-10-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2023-10-01T00:00:00Z&until=2023-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2023 **URL**: https://avelino.run/foss/2023/09/ **Published**: 2023-09-01 **Word Count**: 367 words **Summary**: September 2023 saw 28 contributions across 8 repositories, including 16 pull request reviews and 3 new pull requests, highlighting significant community engagement. Explore the contributions made in September 2023, showcasing a dynamic month with 28 total activities across 8 repositories. This timeline captures the collaborative efforts, including new pull requests and reviews, reflecting the vibrant community engagement within our projects. ## 2023-09-28 - 🔀 Opened PR in [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): [style: fixed document references](https://github.com/buserbrasil/databricks-sql-driver/pull/4) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump graalvm/setup-graalvm from 1.1.3 to 1.1.4](https://github.com/moclojer/moclojer/pull/150#pullrequestreview-1647783233) (Approved) ## 2023-09-23 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump docker/build-push-action from 4 to 5](https://github.com/moclojer/moclojer/pull/149#pullrequestreview-1640764718) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump docker/login-action from 2 to 3](https://github.com/moclojer/moclojer/pull/147#pullrequestreview-1640764675) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump docker/setup-buildx-action from 2 to 3](https://github.com/moclojer/moclojer/pull/148#pullrequestreview-1640764558) (Approved) ## 2023-09-18 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.5 to 7.0.6](https://github.com/avelino/bots.clj.social/pull/80#pullrequestreview-1630783027) (Approved) ## 2023-09-16 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [dev/build: import moclojer version](https://github.com/moclojer/moclojer/pull/146) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump graalvm/setup-graalvm from 1.1.2 to 1.1.3](https://github.com/moclojer/moclojer/pull/142#pullrequestreview-1629970848) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 3.1.2 to 3.1.3](https://github.com/moclojer/moclojer/pull/143#pullrequestreview-1629970818) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 3.3.1 to 3.3.2](https://github.com/moclojer/moclojer/pull/144#pullrequestreview-1629970759) (Approved) ## 2023-09-14 - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [[ImgBot] Optimize images](https://github.com/avelino/avelino.run/pull/47#pullrequestreview-1627380191) (Approved) ## 2023-09-13 - 🐛 Opened issue in [omnivore-app/omnivore](https://github.com/omnivore-app/omnivore): [Kindle highlights get to omnivore ](https://github.com/omnivore-app/omnivore/issues/2761) ## 2023-09-11 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 11.0 to 12.1](https://github.com/moclojer/moclojer/pull/145#pullrequestreview-1620554246) (Approved) ## 2023-09-10 - 🔀 Opened PR in [raphamorim/rio](https://github.com/raphamorim/rio): [demo/emacs: better screenshot](https://github.com/raphamorim/rio/pull/211) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [Failed to spawn command, no such file or directory](https://github.com/raphamorim/rio/issues/212) ## 2023-09-05 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/checkout from 3 to 4](https://github.com/moclojer/moclojer/pull/141#pullrequestreview-1611425703) (Approved) ## 2023-09-04 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump redis from 4.6.7 to 4.6.8](https://github.com/avelino/bots.clj.social/pull/75#pullrequestreview-1608950516) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump turtlequeue/setup-babashka from 1.5.0 to 1.5.2](https://github.com/avelino/bots.clj.social/pull/74#pullrequestreview-1608949234) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.1.0 to 6.2.0](https://github.com/avelino/bots.clj.social/pull/76#pullrequestreview-1608948299) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.2 to 7.0.5](https://github.com/avelino/bots.clj.social/pull/77#pullrequestreview-1608947527) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump yaml from 2.3.1 to 2.3.2](https://github.com/avelino/bots.clj.social/pull/78#pullrequestreview-1608946393) (Approved) ## Commits - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 6 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-09-01T00:00:00Z&until=2023-09-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 6 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-09-01T00:00:00Z&until=2023-09-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-09-01T00:00:00Z&until=2023-09-30T23:59:59Z) - 🔨 Push to [buserbrasil/databricks-sql-driver](https://github.com/buserbrasil/databricks-sql-driver): 1 commit(s) - [See commits](https://github.com/buserbrasil/databricks-sql-driver/commits?author=avelino&since=2023-09-01T00:00:00Z&until=2023-09-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-09-01T00:00:00Z&until=2023-09-30T23:59:59Z) - 🔨 Push to [raphamorim/rio](https://github.com/raphamorim/rio): 1 commit(s) - [See commits](https://github.com/raphamorim/rio/commits?author=avelino&since=2023-09-01T00:00:00Z&until=2023-09-30T23:59:59Z) - 🔨 Push to [cljam/jam-session-components](https://github.com/cljam/jam-session-components): 1 commit(s) - [See commits](https://github.com/cljam/jam-session-components/commits?author=avelino&since=2023-09-01T00:00:00Z&until=2023-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Como criar e manter uma cultura organizacional forte com base em valores e visão **URL**: https://avelino.run/como-criar-e-manter-uma-cultura-organizacional-forte-com-base-em-valores-e-visao/ **Published**: 2023-08-11 **Tags**: cultura, valores, empreender, clevel, cto **Word Count**: 700 words ![Como criar e manter uma cultura organizacional forte com base em valores e visão](/blog/como-criar-uma-cultura-de-empresa-forte-com-base-em-valores-e-visao.jpg) A cultura organizacional é o conjunto de valores, crenças e comportamentos compartilhados pelos membros de uma organização. Ela é criada ao longo do tempo (mesmo muitas pessoas dizendo que a cultura é encontrada não criada) e é moldada por uma variedade de fatores, incluindo a história da organização, sua missão, seus valores e suas lideranças. Uma **cultura forte pode ser um ativo valioso** para a organização. Ela pode ajudar a **atrair e reter** os melhores talentos, principalmente ~~expurgar~~ as pessoas que não tem aderencia com a cultura, possívelmente aumentar a produtividade e melhorar a satisfação dos clientes. > Se você deseja construir uma empresa de sucesso, é importante ter uma cultura forte. **Como criar uma cultura organizacional _forte_:** * **Defina seus valores:** o que é importante para sua empresa? Quais são seus valores fundamentais? Uma vez que você tenha uma boa compreensão de seus valores, você pode começar a criar uma cultura que os reflita. * **Comunique sua cultura:** certifique-se de que todos colaboradores tenha em mente os valores da empresa e como você espera que eles se comportem. Você pode fazer isso através de treinamentos, campanhas de comunicação interna e outros canais. * **Recompense comportamentos consistentes com a cultura:** quando os colaboradores se comportam de maneiras consistentes com a cultura, certifique-se de recompensá-los. Isso os ajudará a entender que você valoriza esses comportamentos e que você espera que eles continuem fazendo. * **Cumpra suas promessas:** se você promete algo aos colaboradores, simplismente cumpra. Isso ajudará a construir confiança e credibilidade, o que é essencial para uma cultura forte. * **Seja consistente:** a cultura leva tempo para ser construída. Não espere resultados da noite para o dia. Seja paciente e consistente, e você eventualmente verá uma cultura forte se desenvolvendo em sua empresa. ## Como alinhar a cultura criada com a liderança Os lideres tem como responsabilidade de alinhar à cultura organizacional com a estratégia. Eles devem garantir que a estratégia não vá contra os valores, a missão e a visão da empresa, principalmente garantir que a cultura esteja conhectado com os objetivos e metas da empresa. **Alinhar a cultura com a estratégia:** * Compreender os valores, a missão e a visão da empresa. * Compreender os objetivos e metas da empresa. * Identificar os comportamentos que estão alinhados com a cultura. * Recompensar os comportamentos que estão alinhados com a cultura. * Disciplinar os comportamentos que não estão alinhados com a cultura. ## Como sustentar a cultura da empresa (evitar a cultura se perder) A cultura de uma empresa pode se perder ao longo do tempo, se não forem tomadas medidas para sustentá-la. Os diretores são os responsáveis por sustentar a cultura da empresa. Eles devem garantir que a cultura seja continuamente reforçada e atualizada. Para sustentar a cultura, os diretores devem: * Comunicar os valores, a missão e a visão da empresa de forma contínua. * Treinar os colaboradores sobre os valores, a missão e a visão da empresa de forma contínua. * Criar um ambiente de trabalho que seja consistente com os valores da empresa de forma contínua. * Reconhecer e recompensar os colaboradores que estão alinhados com a cultura de forma contínua. * Fazer uma avaliação regular da cultura da empresa e tomar medidas para melhorá-la. Se os diretores seguirem essas dicas, eles podem criar uma cultura de empresa forte que ajudará a empresa a alcançar seus objetivos e metas. Nunca será fácil manter cultura, tenha como base os pilares **contratar, promover e demitir**: * **Contrate pessoas que se encaixem com a cultura:** quando você está contratando novos colaboradores, não se esqueça de avaliar sua cultura. As pessoas que se encaixam na cultura são mais propensas a ser felizes e produtivas no trabalho. * **Promova pessoas que estão alinhadas com a cultura:** quando você está promovendo colaboradores, certifique-se de escolher pessoas que estão alinhadas com a cultura da empresa. Essas pessoas são mais propensas a contribuir para o sucesso da empresa. * **Demita pessoas que não estão alinhadas com a cultura:** se um colaboradores não estiver alinhado com a cultura da empresa, é melhor demiti-lo. Isso ajudará a proteger a cultura da empresa e a garantir que ela seja mantida forte. Falar sobre desligar pessoas não é muito amigavel - já muitos líderes ter dificuldade de desligar pessoas que não estão aderente com o momento da empresa. --- # Open Source Contributions - August 2023 **URL**: https://avelino.run/foss/2023/08/ **Published**: 2023-08-01 **Word Count**: 516 words **Summary**: August 2023 saw 8 repositories contribute 37 total events, including 23 issues and 2 pull requests, driving significant progress in various projects. Explore the contributions made in August 2023 across our repositories. This timeline highlights a total of 37 events, including pushes, pull requests, and issues that showcase the collaborative efforts and progress of our projects. ## 2023-08-30 - 💬 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [ Add mock APIs](https://github.com/moclojer/moclojer-app/pull/47#pullrequestreview-1602568143) (Commented) - 🐛 Opened issue in [buserbrasil/django-query-prefixer](https://github.com/buserbrasil/django-query-prefixer): [update readme with example and project description](https://github.com/buserbrasil/django-query-prefixer/issues/2) ## 2023-08-21 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [readme: italic nbb used](https://github.com/avelino/bots.clj.social/pull/73) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.175 to 1.2.178](https://github.com/avelino/bots.clj.social/pull/71#pullrequestreview-1586566414) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.1 to 7.0.2](https://github.com/avelino/bots.clj.social/pull/72#pullrequestreview-1586565363) (Approved) ## 2023-08-14 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.0.5 to 6.1.0](https://github.com/avelino/bots.clj.social/pull/70#pullrequestreview-1576571268) (Approved) ## 2023-08-12 - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [organizar gestão de projeto no GitHub Projects](https://github.com/moclojer/moclojer-app/issues/72) ## 2023-08-11 - ✅ Reviewed PR in [logseq/logseq](https://github.com/logseq/logseq): [fix(whiteboard) page sidebar empty string](https://github.com/logseq/logseq/pull/10018#pullrequestreview-1573238973) (Approved) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Criar um endpoint para editar username](https://github.com/moclojer/moclojer-app/issues/71) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Primeiro login, quando o usuário logar e não tiver um username deve redirecionar para criar um username](https://github.com/moclojer/moclojer-app/issues/70) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Criar modal para criar um novo mock de api](https://github.com/moclojer/moclojer-app/issues/69) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Implementar o editor para criar/editar mock de api](https://github.com/moclojer/moclojer-app/issues/68) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Implementar a tela de listagem de mocks de api](https://github.com/moclojer/moclojer-app/issues/67) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Quando o usuário logar salvar no backend os dados do usuário authtorizado no supabase](https://github.com/moclojer/moclojer-app/issues/66) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Escrevendo o cliente open source para o supabase v0.1](https://github.com/moclojer/moclojer-app/issues/65) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Escrever moclojer-front docs para auth com supabase](https://github.com/moclojer/moclojer-app/issues/64) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Configurar os testes para rodar no backend](https://github.com/moclojer/moclojer-app/issues/63) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Adicionar um component de postgres e configurar as migrations para o banco no backend](https://github.com/moclojer/moclojer-app/issues/62) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Limpar o código do projeto (remover versão antiga)](https://github.com/moclojer/moclojer-app/issues/61) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Login com supabase.](https://github.com/moclojer/moclojer-app/issues/60) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Desenhar o dashboard com o template flowbite](https://github.com/moclojer/moclojer-app/issues/59) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Logout e comportamento na interface do dashboard](https://github.com/moclojer/moclojer-app/issues/58) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Design das novas telas](https://github.com/moclojer/moclojer-app/issues/57) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Adicionar testes para login e para logout no dasbhoard](https://github.com/moclojer/moclojer-app/issues/56) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Conectar o front end com os endpoints do backend. Criar mocks, listar mocks](https://github.com/moclojer/moclojer-app/issues/55) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Adicionar comportamento nas telas de frontend, tela de mock e listagem de api](https://github.com/moclojer/moclojer-app/issues/54) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Build para o `jar` (front e api) e fazer o deploy no cloud (DigitalOcean)](https://github.com/moclojer/moclojer-app/issues/53) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Implementar endpoint de get que retorne todos os mocks de um usuário autenticado](https://github.com/moclojer/moclojer-app/issues/52) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Implementar o endpoint para salvar mock no backend](https://github.com/moclojer/moclojer-app/issues/51) ## 2023-08-09 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 6.0.3 to 6.0.5](https://github.com/avelino/bots.clj.social/pull/69#pullrequestreview-1569261529) (Approved) ## 2023-08-01 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [masto: fixed pkg/api call](https://github.com/avelino/bots.clj.social/pull/68) ## Commits - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 8 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-08-01T00:00:00Z&until=2023-08-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 8 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-08-01T00:00:00Z&until=2023-08-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-08-01T00:00:00Z&until=2023-08-31T23:59:59Z) - 🔨 Push to [buserbrasil/django-query-prefixer](https://github.com/buserbrasil/django-query-prefixer): 1 commit(s) - [See commits](https://github.com/buserbrasil/django-query-prefixer/commits?author=avelino&since=2023-08-01T00:00:00Z&until=2023-08-31T23:59:59Z) - 🔨 Push to [cljam/.github](https://github.com/cljam/.github): 1 commit(s) - [See commits](https://github.com/cljam/.github/commits?author=avelino&since=2023-08-01T00:00:00Z&until=2023-08-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2023-08-01T00:00:00Z&until=2023-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Como os resultados podem tornar seu storytelling mais envolvente **URL**: https://avelino.run/como-os-resultados-podem-tornar-seu-storytelling-mais-envolvente/ **Published**: 2023-07-15 **Tags**: storytelling, resultados, impacto, memorável, objetivo **Word Count**: 533 words ![Como os resultados podem tornar seu storytelling mais envolvente](/blog/como-os-resultados-podem-tornar-seu-storytelling-mais-envolvente.png) > Contra fatos (resultado) não há argumentos, essa é muito utilizada, mas não é simples aplicar no dia-a-dia. O storytelling é uma forma poderosa de comunicar idéias e gerar conexão com seu público. Ao contar uma história com dados reais, você compartilhar seus conhecimentos, experiências e perspectivas de uma forma que seja memorável. Os resultados são fatos e estatísticas que apoiam sua história e ajudam a torná-la mais credível e convincente. Por exemplo, se você estiver contando uma história sobre os benefícios de um novo produto, inclua resultados de pesquisas que demonstram como o produto melhorou a vida dos clientes. Os resultados devem ser usados em qualquer tipo de história, seja ela uma história pessoal ou uma história de negócios. Ao usar resultados, você pode tornar seu storytelling mais envolvente e convincente, e você pode ajudar seu público a entender melhor sua mensagem. **Seguem algumas dicas que utilizo para conectar resultado com storytelling:** * Entenda qual seu público, conecte o resultado de forma fácil para o público entender. * Use resultados relevantes para sua história. Certifique-se de que os resultados que você usa sejam diretamente relacionados à mensagem que você está tentando transmitir. * Use resultados claros e concisos. Evite usar jargões ou termos técnicos que seu público possa não entender. * Use resultados para apoiar sua história, não para substituí-la. Os resultados devem ser usados para complementar sua história e ajudá-la a ter um impacto maior no seu público. O storytelling com base em resultados faz muito mais sentido do que história por história. Isso ocorre porque os resultados fornecem provas concretas que apoiam suas afirmações. Quando você pode fornecer resultados para apoiar suas histórias, você está construindo confiança com seu público. Eles veem que você é um profissional que sabe o que está falando, e eles estão mais propensos a acreditar em você e confiar em você. Portanto, se você deseja contar histórias que sejam envolventes e convincentes, certifique-se de usar resultados para apoiar suas histórias. Os resultados ajudarão você a construir confiança com seu público e a tornar sua mensagem mais poderosa. ## Busque resultado, não história **Se focar no resultado, a história será memorável.** Infelizmente, se só pensar na história, o resultado tende a ser **medíocre**. Isso ocorre porque ao se concentrar no resultado, está pensando onde quer chegar, não em distração que levará para longe dele. Ao pensar em como quer contar a história, tende deixar o **ego** lhe afastar do objetivo (resultado). Ao se concentrar apenas na história, está propenso contar uma que *seja chata, previsível e sem impacto*. Isso ocorre porque está focado em contar uma história que seja ~~boa~~ do que compartilhar o resultado em forma de história (relevante para seu público). Então, se quer contar histórias que sejam memoráveis, concentre-se no resultado. Pense no que deseja que seu público aprenda. E compartilhe um bom resultado em forma de história relevante para eles. ## TechGuide: Storytelling com dados Nesta conversa, o [@Paulo Silveira](https://twitter.com/paulo_caelum) *(host que é um contador de histórias)*, [@Valquíria Alencar](https://www.linkedin.com/in/valquiria-alencar/) *(Instrutora de Dados na Alura)* e [@Guilherme Silveira](https://www.linkedin.com/in/guilhermeazevedosilveira/) *(CINO da Alura)* falou sobre Ciência de Dados e storytelling, a capacidade de "contar uma história" ou passar adiante uma informação clara e interessante quando estamos criando exibições de análises de dados. --- # Open Source Contributions - July 2023 **URL**: https://avelino.run/foss/2023/07/ **Published**: 2023-07-01 **Word Count**: 613 words **Summary**: July 2023 saw 18 repos contribute 51 total events, including 9 PRs and 24 reviews, marking a productive month in collaboration and development. Explore the highlights of July 2023, where contributors engaged in 51 total activities across 18 repositories. This timeline showcases significant pull requests, reviews, and pushes, reflecting a vibrant community of developers working together to enhance their projects. ## 2023-07-31 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [relicensing: we keep MIT, avelino to cljazz](https://github.com/moclojer/moclojer/pull/138) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 5.11.4 to 6.0.3](https://github.com/avelino/bots.clj.social/pull/67#pullrequestreview-1554378015) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump nbb from 1.2.174 to 1.2.175](https://github.com/avelino/bots.clj.social/pull/66#pullrequestreview-1554315743) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.2.6 to 4.2.7](https://github.com/avelino/bots.clj.social/pull/65#pullrequestreview-1554314720) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump graalvm/setup-graalvm from 1.1.1 to 1.1.2](https://github.com/moclojer/moclojer/pull/139#pullrequestreview-1555336005) (Approved) ## 2023-07-25 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump fast-xml-parser from 4.2.5 to 4.2.6](https://github.com/avelino/bots.clj.social/pull/63#pullrequestreview-1545050214) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 7.0.0 to 7.0.1](https://github.com/avelino/bots.clj.social/pull/64#pullrequestreview-1545048882) (Approved) ## 2023-07-24 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump graalvm/setup-graalvm from 1.1.0 to 1.1.1](https://github.com/moclojer/moclojer/pull/136#pullrequestreview-1544160112) (Approved) ## 2023-07-23 - 🔀 Opened PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [WIP: docker and DigitalOcean PaaS](https://github.com/moclojer/moclojer-app/pull/46) ## 2023-07-22 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [when the status code is not 200 publish as private](https://github.com/avelino/bots.clj.social/pull/62) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Discussion log/level-min](https://github.com/moclojer/moclojer/pull/135#pullrequestreview-1542106916) (Approved) ## 2023-07-21 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/4938#pullrequestreview-1540345437) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added grapher to the Query Language section](https://github.com/avelino/awesome-go/pull/4937#pullrequestreview-1540344839) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add monkey](https://github.com/avelino/awesome-go/pull/4933#pullrequestreview-1540344361) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add hex-monscape](https://github.com/avelino/awesome-go/pull/4935#pullrequestreview-1540343583) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add bubble-table](https://github.com/avelino/awesome-go/pull/4936#pullrequestreview-1540342503) (Approved) - 🐛 Opened issue in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [do not share a link that does not exist](https://github.com/avelino/bots.clj.social/issues/61) ## 2023-07-17 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 6.3.0 to 7.0.0](https://github.com/avelino/bots.clj.social/pull/59#pullrequestreview-1532918760) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump masto from 5.11.3 to 5.11.4](https://github.com/avelino/bots.clj.social/pull/60#pullrequestreview-1532917783) (Approved) - 🐛 Opened issue in [clj-jgit/clj-jgit](https://github.com/clj-jgit/clj-jgit): [can i create file in memory (not in file system) and generate commit?](https://github.com/clj-jgit/clj-jgit/issues/82) ## 2023-07-16 - 🔀 Opened PR in [github/explore](https://github.com/github/explore): [add rio term in brazil](https://github.com/github/explore/pull/3807) - 🔀 Opened PR in [cljam/supabase-clj](https://github.com/cljam/supabase-clj): [deploy: write deploy script for clojars](https://github.com/cljam/supabase-clj/pull/10) ## 2023-07-15 - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Bump semver from 5.7.1 to 5.7.2](https://github.com/avelino/avelino.run/pull/45#pullrequestreview-1531592624) (Approved) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Bump bl from 6.0.1 to 6.0.3](https://github.com/avelino/avelino.run/pull/44#pullrequestreview-1531592313) (Approved) - 🐛 Opened issue in [athul/archie](https://github.com/athul/archie): [GA4 support](https://github.com/athul/archie/issues/94) ## 2023-07-14 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [leave core package clean (low cognitive load)](https://github.com/moclojer/moclojer/pull/134) - 🔀 Opened PR in [raphamorim/rio](https://github.com/raphamorim/rio): [set macOS shell default empty, get SHELL env](https://github.com/raphamorim/rio/pull/142) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [shell settings: default value via `$SHELL`](https://github.com/raphamorim/rio/issues/140) ## 2023-07-13 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Adds header to allow any request](https://github.com/moclojer/moclojer/pull/131#pullrequestreview-1528631815) (Approved) - 🐛 Opened issue in [buserbrasil/simple-token-bucket](https://github.com/buserbrasil/simple-token-bucket): [example of use in README](https://github.com/buserbrasil/simple-token-bucket/issues/1) ## 2023-07-10 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump cross-fetch from 3.1.8 to 4.0.0](https://github.com/avelino/bots.clj.social/pull/57#pullrequestreview-1523078982) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 6.2.3 to 6.3.0](https://github.com/avelino/bots.clj.social/pull/58#pullrequestreview-1523078383) (Approved) - 🐛 Opened issue in [clojars/administration](https://github.com/clojars/administration): [verify co.cljazz](https://github.com/clojars/administration/issues/337) ## 2023-07-08 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [fix: make watcher work again](https://github.com/moclojer/moclojer/pull/126) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Fixes watcher not updating routes](https://github.com/moclojer/moclojer/pull/125#pullrequestreview-1520702048) (Approved) ## 2023-07-07 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Simplify the implementation and understanding of the specification](https://github.com/moclojer/moclojer/pull/121#pullrequestreview-1517673808) (Approved) - 🐛 Opened issue in [omnivore-app/logseq-omnivore](https://github.com/omnivore-app/logseq-omnivore): [duplicate `## 🔖 Articles` node](https://github.com/omnivore-app/logseq-omnivore/issues/119) ## 2023-07-03 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [devcontainer: add feature clojure](https://github.com/moclojer/moclojer/pull/122) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump cross-fetch from 3.1.6 to 3.1.8](https://github.com/avelino/bots.clj.social/pull/56#pullrequestreview-1510667186) (Approved) ## 2023-07-01 - ✅ Reviewed PR in [github/brasil](https://github.com/github/brasil): [Add a project template for Django and VueJS](https://github.com/github/brasil/pull/50#pullrequestreview-1509103357) (Approved) - 🐛 Opened issue in [xyhp915/logseq-fenced-code-plus](https://github.com/xyhp915/logseq-fenced-code-plus): [d2lang support](https://github.com/xyhp915/logseq-fenced-code-plus/issues/28) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [cljam/supabase-clj](https://github.com/cljam/supabase-clj): 3 commit(s) - [See commits](https://github.com/cljam/supabase-clj/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [github/explore](https://github.com/github/explore): 1 commit(s) - [See commits](https://github.com/github/explore/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 7 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 20 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 12 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [moclojer/clj-workos](https://github.com/moclojer/clj-workos): 1 commit(s) - [See commits](https://github.com/moclojer/clj-workos/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [buserbrasil/simple-token-bucket](https://github.com/buserbrasil/simple-token-bucket): 1 commit(s) - [See commits](https://github.com/buserbrasil/simple-token-bucket/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) - 🔨 Push to [raphamorim/rio](https://github.com/raphamorim/rio): 1 commit(s) - [See commits](https://github.com/raphamorim/rio/commits?author=avelino&since=2023-07-01T00:00:00Z&until=2023-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - June 2023 **URL**: https://avelino.run/foss/2023/06/ **Published**: 2023-06-01 **Word Count**: 599 words **Summary**: June 2023 saw 18 repos with 12 PRs opened, 22 reviews, and 9 issues, showcasing strong community engagement and impactful contributions. In June 2023, the development community made significant strides, contributing to 18 repositories with a total of 52 activities. This timeline highlights the key events, including pull requests, reviews, and issues, reflecting the collaborative spirit and continuous improvement within the projects. ## 2023-06-29 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Avelino/change layout to archie](https://github.com/avelino/avelino.run/pull/43) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [change themes/archie](https://github.com/avelino/avelino.run/pull/42) ## 2023-06-27 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [fix: fast-xml-parser regex vulnerability patch](https://github.com/avelino/bots.clj.social/pull/54) ## 2023-06-25 - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [Distribution for Linux `.rpm`](https://github.com/raphamorim/rio/issues/106) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [Distribution for Linux .deb and .rpm](https://github.com/raphamorim/rio/issues/105) ## 2023-06-24 - ✅ Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [Add rebellion library.](https://github.com/avelino/awesome-racket/pull/18#pullrequestreview-1496393839) (Approved) ## 2023-06-22 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [toots: post with public status (for the whole fediverse)](https://github.com/avelino/bots.clj.social/pull/53) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Zax logger](https://github.com/avelino/awesome-go/pull/4907#pullrequestreview-1493077506) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [adding a high performance race free gocache with auto expring](https://github.com/avelino/awesome-go/pull/4908#pullrequestreview-1493074040) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gofn](https://github.com/avelino/awesome-go/pull/4678#pullrequestreview-1493050624) (Approved) ## 2023-06-21 - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [tmux pane: “leaking information” at the time of re-rendering](https://github.com/raphamorim/rio/issues/103) - 🐛 Opened issue in [extractus/feed-extractor](https://github.com/extractus/feed-extractor): [fast-xml-parser regex vulnerability patch could be improved from a safety perspective](https://github.com/extractus/feed-extractor/issues/92) ## 2023-06-20 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [babashka/cli upgrade to 0.7.51](https://github.com/moclojer/moclojer/pull/118) - 💬 Reviewed PR in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [rio 0.0.7 (new formula)](https://github.com/Homebrew/homebrew-core/pull/134295#pullrequestreview-1488998747) (Commented) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [babashka cli: clojure.lang.Named.getNamespace() becuase x is null](https://github.com/moclojer/moclojer/issues/119) ## 2023-06-19 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [build(deps): bump @extractus/feed-extractor from 6.2.2 to 6.2.3](https://github.com/avelino/bots.clj.social/pull/52#pullrequestreview-1485876094) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump graalvm/setup-graalvm from 1.0.11 to 1.1.0](https://github.com/moclojer/moclojer/pull/117#pullrequestreview-1486522540) (Approved) ## 2023-06-17 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [sec: xml2js is vulnerable](https://github.com/avelino/monotropic-theme-vscode/pull/22) - 💬 Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [refact: remove components ununsed from old template](https://github.com/moclojer/moclojer-app/pull/38#pullrequestreview-1484908861) (Commented) - 🐛 Opened issue in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [xml2js is vulnerable to prototype pollution](https://github.com/avelino/monotropic-theme-vscode/issues/21) ## 2023-06-16 - 🔀 Opened PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [node: package upgrade](https://github.com/moclojer/moclojer-app/pull/36) - 🔀 Opened PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [login logout rules](https://github.com/moclojer/moclojer-app/pull/34) - ✅ Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Feat/dashboard effects](https://github.com/moclojer/moclojer-app/pull/35#pullrequestreview-1483456128) (Approved) ## 2023-06-15 - ✅ Reviewed PR in [github/brasil](https://github.com/github/brasil): [Update maintainers.yml, add giggio](https://github.com/github/brasil/pull/38#pullrequestreview-1482516303) (Approved) - ✅ Reviewed PR in [github/brasil](https://github.com/github/brasil): [Update projects.yml, add node-chromedriver](https://github.com/github/brasil/pull/37#pullrequestreview-1482516053) (Approved) ## 2023-06-14 - ✅ Reviewed PR in [resend/resend-python](https://github.com/resend/resend-python): [chore(deps): update dependency requests to v2.31.0 [security]](https://github.com/resend/resend-python/pull/37#pullrequestreview-1478828425) (Approved) ## 2023-06-10 - 🔀 Opened PR in [github-linguist/linguist](https://github.com/github-linguist/linguist): [languages: ClojureDart support `.cljd`](https://github.com/github-linguist/linguist/pull/6445) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Twigo to Bot Building](https://github.com/avelino/awesome-go/pull/4904#pullrequestreview-1473368732) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Cerbos to Authentication & OAuth](https://github.com/avelino/awesome-go/pull/4880#pullrequestreview-1473368545) (Changes requested) - ✅ Reviewed PR in [avelino/phanpy-app](https://github.com/avelino/phanpy-app): [[ImgBot] Optimize images](https://github.com/avelino/phanpy-app/pull/1#pullrequestreview-1473364431) (Approved) ## 2023-06-08 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [upgrade feed fetch, before process xml](https://github.com/avelino/bots.clj.social/pull/51) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [GitHub issue templates](https://github.com/raphamorim/rio/issues/90) - 🐛 Opened issue in [Tensegritics/ClojureDart](https://github.com/Tensegritics/ClojureDart): [type 'Future' is not a subtype of type 'WebViewController' in type cast](https://github.com/Tensegritics/ClojureDart/issues/237) ## 2023-06-07 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [upgrade feed fetch](https://github.com/avelino/bots.clj.social/pull/50) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update Keygen sponsor tagline](https://github.com/avelino/awesome-go/pull/4906#pullrequestreview-1468242434) (Approved) - ✅ Reviewed PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [add: flowbite lib](https://github.com/moclojer/moclojer-app/pull/30#pullrequestreview-1467376823) (Approved) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Update Keygen sponsor logo](https://github.com/avelino/avelino.run/pull/41#pullrequestreview-1468241745) (Approved) ## 2023-06-06 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Pnutmux to README.md](https://github.com/avelino/awesome-go/pull/4902#pullrequestreview-1464968444) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Bump fast-xml-parser from 4.0.12 to 4.2.4](https://github.com/avelino/bots.clj.social/pull/49#pullrequestreview-1466263843) (Approved) ## 2023-06-05 - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Bump redis from 4.6.6 to 4.6.7](https://github.com/avelino/bots.clj.social/pull/48#pullrequestreview-1462015835) (Approved) ## 2023-06-03 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [docs: move to discord](https://github.com/prest/prest/pull/825#pullrequestreview-1460105198) (Approved) ## 2023-06-02 - 🔀 Opened PR in [github/brasil](https://github.com/github/brasil): [add awesome-go](https://github.com/github/brasil/pull/20) ## 2023-06-01 - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [thema with problem in version 0.0.5](https://github.com/raphamorim/rio/issues/75) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [cljam/supabase-clj](https://github.com/cljam/supabase-clj): 3 commit(s) - [See commits](https://github.com/cljam/supabase-clj/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 2 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): 7 commit(s) - [See commits](https://github.com/moclojer/moclojer-app/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [github/brasil](https://github.com/github/brasil): 1 commit(s) - [See commits](https://github.com/github/brasil/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [avelino/phanpy-app](https://github.com/avelino/phanpy-app): 12 commit(s) - [See commits](https://github.com/avelino/phanpy-app/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [cljam/careers](https://github.com/cljam/careers): 1 commit(s) - [See commits](https://github.com/cljam/careers/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 17 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) - 🔨 Push to [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): 1 commit(s) - [See commits](https://github.com/avelino/monotropic-theme-vscode/commits?author=avelino&since=2023-06-01T00:00:00Z&until=2023-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Fale com confiança como se você estivesse certo, mas escute com atenção como se estivesse errado **URL**: https://avelino.run/fale-com-confianca-como-se-voce-estivesse-certo-mas-escute-com-atencao-como-se-estivesse-errado/ **Published**: 2023-05-03 **Tags**: autoconhecimento, escuta ativa, carreira, evolução pessoal **Word Count**: 453 words ![Fale com confiança como se você estivesse certo, mas escute com atenção como se estivesse errado](/blog/fale-com-confianca-como-se-voce-estivesse-certo-mas-escute-com-atencao-como-se-estivesse-errado.jpeg) Um aspecto crucial do autoaperfeiçoamento é atingir o equilíbrio certo entre confiança e humildade, especialmente em nossa comunicação com as outras pessoas. "Devemos sempre ouvir atentamente os outros porque eles podem nos dar o conhecimento que nos falta às vezes e nos ajudar a corrigir alguns erros que estamos cometendo inconscientemente" **Confiança:** chave de ouro para uma comunicação clara A **confiança** tem um papel fundamental no compartilhamento de ideias, opiniões e conhecimentos. Quando falamos com **convicção**, é provável que consigamos atrair a atenção das pessoas e gerar impacto duradouro. Porem, a *confiança* nunca deve ser confundida com **arrogância ou mente fechada**. É extremamente importante reconhecer que nosso conhecimento, *embora valioso*, não é infalível. **Humildade:** porta de entrada para o aprendizado e o crescimento Embora a *confiança* seja necessária para ter comunicação clara, a **humildade** é a chave para o *aprendizado e o crescimento contínuos*. Adotar atitude de humildade significa reconhecer que **sempre há mais a aprender** e que outras pessoas podem ter percepções que podem ampliar nosso entendimento. **Ouvir ativamente (ter escuta ativa) e estar aberto a novas ideias**, criamos oportunidades de crescimento pessoal e autoaperfeiçoamento. > Fale como se estivesse certo, ouça como se estivesse errado A frase cima resume o delicado **equilíbrio entre confiança e humildade** na comunicação. Falar com convicção permite expressar nossas ideias de forma eficaz, por outro lado, estar em uma conversa com a "escuta ativa" facilita o aprendizado. Mantendo esse equilíbrio, participamos de um diálogo significativo, desafiar nossas suposições e promover o crescimento pessoal e profissional. **Escuta ativa:** arte de obter conhecimento das outras pessoas Escuta ativa é um componente essencial para uma comunicação eficaz e principalmente do crescimento pessoal. Ao prestar atenção genuinamente nas pessoas, descobriremos novos ponto de vista, identificar brechas (falhas, pontos a melhorar) em nosso conhecimento e evoluir nossa forma de pensar. Promovendo **cultura de escuta ativa**, podemos criar um ambiente que as ideias e opiniões de todos são valorizadas, que provavelmente nos levará a melhor tomada de decisão, trazendo as pessoas junto (senso mais forte de comunidade). **A estratégia deve ser equilibrar confiança e humildade.** Algumas estratégias práticas para dominar a *arte* de confiança e humildade (de forma equilibrada): * **Pratique a escuta ativa:** busque entender a perspectiva da pessoa que esta falando e faça perguntas esclarecedoras para entender o ponto de vista dele, isso demonstrará seu envolvimento; * **Tenha mentalidade de crescimento:** reconheça que seu conhecimento e suas habilidades não são fixos e podem ser desenvolvidos por meio de esforço e aprendizado; * **Busque feedback:** solicite regularmente feedback de outras pessoas para descobrir pontos cegos em sua compreensão e identificar áreas para aprimoramento; * **Reflita sobre seus próprios pré-conceitos e preconceitos:** esteja ciente de seus próprios preconceitos e suposições, esteja disposto a quebrá-los com novas informações. --- # Open Source Contributions - May 2023 **URL**: https://avelino.run/foss/2023/05/ **Published**: 2023-05-01 **Word Count**: 674 words **Summary**: May 2023 saw 22 repositories engaging in 60 contributions, including 12 pull requests and 16 reviews, enhancing collaboration and project advancements. In May 2023, the contributions across 22 repositories highlighted a vibrant month of development. With a total of 60 contributions, including 12 new pull requests and 16 reviews, this timeline showcases the collaborative spirit and innovative progress made by contributors. Explore the details of each contribution to see how they shaped the projects. ## 2023-05-31 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/spf13/viper from 1.15.0 to 1.16.0](https://github.com/prest/prest/pull/824#pullrequestreview-1452863424) (Approved) ## 2023-05-30 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add reeflective/readline](https://github.com/avelino/awesome-go/pull/4683#pullrequestreview-1450698470) (Approved) ## 2023-05-29 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ergo-services/ergo](https://github.com/avelino/awesome-go/pull/4901#pullrequestreview-1448637737) (Changes requested) ## 2023-05-28 - 🔀 Opened PR in [raphamorim/rio](https://github.com/raphamorim/rio): [gh action/release: no condition needed, 'ON' already validates the branch and tag](https://github.com/raphamorim/rio/pull/65) - ✅ Reviewed PR in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [docs: update dependency install instructions](https://github.com/sinaptik-ai/pandas-ai/pull/186#pullrequestreview-1448326014) (Approved) - ✅ Reviewed PR in [github/brasil](https://github.com/github/brasil): [Add Rio terminal](https://github.com/github/brasil/pull/17#pullrequestreview-1448423572) (Approved) ## 2023-05-27 - 🔀 Opened PR in [raphamorim/rio](https://github.com/raphamorim/rio): [testimonial: avelino](https://github.com/raphamorim/rio/pull/61) - 🔀 Opened PR in [raphamorim/rio](https://github.com/raphamorim/rio): [gh action: build on arm and x86 (macOS)](https://github.com/raphamorim/rio/pull/59) - 🔀 Opened PR in [avelino/rio](https://github.com/avelino/rio): [Avelino/build matrix](https://github.com/avelino/rio/pull/1) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [hyperlink in url](https://github.com/raphamorim/rio/issues/60) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [error: No 'package' info found in 'Cargo.toml'](https://github.com/raphamorim/rio/issues/58) ## 2023-05-26 - 🔀 Opened PR in [logseq/publish-spa](https://github.com/logseq/publish-spa): [readme: use release 0.2.0 in example](https://github.com/logseq/publish-spa/pull/7) ## 2023-05-25 - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [`shift+arrows` stopped working on tmux (`->` and `<-`)](https://github.com/raphamorim/rio/issues/53) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [cursor hidden on htop](https://github.com/raphamorim/rio/issues/51) ## 2023-05-23 - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [Specification to Rio themes (folder pattern)](https://github.com/raphamorim/rio/issues/43) - 🐛 Opened issue in [raphamorim/rio](https://github.com/raphamorim/rio): [specification to Rio themes (folder pattern)](https://github.com/raphamorim/rio/issues/42) ## 2023-05-22 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [build(ci): fix first comment github action](https://github.com/avelino/awesome-go/pull/4896#pullrequestreview-1437420975) (Approved) ## 2023-05-19 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/stretchr/testify from 1.8.2 to 1.8.3](https://github.com/prest/prest/pull/822#pullrequestreview-1434159666) (Approved) ## 2023-05-18 - 🔍 Reviewed PR in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [added google sheets functionality](https://github.com/sinaptik-ai/pandas-ai/pull/120#pullrequestreview-1432722699) (Changes requested) - 🔍 Reviewed PR in [feast-dev/feast](https://github.com/feast-dev/feast): [fix: Implements connection pool for postgres online store](https://github.com/feast-dev/feast/pull/3633#pullrequestreview-1432695299) (Changes requested) ## 2023-05-12 - 🔀 Opened PR in [logseq/logseq](https://github.com/logseq/logseq): [enhance: split language translations into one file per language](https://github.com/logseq/logseq/pull/9383) ## 2023-05-11 - 🔍 Reviewed PR in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [CLI](https://github.com/sinaptik-ai/pandas-ai/pull/107#pullrequestreview-1422072495) (Changes requested) - 🐛 Opened issue in [logseq/publish-spa](https://github.com/logseq/publish-spa): [images within a public page](https://github.com/logseq/publish-spa/issues/6) ## 2023-05-09 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [WIP: simplify specification and flow](https://github.com/moclojer/moclojer/pull/114) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Reduce maintenance complexity caused by the `OpenAPI` specification](https://github.com/moclojer/moclojer/issues/113) ## 2023-05-08 - ✅ Reviewed PR in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [Using pytest fixtures instead of multiple function calls](https://github.com/sinaptik-ai/pandas-ai/pull/84#pullrequestreview-1416011723) (Approved) ## 2023-05-07 - ✅ Reviewed PR in [github/brasil](https://github.com/github/brasil): [Rename CONTRIBUTING.MD to CONTRIBUTING.md](https://github.com/github/brasil/pull/10#pullrequestreview-1415838014) (Approved) - 🐛 Opened issue in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [command to check text](https://github.com/avelino/logseq-languagetool/issues/11) - 🐛 Opened issue in [parenthesin/components](https://github.com/parenthesin/components): [htmx support](https://github.com/parenthesin/components/issues/8) ## 2023-05-06 - 🔀 Opened PR in [github/brasil](https://github.com/github/brasil): [maintainers: add me (avelino)](https://github.com/github/brasil/pull/8) - ✅ Reviewed PR in [github/brasil](https://github.com/github/brasil): [Update maintainers.yml](https://github.com/github/brasil/pull/7#pullrequestreview-1415762684) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Fix code scanning alert – Database query built from user-controlled sources](https://github.com/prest/prest/issues/818) ## 2023-05-04 - 🔀 Opened PR in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [ignore .DS_Store](https://github.com/sinaptik-ai/pandas-ai/pull/44) - 🔀 Opened PR in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [interpret json when llm returns json code](https://github.com/sinaptik-ai/pandas-ai/pull/33) - 💬 Reviewed PR in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [Feature/cohere LLM](https://github.com/sinaptik-ai/pandas-ai/pull/39#pullrequestreview-1413091626) (Commented) - 🐛 Opened issue in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [`exec` is risky](https://github.com/sinaptik-ai/pandas-ai/issues/43) - 🐛 Opened issue in [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): [error requesting data in `json` format](https://github.com/sinaptik-ai/pandas-ai/issues/32) - 🐛 Opened issue in [andre-noel/leitura](https://github.com/andre-noel/leitura): [o software é licenciado sobre qual licença?](https://github.com/andre-noel/leitura/issues/2) ## 2023-05-03 - 🔀 Opened PR in [resend/resend-python](https://github.com/resend/resend-python): [api: change print to warn](https://github.com/resend/resend-python/pull/23) - 🔀 Opened PR in [resend/resend-python](https://github.com/resend/resend-python): [readme/example: fixed typo](https://github.com/resend/resend-python/pull/22) ## 2023-05-01 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump docker/build-push-action from 2 to 4](https://github.com/moclojer/moclojer/pull/109#pullrequestreview-1408083367) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 2 to 3](https://github.com/moclojer/moclojer/pull/110#pullrequestreview-1408082967) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [avelino/monotropic-coffee-hyper](https://github.com/avelino/monotropic-coffee-hyper): 1 commit(s) - [See commits](https://github.com/avelino/monotropic-coffee-hyper/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 6 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 4 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 1 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [github/brasil](https://github.com/github/brasil): 2 commit(s) - [See commits](https://github.com/github/brasil/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [cljam/careers](https://github.com/cljam/careers): 2 commit(s) - [See commits](https://github.com/cljam/careers/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [sinaptik-ai/pandas-ai](https://github.com/sinaptik-ai/pandas-ai): 4 commit(s) - [See commits](https://github.com/sinaptik-ai/pandas-ai/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 1 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [logseq/logseq](https://github.com/logseq/logseq): 6 commit(s) - [See commits](https://github.com/logseq/logseq/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [prest/sentry-prestd-plugin](https://github.com/prest/sentry-prestd-plugin): 1 commit(s) - [See commits](https://github.com/prest/sentry-prestd-plugin/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 4 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [logseq/publish-spa](https://github.com/logseq/publish-spa): 1 commit(s) - [See commits](https://github.com/logseq/publish-spa/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 6 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [resend/resend-python](https://github.com/resend/resend-python): 5 commit(s) - [See commits](https://github.com/resend/resend-python/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [raphamorim/rio](https://github.com/raphamorim/rio): 3 commit(s) - [See commits](https://github.com/raphamorim/rio/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) - 🔨 Push to [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): 1 commit(s) - [See commits](https://github.com/avelino/logseq-languagetool/commits?author=avelino&since=2023-05-01T00:00:00Z&until=2023-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # How to reuse workflow in GitHub Action pipeline **URL**: https://avelino.run/how-to-reuse-workflow-in-github-action-pipeline/ **Published**: 2023-04-27 **Tags**: github, github actions, ci/cd **Word Count**: 360 words ![How to reuse workflow in GitHub Action pipeline](/blog/how-to-reuse-workflow-in-github-action-pipeline.jpg) Before I tell you how to do it, I will describe the problem I needed to solve and why I believed that reuse would be the best option to reduce duplicate code. I maintain an Open Source project called [moclojer](https://github.com/moclojer/moclojer) written in **Clojure** and we use [GraalVM Native Imagem](https://www.graalvm.org/22.0/reference-manual/native-image/) to distribute the software in binary format (with everything self-contained). The configuration of native-image receives several parameters, some refer to libraries used in the project code and it depends on a `.jar` file, so there are some steps before "running" the command that generates the binary. Steps to generate the [moclojer](https://github.com/moclojer/moclojer) binary: 1. generate the `.jar` file 2. generate the configuration file `reflect.config.json` from the `.jar`. 3. generate the binary using `.jar` and `reflect.config.json` 4. test if the binary is working correctly - run the software 5. upload artifact (file) to generate software release on GitHub In [moclojer](https://github.com/moclojer/moclojer) I needed to run the pipeline that creates the `.jar` in every push and pull request, we had the same duplicate code in this pipeline and in the pipeline to generate the binary (Graalvm Native Image). When opening *"pull request "* I don't need to generate the binary every time just once when everything is right with the contribution, but every *"push "* I want to generate the `.jar` to validate that everything is working. ## How to reuse the workflow in GitHub Action pipeline? *Now that we are clear on the need, let's get to the point of how to do it.* In a **job** you have the parameter `jobs..uses` which accepts `.yml` file (another workflow), when it reaches this step it will call the external workflow and wait for the output, example: ```yaml jobs: call-build: uses: moclojer/moclojer/.github/workflows/build-native-image.yml@main ``` In the example above I pass the path of the workflow `build-native-image.yml` which is in the GitHub organization `moclojer` (first parameter), in the repository `moclojer` (second parameter) and in the branch `main` (comes after the name of the file `.yml` starting with `@`). `//.github/workflows/@` If the workflow being invoked depends on any permissions, the main workflow needs to have the same permissions. See the [workflow](https://github.com/moclojer/moclojer/blob/b9b27a12285742c6dd225204abcdc741abca00fa/.github/workflows/release.yml) we used for **release** from moclojer. > Learn more about [workflow reuse](https://docs.github.com/en/actions/using-workflows/reusing-workflows) in the official GitHub documentation. --- # Reporting a problem in an Open Source project is as important as contributing code **URL**: https://avelino.run/reporting-problem-in-open-source-project-is-important-contributing-code/ **Published**: 2023-04-22 **Tags**: foss, oss, open source, contributer **Word Count**: 394 words ![Reporting a problem in an Open Source project is as important as contributing code](/blog/reporting-problem-in-open-source-project-is-important-contributing-code.jpg) I constantly hear people saying that to contribute to an Open Source project you need to be able to program very well, have a lot of knowledge, be able to handle code criticism, etc. > I see the above statements as excuses and focus in the wrong place. In the last few months, I haven't had as much time to contribute to open source projects as I like (writing code), but that didn't stop me from contributing. Actually, the lack of priority (not lack of time) has made me contribute by reporting problems that I run into in the projects/software I use in my day-to-day life and this has been more work than writing code with a defined specification (issue that someone invested time detailing). Generally, reporting a problem is not just opening an issue exposing the back trace, we need to understand what generated the problem, so the person who helps to maintain the project can reproduce it "locally" (in the development environment) to think of the best solution without breaking other existing features in the software. ## How do I write a very detailed issue? Whenever I am communicating with someone, I assume that everything that is obvious to me is not so obvious to the person and I put as much context as possible in the conversation, helping the person to make the best decision. When I am opening an issue it is no different, I will describe the problem to the person who will read (solve) it, not to me, i.e. everything that is obvious to me is probably not obvious to other people. ## Code is important, but not only code Open Source projects exist to solve problems and are made by people for people, investing time in opening a detailed issue demonstrates that you care about the project and empathize with the people who are helping to maintain the project. Avoid leaving to report the issue later, you will probably forget important details. > this blogpost came up after I reported an issue in a project and the first comment was from a person saying he had run into the same problem "yesterday". > **what came to my mind was:** why didn't the person report this issue yesterday? [Query](https://github.com/search?q=is%3Apublic++author%3Aavelino+&type=issues&ref=advsearch&s=updated&o=desc) that I am constantly following on GitHub to keep track of the issues I opened, looking today there are **1.1k** issues in public repositories. --- # Open Source Contributions - April 2023 **URL**: https://avelino.run/foss/2023/04/ **Published**: 2023-04-01 **Word Count**: 777 words **Summary**: April 2023 saw 22 repositories with 71 contributions, including 20 pull requests and 19 reviews, showcasing a vibrant development community. Explore the timeline of contributions from April 2023, highlighting a productive month with significant activity across 22 repositories. With 20 pull requests and 19 reviews, the development community demonstrated robust engagement and collaboration. Discover key events and contributions that shaped this month. ## 2023-04-30 - 🔀 Opened PR in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [does not process (sends to api/check) if there is no change](https://github.com/avelino/logseq-languagetool/pull/10) - 🔀 Opened PR in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [languagetool api (http)](https://github.com/avelino/logseq-languagetool/pull/8) - 🐛 Opened issue in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [no equal text for api](https://github.com/avelino/logseq-languagetool/issues/9) ## 2023-04-29 - 🔀 Opened PR in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [devx: inject @logseq/libs into the javascript file generated](https://github.com/avelino/logseq-languagetool/pull/7) - 🔀 Opened PR in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [identify active block change](https://github.com/avelino/logseq-languagetool/pull/4) - 🐛 Opened issue in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [remove `@logseq/libs` import from html](https://github.com/avelino/logseq-languagetool/issues/6) - 🐛 Opened issue in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [languagetool api integration](https://github.com/avelino/logseq-languagetool/issues/5) ## 2023-04-27 - 🔀 Opened PR in [vercel/hyper-site](https://github.com/vercel/hyper-site): [plugins/theme: add Monotropic Coffee](https://github.com/vercel/hyper-site/pull/294) ## 2023-04-26 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/lib/pq from 1.10.8 to 1.10.9](https://github.com/prest/prest/pull/812#pullrequestreview-1401700005) (Approved) - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [plugin: middleware architecture](https://github.com/prest/prest/pull/798#pullrequestreview-1401103534) (Commented) ## 2023-04-25 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [WIP: gh action release issue 102](https://github.com/moclojer/moclojer/pull/104) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [dependabot: add maven repo](https://github.com/moclojer/moclojer/pull/103) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Bump yaml from 2.2.1 to 2.2.2](https://github.com/avelino/bots.clj.social/pull/43#pullrequestreview-1400814802) (Approved) ## 2023-04-24 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [created bug report flow](https://github.com/moclojer/moclojer/pull/101) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [use initial setting in xdg's default folder](https://github.com/moclojer/moclojer/pull/99) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Bump masto from 5.11.1 to 5.11.2](https://github.com/avelino/bots.clj.social/pull/42#pullrequestreview-1397461197) (Approved) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [release process does not work](https://github.com/moclojer/moclojer/issues/102) ## 2023-04-22 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Issue802](https://github.com/prest/prest/pull/811#pullrequestreview-1396667941) (Approved) - 🐛 Opened issue in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [Remover uso do MSW e colocar endpoints no backend](https://github.com/moclojer/moclojer-app/issues/26) - 🐛 Opened issue in [omnivore-app/logseq-omnivore](https://github.com/omnivore-app/logseq-omnivore): [TODO control](https://github.com/omnivore-app/logseq-omnivore/issues/99) ## 2023-04-21 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [clj-kondo: upgrate to v2023.04.14](https://github.com/moclojer/moclojer/pull/98) - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [slack theme: initial coffee](https://github.com/avelino/monotropic-theme-vscode/pull/20) ## 2023-04-20 - 🐛 Opened issue in [toeverything/AFFiNE](https://github.com/toeverything/AFFiNE): [​support folder structure (not just page)](https://github.com/toeverything/AFFiNE/issues/2051) ## 2023-04-18 - 🐛 Opened issue in [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): [file sharing being opened in the same "tab" and not in a new tab (even with target `_black`)](https://github.com/RocketChat/Rocket.Chat/issues/28956) - 🐛 Opened issue in [logseq/logseq](https://github.com/logseq/logseq): [`:scheduled/future-days` set to 0 - UI error](https://github.com/logseq/logseq/issues/9147) ## 2023-04-17 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump graalvm/setup-graalvm from 1.0.10 to 1.0.11](https://github.com/moclojer/moclojer/pull/97#pullrequestreview-1388510820) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump DeLaGuardo/setup-clojure from 10.2 to 10.3](https://github.com/moclojer/moclojer/pull/96#pullrequestreview-1388510079) (Approved) ## 2023-04-15 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [issue325](https://github.com/prest/prest/pull/806#pullrequestreview-1386536463) (Changes requested) - 💬 Reviewed PR in [babashka/nbb](https://github.com/babashka/nbb): [Add `--print-classpath` global option](https://github.com/babashka/nbb/pull/321#pullrequestreview-1386282038) (Commented) ## 2023-04-14 - 🐛 Opened issue in [omnivore-app/omnivore](https://github.com/omnivore-app/omnivore): [pocket integration: Cannot POST `/api/integration/pocket/auth`](https://github.com/omnivore-app/omnivore/issues/2050) ## 2023-04-13 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [refactor github issue template to form](https://github.com/prest/prest/pull/803) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Weaviate](https://github.com/avelino/awesome-go/pull/4710#pullrequestreview-1384206092) (Changes requested) ## 2023-04-12 - 🐛 Opened issue in [omnivore-app/omnivore](https://github.com/omnivore-app/omnivore): [Feed/rss support](https://github.com/omnivore-app/omnivore/issues/2029) ## 2023-04-10 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [WIP: w.Write: replace to `http.ResponseWriter.Write`](https://github.com/prest/prest/pull/801) - 🔀 Opened PR in [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): [fix(docs,readme): use raw image url](https://github.com/RocketChat/Rocket.Chat/pull/28861) ## 2023-04-09 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [docs/Server Configuration: correct pg_ssl variable name and improve formatting](https://github.com/prest/prest/pull/799) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [plugin: middleware architecture](https://github.com/prest/prest/pull/798) - 🐛 Opened issue in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [modal for word correction](https://github.com/avelino/logseq-languagetool/issues/3) - 🐛 Opened issue in [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): [Identify active block change](https://github.com/avelino/logseq-languagetool/issues/2) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [lint: error return value of `w.Write` is not checked (errcheck)](https://github.com/prest/prest/issues/800) ## 2023-04-08 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [test(samples): added postman sample to start the regression tests](https://github.com/prest/prest/pull/789#pullrequestreview-1376816205) (Approved) ## 2023-04-07 - 🔀 Opened PR in [debanjandhar12/logseq-chatgpt-plugin](https://github.com/debanjandhar12/logseq-chatgpt-plugin): [readme: add shortcut list](https://github.com/debanjandhar12/logseq-chatgpt-plugin/pull/15) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [update negroni to v3](https://github.com/prest/prest/pull/796#pullrequestreview-1376662336) (Approved) ## 2023-04-06 - 🔀 Opened PR in [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): [feat: add GA4 support](https://github.com/RocketChat/Rocket.Chat/pull/28830) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [issue_783](https://github.com/prest/prest/pull/793#pullrequestreview-1375131746) (Approved) - 🐛 Opened issue in [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): [Google Analytics GA4 support](https://github.com/RocketChat/Rocket.Chat/issues/28829) ## 2023-04-05 - 🔀 Opened PR in [pluwen/awesome-testflight-link](https://github.com/pluwen/awesome-testflight-link): [ios/ipad: rocket.chat app](https://github.com/pluwen/awesome-testflight-link/pull/121) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [pull-request-first-comment: use avelino personal token](https://github.com/avelino/awesome-go/pull/4829) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/spf13/cobra from 1.6.1 to 1.7.0](https://github.com/prest/prest/pull/794#pullrequestreview-1372641166) (Approved) ## 2023-04-04 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/4821#pullrequestreview-1370740664) (Changes requested) ## 2023-04-03 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [@golang_discussions](https://github.com/avelino/awesome-go/pull/4819#pullrequestreview-1368832210) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [@GoDiscussions](https://github.com/avelino/awesome-go/pull/4818#pullrequestreview-1368830539) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Golang Weekly](https://github.com/avelino/awesome-go/pull/4820#pullrequestreview-1368829365) (Changes requested) ## 2023-04-02 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [roreleaser upload error](https://github.com/prest/prest/issues/792) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-04-02](https://github.com/avelino/awesome-go/issues/4824) ## 2023-04-01 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [issue_775_root_fatal](https://github.com/prest/prest/pull/791#pullrequestreview-1367821825) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [avelino/logseq-libs](https://github.com/avelino/logseq-libs): 6 commit(s) - [See commits](https://github.com/avelino/logseq-libs/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [debanjandhar12/logseq-chatgpt-plugin](https://github.com/debanjandhar12/logseq-chatgpt-plugin): 1 commit(s) - [See commits](https://github.com/debanjandhar12/logseq-chatgpt-plugin/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [avelino/monotropic-coffee-hyper](https://github.com/avelino/monotropic-coffee-hyper): 4 commit(s) - [See commits](https://github.com/avelino/monotropic-coffee-hyper/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 35 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 2 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [cljam/.github](https://github.com/cljam/.github): 2 commit(s) - [See commits](https://github.com/cljam/.github/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): 15 commit(s) - [See commits](https://github.com/moclojer/moclojer-app/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [cljam/careers](https://github.com/cljam/careers): 1 commit(s) - [See commits](https://github.com/cljam/careers/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 6 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 6 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): 1 commit(s) - [See commits](https://github.com/avelino/monotropic-theme-vscode/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): 2 commit(s) - [See commits](https://github.com/RocketChat/Rocket.Chat/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 8 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) - 🔨 Push to [avelino/logseq-languagetool](https://github.com/avelino/logseq-languagetool): 26 commit(s) - [See commits](https://github.com/avelino/logseq-languagetool/commits?author=avelino&since=2023-04-01T00:00:00Z&until=2023-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # O trabalho é subconjunto da vida, não superconjunto **URL**: https://avelino.run/o-trabalho-eh-subconjunto-da-vida-nao-superconjunto/ **Published**: 2023-03-21 **Tags**: evolução pessoal, desenvolvimento, carreira **Word Count**: 509 words ![Ilustração: GoLimitlesss](/blog/o-trabalho-eh-subconjunto-da-vida-nao-superconjunto.jpeg) Como **ex-viciado** no trabalho, eu amo orientações que reforça para mim como continuo mantendo equilíbrio entre vida profissional e pessoal :) Nossa vida é uma coleção de vários componentes que a tornam completa e estabelecer um equilíbrio entre eles é a chave para alcançar a felicidade (possivelmente o sucesso a longo prazo, independente do que seja sucesso para você). Passamos boa parte do nosso tempo no trabalho ou pensando no trabalho, é crucial reconhecê-lo como trabalho e ele não deve ser o único fator em nossa vida. > O trabalho é apenas uma peça do **"quebra-cabeça"** _Embora o sucesso profissional e a segurança financeira sejam super importantes_, é extremamente importante não deixar que o trabalho se torne o superconjunto que domina e ofusca as outras partes da nossa vida. Colocando o foco apenas no trabalho, podemos negligenciar outras áreas críticas que contribuem para uma vida plena, como saúde, familia, relacionamentos, e crescimento pessoal (não necessariamente profissional). **Lembre-se que o trabalho é um meio para atingir um fim**, ~~não o fim em si~~. Ele deve nos proporcionar os recursos e oportunidades para desfrutar e melhorar outras áreas de nossas vidas. > "**Mas** e se eu realmente amo o que faço?" Muitas vezes surge em discussões sobre o equilíbrio trabalho e vida. É 100% certo encontrar alegria em seu trabalho. Dito isto, devemos ser intencional onde queremos passar nosso tempo para se divertir e reconhecer que nem todos podem estar na mesma posição são fatores importantes. **Criando uma vida bem fundamentada** Algumas medidas práticas que podemos tomar para construir uma vida equilibrada: - **Priorizar as relações:** cultivar e manter relações fortes com a família, amigos e entes queridos. Reserve um tempo dedicado a conectar e nutrir esses laços, pois eles proporcionam um sistema vital de apoio e equilíbrio emocional. - **Invista em sua saúde:** faça esforço consciente para priorizar seu bem-estar físico, mental e emocional. Exercite-se regularmente, coma saudavelmente, pratique técnicas de redução do estresse e procure ajuda profissional quando necessário. - **Busque interesses pessoais:** reserve tempo para passatempos e interesses fora do trabalho. Envolver-se em atividades pelas quais você é apaixonado pode levar ao aumento da felicidade, à redução do estresse e a uma maior sensação de realização. - **Estabeleça Fronteiras:** estabeleça limites claros entre o trabalho e a vida pessoal. Evite trabalhar horas excessivamente longas ou trazer trabalho para casa. Ao estabelecer limites, você pode proteger seu tempo e energia para outros aspectos essenciais da vida. - **Abrace a aprendizagem ao longo da vida:** continue aprendendo e crescendo, tanto pessoal quanto profissionalmente. Busque novas experiências, adquira novas habilidades e desafie-se a ser a melhor versão de si mesmo. - **Reflita e Reavalie:** reflita e reavalie regularmente sobre sua vida e avalie se você está mantendo um equilíbrio saudável. Ajuste suas prioridades e compromissos de acordo para garantir que você esteja vivendo em alinhamento com seus valores e aspirações. Se for adequado para você, não deixe que o trabalho domine todo o quadro; ao invés disso, procure criar uma vida bem balanceada e equilibrada que englobe todos os diferentes aspectos que trazem sentido e realização à sua existência. --- # Open Source Contributions - March 2023 **URL**: https://avelino.run/foss/2023/03/ **Published**: 2023-03-01 **Word Count**: 627 words **Summary**: March 2023 saw 17 repositories with 51 total contributions, including 9 open pull requests and 18 reviews, marking a significant month for collaboration. Explore the contributions made in March 2023, highlighting key activities across 17 repositories. This timeline showcases the collaborative efforts, including pull requests, reviews, and issue tracking that shaped the month. ## 2023-03-31 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add kazhuravlev/just](https://github.com/avelino/awesome-go/pull/4792#pullrequestreview-1367128572) (Changes requested) ## 2023-03-30 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [using native-image in docker image](https://github.com/moclojer/moclojer/pull/95) - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [issue_775_root_fatal](https://github.com/prest/prest/pull/791#pullrequestreview-1366067773) (Changes requested) ## 2023-03-29 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add fluentassert to Testing](https://github.com/avelino/awesome-go/pull/4573#pullrequestreview-1362797614) (Approved) ## 2023-03-28 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update the contribution guidelines link](https://github.com/avelino/awesome-go/pull/4812#pullrequestreview-1360485595) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix(migrate_up): added string interpolation to migration](https://github.com/prest/prest/pull/788#pullrequestreview-1360454909) (Approved) ## 2023-03-26 - 🔀 Opened PR in [debanjandhar12/logseq-chatgpt-plugin](https://github.com/debanjandhar12/logseq-chatgpt-plugin): [set shortcut to ChatGPT page list](https://github.com/debanjandhar12/logseq-chatgpt-plugin/pull/8) - 🔀 Opened PR in [debanjandhar12/logseq-chatgpt-plugin](https://github.com/debanjandhar12/logseq-chatgpt-plugin): [fix: "Ask ChatGPT" button is below the page text](https://github.com/debanjandhar12/logseq-chatgpt-plugin/pull/7) - 🔀 Opened PR in [avelino/logseq-chatgpt-plugin](https://github.com/avelino/logseq-chatgpt-plugin): [set shortcut to call "ask chatgpt"](https://github.com/avelino/logseq-chatgpt-plugin/pull/1) - 🔀 Opened PR in [raphamorim/rio](https://github.com/raphamorim/rio): [config: use XDG base directory](https://github.com/raphamorim/rio/pull/14) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): ["Awesome-go" should be awesome!](https://github.com/avelino/awesome-go/pull/4760#pullrequestreview-1358144545) (Changes requested) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-03-26](https://github.com/avelino/awesome-go/issues/4809) - 🐛 Opened issue in [debanjandhar12/logseq-chatgpt-plugin](https://github.com/debanjandhar12/logseq-chatgpt-plugin): ["Ask ChatGPT" button is below the page text](https://github.com/debanjandhar12/logseq-chatgpt-plugin/issues/6) - 🐛 Opened issue in [debanjandhar12/logseq-chatgpt-plugin](https://github.com/debanjandhar12/logseq-chatgpt-plugin): [shortcut to "Ask ChatGPT"](https://github.com/debanjandhar12/logseq-chatgpt-plugin/issues/5) ## 2023-03-25 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added GoNB to README.md](https://github.com/avelino/awesome-go/pull/4783#pullrequestreview-1357904283) (Changes requested) ## 2023-03-24 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [test(samples): added postman sample to start the regression tests](https://github.com/prest/prest/pull/789#pullrequestreview-1356493101) (Changes requested) - 🐛 Opened issue in [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): [kibana's link does not work ](https://github.com/RocketChat/Rocket.Chat/issues/28604) ## 2023-03-22 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Fixup](https://github.com/prest/prest/pull/786#pullrequestreview-1351562300) (Approved) - 🐛 Opened issue in [RocketChat/docs](https://github.com/RocketChat/docs): [Reopen PR here?](https://github.com/RocketChat/docs/issues/5) ## 2023-03-21 - 🐛 Opened issue in [yamadashy/slack-channels-grouping](https://github.com/yamadashy/slack-channels-grouping): [rocketchat support](https://github.com/yamadashy/slack-channels-grouping/issues/34) ## 2023-03-20 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add library for the crypto NOWPayments API](https://github.com/avelino/awesome-go/pull/4658#pullrequestreview-1348080030) (Changes requested) - 🐛 Opened issue in [yoyurec/logseq-tabler-picker](https://github.com/yoyurec/logseq-tabler-picker): [rendering the wrong icon in the title, but it is right in the property](https://github.com/yoyurec/logseq-tabler-picker/issues/2) ## 2023-03-19 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-03-19](https://github.com/avelino/awesome-go/issues/4802) ## 2023-03-18 - 🔀 Opened PR in [RocketChat/Docker.Official.Image](https://github.com/RocketChat/Docker.Official.Image): [compose: mongo 5.0](https://github.com/RocketChat/Docker.Official.Image/pull/183) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [ADD Go-IPAM](https://github.com/avelino/awesome-go/pull/4470#pullrequestreview-1346978255) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added fuzzy to list of string libraries in golang. it is used for fuzzy string matching optimized for filenames and code symbols.](https://github.com/avelino/awesome-go/pull/4469#pullrequestreview-1346978117) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add podinfo in go tools](https://github.com/avelino/awesome-go/pull/4468#pullrequestreview-1346978055) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add LibraDB and Chronos](https://github.com/avelino/awesome-go/pull/4462#pullrequestreview-1346977895) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add contextplus](https://github.com/avelino/awesome-go/pull/4457#pullrequestreview-1346977719) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added giu to GUI](https://github.com/avelino/awesome-go/pull/4330#pullrequestreview-1346977594) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added vacuum to the Code Analysis tools](https://github.com/avelino/awesome-go/pull/4496#pullrequestreview-1346977384) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update redis repo](https://github.com/avelino/awesome-go/pull/4799#pullrequestreview-1346976815) (Approved) - 🐛 Opened issue in [Gswaraw37/ProjectPenjualan](https://github.com/Gswaraw37/ProjectPenjualan): [why are you using the awesome-go repository in your project?](https://github.com/Gswaraw37/ProjectPenjualan/issues/1) ## 2023-03-14 - 🔀 Opened PR in [TankCool/logseq-toolbox](https://github.com/TankCool/logseq-toolbox): [demo: use github raw link](https://github.com/TankCool/logseq-toolbox/pull/1) ## 2023-03-13 - 🐛 Opened issue in [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): [SlackBridge: private message going to the general channel (main)](https://github.com/RocketChat/Rocket.Chat/issues/28400) ## 2023-03-12 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-03-12](https://github.com/avelino/awesome-go/issues/4794) ## 2023-03-10 - 🔀 Opened PR in [RocketChat/docs-old](https://github.com/RocketChat/docs-old): [oauth/google: Erro 400: redirect_uri_mismatch](https://github.com/RocketChat/docs-old/pull/2104) - 🐛 Opened issue in [RocketChat/Rocket.Chat](https://github.com/RocketChat/Rocket.Chat): [import/slack: progress bar does not work in version 6.0.0](https://github.com/RocketChat/Rocket.Chat/issues/28364) ## 2023-03-09 - 🔀 Opened PR in [RocketChat/docs-old](https://github.com/RocketChat/docs-old): [slack/import: problem with special character in channel name](https://github.com/RocketChat/docs-old/pull/2102) ## 2023-03-05 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-03-05](https://github.com/avelino/awesome-go/issues/4779) ## Commits - 🔨 Push to [RocketChat/Docker.Official.Image](https://github.com/RocketChat/Docker.Official.Image): 1 commit(s) - [See commits](https://github.com/RocketChat/Docker.Official.Image/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [TankCool/logseq-toolbox](https://github.com/TankCool/logseq-toolbox): 1 commit(s) - [See commits](https://github.com/TankCool/logseq-toolbox/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [debanjandhar12/logseq-chatgpt-plugin](https://github.com/debanjandhar12/logseq-chatgpt-plugin): 1 commit(s) - [See commits](https://github.com/debanjandhar12/logseq-chatgpt-plugin/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 6 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 2 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 9 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 2 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [RocketChat/docs-old](https://github.com/RocketChat/docs-old): 1 commit(s) - [See commits](https://github.com/RocketChat/docs-old/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) - 🔨 Push to [raphamorim/rio](https://github.com/raphamorim/rio): 1 commit(s) - [See commits](https://github.com/raphamorim/rio/commits?author=avelino&since=2023-03-01T00:00:00Z&until=2023-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Construindo uma cultura de engenharia de produto **URL**: https://avelino.run/construindo-cultura-de-engenharia-de-produto/ **Published**: 2023-02-05 **Tags**: produto, product-engineer, desenvolvimento, carreira **Word Count**: 1103 words ![Construindo uma cultura de engenharia de produto](/blog/construindo-cultura-de-engenharia-de-produto.png) Antes de falar sobre como criar cultura de engenharia de produto precisamos alinhar o que é **Engenharia de Produto** *(para pessoa engenheira de software)* e *principalmente* o que é **cultura** (ou pelo menos o que estou chamando de cultura). **Engenharia de Produto** é um processo que colocamos nosso usuário como protagonista do "produto" que estamos desenvolvendo e buscamos entender os pontos com maior fricção para priorizar o que precisa ser feito *(não só o que queremos)*. Geralmente pessoas engenheiras de produto são apaixonadas em usar tecnologia para resolver problemas e sabe como aplica-la para solucionar problema a curto, médio e longo prazo, começando de forma simples (também podemos chamar de MVP) e conectada com a estratégia de longo prazo. Leia mais [aqui](https://avelino.run/pessoas-desenvolvedoras-com-pensamento-de-produto-engenharia-de-produto/). **Cultura** é o conjunto de saberes, costumes, tradições e expressões **transmitidas de geração em geração por um grupo de pessoas**, à forma como essas pessoas encaram o mundo e interagem entre si. ## O que é Cultura de Engenharia de Produto É uma abordagem para desenvolver produtos de alta qualidade e rentáveis, envolvendo as melhores práticas da engenharia, a criatividade e a colaboração. Esta cultura se concentra em obter maior lucratividade e sucesso dos produtos na vida útil. Isso inclui o uso de análise de desempenho, análises de risco, pesquisa de mercado e processos de design para criar produtos que atendam às necessidades dos clientes. Também incentiva a inovação, a busca de excelência e uma mentalidade de longo prazo. Visando garantir o sucesso do produto, a cultura incentiva a colaboração entre as pessoas envolvidas no processo. Por exemplo, pessoas engenheiras trabalhar próximo de pessoas de marketing, comercial e etc, com o propósito de desenvolver um produto para atender melhor às necessidades dos clientes. Essa colaboração é essencial para o sucesso do produto e para assegurar que o produto está evoluindo com a necessidade dos clientes e não por ~~achismo~~ dos gestores. A cultura de engenharia de produto também trabalha com um escopo mais amplo de perspectivas de negócios. Por exemplo, levamos em conta a manutenção e o processo de atualização do produto, além do custo em que o produto foi produzido e o retorno sobre o investimento. Ao usar esses recursos para obter informações sobre como melhorar o desempenho dos produtos, os profissionais de engenharia de produto podem criar soluções eficientes e lucrativas para qualquer problema. O aspecto chave de uma cultura de engenharia de produto é o foco na colaboração e comunicação. Isto envolve reuniões regulares e check-ins para assegurar que todos os membros da equipe estejam na mesma página, bem como a utilização de ferramentas e tecnologias para facilitar a colaboração e comunicação (independente da localização de cada membro do time) - sem sombra de dúvida as metodologias ágeis ajudarão muito e garantirá a recorrência da comunicação. **Em resumo**, uma cultura de engenharia de produto é caracterizada por um foco na entrega de produtos de alta qualidade que satisfaçam as necessidades dos clientes, bem como um compromisso de colaboração, comunicação, e melhoria contínua. Ao promover este tipo de cultura, as organizações podem criar um ambiente de trabalho positivo e produtivo que permita a máxima inovação e sucesso. ## Como criar uma Cultura de Engenharia de Produto? Independente da cultura que você quer ou precisa criar é um processo árduo, contínuo e leva tempo - *cultura não será criada do dia para noite* - **quando você cansar de falar sobre a cultura será o momento que as pessoas estão começando entender o primeiro item da cultura**, isso significa que a liderança deve constantemente investir muito tempo para falar sobre cultura e formar novos *"guardiões da cultura"*. A chave para o sucesso da criação de cultura é o diálogo contínuo, o envolvimento das pessoas no processo e consistência na prática. Descrevo abaixo como tenho feito para construir essa cultura na Buser: * **Desenvolva software coletando métricas dos seus usuários.** É comum ter ansiedade (pressa) para colocar um novo recurso do produto no ar, mas *não caia na armadilha* de colocar o recurso em produção sem antes coletar métricas úteis de uso do novo recurso. Tendo métricas conseguimos priorizar a *evolução do recurso ou até mesmo descontinuar o recurso*. * **Busque sempre conhecer seu usuário.** Quanto mais você conhecer seu cliente melhor é (tenha empatia), **entrevistas, discoveries e etc** são primordiais para se conectar com ele - é comum pessoas que não conhece produto não gostar de "discovery" por ter tido experiencia com discovery que levam dias e dias, não crie **pré**-conceito com suas experiências ruim antes de estudar sobre discovery. * **Conheça os dados que esta capturando.** Você deve ser a pessoa que mais conhece os dados que esta capturando do seu cliente (mesmo que seja um "simples" click no botão XYZ). * ***Busque usar dados como seu guia.** Ser **"data drive"** não é nada fácil (principalmente para quem está começando), então comece usando os dados como validador do seu*"feeling"*, mas busque ter dados confiáveis, assim conseguira deixar o feeling de lado e usar verdadeiramente os dados. * **Invista muito tempo em melhorar a comunicação.** Ter uma comunicação clara e concisa não é fácil - o maior problema das empresas são GAPs de comunicação. Se o time todo não estiver indo pro mesmo lado faremos um *cabo de guerra*, gastando energia com assuntos desnecessários. * **Conecte as pessoas engenheiras com o negócio.** Seremos melhores pessoas engenheiras quando conseguirmos entender o negócio da empresa. Estimule e dê tempo para seu time de engenharia entender sobre o negócio, se possível incentive eles a se tornar usuário do produto que desenvolve. * **Entenda todos os custos envolvidos.** Tenha controle do custo que seu produto gera, assim você conseguirá estimar quanto o novo recurso custará e entender se vale o investimento. **Exemplo:** o custo do time éde R$ 100 mil/mês, o novo recurso vai agregar R$ 10 mil/mês, você precisa de 10 meses de faturamento (depois que o novo recurso entrou no ar) para "recuperar o investimento". Não estou falando para não "arriscar" no desenvolvimento desse recurso e sim entender se não tem outro recurso que pode ter mais **ROI** *(retorno sobre investimento)*. * **Esteja aberto para feedback**. A melhor maneira de melhorar a cultura é ouvindo as pessoas que vão viver ela no dia a dia. Peça o feedback deles sobre tudo, incentivando a colaboração e o diálogo aberto - isso fará as pessoas se sentir parte da definição da cultura, assim formando fiéis guardiões. * **Desenvolva e incentive a liderança.** Identifique bons líderes entre os seus colaboradores, estimule-os e treine-os para replicar uma cultura saudável. * **Crie oportunidades para a colaboração.** Crie oportunidades para que as pessoas trabalhem juntas em *projetos* interessantes - estimular a colaboração cria um ambiente de trabalho produtivo e de sucesso. --- # Open Source Contributions - February 2023 **URL**: https://avelino.run/foss/2023/02/ **Published**: 2023-02-01 **Word Count**: 198 words **Summary**: February 2023 saw 9 repositories contribute 13 events, including 1 pull request and 7 issues, driving collaboration and enhancements across projects. Explore the contributions made in February 2023, highlighting key activities across 9 repositories. This timeline showcases significant events including pull requests, reviews, and issues, reflecting the ongoing collaboration and innovation within the community. ## 2023-02-26 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-02-26](https://github.com/avelino/awesome-go/issues/4771) ## 2023-02-24 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): ["Awesome-go" should be awesome!](https://github.com/avelino/awesome-go/pull/4760#pullrequestreview-1314126049) (Changes requested) ## 2023-02-19 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-02-19](https://github.com/avelino/awesome-go/issues/4755) - 🐛 Opened issue in [benjypng/logseq-datenlp-plugin](https://github.com/benjypng/logseq-datenlp-plugin): [shortcut on dates (alias)](https://github.com/benjypng/logseq-datenlp-plugin/issues/33) ## 2023-02-12 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-02-12](https://github.com/avelino/awesome-go/issues/4744) ## 2023-02-07 - 🐛 Opened issue in [logseq/logseq](https://github.com/logseq/logseq): [Mobile UI config crash](https://github.com/logseq/logseq/issues/8537) - 🐛 Opened issue in [jonesmelton/logseq-tufte-theme](https://github.com/jonesmelton/logseq-tufte-theme): [option to customize the font](https://github.com/jonesmelton/logseq-tufte-theme/issues/2) ## 2023-02-05 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-02-05](https://github.com/avelino/awesome-go/issues/4732) ## 2023-02-02 - 🔀 Opened PR in [yoyurec/logseq-awesome-ui](https://github.com/yoyurec/logseq-awesome-ui): [fixed position searchbox in page](https://github.com/yoyurec/logseq-awesome-ui/pull/36) - ✅ Reviewed PR in [vercel/hyper-site](https://github.com/vercel/hyper-site): [From npms to npmjs registry api](https://github.com/vercel/hyper-site/pull/288#pullrequestreview-1282012351) (Approved) ## Commits - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 6 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-02-01T00:00:00Z&until=2023-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-02-01T00:00:00Z&until=2023-02-28T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2023-02-01T00:00:00Z&until=2023-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2023 **URL**: https://avelino.run/foss/2023/01/ **Published**: 2023-01-01 **Word Count**: 431 words **Summary**: January 2023 saw 17 repositories contribute 35 events, including 5 pull requests and 12 issues, showcasing vibrant community engagement. Explore the highlights of January 2023, where 17 repositories came together to achieve a total of 35 contributions. This timeline captures the collaborative spirit through pull requests, push events, and issue discussions that marked the month. ## 2023-01-31 - 🐛 Opened issue in [yamadashy/slack-channels-grouping](https://github.com/yamadashy/slack-channels-grouping): [it is not indenting correctly](https://github.com/yamadashy/slack-channels-grouping/issues/32) ## 2023-01-29 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-01-29](https://github.com/avelino/awesome-go/issues/4728) ## 2023-01-25 - 🐛 Opened issue in [logseq/logseq](https://github.com/logseq/logseq): [some scheduled/deadline not complete clicking - not all](https://github.com/logseq/logseq/issues/8435) ## 2023-01-24 - 💬 Reviewed PR in [terrastruct/d2](https://github.com/terrastruct/d2): [Dockerfile: Add playwright support for rendering PNGs](https://github.com/terrastruct/d2/pull/713#pullrequestreview-1267428412) (Commented) ## 2023-01-23 - 🐛 Opened issue in [yoyurec/logseq-awesome-ui](https://github.com/yoyurec/logseq-awesome-ui): [search box not visible in `logseq/config.edn`](https://github.com/yoyurec/logseq-awesome-ui/issues/33) ## 2023-01-22 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-01-22](https://github.com/avelino/awesome-go/issues/4711) ## 2023-01-19 - 🔀 Opened PR in [npgrosser/logseq-diagrams-as-code](https://github.com/npgrosser/logseq-diagrams-as-code): [List D2 in readme](https://github.com/npgrosser/logseq-diagrams-as-code/pull/17) ## 2023-01-16 - 🔀 Opened PR in [logseq/awesome-logseq](https://github.com/logseq/awesome-logseq): [logseq doc new link](https://github.com/logseq/awesome-logseq/pull/49) ## 2023-01-15 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [router: skip init](https://github.com/prest/prest/pull/761#pullrequestreview-1249202467) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-01-15](https://github.com/avelino/awesome-go/issues/4699) ## 2023-01-13 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [gh action/build: use docker login v2](https://github.com/prest/prest/pull/760) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove gocover.io](https://github.com/avelino/awesome-go/pull/4696) ## 2023-01-10 - 🐛 Opened issue in [logseq/logseq](https://github.com/logseq/logseq): [Linked references filter not show input field](https://github.com/logseq/logseq/issues/8296) ## 2023-01-09 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 3.2.2 to 3.2.3](https://github.com/moclojer/moclojer/pull/86#pullrequestreview-1240863176) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 3.1.1 to 3.1.2](https://github.com/moclojer/moclojer/pull/87#pullrequestreview-1240862570) (Approved) ## 2023-01-08 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2023-01-08](https://github.com/avelino/awesome-go/issues/4680) ## 2023-01-07 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add material theme](https://github.com/editor-bootstrap/vim-bootstrap/pull/427#pullrequestreview-1239698574) (Approved) - 🐛 Opened issue in [walsvid/logseq-emoji-picker-fork](https://github.com/walsvid/logseq-emoji-picker-fork): [support for `:emoji name:`](https://github.com/walsvid/logseq-emoji-picker-fork/issues/3) ## 2023-01-06 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Adds /_health endpoint for the service](https://github.com/prest/prest/pull/750#pullrequestreview-1238744474) (Approved) - ✅ Reviewed PR in [dracula/emacs](https://github.com/dracula/emacs): [add bookmark-face for emacs@28.1+](https://github.com/dracula/emacs/pull/97#pullrequestreview-1238894821) (Approved) ## 2023-01-05 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add return status code support for plugin functions](https://github.com/prest/prest/pull/745#pullrequestreview-1237903790) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added Keploy under mocks in Testing](https://github.com/avelino/awesome-go/pull/4599#pullrequestreview-1237669837) (Changes requested) ## 2023-01-03 - 🐛 Opened issue in [andorsk/d2-mode](https://github.com/andorsk/d2-mode): [d2lang syntax highlighting](https://github.com/andorsk/d2-mode/issues/36) ## 2023-01-02 - 🔀 Opened PR in [terrastruct/d2](https://github.com/terrastruct/d2): [docker: add ca-certificates package](https://github.com/terrastruct/d2/pull/595) - 🐛 Opened issue in [terrastruct/d2](https://github.com/terrastruct/d2): [docker: playwright not installed ](https://github.com/terrastruct/d2/issues/594) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [neovim config in lua](https://github.com/editor-bootstrap/vim-bootstrap/issues/426) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer-app/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [buserbrasil/podman-awscli](https://github.com/buserbrasil/podman-awscli): 1 commit(s) - [See commits](https://github.com/buserbrasil/podman-awscli/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 9 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [npgrosser/logseq-diagrams-as-code](https://github.com/npgrosser/logseq-diagrams-as-code): 1 commit(s) - [See commits](https://github.com/npgrosser/logseq-diagrams-as-code/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 3 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [terrastruct/d2](https://github.com/terrastruct/d2): 2 commit(s) - [See commits](https://github.com/terrastruct/d2/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) - 🔨 Push to [logseq/awesome-logseq](https://github.com/logseq/awesome-logseq): 1 commit(s) - [See commits](https://github.com/logseq/awesome-logseq/commits?author=avelino&since=2023-01-01T00:00:00Z&until=2023-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - December 2022 **URL**: https://avelino.run/foss/2022/12/ **Published**: 2022-12-01 **Word Count**: 379 words **Summary**: December 2022 saw 17 repositories contribute 27 events, including 2 pull requests and 12 issues, highlighting active collaboration and ongoing development. Explore the timeline of contributions for December 2022, showcasing the collaborative efforts across 17 repositories. This month featured 27 events, including pull requests, reviews, and issues, reflecting the vibrant activity and engagement within the community. ## 2022-12-29 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Basic ltree query support](https://github.com/prest/prest/pull/753#pullrequestreview-1232653548) (Approved) - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Adds /_health endpoint for the service](https://github.com/prest/prest/pull/750#pullrequestreview-1232449211) (Changes requested) ## 2022-12-28 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add new theme onedark](https://github.com/editor-bootstrap/vim-bootstrap/pull/425#pullrequestreview-1231928332) (Approved) ## 2022-12-25 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-12-25](https://github.com/avelino/awesome-go/issues/4662) ## 2022-12-23 - 🐛 Opened issue in [npgrosser/logseq-diagrams-as-code](https://github.com/npgrosser/logseq-diagrams-as-code): [D2 lang support](https://github.com/npgrosser/logseq-diagrams-as-code/issues/12) ## 2022-12-22 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [publishing status of the bots from `public` to `unlisted`](https://github.com/avelino/bots.clj.social/pull/15) - 🐛 Opened issue in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [bot polluting the local server timeline](https://github.com/avelino/bots.clj.social/issues/14) ## 2022-12-18 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-12-18](https://github.com/avelino/awesome-go/issues/4650) ## 2022-12-17 - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add return status code support for plugin functions](https://github.com/prest/prest/pull/745#pullrequestreview-1221904813) (Commented) - 🐛 Opened issue in [clintmod/macprefs](https://github.com/clintmod/macprefs): [install via homebrew: env: python: No such file or directory](https://github.com/clintmod/macprefs/issues/20) ## 2022-12-16 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Adds new Exposure Middleware - creating the protection for /databases, /tables, and /schemas endpoints](https://github.com/prest/prest/pull/748#pullrequestreview-1220810950) (Approved) - ✅ Reviewed PR in [cuducos/minha-receita](https://github.com/cuducos/minha-receita): [Adiciona o pREST como uma possibilidade de API ao serviço](https://github.com/cuducos/minha-receita/pull/168#pullrequestreview-1221083611) (Approved) - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [Auto generate cover image to post ](https://github.com/avelino/hugo-theme-sarah/issues/82) ## 2022-12-15 - 🐛 Opened issue in [extractus/feed-extractor](https://github.com/extractus/feed-extractor): [Content type octet-stream support](https://github.com/extractus/feed-extractor/issues/72) - 🐛 Opened issue in [racket/racket-lang-org](https://github.com/racket/racket-lang-org): [blog: rss/atom return content type octet-stream](https://github.com/racket/racket-lang-org/issues/235) ## 2022-12-11 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-12-11](https://github.com/avelino/awesome-go/issues/4638) ## 2022-12-09 - 🔀 Opened PR in [doomemacs/doomemacs](https://github.com/doomemacs/doomemacs): [nit(cli): typo, fixed warning msg native compilation param name](https://github.com/doomemacs/doomemacs/pull/6988) ## 2022-12-04 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-12-04](https://github.com/avelino/awesome-go/issues/4632) - 🐛 Opened issue in [languagetool-org/languagetool](https://github.com/languagetool-org/languagetool): [[Feature Request] plugin for Logseq (a popular note-taking/PKM app)](https://github.com/languagetool-org/languagetool/issues/7521) ## 2022-12-01 - 🐛 Opened issue in [vipzhicheng/logseq-plugin-comment-block](https://github.com/vipzhicheng/logseq-plugin-comment-block): [`((null))` block when in selection mode (non-insertion) ](https://github.com/vipzhicheng/logseq-plugin-comment-block/issues/12) ## Commits - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 16 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2022-12-01T00:00:00Z&until=2022-12-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 14 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-12-01T00:00:00Z&until=2022-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-12-01T00:00:00Z&until=2022-12-31T23:59:59Z) - 🔨 Push to [cljam/careers](https://github.com/cljam/careers): 3 commit(s) - [See commits](https://github.com/cljam/careers/commits?author=avelino&since=2022-12-01T00:00:00Z&until=2022-12-31T23:59:59Z) - 🔨 Push to [cljam/.github](https://github.com/cljam/.github): 2 commit(s) - [See commits](https://github.com/cljam/.github/commits?author=avelino&since=2022-12-01T00:00:00Z&until=2022-12-31T23:59:59Z) - 🔨 Push to [cuducos/minha-receita](https://github.com/cuducos/minha-receita): 1 commit(s) - [See commits](https://github.com/cuducos/minha-receita/commits?author=avelino&since=2022-12-01T00:00:00Z&until=2022-12-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2022-12-01T00:00:00Z&until=2022-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2022 **URL**: https://avelino.run/foss/2022/11/ **Published**: 2022-11-01 **Word Count**: 617 words **Summary**: November 2022 saw 20 repositories contribute 52 activities, including 16 pull requests and 15 issues, driving significant community engagement. Explore the contributions made in November 2022 across 20 repositories, showcasing a total of 52 activities. This timeline highlights the collaborative efforts, including pull requests, reviews, and issues that shaped the month. ## 2022-11-30 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [rollback after toot create](https://github.com/avelino/bots.clj.social/pull/8) ## 2022-11-29 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump docker/login-action from 1 to 2](https://github.com/moclojer/moclojer/pull/78#pullrequestreview-1197391357) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/cache from 3.0.4 to 3.0.11](https://github.com/moclojer/moclojer/pull/80#pullrequestreview-1197390619) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/upload-artifact from 3.1.0 to 3.1.1](https://github.com/moclojer/moclojer/pull/81#pullrequestreview-1197389608) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump actions/checkout from 2 to 3](https://github.com/moclojer/moclojer/pull/79#pullrequestreview-1197388168) (Approved) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [build(deps): bump graalvm/setup-graalvm from 1.0.6 to 1.0.9](https://github.com/moclojer/moclojer/pull/77#pullrequestreview-1197387182) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Bump nbb from 1.1.149 to 1.1.150](https://github.com/avelino/bots.clj.social/pull/7#pullrequestreview-1197479352) (Approved) - ✅ Reviewed PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Bump masto from 4.6.8 to 4.7.0](https://github.com/avelino/bots.clj.social/pull/6#pullrequestreview-1197478928) (Approved) - 🐛 Opened issue in [cuducos/minha-receita](https://github.com/cuducos/minha-receita): [Usar pREST para expor banco de dados como API REST](https://github.com/cuducos/minha-receita/issues/167) ## 2022-11-28 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [redis/key: change key from url to hash](https://github.com/avelino/bots.clj.social/pull/5) ## 2022-11-27 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-11-27](https://github.com/avelino/awesome-go/issues/4617) ## 2022-11-26 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [organize action steps and names](https://github.com/avelino/bots.clj.social/pull/4) - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [restructure packages](https://github.com/avelino/bots.clj.social/pull/3) ## 2022-11-25 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [fixed redis disconnection](https://github.com/avelino/bots.clj.social/pull/2) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Fixes docker command and some English readability.](https://github.com/moclojer/moclojer/pull/76#pullrequestreview-1193724825) (Approved) ## 2022-11-24 - 🔀 Opened PR in [babashka/sci.configs](https://github.com/babashka/sci.configs): [WIP: promesa: add `done?`](https://github.com/babashka/sci.configs/pull/16) - 🔀 Opened PR in [avelino/sci.configs](https://github.com/avelino/sci.configs): [Avelino/promesa doneask](https://github.com/avelino/sci.configs/pull/1) ## 2022-11-23 - 🔀 Opened PR in [babashka/nbb](https://github.com/babashka/nbb): [Update sci.config, add promesa future](https://github.com/babashka/nbb/pull/284) - 🐛 Opened issue in [renatolond/mastodon-twitter-poster](https://github.com/renatolond/mastodon-twitter-poster): [username overwriting from one network to another (mastodon <> twitter)](https://github.com/renatolond/mastodon-twitter-poster/issues/884) ## 2022-11-22 - 🔀 Opened PR in [babashka/nbb](https://github.com/babashka/nbb): [add redis example](https://github.com/babashka/nbb/pull/283) - 🔀 Opened PR in [ghoseb/planet.clojure](https://github.com/ghoseb/planet.clojure): [add avelino.run clojure tag feed](https://github.com/ghoseb/planet.clojure/pull/342) - 🐛 Opened issue in [babashka/babashka](https://github.com/babashka/babashka): [error working with dependencies clojure (bb.edn) at borkdude.deps$_main.invokeStatic(deps.clj:805)](https://github.com/babashka/babashka/issues/1425) - 🐛 Opened issue in [babashka/sci.configs](https://github.com/babashka/sci.configs): [run test environment on github actions](https://github.com/babashka/sci.configs/issues/14) ## 2022-11-21 - 🔀 Opened PR in [babashka/sci.configs](https://github.com/babashka/sci.configs): [add promesa/future in namespace](https://github.com/babashka/sci.configs/pull/13) - 🐛 Opened issue in [babashka/nbb](https://github.com/babashka/nbb): [Could not resolve symbol: p/future](https://github.com/babashka/nbb/issues/282) ## 2022-11-20 - 🔀 Opened PR in [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): [Create LICENSE](https://github.com/avelino/bots.clj.social/pull/1) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-11-20](https://github.com/avelino/awesome-go/issues/4607) ## 2022-11-18 - 🔀 Opened PR in [clojure/clojure-site](https://github.com/clojure/clojure-site): [add clojure community on fediverse](https://github.com/clojure/clojure-site/pull/618) - 🐛 Opened issue in [metabolist/metatext](https://github.com/metabolist/metatext): [Gif (giphy) support ](https://github.com/metabolist/metatext/issues/193) - 🐛 Opened issue in [metabolist/metatext](https://github.com/metabolist/metatext): [Edit toot support](https://github.com/metabolist/metatext/issues/192) ## 2022-11-15 - 🐛 Opened issue in [pixelfed/pixelfed](https://github.com/pixelfed/pixelfed): [UX: Double click on home icon scroll to top](https://github.com/pixelfed/pixelfed/issues/3777) - 🐛 Opened issue in [pixelfed/pixelfed](https://github.com/pixelfed/pixelfed): [UX: Double click on the image, give heart](https://github.com/pixelfed/pixelfed/issues/3776) ## 2022-11-14 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Adds new support for JSONB Objects and Lists](https://github.com/prest/prest/pull/740#pullrequestreview-1179173530) (Approved) ## 2022-11-13 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-11-13](https://github.com/avelino/awesome-go/issues/4600) ## 2022-11-12 - 🔀 Opened PR in [fediblock/fediblock](https://github.com/fediblock/fediblock): [Add clj.social](https://github.com/fediblock/fediblock/pull/1) ## 2022-11-08 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [set postgres minimal version to 9.5](https://github.com/prest/doc-template/pull/45) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [set postgres minimal version to 9.5](https://github.com/prest/prest/pull/735) ## 2022-11-07 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Change JSON_AGG to JSONB_AGG, enabling better performance on the DBMS](https://github.com/prest/prest/pull/733#pullrequestreview-1170515050) (Approved) ## 2022-11-06 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-11-06](https://github.com/avelino/awesome-go/issues/4593) - 🐛 Opened issue in [pixelfed/pixelfed](https://github.com/pixelfed/pixelfed): [Pixelfed and Instagram sync](https://github.com/pixelfed/pixelfed/issues/3724) - 🐛 Opened issue in [pixelfed/mobile-app](https://github.com/pixelfed/mobile-app): [Source code, will it be open source?](https://github.com/pixelfed/mobile-app/issues/31) ## Commits - 🔨 Push to [avelino/about.clj.social](https://github.com/avelino/about.clj.social): 8 commit(s) - [See commits](https://github.com/avelino/about.clj.social/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 11 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 2 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [babashka/nbb](https://github.com/babashka/nbb): 1 commit(s) - [See commits](https://github.com/babashka/nbb/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [clojure/clojure-site](https://github.com/clojure/clojure-site): 1 commit(s) - [See commits](https://github.com/clojure/clojure-site/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [babashka/sci.configs](https://github.com/babashka/sci.configs): 1 commit(s) - [See commits](https://github.com/babashka/sci.configs/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 3 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [ghoseb/planet.clojure](https://github.com/ghoseb/planet.clojure): 1 commit(s) - [See commits](https://github.com/ghoseb/planet.clojure/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [avelino/bots.clj.social](https://github.com/avelino/bots.clj.social): 47 commit(s) - [See commits](https://github.com/avelino/bots.clj.social/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2022-11-01T00:00:00Z&until=2022-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - October 2022 **URL**: https://avelino.run/foss/2022/10/ **Published**: 2022-10-01 **Word Count**: 379 words **Summary**: October 2022 saw 30 contributions across 8 repositories, including 10 pull requests and 12 issues, showcasing active collaboration and development. Explore the timeline of contributions for October 2022, where developers engaged in key activities across multiple repositories. This month highlighted a diverse range of contributions, from push events to active issue tracking, reflecting a vibrant development community. ## 2022-10-30 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-10-30](https://github.com/avelino/awesome-go/issues/4583) ## 2022-10-29 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [isolating openapi into smaller functions](https://github.com/moclojer/moclojer/pull/75) ## 2022-10-24 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Create CODE_OF_CONDUCT.md](https://github.com/moclojer/moclojer/pull/74) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Documentation: structure page on how to use moclojer with files exported from OpenAPI](https://github.com/moclojer/moclojer/issues/73) ## 2022-10-23 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Isolating the code that creates routers](https://github.com/moclojer/moclojer/pull/72) - 🔀 Opened PR in [CDIGlobalTrack/rxdjango](https://github.com/CDIGlobalTrack/rxdjango): [Proposed refactoring by sourcery](https://github.com/CDIGlobalTrack/rxdjango/pull/2) - 🔀 Opened PR in [CDIGlobalTrack/rxdjango](https://github.com/CDIGlobalTrack/rxdjango): [Python syntax highlight in readme example](https://github.com/CDIGlobalTrack/rxdjango/pull/1) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-10-23](https://github.com/avelino/awesome-go/issues/4574) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Build/make dynamic pedestal router](https://github.com/moclojer/moclojer/issues/71) ## 2022-10-22 - 🔀 Opened PR in [alstr/todo-to-issue-action](https://github.com/alstr/todo-to-issue-action): [clojure: add support](https://github.com/alstr/todo-to-issue-action/pull/131) - 🐛 Opened issue in [alstr/todo-to-issue-action](https://github.com/alstr/todo-to-issue-action): [Github Action run unittest](https://github.com/alstr/todo-to-issue-action/issues/132) ## 2022-10-21 - 🐛 Opened issue in [alstr/todo-to-issue-action](https://github.com/alstr/todo-to-issue-action): [Clojure (lisp dialects support)](https://github.com/alstr/todo-to-issue-action/issues/129) ## 2022-10-19 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [openapi spec: remove git submodule](https://github.com/moclojer/moclojer/pull/70) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Remove git submodule dependence (openapi spec)](https://github.com/moclojer/moclojer/issues/69) ## 2022-10-18 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Remove stale action](https://github.com/avelino/awesome-go/pull/4558) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add golang.dk to list of websites](https://github.com/avelino/awesome-go/pull/4557#pullrequestreview-1145522692) (Changes requested) ## 2022-10-16 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-10-16](https://github.com/avelino/awesome-go/issues/4548) ## 2022-10-10 - 🔀 Opened PR in [raphamorim/rio](https://github.com/raphamorim/rio): [readme content](https://github.com/raphamorim/rio/pull/5) ## 2022-10-09 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-10-09](https://github.com/avelino/awesome-go/issues/4520) ## 2022-10-08 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [jetty/server: set ::http/host with env host](https://github.com/moclojer/moclojer/pull/68) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Running inside docker in http server is not publicly exposed](https://github.com/moclojer/moclojer/issues/67) ## 2022-10-07 - 🐛 Opened issue in [allisson/fastqueue](https://github.com/allisson/fastqueue): [Postgres Notify](https://github.com/allisson/fastqueue/issues/30) ## 2022-10-02 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-10-02](https://github.com/avelino/awesome-go/issues/4476) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 15 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-10-01T00:00:00Z&until=2022-10-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 12 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2022-10-01T00:00:00Z&until=2022-10-31T23:59:59Z) - 🔨 Push to [CDIGlobalTrack/rxdjango](https://github.com/CDIGlobalTrack/rxdjango): 2 commit(s) - [See commits](https://github.com/CDIGlobalTrack/rxdjango/commits?author=avelino&since=2022-10-01T00:00:00Z&until=2022-10-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2022-10-01T00:00:00Z&until=2022-10-31T23:59:59Z) - 🔨 Push to [alstr/todo-to-issue-action](https://github.com/alstr/todo-to-issue-action): 1 commit(s) - [See commits](https://github.com/alstr/todo-to-issue-action/commits?author=avelino&since=2022-10-01T00:00:00Z&until=2022-10-31T23:59:59Z) - 🔨 Push to [raphamorim/rio](https://github.com/raphamorim/rio): 1 commit(s) - [See commits](https://github.com/raphamorim/rio/commits?author=avelino&since=2022-10-01T00:00:00Z&until=2022-10-31T23:59:59Z) - 🔨 Push to [cljam/.github](https://github.com/cljam/.github): 1 commit(s) - [See commits](https://github.com/cljam/.github/commits?author=avelino&since=2022-10-01T00:00:00Z&until=2022-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2022 **URL**: https://avelino.run/foss/2022/09/ **Published**: 2022-09-01 **Word Count**: 365 words **Summary**: September 2022 saw 12 repositories engage in 27 contributions, including 7 pull requests and 10 issues, enhancing project collaboration and code quality. Welcome to the September 2022 contributions timeline. This month was marked by a vibrant collaboration across 12 repositories, showcasing a total of 27 contributions. With 7 pull requests opened, 10 issues reported, and 3 pull request reviews conducted, the community made significant strides in enhancing software projects. Explore the details of each contribution to understand the impact of collaborative efforts this month. ## 2022-09-29 - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Adds Command Line Interface](https://github.com/moclojer/moclojer/pull/65#pullrequestreview-1125887351) (Approved) ## 2022-09-25 - 🔀 Opened PR in [vercel/hyper-site](https://github.com/vercel/hyper-site): [Add theme monotropic coffee](https://github.com/vercel/hyper-site/pull/281) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Adds manual install script like babashka](https://github.com/moclojer/moclojer/pull/61#pullrequestreview-1119411212) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-09-25](https://github.com/avelino/awesome-go/issues/4456) ## 2022-09-18 - 🔀 Opened PR in [clojure/tools.build](https://github.com/clojure/tools.build): [upgrade clj-kondo to 2022.09.08](https://github.com/clojure/tools.build/pull/1) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-09-18](https://github.com/avelino/awesome-go/issues/4441) ## 2022-09-17 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [better describe the code documentation](https://github.com/moclojer/moclojer/pull/60) - ✅ Reviewed PR in [railwaycat/homebrew-emacsmacport](https://github.com/railwaycat/homebrew-emacsmacport): [Update option `native-comp` to `native-compilation`](https://github.com/railwaycat/homebrew-emacsmacport/pull/306#pullrequestreview-1111448516) (Approved) ## 2022-09-16 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [devcontainer support](https://github.com/moclojer/moclojer/pull/59) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [clojure devcontainer support](https://github.com/moclojer/moclojer/issues/58) ## 2022-09-11 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-09-11](https://github.com/avelino/awesome-go/issues/4424) ## 2022-09-08 - 🐛 Opened issue in [wilkerlucio/pathom3](https://github.com/wilkerlucio/pathom3): [FAIL in (run-graph!-batch-test) (runner_test.cljc:2003)](https://github.com/wilkerlucio/pathom3/issues/155) ## 2022-09-07 - 🔀 Opened PR in [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): [doc: how to prepare the development environment](https://github.com/moclojer/moclojer-app/pull/1) ## 2022-09-05 - 🐛 Opened issue in [cadu-leite/pgsrchcorrupt](https://github.com/cadu-leite/pgsrchcorrupt): [unit test to validate script functioning](https://github.com/cadu-leite/pgsrchcorrupt/issues/4) ## 2022-09-04 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [config: try File Not Found](https://github.com/moclojer/moclojer/pull/56) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [fix docker repository](https://github.com/moclojer/moclojer/pull/55) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-09-04](https://github.com/avelino/awesome-go/issues/4414) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [action/release: Zipped Artifact Downloads](https://github.com/moclojer/moclojer/issues/57) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docker image problem `ghcr.io/avelino/moclojer:latest` java exec format error](https://github.com/moclojer/moclojer/issues/54) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [when the configuration file does not exist it gives an error](https://github.com/moclojer/moclojer/issues/53) ## Commits - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 31 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2022-09-01T00:00:00Z&until=2022-09-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 12 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-09-01T00:00:00Z&until=2022-09-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer-app](https://github.com/moclojer/moclojer-app): 6 commit(s) - [See commits](https://github.com/moclojer/moclojer-app/commits?author=avelino&since=2022-09-01T00:00:00Z&until=2022-09-30T23:59:59Z) - 🔨 Push to [avelino/hyper-monotropic-coffee](https://github.com/avelino/hyper-monotropic-coffee): 3 commit(s) - [See commits](https://github.com/avelino/hyper-monotropic-coffee/commits?author=avelino&since=2022-09-01T00:00:00Z&until=2022-09-30T23:59:59Z) - 🔨 Push to [cljam/.github](https://github.com/cljam/.github): 2 commit(s) - [See commits](https://github.com/cljam/.github/commits?author=avelino&since=2022-09-01T00:00:00Z&until=2022-09-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2022-09-01T00:00:00Z&until=2022-09-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2022-09-01T00:00:00Z&until=2022-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Pessoas desenvolvedoras com pensamento de produto - Engenharia de Produto **URL**: https://avelino.run/pessoas-desenvolvedoras-com-pensamento-de-produto-engenharia-de-produto/ **Published**: 2022-08-11 **Tags**: produto, product-engineer, desenvolvimento, carreira **Word Count**: 777 words ![Pessoas desenvolvedoras com pensamento de produto - Engenharia de Produto](/blog/buser-pessoas-desenvolvedoras-com-pensamento-de-produto-engenharia-de-produto.png) A cada dia que passa é mais comum as empresas querer puxar as pessoas desenvolvedoras para área de negócio, por outro lado, as pessoas desenvolvedoras não querem ir para área de negócio. *Acho meio logico* o porquê as pessoas desenvolvedoras não querem ir para área de negócio, ela estudou (esta estudando) alguma área relacionada com computação, se ela de fato quisesse ir para área de “negocio” provavelmente ela não teria feito computação. Será que nós pessoas desenvolvedoras não devemos pensar um pouco mais como **engenheiro de produto** ao invés de só dizer que não quer ir para área de negócio? ## O que é engenharia de produto? Comparado a um engenheiro de software, a pessoa Engenheira de Produto é alguém que acredita que seu tempo é melhor utilizado para entender as necessidades dos clientes e trabalhar para construir as melhores soluções para atender os clientes. Em vez de colocar seus esforços apenas nos aspectos técnicos essa pessoa olha para a experiência do usuário (UX), sem deixar de lado a infra-estrutura de tecnologia. É envolvida em todo o ciclo de descoberta de produto para trazer seu olhar de tecnologia para a solução que melhor atende o usuário. A pessoa engenheira de produto busca inovação, estratégia e entusiasmo em entregar o que o usuário do produto precisa, não só o código que faz o produto se tornar realidade — código é o meio para resolver algum problema, não a entrega final para o produto. Sabemos o impacto que o código gera para o negócio e usuários, mas ele não é o protagonista para o produto. Aproximando pessoas de engenharia, produto e design possivelmente chegaremos na melhor solução para o problema, sempre colocando o usuário como centro da tomada de decisão. Não basta entregar "software” sem pensar como os dados gerado por ele será usado. A maioria dos produtos depende de software para gerar dados e com os dados as pessoas de negócio conseguir tomar a melhor decisão para qual caminha o produto ou empresa deve seguir. > Geralmente o engenheiro de software coloca seus esforços em entregar o software que esta desenvolvendo, pensando pouco como o software e dados serão usados. **Em resumo:** a pessoa engenheira de produto é alguém que busca entender o usuário e pontos com maior fricção. São apaixonados em usar tecnologia para resolver problemas e sabe como aplica-la para solucionar o problema a curto, médio e longo prazo, começando simples e conectada com a estratégia de longo prazo. ## Todas pessoas desenvolvedoras devem ser engenheiras de produto? **Não sei responder essa pergunta**, mas acredito que todas as pessoas desenvolvedoras deveriam entender porque está recebendo seu salário, geralmente não é "só" para escrever qualquer código e sim transformar problema em solução que agregue mais valor para o negócio da empresa em formato de código. > Seremos melhores pessoas engenheiras quando conseguirmos entender o negócio da empresa. Para responder essa pergunta para mim, fui à teoria como um time de alta performance é formado. Equipe de alta performance pode ser definida como um grupo de pessoas que possuem **talentos e competência que se complementam**, que estão alinhados e comprometidos com um **objetivo em comum**, demonstra um alto nível de **colaboração** e **inovação**, assim resultando em ações com qualidade. Sempre **unida e focada em seu objetivo**, pronta para suportar algum membro que esteja enfrentando alguma dificuldade ou barreira e para assim garantir que irá atingir o objetivo. É uma equipe em que as pessoas têm um **altíssimo grau comprometimento** com o **resultado de alto nível**. Por isso, que os membros do time possuem a **colaboração** como uma **característica para resolução de problemas**. ## Equilíbrio entre Qualidade e Entrega O CEO (*Chief Executive Officer*) quer mais clientes, CTO (*Chief Technology Officer*) quer um excelente software, CPO (*Chief Product Officer*) busca resolver ambos assuntos usando esse conhecimento e experiência aplicada no produto, com dados, metodologia e métodos. O engenheiro de produto usa sua experiência técnica para trabalhar com a equipe de desenvolvimento, priorizando o que precisa ser feito contra o que pode ser feito, metrificando tempo investido e retorno para o produto. O centro da priorização deve ser os dados de uso do produto, buscando entregar o que o cliente precisa e menos o que “achamos” que ele precisa. Para determinar esse valor, devemos conseguir usar a tecnologia para criar protótipos dos novos recursos, descobrir como eles se encaixam na experiência do usuário e entender como eles impactam o produto atual. Usando a tecnologia para criar laços de feedback, priorizando o que deve ser construído no próximo ciclo, interpretando o resultado dos dados coletados contra o que seu conhecimento previu de mercado, levando isso de volta ao time de desenvolvimento e recomeçando o ciclo novamente. --- # Open Source Contributions - August 2022 **URL**: https://avelino.run/foss/2022/08/ **Published**: 2022-08-01 **Word Count**: 190 words **Summary**: August 2022 saw 11 contributions across 5 repositories, including 6 new issues and significant code updates, enhancing project functionality and community engagement. This timeline highlights the key contributions made in August 2022, showcasing a total of 11 activities across 5 repositories. With a focus on issue tracking and code enhancements, the month reflects a commitment to improving software quality and community collaboration. ## 2022-08-31 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Optimize markdown parsing](https://github.com/avelino/awesome-go/pull/4408#pullrequestreview-1091975858) (Changes requested) ## 2022-08-28 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-08-28](https://github.com/avelino/awesome-go/issues/4403) ## 2022-08-21 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-08-21](https://github.com/avelino/awesome-go/issues/4390) ## 2022-08-17 - 🐛 Opened issue in [yamadashy/slack-channels-grouping](https://github.com/yamadashy/slack-channels-grouping): [safari support](https://github.com/yamadashy/slack-channels-grouping/issues/27) ## 2022-08-15 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [fixed tag monochorme to monochrome](https://github.com/avelino/monotropic-theme-vscode/pull/18) ## 2022-08-14 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-08-14](https://github.com/avelino/awesome-go/issues/4376) ## 2022-08-12 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [how to use ssl certificate in prestd on web protocol - write documentation](https://github.com/prest/prest/issues/714) ## 2022-08-07 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-08-07](https://github.com/avelino/awesome-go/issues/4367) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-08-01T00:00:00Z&until=2022-08-31T23:59:59Z) - 🔨 Push to [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): 1 commit(s) - [See commits](https://github.com/avelino/monotropic-theme-vscode/commits?author=avelino&since=2022-08-01T00:00:00Z&until=2022-08-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2022-08-01T00:00:00Z&until=2022-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - July 2022 **URL**: https://avelino.run/foss/2022/07/ **Published**: 2022-07-01 **Word Count**: 159 words **Summary**: July 2022 saw 6 contributions across 2 repositories, focusing on opening 5 issues to investigate outdated repositories and a single push event. In July 2022, the development activity was marked by significant contributions across two repositories. This timeline outlines the key events, including the opening of five issues aimed at investigating repositories inactive for over a year, alongside a notable push event. Explore the details of each contribution to understand the ongoing efforts in maintaining and improving the projects. ## 2022-07-31 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-07-31](https://github.com/avelino/awesome-go/issues/4352) ## 2022-07-24 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-07-24](https://github.com/avelino/awesome-go/issues/4340) ## 2022-07-17 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-07-17](https://github.com/avelino/awesome-go/issues/4331) ## 2022-07-10 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-07-10](https://github.com/avelino/awesome-go/issues/4321) ## 2022-07-03 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-07-03](https://github.com/avelino/awesome-go/issues/4310) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-07-01T00:00:00Z&until=2022-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Gerentes: não ocupem cada minuto de suas agendas, deixem um espaço para reais imprevistos **URL**: https://avelino.run/gerentes-nao-ocupem-cada-minuto-de-suas-agendas-deixem-um-espaco-para-reais-imprevistos/ **Published**: 2022-06-29 **Tags**: gestao, team building, carreira, cto **Word Count**: 673 words A demanda por tempo de um gerente são infinitas e às vezes parece que você é demandado por todas as direções ao mesmo tempo. Provavelmente isso dificulta o foco e habilidade de ter visibilidade dos problemas futuros. Nesse blogpost conversaremos como limitar as pessoas exigirem mais do seu tempo e provavelmente fazer mais com menos. ## Contextualizando Uma das primeiras coisas que aprendi como gerente foi que se eu não reservar um horário na minha agenda para almoço, provavelmente não almoçaria naquele dia. Quando era engenheiro eu pensava que sabia o que significava ter muitas reuniões, mas minha promoção trouxe muitas pessoas querendo falar comigo e elas raramente pensavam se eu já teria almoçado ou não — as pessoas querem resolver os seus problemas e reunião é uma forma delas resolver, cuidar da nossa saúde deve ser nossa responsabilidade não de outras pessoas. Alguns meses depois, aprendi um pouco mais sobre minha agenda. Estava viajando a trabalho em outro fuso horário diferente (2 horas à frente da minha equipe). Para o trabalho não ocupar meu horário de jantar (as refeições são muito importante para mim), reservei no calendário qualquer reunião depois das 3pm (5pm no fuso horário da minha equipe). Como não tinha pessoa trabalhando as 7am, trabalhava média de 6 horas por dia, percebi que no final da semana tinha sido mais produtivo, mesmo estando disponível por menos horas. Assim que voltei de viagem configurei o meu calendário para mostrar meu horário de trabalho das 10am às 4pm. Demorei um pouco para entender realmente o que aconteceu e por que estava funcionando. O que começou a me ajudar a montá-la foi essa thread no twitter: ## Calendário como quadro Kanban Kanban é um framework de manufatura enxuta desenvolvido na Toyota e adotado entusiasticamente pela indústria de desenvolvimento de software. O framework me agrada bastante, e descobri ter funcionado bem para mim no passado. Ele divide os fluxos de trabalho em etapas e limita o número de itens que podem se acumular em uma única etapa. O fluxos de trabalho geralmente se assemelham a algo assim: ![kanban](/blog/gerentes-deveria-limitar-trabalho-em-progresso-e-paralelo-kanban.png) Esse board parece com o quadro quem gerencio na minha vida: ![calendar](/blog/gerentes-deveria-limitar-trabalho-em-progresso-e-paralelo-calendar.png) Trabalho paralelo é assombroso. Ao invés de etapas de fluxo de trabalho, uso dias da semana e limite arbitrário de itens, tenho a restrição física de "número de horas em um dia". Usando blocos de foco e horas de trabalho para limitar os intervalos disponíveis de 30 minutos no meu calendário, dessa forma consigo limitar o potencial "trabalho em andamento" (WIP), geralmente conhecido como tempo de reunião. ## Por que faria isso? Os benefícios são óbvios (pelo menos para mim) — menos exigências no meu tempo, menos trabalho para fazer, tudo em torno de um trabalho menos estressante, além disso, me senti mais produtivo. De onde isso vem? Minha resposta a essa pergunta veio deste fantástico tweet: Estou citando isso — porque é uma verdade, mas a tl;dr (longo prazo) provavelmente surgirá um imprevisto, pequenas interrupções se transformam em grandes atrasos porque não tem como recuperar o atraso. > Pense em um engarrafamento no horário de pico — a maioria dos motoristas quer dirigir a toda velocidade, mas como não há espaço entre os carros, se uma pessoa reduz a velocidade todas as outras pessoas também devem reduzir. ## Como faço? Meu horário de trabalho e meu horário de almoço não são absolutos — eles são flexíveis. Quando tenho que participar de uma reunião de vendas (uma necessidade consistente, mas imprevisível), é mais fácil movimentar minha agenda para participar. Quando preciso me envolver em um projeto, relatório ou qualquer evento que não consiga esperar, eu tenho espaço na minha agenda para dar atenção. Isso não seria possível se tivesse ocupado cada minuto da minha agenda. Nesse caso eu teria que repriorizar na hora, tendo que derrubar alguma reunião previamente agendada, gerando frustração nas pessoas que estava esperando a reunião ou entrega que tinha me comprometido. Nesse caso o "única" frustração que tenho é com meu estômago, quando espero um pouco mais pelo almoço daquele dia. > Texto original publicado por **[Erik Wiffin](https://erik.wiffin.com/posts/limiting-work-in-progress-as-a-manager/)** --- # Palestra: Uma carreira profissional baseada em Open Source - Engenharia de Software **URL**: https://avelino.run/palestra-uma-carreira-profissional-baseada-em-open-source-engenharia-de-software/ **Published**: 2022-06-17 **Tags**: palestra, opensource, carreira, campusparty, cpgoias2 **Word Count**: 118 words ![Thiago Avelino palestrando sobre como faz para guiar sua carreira profissional com open source](/blog/avelino-palestra-cpgoias2-2022.jpg#center) Nessa palestra falo como faço para guiar minha carreira profissional contribuindo com projetos Open Source — já contribuiu com o core da linguagem Go, MongoDB, Riak, Django, ReactiveX e muitos outros projetos. A quem acredite que viver financeiramente de Open Source não é possível, mostro como fiz até hoje que doação não é a única opção, mas infelizmente é a primeira opção que vem a mente na maioria das pessoas. Em todas as empresas que liderei usei open source como estrategia de tecnologia para atração e retenção de profissionais, comunicação distribuída (poderia falar assíncrona, mas ainda não consegui fazer isso funcionar de forma performática), forma de compartilhar conhecimento como o time, developer experience (_DevX_) e etc. ## Vídeo {{< youtube PTuvCobVIwY >}} ## Slide {{< speakerdeck 9e40e0a2c7664449a50c15b7ea3a2386 >}} --- # Do querer fazer parte a CTO **URL**: https://avelino.run/do-querer-fazer-parte-a-cto/ **Published**: 2022-06-02 **Tags**: cto, team building, carreira **Word Count**: 463 words ![Do querer fazer parte a CTO](/blog/avelino-tony-buser.jpg#center) Após ver a iniciativa que a [Buser](https://www.linkedin.com/company/buserbrasil/) teve de formar pessoas em casa com o programa [Buser Tech](https://blog.buser.com.br/novidades/buser-lanca-programa-capacitacao-profissionais-tecnologia/), eu quis me aproximar deles de alguma forma — não sabia como nem o que fazer, mas queria fazer parte da **"festa"**. Ajudei muitas pessoas engenheiras evoluírem profissionalmente (mesmo que seja 0,001%), mas nunca formei ninguém do zero e senti estar no momento de aprender com quem está fazendo isso há alguns anos. Conheço o [@Tony](https://www.linkedin.com/in/tonylampada/) há muitos anos e no final de 2021 tomei a liberdade de mandar mensagem para ele e expressar meu interesse. Não me sentia confortável de entrar na Buser para sugar conhecimento, então propus entrar no time de engenharia como desenvolvedor e acompanhar o que está rolando no Buser Tech. No 1:1 com Tony ele compartilhou comigo que estava buscando alguém para assumir o papel de CTO na Buser. Confesso que não entendi porque ele estava compartilhando aquilo comigo, a única resposta que me veio no momento foi: > "Sé você está falando isso para eu ser CTO você está falando para a pessoa errada." Ao chegar e esbarrar com os softwares que desenvolvemos na Buser comecei a pensar como o pessoal que está no programa Buser Tech (com praticamente zero experiência em desenvolvimento de software) iria conseguir subir o ambiente de desenvolvimento que eu com alguns anos de experiência em engenharia estava com algumas fricções. Encarei isso como meu primeiro desafio de reduzir a fricção do onboarding do time de engenharia trazendo um olhar de developer experience. Depois de alguns dias/semanas senti que poderíamos melhorar nossa gestão de pessoas e projetos, corri para o papai Tony e me coloquei à disposição para ajudar como Tech Manager. O assunto de possivelmente ser CTO ficou na minha mente por dias e dias, cheguei a indicar um CTO para posição que infelizmente não deu match, mas vida que segue e meus monstros internos continuaram me assombrando sobre a posição de CTO. Geralmente quando tenho frio na barriga me soa que estou olhando para um grande desafio e existe um grande desconhecido — principalmente o que preciso evoluir como pessoa e gestor, nesse caso uma empresa com mais de 500 pessoas. Após empreender por alguns anos, não quero fazer uma empresa do zero até chegar em 500 pessoas (momento atual da Buser), mas tenho certeza que o desafio de ScaleUP de uma startup me leva mais próximo do meu objetivo profissional. Mesmo com frio na barriga e julgar ser uma pessoa que precisa evoluir muito estou assumindo a posição de CTO da Buser. O Tony está saindo da buser? Não, ele está voltando para próximo do time de engenharia e educação — onde ele sente que entrega muito mais resultado para a empresa. [Veja aqui](https://www.linkedin.com/pulse/vida-longa-ao-cto-tony-lampada/) a publicação que ele fez publicamente sobre esse movimento. --- # Open Source Contributions - June 2022 **URL**: https://avelino.run/foss/2022/06/ **Published**: 2022-06-01 **Word Count**: 188 words **Summary**: June 2022 saw significant contributions with 6 repositories involved, 5 issues opened, and 2 pull request reviews, showcasing ongoing development and community engagement. In June 2022, the development landscape was vibrant with notable contributions across multiple repositories. A total of 10 activities were recorded, including 6 pushes, 5 newly opened issues focusing on long-term repository updates, and 2 reviews on pull requests. This timeline captures the ongoing efforts and collaborative spirit within the community during this month. ## 2022-06-30 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sake to Other Software](https://github.com/avelino/awesome-go/pull/4279#pullrequestreview-1024874931) (Changes requested) ## 2022-06-26 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-06-26](https://github.com/avelino/awesome-go/issues/4301) ## 2022-06-23 - ✅ Reviewed PR in [github/gitignore](https://github.com/github/gitignore): [Ignore go.work.sum](https://github.com/github/gitignore/pull/4081#pullrequestreview-1016891035) (Approved) ## 2022-06-19 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-06-19](https://github.com/avelino/awesome-go/issues/4288) ## 2022-06-12 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-06-12](https://github.com/avelino/awesome-go/issues/4272) ## 2022-06-11 - 🐛 Opened issue in [businho/django-connexion](https://github.com/businho/django-connexion): [Suporte a upload de arquivo](https://github.com/businho/django-connexion/issues/9) ## 2022-06-05 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-06-05](https://github.com/avelino/awesome-go/issues/4255) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 6 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-06-01T00:00:00Z&until=2022-06-30T23:59:59Z) - 🔨 Push to [avelino/oss-news](https://github.com/avelino/oss-news): 2 commit(s) - [See commits](https://github.com/avelino/oss-news/commits?author=avelino&since=2022-06-01T00:00:00Z&until=2022-06-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2022-06-01T00:00:00Z&until=2022-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Texto é a forma mais eficiente de escalar sua comunicação **URL**: https://avelino.run/text-e-a-forma-mais-eficiente-de-escalar-sua-comunicacao/ **Published**: 2022-05-12 **Tags**: comunicacao, remote-work, team-building **Word Count**: 362 words ![Texto é a forma mais eficiente de escalar sua comunicação](/blog/text-e-a-forma-mais-eficiente-de-escalar-sua-comunicacao.jpeg) > É comum trocar essa falta de texto por call, nos enganando achando que é mais rápido, o grande problema é que dessa forma fazemos N call para tentar deixar todas as pessoas por dentro do assunto. > Deixando a solução "mais rápida" menos eficaz drenando mais tempo do que escrever um bom texto passando contexto para as pessoas envolvidas Com a aceleração do trabalho remoto muitas empresas acaba criando uma rotina insana de calls (provavelmente causada pela pandemia), se você olha a agenda dessas pessoas tem um call apos o outro sem ter tempo de planejar o que será discutido e processar o que foi discutido no call anterior porque está atrasado para o próximo call - isso pode piorar, em muitas reuniões não praticamos escuta ativa por ter outros assuntos na cabeça e não ter se preparado para reunião. Provavelmente a empresa não paga nosso salário por horas de reuniões/calls e sim pelo resultado que você agrega para o negócio. Sei que não é fácil escrever texto dando contexto para todas as pessoas (as que conhece o assunto e principalmente as que não conhece o assunto), as empresas sempre terão novos colaboradores entrando no time, texto bem estruturado fará os novos colaboradores entenderem o que fazemos e como fazemos. ## O que faço para tentar estruturar uma boa thread no slack (ou qualquer ferramenta de comunicação corporativa por texto) - Quando estou escrevendo um texto é me colocar no lugar da pessoa que vai ler e tem zero conhecimento sobre o assunto, isso me faz pensar muito mais sobre o que estou escrevendo, dando o máximo de contexto para que as pessoas consigam ter autonomia para agir; - Estruturar meu texto com assunto, introdução, desenvolvimento e conclusão; - Escrever fora da ferramenta (slack) para não ter ansiedade de enviar o texto antes da hora, reler por diversas vezes faz parte do processo de se colocar no lugar de quem vai ler o texto; - Escutar o que você escreveu: uso muito o leitor de tela (em 2x) para escutar o que escrevi, existe uma diferença grande em interpretação quando lemos e escutamos. _Texto nasceu ao esbarrar na publicação sobre **daily meeting** feita pelo Eduardo Matos, veja [aqui](https://www.linkedin.com/feed/update/urn:li:activity:6930458654013825024/)._ --- # Open Source Contributions - May 2022 **URL**: https://avelino.run/foss/2022/05/ **Published**: 2022-05-01 **Word Count**: 368 words **Summary**: May 2022 saw significant contributions across 13 repositories with 12 pull requests opened, showcasing collaboration and development momentum. Explore the timeline of contributions for May 2022, highlighting key activities including 12 pull requests, 8 issues, and notable push events across 13 repositories. This month reflects a strong collaborative effort, enhancing various projects and driving innovation. ## 2022-05-29 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-05-29](https://github.com/avelino/awesome-go/issues/4237) ## 2022-05-27 - ✅ Reviewed PR in [dracula/mailspring](https://github.com/dracula/mailspring): [Update install instructions](https://github.com/dracula/mailspring/pull/14#pullrequestreview-987266861) (Approved) ## 2022-05-24 - 🔍 Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Add an optional redirect(cache=sec) argument](https://github.com/bottlepy/bottle/pull/1370#pullrequestreview-982851132) (Changes requested) - 🐛 Opened issue in [Tensegritics/ClojureDart](https://github.com/Tensegritics/ClojureDart): [pubspec.yaml in cljd.edn: unify configuration file](https://github.com/Tensegritics/ClojureDart/issues/90) ## 2022-05-23 - 🔀 Opened PR in [moclojer/clj-workos](https://github.com/moclojer/clj-workos): [workos 2.1.4 lib](https://github.com/moclojer/clj-workos/pull/1) ## 2022-05-22 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [unit tests to validate the functions](https://github.com/avelino/monotropic-theme-vscode/pull/15) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-05-22](https://github.com/avelino/awesome-go/issues/4230) ## 2022-05-21 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [use nbb main function](https://github.com/avelino/monotropic-theme-vscode/pull/14) - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [migrate code base from js to clojure](https://github.com/avelino/monotropic-theme-vscode/pull/12) - 🔀 Opened PR in [babashka/nbb](https://github.com/babashka/nbb): [document how to use main function execution](https://github.com/babashka/nbb/pull/205) - 🔀 Opened PR in [babashka/nbb](https://github.com/babashka/nbb): [add monotropic in projects using nbb](https://github.com/babashka/nbb/pull/204) - 🐛 Opened issue in [babashka/nbb](https://github.com/babashka/nbb): [`-main` as the default function to start](https://github.com/babashka/nbb/issues/203) ## 2022-05-19 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [text color improvements](https://github.com/avelino/monotropic-theme-vscode/pull/11) ## 2022-05-18 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [gradient theme](https://github.com/avelino/monotropic-theme-vscode/pull/9) - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [isolate color variables from each theme](https://github.com/avelino/monotropic-theme-vscode/pull/8) ## 2022-05-16 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [coffee theme](https://github.com/avelino/monotropic-theme-vscode/pull/6) ## 2022-05-15 - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [fixed json generate](https://github.com/avelino/monotropic-theme-vscode/pull/4) - 🔀 Opened PR in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [GitHub workflows](https://github.com/avelino/monotropic-theme-vscode/pull/3) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-05-15](https://github.com/avelino/awesome-go/issues/4225) - 🐛 Opened issue in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [GH action Auto deploy to vscode marketplace ](https://github.com/avelino/monotropic-theme-vscode/issues/2) - 🐛 Opened issue in [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): [GH action release](https://github.com/avelino/monotropic-theme-vscode/issues/1) ## 2022-05-08 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-05-08](https://github.com/avelino/awesome-go/issues/4214) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 6 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 1 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 4 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [babashka/nbb](https://github.com/babashka/nbb): 2 commit(s) - [See commits](https://github.com/babashka/nbb/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [avelino/oss-news](https://github.com/avelino/oss-news): 15 commit(s) - [See commits](https://github.com/avelino/oss-news/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [avelino/monotropic-theme-vscode](https://github.com/avelino/monotropic-theme-vscode): 57 commit(s) - [See commits](https://github.com/avelino/monotropic-theme-vscode/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [moclojer/clj-workos](https://github.com/moclojer/clj-workos): 12 commit(s) - [See commits](https://github.com/moclojer/clj-workos/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) - 🔨 Push to [avelino/nexpress](https://github.com/avelino/nexpress): 3 commit(s) - [See commits](https://github.com/avelino/nexpress/commits?author=avelino&since=2022-05-01T00:00:00Z&until=2022-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # O método Pink Dot - minimalismo **URL**: https://avelino.run/metodo-pink-dot-minimalismo/ **Published**: 2022-04-02 **Tags**: pink dot, minimalismo, desapegar **Word Count**: 238 words ![método pink dot](/blog/pink-dot-method.jpg#center) Em 2016 lê o livro _[Essentialism: The Disciplined Pursuit of Less](https://www.amazon.com/Essentialism-Disciplined-Pursuit-Greg-McKeown/dp/0804137382)_ e tentei desapegar do máximo de _coisas_ desnecessárias e de lá para cá, reflito muito sobre tudo que vou comprar, mas desapegar do que já compramos não é uma tarefa muito fácil. Enquanto limpava e me livrava das coisas que não usava mais, comecei a encontrar objetos que me faziam pensar que talvez um dia eu precisasse deles. Provavelmente não iria precisar, mas o sentimento de apego pelo que é _"meu"_ falava mais alto. Um exemplo disso é uma ~cafeteira italiana moka~ que tinha impressão que usava, mas depois de 1 ano percebi que não tinha usado. ![cafeteira](/blog/the-pink-dot-method_2.jpg) ![cafeteira ponto rosa](/blog/the-pink-dot-method_4.jpg) Em vez de simplesmente me livrar das _coisas_, comecei usar o método **Pink Dot** que pode (deve) ser usado para situação como esta. A ideia é simples e ironicamente começa com a necessidade de comprar algo... ou seja, **adesivos de ponto rosa**. Sempre que você encontrar um objeto que você possa usar, ou pensar que vai usar e por qualquer motivo você não possa justificar se livrar dele, coloque um adesivo **cor-de-rosa**, agora é ~"só"~ ter calma e deixar o tempo passar. Quando você usar por objeto por pelo menos 10 vezes que tenha um adesivo **cor-de-rosa**, você deve remover o adesivo. Depois de seis meses, abra todos os armários e separe todas as coisas que tem o adesivo **cor-de-rosa**. Provavelmente você não vai precisar dele, não precisou até agora. --- # Open Source Contributions - April 2022 **URL**: https://avelino.run/foss/2022/04/ **Published**: 2022-04-01 **Word Count**: 496 words **Summary**: April 2022 saw 43 contributions across 17 repositories, including 5 pull requests and 11 issues, highlighting significant community engagement and project development. In April 2022, contributors made notable strides across various projects, with 43 total contributions, including pushes, pull requests, and issue resolutions. This timeline showcases the collaborative efforts within the community, highlighting key events and contributions that shaped the month. ## 2022-04-27 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add anorm](https://github.com/avelino/awesome-go/pull/4202#pullrequestreview-954680197) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Watermill](https://github.com/avelino/awesome-go/pull/4179#pullrequestreview-954673953) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added gio](https://github.com/avelino/awesome-go/pull/4172#pullrequestreview-954671117) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ramen](https://github.com/avelino/awesome-go/pull/4178#pullrequestreview-954667595) (Changes requested) ## 2022-04-26 - 🐛 Opened issue in [mastodon/mastodon-ios](https://github.com/mastodon/mastodon-ios): [[BUG] profile picture not update button bar](https://github.com/mastodon/mastodon-ios/issues/383) ## 2022-04-25 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Blog Post for JWT Authentication in Golang Rest API](https://github.com/avelino/awesome-go/pull/4199#pullrequestreview-951668603) (Changes requested) ## 2022-04-24 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-04-24](https://github.com/avelino/awesome-go/issues/4197) ## 2022-04-19 - 🐛 Opened issue in [clojars/administration](https://github.com/clojars/administration): [Verify run.avelino](https://github.com/clojars/administration/issues/243) ## 2022-04-17 - 🔀 Opened PR in [Striffly/mailspring-avatars](https://github.com/Striffly/mailspring-avatars): [gravatar/clearbit: check if the image exists](https://github.com/Striffly/mailspring-avatars/pull/5) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-04-17](https://github.com/avelino/awesome-go/issues/4183) ## 2022-04-16 - 🔀 Opened PR in [Striffly/mailspring-avatars](https://github.com/Striffly/mailspring-avatars): [fixed steps order install](https://github.com/Striffly/mailspring-avatars/pull/4) - 🐛 Opened issue in [Striffly/mailspring-avatars](https://github.com/Striffly/mailspring-avatars): [broken image (url does not exist)](https://github.com/Striffly/mailspring-avatars/issues/3) ## 2022-04-15 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [CORS error when creating a record (POST)](https://github.com/prest/prest/issues/695) ## 2022-04-11 - 🐛 Opened issue in [seancorfield/build-clj](https://github.com/seancorfield/build-clj): [no main manifest attribute, in target/.jar](https://github.com/seancorfield/build-clj/issues/20) ## 2022-04-10 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-04-10](https://github.com/avelino/awesome-go/issues/4174) ## 2022-04-09 - 🐛 Opened issue in [ReactiveX/RxClojure](https://github.com/ReactiveX/RxClojure): [Is the project active?](https://github.com/ReactiveX/RxClojure/issues/177) ## 2022-04-08 - 🔀 Opened PR in [clj-easy/graalvm-clojure](https://github.com/clj-easy/graalvm-clojure): [add pedestal to the list of libraries supported by graalvm](https://github.com/clj-easy/graalvm-clojure/pull/57) ## 2022-04-07 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Data section restructure](https://github.com/avelino/awesome-go/pull/4163#pullrequestreview-935713944) (Approved) ## 2022-04-05 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [add multi-host support](https://github.com/moclojer/moclojer/pull/46) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [support for multiple domains in the specification (configuration)](https://github.com/moclojer/moclojer/issues/47) ## 2022-04-03 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding go18ds](https://github.com/avelino/awesome-go/pull/4145#pullrequestreview-929667806) (Changes requested) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-04-03](https://github.com/avelino/awesome-go/issues/4159) ## 2022-04-02 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add twharmon/slices](https://github.com/avelino/awesome-go/pull/4136#pullrequestreview-929554498) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add reflectutils](https://github.com/avelino/awesome-go/pull/4154#pullrequestreview-929554197) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add nfigure](https://github.com/avelino/awesome-go/pull/4152#pullrequestreview-929554076) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add libschema ](https://github.com/avelino/awesome-go/pull/4151#pullrequestreview-929553933) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding webthings package.](https://github.com/avelino/awesome-go/pull/4144#pullrequestreview-929553467) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add dynago](https://github.com/avelino/awesome-go/pull/4142#pullrequestreview-929553135) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add lru](https://github.com/avelino/awesome-go/pull/4141#pullrequestreview-929552996) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added Golang CRUD tutorial](https://github.com/avelino/awesome-go/pull/4113#pullrequestreview-929510936) (Changes requested) ## 2022-04-01 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fixed contribution link](https://github.com/prest/prest/pull/691) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [prest/prestd-buildui](https://github.com/prest/prestd-buildui): 5 commit(s) - [See commits](https://github.com/prest/prestd-buildui/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 18 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 9 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [moclojer/moclojer.com](https://github.com/moclojer/moclojer.com): 2 commit(s) - [See commits](https://github.com/moclojer/moclojer.com/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [pqsim/porquesim.org](https://github.com/pqsim/porquesim.org): 9 commit(s) - [See commits](https://github.com/pqsim/porquesim.org/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [avelino/oss-news](https://github.com/avelino/oss-news): 26 commit(s) - [See commits](https://github.com/avelino/oss-news/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [clj-easy/graalvm-clojure](https://github.com/clj-easy/graalvm-clojure): 1 commit(s) - [See commits](https://github.com/clj-easy/graalvm-clojure/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 3 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [avelino/defer](https://github.com/avelino/defer): 2 commit(s) - [See commits](https://github.com/avelino/defer/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 1 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2022-04-01T00:00:00Z&until=2022-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Tempo sabático focado em experiência da pessoa desenvolvedora (DevX) **URL**: https://avelino.run/tempo-sabatico-focado-em-experiencia-da-pessoa-desenvolvedora-devx/ **Published**: 2022-03-20 **Tags**: devx, developer experience, sabbatical, sabbatical time **Word Count**: 621 words ![devx and sabbatical time](/blog/sabbatical-time-devx.png#center) O último _tempo sabático_ que tirei foi no final de 2018 quando sai do dia-a-dia da empresa que fundei em 2015, foram intensos 4 anos de trabalho e precisava parar para oxigenar meu cérebro. No meio de 2019 resolvi voltar ao mercado de trabalho para aprender sobre como as empresas de tecnologia estão estruturando time de engenharia de software — vinha empreendendo desde 2012 até 2018 e estruturando time de engenharia como julgava ser a melhor forma, senti precisar ganhar experiencia com quem estava em momento de _scaleup_, fazendo com excelência o que eu queria aprender. ## Estudando sobre UX De 2019 para cá não investi tempo para aprender assuntos "diferentes" que não necessariamente me dê ~dinheiro~. Em _dezembro/2021_ resolvi financiar meu aprendizado (passar alguns meses "sem trabalhar" e estudando) e resolvi investindo meu tempo em **Experiência do Usuário (focando na _pessoa desenvolvedora_)**. Sendo mais específico estudei sobre os seguintes assuntos: - Psicologia Cognitiva; - Usabilidade e Interação; - Interação Humano-Computador; - Design System; - e muitos outros assuntos relacionado a UX (não especifico para DevX). > Todos os temas voltado para experiência de pessoas, não necessariamente pessoa desenvolvedora. Tudo que estudo profundamente coloco em prática em um ambiente publico, geralmente uso projeto Open Source para isso, sendo contribuindo com algum projeto existente ou começando um novo projeto (~caso não existe~, é muito difícil não existir um projeto open source que faça uma parte da ideia que você não teve). ## Colocando o estudo em prática Sou um dos criadores do [**prestd**](https://github.com/prest/prest) (simplifica abrir o banco de dados PostgreSQL como uma API RESTful), infelizmente subir o ambiente de produção para o `prestd` não era uma tarefa simples (ainda não é, mas estamos no caminho) e só de pensar em subir o ambiente para desenvolver e/ou contribuir com o projeto era ainda mais complicado — eu sentia/sinto vergonha que ajudei desenvolver um projeto com uma barreira super alta para contribuição, eu só tive essa visão após estuda sobre UX com foco em DevX. Quando tenho esse tipo de sentimento (vergonha ou algum problema) gosto de trazer os problemas para meu colo, assim tenho a oportunidade de assumir a responsabilidade de melhorar o que esta me incomodando. Alguns passos importantes que o `prestd` deu para simplificar a vida da pessoa desenvolvedora (que quer usar ou contribuir com o projeto): - Reestruturar a documentação com o pensamento de quem vai usar o projeto, não com pensamento de quem já conhece o projeto; - Limitar o número de novos recursos que entra no projeto, precisamos colocar esforços nos recursos atuais melhorando a documentação e simplificando o uso; - Simplificar a criação do ambiente de desenvolvimento, usando [`devcontainers`](https://code.visualstudio.com/docs/remote/containers) (e sua integração com [GitHub Codespace](https://github.com/features/codespaces)), `docker-compose` e permitir rodar os testes localmente (na real ele rodava localmente, mas tinha que configurar muitas coisas e até eu deixar rodar no _CI_). [Escrevi aqui um blogpost falando desse processo](https://dev.to/prestd/constant-work-to-onboarding-new-members-into-engineering-team-18k0); - **...**, ainda temos muito que fazer/melhorar para deixar o `prestd` um software amigável para novas pessoas desenvolvedoras, mas sinto que estamos em uma constante evolução. Quando falamos de **DevX (UX focado nas pessoas desenvolvedoras)** precisamos ter empatia com as pessoas que vão usar o software que estamos desenvolvendo, e não _"só"_ com as pessoas que conhece o projeto, devemos nos colocar no lugar das pessoas e buscar sentir o que elas sentiriam se estivesse embarcando hoje no projeto sem ter conhecimento prévio. > O que você tem feito para deixar o software que você esta desenvolvendo atualmente mais acessível para seus usuários e novos membros do time? Lembre-se que o código é (e acredito que sempre será) um meio para chegar em algum lugar e não a linha de chegada, principalmente quando estamos falando sobre desenvolver software para outras pessoas desenvolvedoras usar - nós desenvolvedores somos pessoas que tem muito [_viés cognitivo_](https://pt.wikipedia.org/wiki/Vi%C3%A9s_cognitivo). --- # Open Source Contributions - March 2022 **URL**: https://avelino.run/foss/2022/03/ **Published**: 2022-03-01 **Word Count**: 626 words **Summary**: March 2022 saw 54 contributions across 11 repositories, highlighting a dynamic month of development, with numerous pull requests and reviews driving progress. Explore the contributions made in March 2022, showcasing a total of 54 activities including 12 open pull requests, 19 reviews, and 14 issues across 11 repositories. This timeline captures the collaborative efforts and significant enhancements made during the month. ## 2022-03-30 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [openapi: specified endpoints are not working](https://github.com/moclojer/moclojer/issues/45) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Distribution of the final docker image with binary file](https://github.com/moclojer/moclojer/issues/44) ## 2022-03-27 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-03-27](https://github.com/avelino/awesome-go/issues/4143) ## 2022-03-25 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [postman collection spec support](https://github.com/moclojer/moclojer/issues/43) - 🐛 Opened issue in [rough-stuff/rough](https://github.com/rough-stuff/rough): [mermaid language to rough](https://github.com/rough-stuff/rough/issues/203) ## 2022-03-23 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Kachit/dusupay-sdk-go package](https://github.com/avelino/awesome-go/pull/4120#pullrequestreview-918696031) (Changes requested) ## 2022-03-22 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [API Blueprint specification support](https://github.com/moclojer/moclojer/issues/42) ## 2022-03-21 - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [remove duplicate link "projects" on nav menu](https://github.com/avelino/hugo-theme-sarah/pull/54) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [article title: remove upper case ](https://github.com/avelino/hugo-theme-sarah/pull/53) - 🔍 Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Add support to save form parameters and document it on README](https://github.com/moclojer/moclojer/pull/40#pullrequestreview-915919861) (Changes requested) - 💬 Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Using multistage to smaller docker images](https://github.com/moclojer/moclojer/pull/39#pullrequestreview-915912939) (Commented) ## 2022-03-20 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [slugify: remove unused dependency](https://github.com/moclojer/moclojer/pull/38) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [change openjdk 11 to 19](https://github.com/moclojer/moclojer/pull/37) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [fixed ident used clj-kondo](https://github.com/moclojer/moclojer/pull/36) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-03-20](https://github.com/avelino/awesome-go/issues/4111) ## 2022-03-19 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docker: ignore configuration files (yml/edn) build](https://github.com/moclojer/moclojer/pull/35) - 🔍 Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Watch now only refresh on change](https://github.com/moclojer/moclojer/pull/33#pullrequestreview-915031492) (Changes requested) ## 2022-03-15 - 🔀 Opened PR in [barelyhuman/goblin](https://github.com/barelyhuman/goblin): [fixed @tj github profile link](https://github.com/barelyhuman/goblin/pull/9) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add validator](https://github.com/avelino/awesome-go/pull/4102#pullrequestreview-910719995) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add anorm](https://github.com/avelino/awesome-go/pull/4104#pullrequestreview-910718357) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add anoweb](https://github.com/avelino/awesome-go/pull/4103#pullrequestreview-910718069) (Changes requested) - 🔍 Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Rewrite and unify router implementations](https://github.com/moclojer/moclojer/pull/30#pullrequestreview-909933664) (Changes requested) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [JWT authentication](https://github.com/moclojer/moclojer/issues/32) ## 2022-03-14 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [generating reflect.config in gaction](https://github.com/moclojer/moclojer/pull/29) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Reorganizing text processors](https://github.com/avelino/awesome-go/pull/4090#pullrequestreview-909136085) (Approved) ## 2022-03-13 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docker file image](https://github.com/moclojer/moclojer/pull/28) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [split build and release into two actions](https://github.com/moclojer/moclojer/pull/27) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [generate version automatically with tag creation](https://github.com/moclojer/moclojer/pull/24) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [docker image](https://github.com/moclojer/moclojer/issues/26) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [generate binary version for each architecture](https://github.com/moclojer/moclojer/issues/25) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-03-13](https://github.com/avelino/awesome-go/issues/4100) ## 2022-03-10 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Mantil to DevOps Tools](https://github.com/avelino/awesome-go/pull/4093#pullrequestreview-906446376) (Changes requested) ## 2022-03-08 - 🐛 Opened issue in [graalvm/homebrew-tap](https://github.com/graalvm/homebrew-tap): [Apple M1: bad CPU type in executable](https://github.com/graalvm/homebrew-tap/issues/43) ## 2022-03-06 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-03-06](https://github.com/avelino/awesome-go/issues/4076) ## 2022-03-04 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [endpoint to file upload](https://github.com/moclojer/moclojer/issues/20) ## 2022-03-03 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [adding github.com/samber/lo](https://github.com/avelino/awesome-go/pull/4073#pullrequestreview-898807836) (Changes requested) - ✅ Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [[EDN-MOCK-SERVER-SUPPORT]- add edn support to moclojer](https://github.com/moclojer/moclojer/pull/16#pullrequestreview-899304985) (Approved) ## 2022-03-02 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add cdule](https://github.com/avelino/awesome-go/pull/4068#pullrequestreview-897896231) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add anok PR](https://github.com/avelino/awesome-go/pull/4064#pullrequestreview-897893127) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Gin-vue-admin](https://github.com/avelino/awesome-go/pull/4070#pullrequestreview-897887382) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Updating contribution guidelines](https://github.com/avelino/awesome-go/pull/4051#pullrequestreview-897881123) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add artifact web framework](https://github.com/avelino/awesome-go/pull/4072#pullrequestreview-897709399) (Changes requested) ## 2022-03-01 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [run the tests after the linter](https://github.com/moclojer/moclojer/pull/19) - 💬 Reviewed PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [Native Binary build on CI](https://github.com/moclojer/moclojer/pull/18#pullrequestreview-896809652) (Commented) - ✅ Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [add GitHub URL for PyPi](https://github.com/bottlepy/bottle/pull/1369#pullrequestreview-896810876) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 13 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [barelyhuman/goblin](https://github.com/barelyhuman/goblin): 1 commit(s) - [See commits](https://github.com/barelyhuman/goblin/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 9 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 84 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 5 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 8 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 1 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 3 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2022-03-01T00:00:00Z&until=2022-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # moclojer **URL**: https://avelino.run/projects/moclojer/ **Published**: 2022-02-22 **Tags**: mock, api-mock, mock-server, openapi, openapi-mock, clojure, open source **Word Count**: 1060 words Simple and efficient HTTP **mock server** _open source_, [project repository](https://github.com/avelino/moclojer). The [**`(-> moclojer)`**](https://github.com/avelino/moclojer) supports API-first development with the API Builder. You can design your API directly with **`(-> moclojer)`** using the `yaml`, `edn`, and **`OpenAPI`** specification. Your specification can then act as the only source of truth for your API design. ![mock server - moclojer](https://github.com/avelino/moclojer/raw/main/doc/assets/logo.png) You can make requests that return mock data defined within **`(-> moclojer)`** if you do not have a production API ready, or you do not want to run your requests against real data yet. By adding a mock server to your collection and adding examples to your requests, you can simulate the behavior of a real API. When you send a request to a mock server, **`(-> moclojer)`** will match the request configuration to the examples you have saved for the request and respond with the data you added in the configuration (written in [`yaml`](https://yaml.org/spec/), [`edn`](https://github.com/edn-format/edn) or [`OpenAPI`](https://swagger.io/specification/)). > **Hot Reload** support, when updating the configuration file (yaml or edn) the new settings are reloaded automatically, accelerating the development process of your mock server. ## Creating mock server **`(-> moclojer)`** uses the specifications written in the configuration file to declare the endpoints, uri parameters, and its return (which can be dynamic with the data received in the request). Create a file named `moclojer.yml` (we will use yaml because it is a more familiar format to most people, k8s did a great job diseminating this format), inside the yaml file created put the following content: ```yaml - endpoint: method: GET path: /hello/:username response: status: 200 headers: Content-Type: application/json body: > { "hello": "{{path-params.username}}!" } - endpoint: method: GET path: /hello-world response: status: 200 headers: Content-Type: application/json body: > { "hello": "Hello, World!" } - endpoint: method: GET path: /with-params/:param1 response: status: 200 headers: Content-Type: application/json body: > { "path-params": "{{path-params.param1}}", "query-params": "{{query-params.param1}}" } - endpoint: method: POST path: /first-post-route response: status: 200 headers: Content-Type: application/json body: > { "project": "{{json-params.project}}" } ``` Describing all endpoints declared in the configuration file, you can see the following: | path | method | descrition | | --- | --- | --- | | `/hello/:username` | GET | Will take a parameter from the url called username and return the username dynamically from the response body. | | `/hello-world` | GET | Static endpoint that returns content that is not dynamic. | | `/with-params/:param1` | GET | It will take a parameter from the url called param1 and the query string called param1, and return both parameters dynamically in the response body. Exemplifying how to consume the two types of parameters in the return from the endpoint. | | `/first-post-route` | POST | It will take a parameter from the body called project, and return the project name dynamically from the response body. | ### Multi-domain support **`(-> moclojer)`** supports multi-domain (host), just put the tag "host" for which domain the endpoint will respond to the request: ```yaml - endpoint: host: sub.moclojer.com method: GET path: /multihost-sub response: status: 200 headers: Content-Type: application/json body: > { "domain": "sub.moclojer.com" } ``` ### Run it mocker server **`(-> moclojer)`** is written in the Clojure programming language and is provided for distribution in some formats. **clojure:** ```sh CONFIG=moclojer.yml clojure -X:run # has an alias created in edn with the name "run" ``` **binary:** You don't have the binary file yet? [Download it here](https://github.com/avelino/moclojer/releases/latest). The moclojer is distributed as follows: - Binary format: `moclojer_` - _in binary format (you don't need anything additional on your operating system to run it)_ - Linux `moclojer_Linux` - macOS `moclojer_macOS` - `moclojer.jar` - _in java format (you need to install java to run it)_ - Docker image - _in docker format (you need to install docker to run it)_ After creating the file you must run moclojer passing the configuration file by the `CONFIG` environment variable: ```sh CONFIG=moclojer.yml moclojer # binary filename ``` **`moclojer.jar`:** ```sh CONFIG=moclojer.yml java -jar moclojer.jar ``` **Docker:** ```sh docker pull ghcr.io/avelino/moclojer:latest docker run -it \ -v $(pwd)/moclojer.yml:/app/moclojer.yml \ ghcr.io/avelino/moclojer:latest ``` to use the `edn` format, you must pass the following parameters to docker: `-e CONFIG=moclojer.edn -v $(pwd)/moclojer.edn:/app/moclojer.edn` ## Return template **`(-> moclojer)`** uses a template engine with [**jinja** `{{var}}`](https://github.com/yogthos/Selmer#built-in-tags-1) syntax to make it possible to make the API return dynamic content. Opening the possibility to use operators (`if`, `ifequal`, `ifunequal`, `for`, `firstof` and etc) and programming logic to validate received parameters. ```yaml - endpoint: method: GET path: /condition/:param1 response: status: 200 headers: Content-Type: application/json body: > { "unique-param": "{% ifequal path-params.param1 "moclojer" %}{{path-params.param1}}{% else %}{{query-params.param1}}{% endifequal %}" } ``` **Variables:** - `path-params`: the parameters passed to the endpoint `/hello/:username` - `query-params`: the parameters passed in _query string_ to the endpoint `?param1=value1¶m2=value2` - `json-params`: the parameters passed in _data request_ to the endpoint `{"param1": "value1"}` **Example** ```json { "path-params": "{{path-params.param1}}", "query-params": "{{query-params.param1}}", "json-params": "{{json-params.param1}}" } ``` ### `.edn` exemple ``` {:endpoint {:method :get :path "/pets" :response {:status 200 :headers {:content-type "applicantion/json"} :body {:pets [{:name "Uber" :type "dog"} {:name "Pinpolho" :type "cat"}]}} :router-name :get-all-pets}} {:endpoint {:method :get :path "/pet/:id" :response {:status 200 :headers {:content-type "applicantion/json"} :body {:id 1 :name "uber" :type "dog"}} :router-name :get-pet-by-id}} ``` ## OpenAPI Integration You can easily mock all routes routes from a OpenAPI v3 specification. For this, you will need to define one response for each operation. ### Example With a valid OpenAPI file schema `simple-api.json` ```json { "openapi": "3.0.0", "info": { "title": "Sample API", "version": "1.0" }, "paths": { "/hello": { "get": { "operationId": "myFirstRoute", "responses": { "200": { "description": "A JSON array of user names", "content": { "application/json": { "schema": { "type": "object", "required": [ "hello" ], "properties": { "hello": { "type": "string" } } } } } } } } } } } ``` Create a `mocks.json` file, with the content ```json { "myFirstRoute": { "body": "{\"hello\": \"{{path-params.username}}!\"}", "headers": { "Content-Type": "application/json" }, "status": 200 } } ``` Then run `CONFIG=simple-api.json MOCKS=mocks.json <>` ### Form upload support On both `moclojer.yml` or `mocks.json` you can add a `store` key to enable multipart uploads on the route and save the content in a dir. ```yaml - endpoint: method: POST path: /hello/:username response: ## Will save all parameters at ./form-uploads directory store: form-uploads status: 200 headers: Content-Type: application/json body: > { "hello": "{{path-params.username}}!" } ``` ```json { "myFormRoute": { "store": "formRoute", "headers": { "Content-Type": "application/json" }, "status": 303 } } ``` ## How to contribute? We are open to new ideas to keep **`(-> moclojer)`** better, for that we need your contribution (**not only writing code**, contributing with what you do best), so from this moment on I welcome you to the **`(-> moclojer)` team**. If you have a requirement that doesn't already exist in moclojer ask for it via **issue** on the project's github, [here](https://github.com/avelino/moclojer/issues). > We have a lot to evolve and we need you to make new ideas to make **`(-> moclojer)`** even better. --- # We are more than 75,000 people (stars 🌟) — awesome-go **URL**: https://avelino.run/we-are-more-than-75000-people-awesome-go/ **Published**: 2022-02-03 **Tags**: open source, awesome-go, community, golang **Word Count**: 251 words [![awesome-go 75k](/blog/awesome-go-75k.jpeg#center)](http://github.com/avelino/awesome-go) I've been meaning to write this blogpost since when we reached 10,000 stars 🌟 (I never imagined it would reach that number of people), but every day I reached more (and more) people and always thought the text would get outdated. > Today is the day to thank everyone who uses, contributes and follows awesome-go, it's time to celebrate 🎉🙌 — regardless of the number we reach and the people we help in some way. Awesome-go was born on **2014-07-06** inspired by the _[awesome-python](https://github.com/vinta/awesome-python)_ project, after the [first commit](https://github.com/avelino/awesome-go/commit/8d356bc0dfbe817a378186b9b6fb5afe81781d42) containing _3 categories_ I messaged some friends who used Go at work to help list the libraries they used in their day-to-day work. ![awesome-go first commit](/blog/awesome-go-first-commit.png#center) I never imagined that a _“no code”_ project would receive so many contributions (we are more than [2000 contributors](https://github.com/avelino/awesome-go/graphs/contributors)). As the number of pull requests grew, reviewing the contributions became impossible, and we had to invest time to automate our review work as much as possible by bringing in an automated process via CI to optimize the time of all maintainers of the project (now using code), running on each open pull request. ## Thanks to 🙏 I’m grateful to our community for all the support, I am excited by the number of people we reach and somehow help them find the best library for their project 💜. Here is my eternal gratitude to all the people who send in their libraries and who help me keep awesome-go running ([the maintainers](https://github.com/avelino/awesome-go/graphs/contributors), _**you are amazing**_). 👉 Help us reach 100k! 🌟 [http://github.com/avelino/awesome-go](http://github.com/avelino/awesome-go) --- # Open Source Contributions - February 2022 **URL**: https://avelino.run/foss/2022/02/ **Published**: 2022-02-01 **Word Count**: 659 words **Summary**: February 2022 saw 18 repositories contribute 58 total activities, including 16 PRs and 19 issues, showcasing a vibrant open-source community. Explore the timeline of contributions for February 2022, highlighting the collaborative efforts across 18 repositories. This month featured a total of 58 activities, including 16 pull requests and 19 issues, reflecting the dynamic engagement of contributors in the open-source ecosystem. ## 2022-02-28 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [implement (body-params/body-params)](https://github.com/moclojer/moclojer/pull/14) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [`POST` support, read request data parameter](https://github.com/moclojer/moclojer/issues/13) ## 2022-02-27 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [params query support](https://github.com/moclojer/moclojer/pull/12) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [`query-params` on request body (template render)](https://github.com/moclojer/moclojer/issues/11) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-02-27](https://github.com/avelino/awesome-go/issues/4065) ## 2022-02-26 - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [slugify router-name -> remove replace `/`](https://github.com/moclojer/moclojer/pull/10) - 🔀 Opened PR in [moclojer/moclojer](https://github.com/moclojer/moclojer): [dynamic endpoint support](https://github.com/moclojer/moclojer/pull/8) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [slugify router-name -> remove replace `/`](https://github.com/moclojer/moclojer/issues/9) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [dynamic endpoint support](https://github.com/moclojer/moclojer/issues/7) ## 2022-02-25 - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [GraalVM: Exception in thread "main" java.lang.ClassNotFoundException: org.yaml.snakeyaml.Yaml](https://github.com/moclojer/moclojer/issues/6) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [OpenAPI: class java.lang.Integer cannot be cast to class java.lang.CharSequence](https://github.com/moclojer/moclojer/issues/5) - 🐛 Opened issue in [moclojer/moclojer](https://github.com/moclojer/moclojer): [binary distribution not `.jar` - graalvm support](https://github.com/moclojer/moclojer/issues/4) ## 2022-02-24 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [feat: add minima in framework section](https://github.com/avelino/awesome-go/pull/4055#pullrequestreview-892219775) (Changes requested) - 🐛 Opened issue in [DeLaGuardo/setup-clojure](https://github.com/DeLaGuardo/setup-clojure): [@4.0: UnhandledPromiseRejectionWarning: Error: Unexpected HTTP response: 403](https://github.com/DeLaGuardo/setup-clojure/issues/42) ## 2022-02-22 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add go-cleanhttp](https://github.com/avelino/awesome-go/pull/4061#pullrequestreview-889609187) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sqlc in "SQL Query Builder" section](https://github.com/avelino/awesome-go/pull/4054#pullrequestreview-889481463) (Changes requested) ## 2022-02-21 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/4060#pullrequestreview-888569228) (Changes requested) ## 2022-02-20 - 🔀 Opened PR in [clojure/clojure-site](https://github.com/clojure/clojure-site): [twitter community](https://github.com/clojure/clojure-site/pull/579) - 🔀 Opened PR in [avelino/java.jdbc](https://github.com/avelino/java.jdbc): [fixed link: How to reuse database connections](https://github.com/avelino/java.jdbc/pull/1) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-02-20](https://github.com/avelino/awesome-go/issues/4056) ## 2022-02-18 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Updating contribution guidelines](https://github.com/avelino/awesome-go/pull/4051#pullrequestreview-887169006) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add req](https://github.com/avelino/awesome-go/pull/4053#pullrequestreview-887145079) (Changes requested) ## 2022-02-15 - 🐛 Opened issue in [LunarVim/LunarVim](https://github.com/LunarVim/LunarVim): [clojure deps](https://github.com/LunarVim/LunarVim/issues/2285) ## 2022-02-14 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add clover to "Database" section](https://github.com/avelino/awesome-go/pull/4046#pullrequestreview-882161137) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add ThreadComputation](https://github.com/avelino/awesome-go/pull/4045#pullrequestreview-881481547) (Changes requested) ## 2022-02-13 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-02-13](https://github.com/avelino/awesome-go/issues/4042) ## 2022-02-10 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add pagoda](https://github.com/avelino/awesome-go/pull/4038#pullrequestreview-878950183) (Approved) - 🐛 Opened issue in [clj-jgit/clj-jgit](https://github.com/clj-jgit/clj-jgit): [`bare` repository, how to create document?](https://github.com/clj-jgit/clj-jgit/issues/73) - 🐛 Opened issue in [raycast/extensions](https://github.com/raycast/extensions): [terminalfinder: hyper term support](https://github.com/raycast/extensions/issues/854) ## 2022-02-09 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add objwalker](https://github.com/avelino/awesome-go/pull/4034#pullrequestreview-877825987) (Changes requested) ## 2022-02-08 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Mailx library](https://github.com/avelino/awesome-go/pull/3995#pullrequestreview-875975051) (Approved) ## 2022-02-07 - 🔀 Opened PR in [golang/go](https://github.com/golang/go): [encoding/json: write doc for the fuzz function](https://github.com/golang/go/pull/51046) ## 2022-02-06 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-02-06](https://github.com/avelino/awesome-go/issues/4032) ## 2022-02-05 - 🔀 Opened PR in [golang/go](https://github.com/golang/go): [database/sql: document the `asString` function](https://github.com/golang/go/pull/51030) - 🔀 Opened PR in [golang/go](https://github.com/golang/go): [database/sql: use `asString` to reduce logic](https://github.com/golang/go/pull/51029) ## 2022-02-04 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [sponsor table](https://github.com/avelino/awesome-go/pull/4027) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [markdown structure improvements](https://github.com/avelino/awesome-go/pull/4024) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove robbert229/jwt](https://github.com/avelino/awesome-go/pull/4021) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove RichardKnop/go-oauth2-server](https://github.com/avelino/awesome-go/pull/4020) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove mccoyst/vorbis](https://github.com/avelino/awesome-go/pull/4019) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Trybe's style guide](https://github.com/avelino/awesome-go/pull/4022#pullrequestreview-873126212) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [tests: the sub items (with 3 hash marks `###`) are staying in the main list](https://github.com/avelino/awesome-go/issues/4026) - 🐛 Opened issue in [o1egl/paseto](https://github.com/o1egl/paseto): [is it still an active project?](https://github.com/o1egl/paseto/issues/36) ## 2022-02-03 - 🔀 Opened PR in [betrybe/playbook-go](https://github.com/betrybe/playbook-go): [initial version in English](https://github.com/betrybe/playbook-go/pull/4) - 🔀 Opened PR in [betrybe/playbook-go](https://github.com/betrybe/playbook-go): [markdown lint](https://github.com/betrybe/playbook-go/pull/3) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Trybe's style guide](https://github.com/avelino/awesome-go/pull/4018#pullrequestreview-871761937) (Changes requested) ## 2022-02-02 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add bingo to README](https://github.com/avelino/awesome-go/pull/4015#pullrequestreview-871080170) (Changes requested) - 🐛 Opened issue in [ZupIT/horusec](https://github.com/ZupIT/horusec): [vscode: improved description of the plugin](https://github.com/ZupIT/horusec/issues/969) ## 2022-02-01 - 🐛 Opened issue in [bakpakin/Fennel](https://github.com/bakpakin/Fennel): [lisp syntax? wouldn't it be lisp dialect?](https://github.com/bakpakin/Fennel/issues/408) ## Commits - 🔨 Push to [betrybe/playbook-go](https://github.com/betrybe/playbook-go): 6 commit(s) - [See commits](https://github.com/betrybe/playbook-go/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 12 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 6 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [moclojer/moclojer](https://github.com/moclojer/moclojer): 36 commit(s) - [See commits](https://github.com/moclojer/moclojer/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [clojure/clojure-site](https://github.com/clojure/clojure-site): 1 commit(s) - [See commits](https://github.com/clojure/clojure-site/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 13 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 1 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 13 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2022-02-01T00:00:00Z&until=2022-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Insights/Anotações do mês 01/2022 **URL**: https://avelino.run/newsletter/2022-01-anotacoes/ **Published**: 2022-01-16 **Tags**: newsletter, anotações, insights, avelino, open source, thiago avelino **Word Count**: 312 words ## Como o Medium lida com crescimento do time de engenharia? *Em 2017 o time de engenharia do Medium começou escrever como crescimento do seu time colocando as pessoas como primeiro plano e em 2019 escreveram um blogpost falando sobre 2 anos pôs publicação do “[Engineering growth: framework overview](https://medium.com/s/engineering-growth-framework/engineering-growth-framework-overview-4e02ab330524)”.* Conversar sobre crescimento deve ser contínua, assim evitando ser uma surpresa na avaliação. Foi mencionado um estudo sobre pensando sobre crescimento, [*super recomendar ler*](https://www.mindsetworks.com/science/). > [https://medium.engineering/engineering-growth-at-medium-4935b3234d25](https://medium.engineering/engineering-growth-at-medium-4935b3234d25) --- ## Olhando para alteração organizacional como uma evolução do produto - Os usuários do produto "empresa" são os funcionários; - Não é da conta empresa o que o colaborador faz fora do trabalho, o valor que era pago foi cancelado e agora é feito pagamento do valor direto para o funcionário fazer o que ele julga ser melhor para ele; - Sem review 360, "não faz sentido" se temos feedback constante dos líderes e pares; - Posição politica deve ser discutido fora da empresa a empresa é para desenvolver software - compressão para dar espaço para todos, será que podemos chamar isso por diversidade? - Empresas com muitos anos passa por mudanças, não foi diferente com a Basecamp. > [https://world.hey.com/jason/changes-at-basecamp-7f32afc5](https://world.hey.com/jason/changes-at-basecamp-7f32afc5) --- ## Sem reuniões, sem tempo de entrega e sem time em tempo integral Blogpost do Sahil falando como é o trabalho na Gumroad e como chegou nesse modelo após quase "quebrar" a empresa e ter que desligar quase todos do time. > [https://sahillavingia.com/work](https://sahillavingia.com/work) --- ## Eu não quero ser como o Google **Fernanda Weiden** compartilha sua experiência com gestão, colocando alguns pontos importante na “mesa” do que ela não concorda e outras empresas (e principalmente startup) tenta copiar, mas deveria olhar para o que é positivo e adaptar para sua realidade e não simplesmente copiar. > [https://www.goodtogreat.io/p/i-dont-want-to-be-like-google](https://www.goodtogreat.io/p/i-dont-want-to-be-like-google) --- # Constante trabalho para absorver novas pessoas em time de engenharia **URL**: https://avelino.run/constante-trabalho-para-absorver-novas-pessoas-em-time-de-engenharia/ **Published**: 2022-01-12 **Tags**: team building, open source, engenharia, tecnologia **Word Count**: 735 words ![Constante trabalho para absorver novas pessoas em time de engenharia](/blog/onboarding-engineer-team.png#center) Desenvolver o processo de _“bordo” (onboarding)_ para uma nova pessoa em time de engenharia requer muita dedicação e manter esse processo fluido da ainda mais trabalho (gerando o mínimo de fricção). Esse assunto é desafiador para qualquer empresa e/ou time trabalhando full time, imagina em projeto _Open Source_ que geralmente os contribuidores trabalham em seu tempo livre que ele poderia estar com sua familia ou fazendo qualquer outra coisa. Devemos deixar esse processo o mais fluido possível para que as pessoas não desanime com a complexidade para subir o ambiente e testar, até fazer sua primeira contribuição (pull request). ## Configurar o ambiente de desenvolvimento Cada desenvolvedor de tem uma forma diferente de [configurar ambiente de desenvolvimento](https://avelino.run/conhe%C3%A7a-seu-ambiente-de-trabalho/), mesmo que seja em uma tecnologia (linguagem de programação) popular com muita documentação, extensões do editor de texto (emacs, vim, vscode, ...), etc. Nos desenvolvedores somos acostumados com “nossa forma” de trabalhar (em geral com alguns vícios), infelizmente é comum ter resistência de mudar alguma coisa quando alguém apresentar uma forma diferente. Na grande maioria das aplicações elas depende de recursos externo como banco de dados, API, tokens e etc, se forcar o desenvolvedor (usuário) ler toda a documentação do projeto antes de ter o primeiro contato com o projeto provavelmente perderemos o engajamento dele com o projeto, gerando algumas frustrações, como: - eu só queria testar - tenho que ler tudo isso para ver funcionando - que projeto complicado - tenho que instalar X, Y e Z serviço/software na minha maquina - não conheço a linguagem de programação usada no projeto, qual plugins tenho que instalar no meu editor? - ... e assim por diante. Existem algumas ferramentas para auxiliar nos mantenedores de projeto (open source ou privado) para gerar um processo de bordo com o mínimo de fricção possível. Deixando automatizada a configuração do editor (com todos os plugins e parâmetros necessários), todos os serviços que o projeto necessita para funcionar, variáveis de ambiente configurada, banco de dados rodando com carga inicial de dados, visualizador de dados configurados (software para gerenciar dados do banco de dados), etc. Ao ponto do desenvolvedor **“clicar em um botão”** e _magicamente_ estar com o ambiente de desenvolvimento pronto para testar o software. Nos últimos meses nos do _prestd_ trabalhamos em melhorar nossa documentação (esta longe de ser uma boa documentação) e remover o máximo de fricção no processo de subir um novo ambiente de desenvolvimento, algumas issues que implementamos até chegar no que temos hoje: - [Improve local tests execution](https://github.com/prest/prest/issues/510) — é frustrante alguém querer contribuir e não conseguir rodar os testes locais (usamos testes e2e, fazendo requisições para a própria API do _prestd_), foi implementado uma forma onde os testes funcionam dentro do **docker** usando `docker-compose`; - [Documentation: new content architecture](https://github.com/prest/prest/issues/542) — com pensamento em uma pessoa que nunca teve contato com o _prestd_ e quer testar ou usar em ambiente de produção, ambas pessoas devem entrar na documentação e conseguir fazer o que deseja (subir o ambiente); - [Onboarding of new contributor: using devcontainer](https://github.com/prest/prest/issues/665) — preparar o ambiente de desenvolvimento com _“1 click”_ usando [devcontainers](https://code.visualstudio.com/docs/remote/containers) (suporte a [GitHub Codespaces](https://github.com/features/codespaces)). Veja a pagina de guia de desenvolvimento do _prestd_ **[aqui](https://docs.prestd.com/prestd/setup/development-guide/#dev-container)**. > Não é legal ter o time de engenharia trabalhando em um ambiente “hostil”, precisamos pensar mais em nosso time e deixar a experiência do time fluida. > **pessoas > tecnologia** ## Foco no desenvolvedor (usuário) O _prestd_ existe open source desde 2016, particularmente gosto muito do projeto e acredito que seja uma ótima solução para acelerar o desenvolvimento de uma API RESTful para banco de dados existente e principalmente desenvolvimento de uma nova API (projeto começando do zero). Porem durante muitos anos nos voltamos para desenvolver o software e não olhava para documentação a dedicação que deveríamos, fazendo com que a base de contribuidores fosse reduzindo (existente e novos) — pessoas passaram pelo empresa/projeto (quando estamos falando de open source o turnover é ainda maior), dificilmente ficara por muito tempo, fazendo que sempre tenhamos novos colaboradores começando no projeto. Dado esse problema comentada acima, comecei olhar para documentação com mais dedicação e as decisões toda no _prestd_ daqui para frente será pensando na experiência do desenvolvedor (usuário), respondendo as seguintes perguntas: - Isso melhorará a experiência do desenvolvedor usar o projeto? - Isso facilitará o uso do projeto? - Isso facilitará manter o desenvolvimento do projeto? Quando os 3 questionamentos for **“sim”**, seguiremos com a implementação, independente do que seja: recurso, melhorar, correção, etc. > Versão em inglês foi publica no blog da prestd **[aqui](https://dev.to/prestd/constant-work-to-onboarding-new-members-into-engineering-team-18k0)**. --- # Open Source Contributions - January 2022 **URL**: https://avelino.run/foss/2022/01/ **Published**: 2022-01-01 **Word Count**: 936 words **Summary**: January 2022 saw 18 repositories contribute 85 significant updates, including 30 pull requests and 14 pushes, driving innovation and collaboration in the community. Explore the contributions made in January 2022, where 18 repositories engaged in a remarkable total of 85 activities. This timeline highlights key events, including numerous pull requests and pushes that showcase the collaborative spirit and ongoing development efforts within the community. ## 2022-01-30 - 🔀 Opened PR in [github/explore](https://github.com/github/explore): [add 3 projects that I maintain (@avelino)](https://github.com/github/explore/pull/2902) - ✅ Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Fix #1359: check for attribute using hasattr](https://github.com/bottlepy/bottle/pull/1360#pullrequestreview-867083078) (Approved) - 🔍 Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [fix #1361 inclusive language comment](https://github.com/bottlepy/bottle/pull/1363#pullrequestreview-867082981) (Changes requested) - ✅ Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Typo in docstring](https://github.com/bottlepy/bottle/pull/1364#pullrequestreview-867079614) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-01-30](https://github.com/avelino/awesome-go/issues/4016) - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [pypy-3.7 and tornado: ERROR:tornado.application:Uncaught exception](https://github.com/bottlepy/bottle/issues/1366) ## 2022-01-29 - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [Create codeql-analysis.yml](https://github.com/prest/prestd-buildui/pull/26) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add rueidis](https://github.com/avelino/awesome-go/pull/3997#pullrequestreview-866827887) (Approved) ## 2022-01-28 - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [remove docs folder](https://github.com/prest/prestd-buildui/pull/24) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Plik to the Other Software section](https://github.com/avelino/awesome-go/pull/3916#pullrequestreview-866732462) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [ADD binlogo](https://github.com/avelino/awesome-go/pull/3917#pullrequestreview-866706884) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ChainJacking by Checkmarx](https://github.com/avelino/awesome-go/pull/3905#pullrequestreview-866705222) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add casaos](https://github.com/avelino/awesome-go/pull/3915#pullrequestreview-866703802) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/rsjethani/secret to security](https://github.com/avelino/awesome-go/pull/3985#pullrequestreview-866695836) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding Mizu open source project writen in Go to 'DevOps Tools' section (#3984)](https://github.com/avelino/awesome-go/pull/3986#pullrequestreview-866695266) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [genfuncs entry](https://github.com/avelino/awesome-go/pull/3991#pullrequestreview-866693991) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [doc(readme): add go-pkg repository](https://github.com/avelino/awesome-go/pull/3996#pullrequestreview-866692145) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add GoGM](https://github.com/avelino/awesome-go/pull/3999#pullrequestreview-866688998) (Changes requested) ## 2022-01-27 - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [pages new navegate](https://github.com/prest/prestd-buildui/pull/23) - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [Avelino/database scheme via envvar](https://github.com/prest/prestd-buildui/pull/22) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [fix: use value of `nvim` instead of `neovim`](https://github.com/editor-bootstrap/vim-bootstrap/pull/405#pullrequestreview-864291786) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [breadcrumbs component: browsing history](https://github.com/prest/prest/issues/681) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Improve screen navigation: database > scheme > table ](https://github.com/prest/prest/issues/680) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [database and scheme this in hardcode](https://github.com/prest/prest/issues/679) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [table/delete event: TypeError: Cannot read properties of undefined (reading 'length')](https://github.com/prest/prest/issues/678) ## 2022-01-26 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [log/pkg: change deprecated package](https://github.com/prest/prest/pull/677) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [CORS: correction and implementation of the method and header](https://github.com/prest/prest/pull/676) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add structy/log](https://github.com/avelino/awesome-go/pull/4010) - 🔀 Opened PR in [structy/log](https://github.com/structy/log): [adapter/file: write debug test](https://github.com/structy/log/pull/1) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [fix: Adding title image](https://github.com/editor-bootstrap/vim-bootstrap/pull/404#pullrequestreview-864121730) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [CORS: implementation problem (confusion)](https://github.com/prest/prest/issues/675) ## 2022-01-25 - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [better document how to raise the environment prestd](https://github.com/prest/prestd-buildui/pull/21) - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [upgrade any packages](https://github.com/prest/prestd-buildui/pull/20) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added desertbit/grumble CLI and shell to list](https://github.com/avelino/awesome-go/pull/3982#pullrequestreview-862910247) (Changes requested) ## 2022-01-24 - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [check doent's empty table list](https://github.com/prest/prestd-buildui/pull/19) - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [change createmuitheme to createtheme](https://github.com/prest/prestd-buildui/pull/18) ## 2022-01-23 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-01-23](https://github.com/avelino/awesome-go/issues/4001) ## 2022-01-21 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add charmbracelet/bubbletea](https://github.com/avelino/awesome-go/pull/3998#pullrequestreview-859974753) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [feat: add Jenkins X](https://github.com/avelino/awesome-go/pull/3971#pullrequestreview-859972146) (Changes requested) ## 2022-01-18 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [count param return list not only object](https://github.com/prest/prest/pull/673) ## 2022-01-16 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-01-16](https://github.com/avelino/awesome-go/issues/3988) ## 2022-01-15 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [docs: advanced queries, filter range](https://github.com/prest/prest/pull/672) - ✅ Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [Add gui-easy to GUI Development section](https://github.com/avelino/awesome-racket/pull/17#pullrequestreview-853476805) (Approved) ## 2022-01-14 - 🔀 Opened PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [use map on check-alphabetically](https://github.com/avelino/awesome-racket/pull/16) - 🔀 Opened PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [add package Rackt](https://github.com/avelino/awesome-racket/pull/15) - 🔀 Opened PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [leaving the test in functional format](https://github.com/avelino/awesome-racket/pull/14) - 🔀 Opened PR in [rackt-org/rackt](https://github.com/rackt-org/rackt): [fixed racketscript repo link](https://github.com/rackt-org/rackt/pull/4) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [feat(README): add go-dummy](https://github.com/avelino/awesome-go/pull/3987#pullrequestreview-852740189) (Changes requested) ## 2022-01-13 - 🔀 Opened PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [tests: alphabetically](https://github.com/avelino/awesome-racket/pull/12) - 🐛 Opened issue in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [change travis-ci to github actions](https://github.com/avelino/awesome-racket/issues/13) ## 2022-01-12 - 🔀 Opened PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [writing best practice documents for contribution](https://github.com/avelino/awesome-racket/pull/11) - ✅ Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [Add deta and threading packages.](https://github.com/avelino/awesome-racket/pull/10#pullrequestreview-850345280) (Approved) ## 2022-01-09 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-01-09](https://github.com/avelino/awesome-go/issues/3983) ## 2022-01-08 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [controlling plugin loading](https://github.com/prest/prest/pull/670) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [plugins loading control](https://github.com/prest/prest/issues/669) ## 2022-01-07 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [devcontainers support](https://github.com/prest/prest/pull/666) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Onboarding of new contributor: devcontainer setup](https://github.com/prest/prest/issues/665) ## 2022-01-05 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [how to alter plugin folder?](https://github.com/prest/prest/pull/664) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [append author login (github account) on changelog](https://github.com/prest/prest/pull/663) - 🔀 Opened PR in [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser): [Add prestd on users file](https://github.com/goreleaser/goreleaser/pull/2806) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [doc: add protoncheck](https://github.com/avelino/awesome-go/pull/3964#pullrequestreview-844891667) (Changes requested) - ✅ Reviewed PR in [jfrog/froggit-go](https://github.com/jfrog/froggit-go): [Add more tests](https://github.com/jfrog/froggit-go/pull/24#pullrequestreview-844885141) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [grpc endpoint plugin system](https://github.com/prest/prest/issues/662) ## 2022-01-04 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fixed cache file path](https://github.com/prest/prest/pull/661) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [endpoint plugin architecture](https://github.com/prest/prest/pull/659) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [error when caching system is active](https://github.com/prest/prest/issues/660) ## 2022-01-03 - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Bump github.com/cenkalti/backoff/v4 from 4.1.1 to 4.1.2](https://github.com/ReactiveX/RxGo/pull/336#pullrequestreview-842920740) (Approved) ## 2022-01-02 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove goji/httpauth](https://github.com/avelino/awesome-go/pull/3978) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [essentialkaos/branca](https://github.com/avelino/awesome-go/pull/3977) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2022-01-02](https://github.com/avelino/awesome-go/issues/3976) ## 2022-01-01 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add cvt "Convert any value to another type"](https://github.com/avelino/awesome-go/pull/3918#pullrequestreview-842335082) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser): 1 commit(s) - [See commits](https://github.com/goreleaser/goreleaser/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [avelino/awesome-racket](https://github.com/avelino/awesome-racket): 34 commit(s) - [See commits](https://github.com/avelino/awesome-racket/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [prest/prestd-buildui](https://github.com/prest/prestd-buildui): 31 commit(s) - [See commits](https://github.com/prest/prestd-buildui/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 7 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [charmbracelet/charm](https://github.com/charmbracelet/charm): 1 commit(s) - [See commits](https://github.com/charmbracelet/charm/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 3 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 11 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [structy/log](https://github.com/structy/log): 5 commit(s) - [See commits](https://github.com/structy/log/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 2 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [prest/.github](https://github.com/prest/.github): 1 commit(s) - [See commits](https://github.com/prest/.github/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 54 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [rackt-org/rackt](https://github.com/rackt-org/rackt): 1 commit(s) - [See commits](https://github.com/rackt-org/rackt/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 7 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2022-01-01T00:00:00Z&until=2022-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - December 2021 **URL**: https://avelino.run/foss/2021/12/ **Published**: 2021-12-01 **Word Count**: 811 words **Summary**: December 2021 saw significant contributions with 17 repositories, 36 pull requests, and 12 pushes, showcasing a vibrant collaborative effort in the community. Explore the timeline of contributions for December 2021, highlighting the active engagement across 17 repositories. This month featured a total of 36 pull requests and 12 pushes, reflecting a robust collaborative spirit within the community. ## 2021-12-31 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [contribution guide in the main documentation repo](https://github.com/prest/prest/pull/658) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [docs: fixed build typo](https://github.com/prest/prest/pull/657) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [making the documentation more fluid for the user](https://github.com/prest/prest/pull/656) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [move to main doc (repo) CoC](https://github.com/prest/doc-template/pull/44) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [new theme and support multi docs](https://github.com/prest/doc-template/pull/43) ## 2021-12-30 - 🔀 Opened PR in [charmbracelet/charm](https://github.com/charmbracelet/charm): [clear string formatting in database opening (path)](https://github.com/charmbracelet/charm/pull/53) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [ADD binlogo](https://github.com/avelino/awesome-go/pull/3961#pullrequestreview-842061785) (Changes requested) - 🐛 Opened issue in [charmbracelet/soft-serve](https://github.com/charmbracelet/soft-serve): [browsing the repository files](https://github.com/charmbracelet/soft-serve/issues/51) - 🐛 Opened issue in [charmbracelet/charm](https://github.com/charmbracelet/charm): [KV: ttl support](https://github.com/charmbracelet/charm/issues/54) ## 2021-12-29 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Adding Github Action to detect duplicate issues](https://github.com/prest/prest/pull/655) ## 2021-12-26 - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [SEO + package upgrade](https://github.com/avelino/hugo-theme-sarah/pull/41) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-12-26](https://github.com/avelino/awesome-go/issues/3963) ## 2021-12-25 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [small fix cache db path](https://github.com/prest/prest/pull/653) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [site: put link to generated page in the menu](https://github.com/avelino/awesome-go/pull/3962) ## 2021-12-24 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [cache by endpoint implementation](https://github.com/prest/prest/pull/652) - 🐛 Opened issue in [golang-queue/queue](https://github.com/golang-queue/queue): [RabbitMQ support ](https://github.com/golang-queue/queue/issues/42) - 🐛 Opened issue in [golang-queue/queue](https://github.com/golang-queue/queue): [Kafka support ](https://github.com/golang-queue/queue/issues/41) ## 2021-12-23 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [page dedicated to the caching system](https://github.com/prest/prest/pull/651) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [basic caching system](https://github.com/prest/prest/pull/650) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [doc: keep correct paging parameter](https://github.com/prest/prest/pull/649) - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add ECDSA/RSA-based JWT token support](https://github.com/prest/prest/pull/642#pullrequestreview-839128970) (Changes requested) - 🐛 Opened issue in [square/go-jose](https://github.com/square/go-jose): [test environment breaking - TravisCI](https://github.com/square/go-jose/issues/365) ## 2021-12-22 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fixed typo action needs attr](https://github.com/avelino/awesome-go/pull/3959) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [generate sub pages by category for SEO](https://github.com/avelino/awesome-go/pull/3958) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3950#pullrequestreview-838720537) (Changes requested) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [generate sub pages by category for SEO](https://github.com/avelino/awesome-go/issues/3957) ## 2021-12-21 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [doc docker compose exemplo](https://github.com/prest/prest/pull/646) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [doc docker compose: remove quote ''](https://github.com/prest/prest/pull/645) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [build documentation push to main branch](https://github.com/prest/prest/pull/644) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [fixed param read emgithub](https://github.com/prest/doc-template/pull/42) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [should it count paid books in the list or only free books?](https://github.com/avelino/awesome-go/issues/3956) ## 2021-12-20 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [doc/deploy: docker compose example](https://github.com/prest/prest/pull/643) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [create shortcode emgithub](https://github.com/prest/doc-template/pull/41) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ebook 'The Power of Go: Tools'](https://github.com/avelino/awesome-go/pull/3908#pullrequestreview-836747253) (Changes requested) ## 2021-12-19 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-12-19](https://github.com/avelino/awesome-go/issues/3951) ## 2021-12-17 - 🔀 Opened PR in [avelino/ritchie-cli-archpack](https://github.com/avelino/ritchie-cli-archpack): [Update README.md](https://github.com/avelino/ritchie-cli-archpack/pull/1) ## 2021-12-16 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [change travis badge to gh action](https://github.com/avelino/awesome-go/pull/3947) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Avelino/rename master to main](https://github.com/avelino/awesome-go/pull/3946) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [rename all hard ref branch master to main](https://github.com/avelino/awesome-go/pull/3945) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Rename the master branch to main](https://github.com/avelino/awesome-go/issues/3944) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [travis stopped working, migrate to github actions](https://github.com/avelino/awesome-go/issues/3943) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Documentation Amazon ECS using AWS Copilot](https://github.com/prest/prest/issues/640) ## 2021-12-15 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [netlify deploy](https://github.com/avelino/awesome-go/pull/3940) ## 2021-12-12 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-12-12](https://github.com/avelino/awesome-go/issues/3934) ## 2021-12-09 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [change jwt library to unarchived](https://github.com/prest/prest/pull/636) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add hashicorp / go-retryablehttp](https://github.com/avelino/awesome-go/pull/3899#pullrequestreview-827876008) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [wgrest addition proposal](https://github.com/avelino/awesome-go/pull/3900#pullrequestreview-827873814) (Commented) ## 2021-12-08 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added github.com/nikolaydubina/treemap](https://github.com/avelino/awesome-go/pull/3928#pullrequestreview-826895237) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added vertica-sql-go - Vertica DB driver](https://github.com/avelino/awesome-go/pull/3909#pullrequestreview-826893554) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding Mage to build automation tools list](https://github.com/avelino/awesome-go/pull/3891#pullrequestreview-826890143) (Changes requested) ## 2021-12-07 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [add Opps CMS prest queries](https://github.com/prest/prest/pull/634) - 🔀 Opened PR in [opps/prest-queries](https://github.com/opps/prest-queries): [add prest link](https://github.com/opps/prest-queries/pull/2) - 🔀 Opened PR in [opps/prest-queries](https://github.com/opps/prest-queries): [initial sql](https://github.com/opps/prest-queries/pull/1) - 🐛 Opened issue in [FerretDB/FerretDB](https://github.com/FerretDB/FerretDB): [Support geospatial queries](https://github.com/FerretDB/FerretDB/issues/128) ## 2021-12-06 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [write recommendation offsetLimit template use](https://github.com/prest/prest/pull/633) ## 2021-12-05 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-12-05](https://github.com/avelino/awesome-go/issues/3929) ## 2021-12-04 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [dockerfile specific for goreleaser](https://github.com/prest/prest/pull/631) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [use go mod download all](https://github.com/prest/prest/pull/630) ## 2021-12-03 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [entrypoint support on env DATABASE_URL](https://github.com/prest/prest/pull/629) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [CORS documentation improvement](https://github.com/prest/prest/pull/628) ## 2021-12-01 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add new bot builder - larry](https://github.com/avelino/awesome-go/pull/3898#pullrequestreview-820132014) (Changes requested) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 6 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [prest/prestd-buildui](https://github.com/prest/prestd-buildui): 4 commit(s) - [See commits](https://github.com/prest/prestd-buildui/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 10 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [opps/prest-queries](https://github.com/opps/prest-queries): 8 commit(s) - [See commits](https://github.com/opps/prest-queries/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [prest/prest-heroku](https://github.com/prest/prest-heroku): 1 commit(s) - [See commits](https://github.com/prest/prest-heroku/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 31 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [avelino/ritchie-cli-archpack](https://github.com/avelino/ritchie-cli-archpack): 2 commit(s) - [See commits](https://github.com/avelino/ritchie-cli-archpack/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [prest/.github](https://github.com/prest/.github): 3 commit(s) - [See commits](https://github.com/prest/.github/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 92 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 24 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2021-12-01T00:00:00Z&until=2021-12-31T23:59:59Z) ## Private contributions - 🔒 55 private contribution(s) this month --- # Open Source Contributions - November 2021 **URL**: https://avelino.run/foss/2021/11/ **Published**: 2021-11-01 **Word Count**: 496 words **Summary**: November 2021 saw 8 repositories contributing 37 total activities, including 2 pull requests, 24 reviews, and 8 issues opened—driving significant community engagement. In November 2021, the collaborative efforts across 8 repositories led to a total of 37 contributions, showcasing a vibrant month of development. This timeline highlights key activities, including pull requests, reviews, and issues that shaped the progress of various projects, emphasizing community involvement and the continuous improvement of open-source resources. ## 2021-11-28 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-11-28](https://github.com/avelino/awesome-go/issues/3920) ## 2021-11-25 - 🐛 Opened issue in [metabase/metabase](https://github.com/metabase/metabase): [DigitalOcean Marketplace 1-click install](https://github.com/metabase/metabase/issues/19097) ## 2021-11-23 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [docs: integrations redshift](https://github.com/prest/prest/pull/626) ## 2021-11-22 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [When passing non-valid paging parameters (conversion to integer) the query will be made with default value](https://github.com/prest/prest/pull/625) ## 2021-11-21 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-11-21](https://github.com/avelino/awesome-go/issues/3911) ## 2021-11-19 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add security package github.com/jptosso/coraza-waf](https://github.com/avelino/awesome-go/pull/3902#pullrequestreview-811318238) (Changes requested) - 🐛 Opened issue in [runopsio/agent](https://github.com/runopsio/agent): [migrate for edn to manage dependency](https://github.com/runopsio/agent/issues/32) ## 2021-11-16 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add bqwriter to the list of Third-Party APIs](https://github.com/avelino/awesome-go/pull/3892#pullrequestreview-807684179) (Changes requested) ## 2021-11-14 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-11-14](https://github.com/avelino/awesome-go/issues/3894) ## 2021-11-12 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding an Alac encoder](https://github.com/avelino/awesome-go/pull/3872#pullrequestreview-804826820) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [HnH/di - DI container library](https://github.com/avelino/awesome-go/pull/3870#pullrequestreview-804826006) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add a new networking lib](https://github.com/avelino/awesome-go/pull/3869#pullrequestreview-804799318) (Changes requested) ## 2021-11-10 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add e2e - run workload scenarios in isolation](https://github.com/avelino/awesome-go/pull/3871#pullrequestreview-802546380) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add LunaSec under Databases](https://github.com/avelino/awesome-go/pull/3879#pullrequestreview-802530228) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add jackc/pgmock](https://github.com/avelino/awesome-go/pull/3866#pullrequestreview-802523774) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add: shove](https://github.com/avelino/awesome-go/pull/3867#pullrequestreview-802517621) (Changes requested) ## 2021-11-09 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add mock pkg](https://github.com/avelino/awesome-go/pull/3774#pullrequestreview-801124497) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add tinode/chat under Messaging](https://github.com/avelino/awesome-go/pull/3769#pullrequestreview-801121281) (Changes requested) ## 2021-11-08 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add freecache](https://github.com/avelino/awesome-go/pull/3860#pullrequestreview-800079480) (Changes requested) ## 2021-11-07 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-11-07](https://github.com/avelino/awesome-go/issues/3889) ## 2021-11-06 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [adding almasbub - library to provide an easy and safe datatype cast in Go.](https://github.com/avelino/awesome-go/pull/3859#pullrequestreview-799424283) (Changes requested) ## 2021-11-05 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add C2J package](https://github.com/avelino/awesome-go/pull/3838#pullrequestreview-798978741) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added AdGuardHome](https://github.com/avelino/awesome-go/pull/3887#pullrequestreview-798876197) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added grumpy](https://github.com/avelino/awesome-go/pull/3784#pullrequestreview-798874486) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Updating README.md](https://github.com/avelino/awesome-go/pull/3843#pullrequestreview-798866346) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go-oidc library](https://github.com/avelino/awesome-go/pull/3827#pullrequestreview-798855834) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added AdGuardHome](https://github.com/avelino/awesome-go/pull/3853#pullrequestreview-798845674) (Changes requested) - 🐛 Opened issue in [qustavo/sqlhooks](https://github.com/qustavo/sqlhooks): [add sqlhooks on awesome-go](https://github.com/qustavo/sqlhooks/issues/48) ## 2021-11-04 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add disgord](https://github.com/avelino/awesome-go/pull/3821#pullrequestreview-797854730) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update yml file using comment](https://github.com/avelino/awesome-go/pull/3820#pullrequestreview-797849824) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add kafka message scheduler](https://github.com/avelino/awesome-go/pull/3848#pullrequestreview-797819283) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fix patrickmn Cache implementation](https://github.com/avelino/awesome-go/pull/3825#pullrequestreview-797807443) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add gocoin - bitcoin implementation](https://github.com/avelino/awesome-go/pull/3824#pullrequestreview-797760789) (Commented) ## 2021-11-02 - 🐛 Opened issue in [daltonmenezes/aura-theme](https://github.com/daltonmenezes/aura-theme): [port to tmux](https://github.com/daltonmenezes/aura-theme/issues/74) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 32 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-11-01T00:00:00Z&until=2021-11-30T23:59:59Z) - 🔨 Push to [prest/prestd-buildui](https://github.com/prest/prestd-buildui): 2 commit(s) - [See commits](https://github.com/prest/prestd-buildui/commits?author=avelino&since=2021-11-01T00:00:00Z&until=2021-11-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-11-01T00:00:00Z&until=2021-11-30T23:59:59Z) ## Private contributions - 🔒 71 private contribution(s) this month --- # Open Source Contributions - October 2021 **URL**: https://avelino.run/foss/2021/10/ **Published**: 2021-10-01 **Word Count**: 422 words **Summary**: October 2021 saw 4 repositories with 32 contributions, including 2 pull requests and 23 reviews, driving significant enhancements and issue tracking. Explore the timeline of contributions for October 2021, highlighting key activities across 4 repositories. This month featured 32 contributions, including pull requests, reviews, and issue tracking, showcasing the collaborative efforts and advancements made by contributors. ## 2021-10-31 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-10-31](https://github.com/avelino/awesome-go/issues/3881) ## 2021-10-26 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add git-lfs](https://github.com/avelino/awesome-go/pull/3819#pullrequestreview-789759406) (Changes requested) ## 2021-10-25 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added Kopia to Other Software](https://github.com/avelino/awesome-go/pull/3779#pullrequestreview-788704354) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Ngamux/Ngamux HTTP Router](https://github.com/avelino/awesome-go/pull/3777#pullrequestreview-788703746) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add: prisma client go orm](https://github.com/avelino/awesome-go/pull/3778#pullrequestreview-788702493) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add `grofer` to list!](https://github.com/avelino/awesome-go/pull/3841#pullrequestreview-787778529) (Changes requested) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [add adapter docs](https://github.com/prest/prest/pull/619#pullrequestreview-788697033) (Approved) ## 2021-10-24 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding k8s go client](https://github.com/avelino/awesome-go/pull/3763#pullrequestreview-787499643) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/bobg/hashsplit](https://github.com/avelino/awesome-go/pull/3767#pullrequestreview-787499409) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add tinode/chat under Messaging](https://github.com/avelino/awesome-go/pull/3769#pullrequestreview-787499083) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add authzed spicedb to the list of databases](https://github.com/avelino/awesome-go/pull/3771#pullrequestreview-787498731) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Database/sqlc entry](https://github.com/avelino/awesome-go/pull/3772#pullrequestreview-787498670) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add mock pkg](https://github.com/avelino/awesome-go/pull/3774#pullrequestreview-787498528) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add mockery package](https://github.com/avelino/awesome-go/pull/3775#pullrequestreview-787498403) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/bobg/modver](https://github.com/avelino/awesome-go/pull/3765#pullrequestreview-787498069) (Commented) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-10-24](https://github.com/avelino/awesome-go/issues/3863) ## 2021-10-22 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Kratos to Distributed Systems category](https://github.com/avelino/awesome-go/pull/3818#pullrequestreview-787268640) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add lazydocker to utilities](https://github.com/avelino/awesome-go/pull/3849#pullrequestreview-786309887) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add teleterm Telegram Bot Exec Terminal Command](https://github.com/avelino/awesome-go/pull/3793#pullrequestreview-786308977) (Changes requested) ## 2021-10-21 - 🔀 Opened PR in [mafulong/mafulong](https://github.com/mafulong/mafulong): [Top Langs username typo](https://github.com/mafulong/mafulong/pull/1) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [godal: sql to golang model](https://github.com/avelino/awesome-go/pull/3857#pullrequestreview-785533444) (Changes requested) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add theme Dogrun](https://github.com/editor-bootstrap/vim-bootstrap/pull/396#pullrequestreview-785528418) (Approved) ## 2021-10-19 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Nuclio to DevOps Category](https://github.com/avelino/awesome-go/pull/3789#pullrequestreview-783399227) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add todocheck to awesome-go](https://github.com/avelino/awesome-go/pull/3753#pullrequestreview-783069138) (Changes requested) ## 2021-10-17 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-10-17](https://github.com/avelino/awesome-go/issues/3840) ## 2021-10-10 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [WIP: close connect by defer](https://github.com/prest/prest/pull/617) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add theme Gruvbox](https://github.com/editor-bootstrap/vim-bootstrap/pull/390#pullrequestreview-775703116) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-10-10](https://github.com/avelino/awesome-go/issues/3817) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [memory leak postgresql close connection](https://github.com/prest/prest/issues/616) ## 2021-10-03 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [dockerfile: bump netcat from 1.10-41.1 to 1.10-46](https://github.com/prest/prest/pull/615#pullrequestreview-769771003) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-10-03](https://github.com/avelino/awesome-go/issues/3786) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 12 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-10-01T00:00:00Z&until=2021-10-31T23:59:59Z) ## Private contributions - 🔒 33 private contribution(s) this month --- # Open Source Contributions - September 2021 **URL**: https://avelino.run/foss/2021/09/ **Published**: 2021-09-01 **Word Count**: 584 words **Summary**: September 2021 saw 12 repositories contribute 52 activities, including 9 pull requests and 23 reviews, driving significant advancements in projects. In September 2021, our community made remarkable strides across 12 repositories, contributing a total of 52 activities. This timeline highlights key events, including push events, pull requests, and reviews that shaped the month. ## 2021-09-26 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-09-26](https://github.com/avelino/awesome-go/issues/3759) ## 2021-09-19 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-09-19](https://github.com/avelino/awesome-go/issues/3752) ## 2021-09-17 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-sitemap package.](https://github.com/avelino/awesome-go/pull/3746#pullrequestreview-757735004) (Changes requested) ## 2021-09-15 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [health check endpoint](https://github.com/prest/prest/issues/606) ## 2021-09-14 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Ignore data path on codeql actions](https://github.com/prest/prest/pull/604) ## 2021-09-12 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove waveform archived](https://github.com/avelino/awesome-go/pull/3745) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-09-12](https://github.com/avelino/awesome-go/issues/3743) ## 2021-09-11 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [ adding ArgoCD](https://github.com/avelino/awesome-go/pull/3742#pullrequestreview-751957939) (Changes requested) ## 2021-09-10 - 🔀 Opened PR in [prest/prestd-buildui](https://github.com/prest/prestd-buildui): [docker-compose env](https://github.com/prest/prestd-buildui/pull/8) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Extended test coverage for the Postgres package.](https://github.com/prest/prest/pull/603#pullrequestreview-751232750) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [table edit/create not working](https://github.com/prest/prest/issues/610) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [page with database listing](https://github.com/prest/prest/issues/609) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [dynamic database/schema name](https://github.com/prest/prest/issues/608) ## 2021-09-09 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [ Adding in argoproj devops tools](https://github.com/avelino/awesome-go/pull/3723#pullrequestreview-750807572) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add goerd library into Database migration tools](https://github.com/avelino/awesome-go/pull/3727#pullrequestreview-750806237) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go clean template](https://github.com/avelino/awesome-go/pull/3728#pullrequestreview-750804100) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add https://github.com/unionj-cloud/go-doudou](https://github.com/avelino/awesome-go/pull/3729#pullrequestreview-750802210) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [docs: add gocraft/work (#1)](https://github.com/avelino/awesome-go/pull/3730#pullrequestreview-750801426) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add new category - Blockchain ](https://github.com/avelino/awesome-go/pull/3732#pullrequestreview-750800529) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rookie-ninja/rk-boot under Web Frameworks](https://github.com/avelino/awesome-go/pull/3739#pullrequestreview-750032969) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rookie-ninja/rk-gin under Middlewares](https://github.com/avelino/awesome-go/pull/3740#pullrequestreview-750030898) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/influxdata/telegraf](https://github.com/avelino/awesome-go/pull/3721#pullrequestreview-749727728) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [adding sshman](https://github.com/avelino/awesome-go/pull/3720#pullrequestreview-749726344) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3719#pullrequestreview-749724934) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3718#pullrequestreview-749724077) (Changes requested) ## 2021-09-08 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [set default db from config on execute](https://github.com/prest/prest/pull/602#pullrequestreview-749080526) (Approved) - 🐛 Opened issue in [opensrp/opensrp-client-core](https://github.com/opensrp/opensrp-client-core): [Documentation (wiki) of the project in "closed" environment](https://github.com/opensrp/opensrp-client-core/issues/833) ## 2021-09-07 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Euterpe to the list of servers](https://github.com/avelino/awesome-go/pull/3737#pullrequestreview-748220129) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-req](https://github.com/avelino/awesome-go/pull/3736#pullrequestreview-748218724) (Changes requested) ## 2021-09-05 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [WIP: form3tech-oss/jwt-go is archived](https://github.com/prest/prest/pull/600) - 🔀 Opened PR in [prest/go-jwt-middleware](https://github.com/prest/go-jwt-middleware): [V2 prest](https://github.com/prest/go-jwt-middleware/pull/1) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [database not registered: /{DATABASE}/{SCHEMA}/{TABLE}](https://github.com/prest/prest/issues/601) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-09-05](https://github.com/avelino/awesome-go/issues/3731) ## 2021-09-03 - 🔀 Opened PR in [yunionio/sqlchemy](https://github.com/yunionio/sqlchemy): [Golang syntax highlighting](https://github.com/yunionio/sqlchemy/pull/89) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-conf](https://github.com/avelino/awesome-go/pull/3709#pullrequestreview-745631977) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sqlchemy as a ORM project](https://github.com/avelino/awesome-go/pull/3705#pullrequestreview-745630069) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add golang-jwt/jwt](https://github.com/avelino/awesome-go/pull/3695#pullrequestreview-745620157) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added 100 Go Mistakes: How to Avoid Them](https://github.com/avelino/awesome-go/pull/3701#pullrequestreview-745617902) (Changes requested) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Bump github.com/lib/pq from 1.10.2 to 1.10.3](https://github.com/prest/prest/pull/599#pullrequestreview-745984409) (Approved) ## 2021-09-02 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [contribute docs](https://github.com/prest/prest/pull/598) ## 2021-09-01 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [routers test coverage](https://github.com/prest/prest/pull/597) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [TestAuth Enable and Disable](https://github.com/prest/prest/pull/596) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [dracula/telegram](https://github.com/dracula/telegram): 1 commit(s) - [See commits](https://github.com/dracula/telegram/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [prest/prestd-buildui](https://github.com/prest/prestd-buildui): 3 commit(s) - [See commits](https://github.com/prest/prestd-buildui/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 8 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [yunionio/sqlchemy](https://github.com/yunionio/sqlchemy): 1 commit(s) - [See commits](https://github.com/yunionio/sqlchemy/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [prest/prest-node](https://github.com/prest/prest-node): 3 commit(s) - [See commits](https://github.com/prest/prest-node/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [prest/.github](https://github.com/prest/.github): 4 commit(s) - [See commits](https://github.com/prest/.github/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 23 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-09-01T00:00:00Z&until=2021-09-30T23:59:59Z) ## Private contributions - 🔒 68 private contribution(s) this month --- # Open Source Contributions - August 2021 **URL**: https://avelino.run/foss/2021/08/ **Published**: 2021-08-01 **Word Count**: 517 words **Summary**: August 2021 saw 14 repositories contribute 43 events, with 4 pull requests and 15 issues, showcasing a vibrant month of collaboration and development. Explore the contributions made in August 2021, where a total of 14 repositories engaged in 43 significant events, including 4 pull requests and 15 issues. This timeline highlights the collaborative efforts and impactful developments that shaped the month. ## 2021-08-31 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [postgres queries test improved](https://github.com/prest/prest/pull/594) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [auth0 support](https://github.com/prest/prest/issues/595) ## 2021-08-30 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [active coverage in pipeline (github actions)](https://github.com/prest/prest/pull/592) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [github actions: send coveralls](https://github.com/prest/prest/issues/593) - 🐛 Opened issue in [mattn/goveralls](https://github.com/mattn/goveralls): [github service error: Couldn't find a repository matching this job](https://github.com/mattn/goveralls/issues/203) ## 2021-08-29 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [change DCO to CLA](https://github.com/prest/prest/pull/589) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [write documentation `?_returning` filter parameter (query string)](https://github.com/prest/prest/issues/591) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-08-29](https://github.com/avelino/awesome-go/issues/3724) ## 2021-08-22 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-08-22](https://github.com/avelino/awesome-go/issues/3713) ## 2021-08-16 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [add singleDB config](https://github.com/prest/prest/pull/584#pullrequestreview-730970776) (Changes requested) - 🐛 Opened issue in [cuducos/minha-receita](https://github.com/cuducos/minha-receita): [Site estático no / explicando como consumir a API](https://github.com/cuducos/minha-receita/issues/42) - 🐛 Opened issue in [cuducos/minha-receita](https://github.com/cuducos/minha-receita): [Encode de carácteres especiais no Safari](https://github.com/cuducos/minha-receita/issues/41) ## 2021-08-15 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-08-15](https://github.com/avelino/awesome-go/issues/3708) ## 2021-08-14 - 🐛 Opened issue in [rochacbruno/python-project-template](https://github.com/rochacbruno/python-project-template): [Cookiecutter Support ](https://github.com/rochacbruno/python-project-template/issues/1) ## 2021-08-13 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Orion as one of frameworks](https://github.com/avelino/awesome-go/pull/3665#pullrequestreview-729787937) (Changes requested) - 🐛 Opened issue in [farseer810/gomigrate](https://github.com/farseer810/gomigrate): [embed.FS support](https://github.com/farseer810/gomigrate/issues/1) ## 2021-08-12 - 🔀 Opened PR in [jonchun/pathtype](https://github.com/jonchun/pathtype): [syntax highlighting go source on readme](https://github.com/jonchun/pathtype/pull/1) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add customizable HTTP client library - httpc](https://github.com/avelino/awesome-go/pull/3700#pullrequestreview-728470543) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Scout](https://github.com/avelino/awesome-go/pull/3698#pullrequestreview-728469600) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add m2cgen for transpiling ML models into Go code](https://github.com/avelino/awesome-go/pull/3692#pullrequestreview-728465303) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/ferama/rospo](https://github.com/avelino/awesome-go/pull/3689#pullrequestreview-728460504) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/bobg/hashsplit](https://github.com/avelino/awesome-go/pull/3684#pullrequestreview-728453063) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added gotestfmt](https://github.com/avelino/awesome-go/pull/3681#pullrequestreview-728451838) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add tbd - a really simple way to create text templates](https://github.com/avelino/awesome-go/pull/3679#pullrequestreview-728439254) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Githooks](https://github.com/avelino/awesome-go/pull/3676#pullrequestreview-728437155) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/bobg/mid](https://github.com/avelino/awesome-go/pull/3675#pullrequestreview-728435166) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/bobg/subcmd](https://github.com/avelino/awesome-go/pull/3674#pullrequestreview-728433620) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add modver (https://github.com/bobg/modver)](https://github.com/avelino/awesome-go/pull/3673#pullrequestreview-728429227) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add bubbletea of advanced console uis list.](https://github.com/avelino/awesome-go/pull/3671#pullrequestreview-728426927) (Changes requested) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add distinct for Queries #569](https://github.com/prest/prest/pull/576#pullrequestreview-728719209) (Approved) ## 2021-08-11 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [unit testing without postgres dependency (mock)](https://github.com/prest/prest/issues/579) ## 2021-08-08 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-08-08](https://github.com/avelino/awesome-go/issues/3696) ## 2021-08-04 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Update installation.en.md](https://github.com/prest/prest/pull/574#pullrequestreview-722517757) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Update _index.en.md](https://github.com/prest/prest/pull/575#pullrequestreview-722517134) (Approved) - 🐛 Opened issue in [Dinius/Brain.fm-Desktop-Client](https://github.com/Dinius/Brain.fm-Desktop-Client): [macOS play/stop button support](https://github.com/Dinius/Brain.fm-Desktop-Client/issues/28) ## 2021-08-03 - 🐛 Opened issue in [ryanio/focusmusic.fm](https://github.com/ryanio/focusmusic.fm): [music files - music production by artificial intelligence](https://github.com/ryanio/focusmusic.fm/issues/24) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 85 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-08-01T00:00:00Z&until=2021-08-31T23:59:59Z) - 🔨 Push to [avelino/aur](https://github.com/avelino/aur): 4 commit(s) - [See commits](https://github.com/avelino/aur/commits?author=avelino&since=2021-08-01T00:00:00Z&until=2021-08-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-08-01T00:00:00Z&until=2021-08-31T23:59:59Z) - 🔨 Push to [prest/.github](https://github.com/prest/.github): 1 commit(s) - [See commits](https://github.com/prest/.github/commits?author=avelino&since=2021-08-01T00:00:00Z&until=2021-08-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2021-08-01T00:00:00Z&until=2021-08-31T23:59:59Z) - 🔨 Push to [prest/prestd-buildui](https://github.com/prest/prestd-buildui): 1 commit(s) - [See commits](https://github.com/prest/prestd-buildui/commits?author=avelino&since=2021-08-01T00:00:00Z&until=2021-08-31T23:59:59Z) - 🔨 Push to [jonchun/pathtype](https://github.com/jonchun/pathtype): 1 commit(s) - [See commits](https://github.com/jonchun/pathtype/commits?author=avelino&since=2021-08-01T00:00:00Z&until=2021-08-31T23:59:59Z) ## Private contributions - 🔒 9 private contribution(s) this month --- # 7 subjects (and GitHub repositories) to become a better Go Developer **URL**: https://avelino.run/7-subjects-and-github-repositories-to-become-a-better-go-developer/ **Published**: 2021-07-11 **Tags**: golang, go developer, software engineer, better-developer **Word Count**: 589 words ![7 subjects (and GitHub repositories) to become a better Go Developer](/blog/7-subjects-and-github-repositories-to-become-a-better-go-developer.png#center) With the high adoption of the Go language by developers and large companies, this has led companies to search for engineers with experience in Go. This can create a lot of pressure of what to study to become a better engineer, this is very personal, it requires planning of what and when to study other subjects (even outside the engineering area). In this blogpost some topics (with repositories and links) that I think are important to know in order to become an engineer person with even better Go knowledge, follow good practices for writing code, concepts of code structure (usually using design pattern), scalable code and clean code. ## Style guide I can't list only one link (repository) for this topic, I would recommend you to read for these 3 links and bring to your team's day to day life what best fits their reality — remember to use as base the official language documentation and add what makes sense from the other links [Effective Go](https://golang.org/doc/effective_go) {{< github "uber-go/guide" >}} [Google Style Guides](https://google.github.io/styleguide/) [Go standards and style guidelines | GitLab](https://docs.gitlab.com/ee/development/go_guide/) ## Best Practices [Francesc Campoy](https://twitter.com/francesc) gave an excellent talk at OSCON 2015 on this subject, where he covered best practices for developing software using the Go language. {{< youtube 8D3Vmm1BGoY >}} **Slides** [Twelve Go Best Practices](https://talks.golang.org/2013/bestpractices.slide#1) ## Algorithms Implemented {{< github "TheAlgorithms/Go" >}} This repository contains Go based examples of many popular algorithms and data structures. Each algorithm and data structure has its own separate README with related explanations and links for further reading. ## Clean Code A reference for the Go community that covers the fundamentals of writing clean code and discusses concrete refactoring examples specific to Go. {{< github "Pungyeon/clean-go-article" >}} ## Clean Architecture In his book “Clean Architecture: A Craftsman’s Guide to Software Structure and Design” famous author Robert “Uncle Bob” Martin presents an architecture with some important points like testability and independence of frameworks, databases and interfaces. {{< github "bxcodec/go-clean-arch" >}} [Elton Minetto](https://twitter.com/eminetto) has written two excellent blogposts on the subject: 1. [Clean Architecture using Golang](https://eminetto.medium.com/clean-architecture-using-golang-b63587aa5e3f) 2. [Clean Architecture, 2 years later](https://eltonminetto.dev/en/post/2020-07-06-clean-architecture-2years-later/) ## Awesome Go I couldn't leave out the awesome-go project (which I started in 2014 and today many contributors help me maintain) {{< github "avelino/awesome-go" >}} A collection of awesome Go libraries and resources. This repository contains a list of variety of frameworks, template engines, articles and post, documentations, reactive and functional programming and much more which will increase your resourcefulness and might also help you to choose the tech stack for your next projects. ## Project Guideline This is a complicated subject, there is no standard that will work perfectly for what you are developing, I recommend understanding the concept of project architecture (not only Go) and together with your team understand what works for you, even though there are thousands of books to give you knowledge about the subject I recommend putting your hands in the code and allow you to make mistakes, it is the best way to evolve. Read this content before any other [How to Write Go Code](https://golang.org/doc/code) Now that you have read the previous link I will recommend a controversial repository by its name, it is not "Golang standards project layout", but there is a project structure that can help in the development of a new project - understand what makes sense for you (and your team), what doesn't, just ignore it. {{< github "golang-standards/project-layout" >}} > [Read why I said this project is controversial](https://github.com/golang-standards/project-layout/issues/117) ---- **Vote Of Thanks** Thank you so much for reading this post and I hope you find these repositories as useful as I do and will help you to become better go developer. Feel Free to give any suggestions and if you like my work you can follow me on [Twitter](https://twitter.com/avelinorun) --- # Uses **URL**: https://avelino.run/uses/ **Published**: 2021-07-04 **Tags**: uses, avelino, open source, thiago avelino **Word Count**: 212 words Make sure to check out [uses.tech](https://uses.tech) for a list of everyone’s **/uses** pages! I constantly get a few emails (my email is public on my [github profile](https://github.com/avelino)) asking about the software and hardware I use in my day to day life as an open source _product/project_ maintainer. > My day job is 100% involved with **open source** projects, would you like to support any project I help maintain? see how and who currently supports me [here](/thanks/). ![Avelino Workspace](/uses.png#center) ## Hardware - Macbook Pro Apple M3 Pro, 16GB ram, 1TB ssd - [Keyboard Keychron K3](https://www.amazon.com/Keychron-Ultra-Slim-Wireless-Bluetooth-Mechanical/dp/B0B48ZVQH5/) - [Mouse Logitech MX Ergo](https://www.amazon.com/Logitech-Ergo-Wireless-Trackball-Mouse/dp/B0753P1GTS/) - [Samsung 28” 4K UR550](https://www.amazon.com/SAMSUNG-U28R550UQNX-LU28R550UQNXZA-Monitor-Free/dp/B084V9CJB1/) - iPad Pro 2 - Apple Pencil - Smart Keyboard Folio - AirPods Pro 2 - [Tp-link Archer Ax73](https://www.amazon.com/TP-Link-Archer-AX73-High-Speed-Streaming/dp/B0BTT3F159/) + [Tp-link Re450 (Access Point)](https://www.amazon.com/TP-Link-PCMag-Editors-Choice-Extender/dp/B010S6SG3S/) - [Geniodesk Pro](https://www.geniodesks.com.br/produto-mesa-com-regulagem-de-altura-geniodesk-pro) Table ## Productivity - [Logseq](https://logseq.com) (personal notes with a [PKM mindset](https://databaseline.tech/knowledge-management/), sync in [Logseq Cloud](https://blog.logseq.com/how-to-setup-and-use-logseq-sync/)) - Gmail - [Morgen](https://www.morgen.so/) (desktop and mobile) - 1Password - [Raycast](https://www.raycast.com/) - Spotify - LanguageTool - [yabai](https://github.com/koekeishiya/yabai) *(window manager for macOS)* - [skhd](https://github.com/koekeishiya/skhd) *(hotkey daemon for macOS)* ## Business - Slack - Discord *(any open source community)* - [GitHub](https://github.com/avelino) *(many resources, such as issue, discussions, releases, actions, etc)* - Profit Pro - marked financial ## Development - [Emacs](https://github.com/avelino/dotfiles/tree/main/doom.d) - Zed - Homebrew - [Rio](https://raphamorim.io/rio/) - [Fish Shell](https://fishshell.com/) > my dotfile share in [this repository](https://github.com/avelino/dotfiles) ## Another apps - Arc - Figma - Google Drive ## Hosting - [DigitalOcean App Platform](https://m.do.co/c/bd3b723c0a36?utm_medium=opensource&utm_source=awesome-go) - [Netlify](https://www.netlify.com/) - [Resend](https://resend.com/), thanks [Zeno Rocha](https://twitter.com/zenorocha) ## Training to IRONMAN/Triathlon - Garmin 965 (watch) - OuraRing - Elite Direto XR smart training - TrainingPeaks --- # Open Source Contributions - July 2021 **URL**: https://avelino.run/foss/2021/07/ **Published**: 2021-07-01 **Word Count**: 395 words **Summary**: July 2021 saw 11 repositories contribute 34 significant events, including 3 pull requests and 15 reviews, highlighting ongoing development and community engagement. Explore the timeline of contributions for July 2021, showcasing a dynamic month of activity across 11 repositories. This overview includes key events such as push events, pull requests, and issue discussions, reflecting the collaborative spirit and progress made in the open-source community. ## 2021-07-25 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-07-25](https://github.com/avelino/awesome-go/issues/3672) ## 2021-07-23 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ach](https://github.com/avelino/awesome-go/pull/3668#pullrequestreview-713539068) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add testza](https://github.com/avelino/awesome-go/pull/3667#pullrequestreview-713536489) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Orion as one of frameworks](https://github.com/avelino/awesome-go/pull/3665#pullrequestreview-713534501) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add bexp - Brace Expansion library](https://github.com/avelino/awesome-go/pull/3663#pullrequestreview-713531679) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add dtm](https://github.com/avelino/awesome-go/pull/3662#pullrequestreview-713529209) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-starter](https://github.com/avelino/awesome-go/pull/3661#pullrequestreview-713527299) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add simplefeatures](https://github.com/avelino/awesome-go/pull/3660#pullrequestreview-713525700) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fixed a naming of a package](https://github.com/avelino/awesome-go/pull/3659#pullrequestreview-713524181) (Changes requested) ## 2021-07-18 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-07-18](https://github.com/avelino/awesome-go/issues/3664) ## 2021-07-13 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [doc/query-statements: fixed distinct typo](https://github.com/prest/prest/pull/570) ## 2021-07-11 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-07-11](https://github.com/avelino/awesome-go/issues/3656) ## 2021-07-08 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Balerter to the DevOps section](https://github.com/avelino/awesome-go/pull/3654#pullrequestreview-701905099) (Approved) ## 2021-07-06 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add lingua-go library](https://github.com/avelino/awesome-go/pull/3647#pullrequestreview-699712890) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sched](https://github.com/avelino/awesome-go/pull/3644#pullrequestreview-699711748) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added jsonl-graph](https://github.com/avelino/awesome-go/pull/3643#pullrequestreview-699710506) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add zenity](https://github.com/avelino/awesome-go/pull/3641#pullrequestreview-699707549) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Shadowsocks](https://github.com/avelino/awesome-go/pull/3640#pullrequestreview-699705713) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Easegress](https://github.com/avelino/awesome-go/pull/3634#pullrequestreview-699701606) (Changes requested) ## 2021-07-05 - 🔀 Opened PR in [wesbos/awesome-uses](https://github.com/wesbos/awesome-uses): [add @avelino](https://github.com/wesbos/awesome-uses/pull/1204) ## 2021-07-04 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-07-04](https://github.com/avelino/awesome-go/issues/3653) ## 2021-07-03 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [wip: add scorecard check](https://github.com/prest/prest/pull/566) - 🐛 Opened issue in [ossf/scorecard](https://github.com/ossf/scorecard): [scorecard on github marketplace](https://github.com/ossf/scorecard/issues/653) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Measuring Security Risks - Scorecard](https://github.com/prest/prest/issues/565) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [prest/prestd-buildui](https://github.com/prest/prestd-buildui): 2 commit(s) - [See commits](https://github.com/prest/prestd-buildui/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 6 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [hmdsefi/gowl](https://github.com/hmdsefi/gowl): 1 commit(s) - [See commits](https://github.com/hmdsefi/gowl/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [prest/prestd.com](https://github.com/prest/prestd.com): 1 commit(s) - [See commits](https://github.com/prest/prestd.com/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 3 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [wesbos/awesome-uses](https://github.com/wesbos/awesome-uses): 1 commit(s) - [See commits](https://github.com/wesbos/awesome-uses/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2021-07-01T00:00:00Z&until=2021-07-31T23:59:59Z) ## Private contributions - 🔒 5 private contribution(s) this month --- # Decisões na carreira de engenharia de software (desenvolvimento) **URL**: https://avelino.run/decisoes-na-carreira-de-engenharia-de-software-desenvolvimento/ **Published**: 2021-06-18 **Tags**: team building, carreira, software engineer **Word Count**: 754 words > Ao decidir sobre qual passo seguirá em sua trajetória profissional, acredito que vale pena considerar os seguintes fatores (1). Dependendo do seu momento de pessoal e/ou profissional, diferentes fatores será mais (ou menos) importantes (2). **Importante:** 1. Assumi-se que você achou melhor se juntar, ao invés de criar (começar uma empresa). Não estou falando de fundar ou não uma empresa, e sim desmitificar auxiliar que queira entrar em uma empresa existente e é parcial com pessoas no início da carreira. 2. Algumas coisas se torna mais importantes à medida que temos filhos, ajudar membros da família ou qualquer outro ponto relacionado que seja importante para seu momento pessoal. Para algumas pessoas, o trabalho ideal é aquele que lhe dê flexibilidade de tempo, proximidade da família ou outros fatores, esses fatores podem ser cruciais para a vida e felicidade pessoal, minha intenção não é subestimá-los. Por exemplo: se você quiser estar próximo de um parente doente, alguns pontos abaixo podem se tornar inviáveis. ![Formação de time (Team building): Decisões na carreira de engenharia de software (desenvolvimento)](/blog/decisoes-na-carreira-de-engenharia-de-software.png#center) ## Network - rede de relacionamento Considero esse item o mais importante em nosso relacionamento pessoal e profissional. Quando falamos de network estou falando das pessoas que trabalhamos e nos relacionamos em nosso dia-a-dia. Depois de um certo nível profissional é comum, pessoas trabalharem juntos em diversas empresas (entrar em uma nova empresa e com o tempo fazer proposta outros membros do ex-time). Se você tiver boas entregas e se juntar as pessoas "certas", você terá mais oportunidades ao decorrer da sua vida profissional. Ex: fazer parte da [rede de relacionamento dos fundadores do PayPal](https://en.wikipedia.org/wiki/PayPal_Mafia) vai expor você a empresas como LinkedIn, Yelp, Tesla, SpaceX, Facebook e muitas outras que estão por vir. Da mesma forma, [ex-Googlers](https://www.nytimes.com/2008/11/13/business/smallbusiness/13tree.html) que se tornaram [executivos](http://bits.blogs.nytimes.com/2014/02/14/the-xoogler-diaspora/) ou VCs envolvidos com as principais empresas do Vale do Silício (_Facebook, Dropbox, Pinterest_, etc), elas agora conhecem pessoas em muitas grandes empresas de lá. As pessoas que investiram, tornaram se sócias ou membro do conselho da empresa que você trabalha lhe conhecerá ao longo do tempo e impactara sua carreira. Fazer parte da rede certa no início da carreira lhe trará oportunidades interessantes. Podemos fazer que é _"sorte"_, acredito que podemos ter sorte, mas nem todas as pessoas estarão preparadas para abraçar a oportunidade (_sorte_) que passa em sua frente, não sabemos o momento que ela vai passar - você tem se preparado ou vai perder mais uma oportunidade? ## Mercado e taxa de crescimento No início de nossa carreira profissional, o mercado que "escolhemos" começar será um fator determinante para o seu sucesso profissional. Entrar em uma empresa com grande mercado lhe abrira diversas oportunidades de crescimento na empresa atual e outras empresas querendo lhe contratar - o que fazemos hoje colhemos no futuro. Muitos profissionais que passaram pela Netscape para o Google, do Google para o Facebook e agora do Facebook para outras empresas líderes da Internet. Traçando um paralelo: os profissionais que fizeram parte das empresas de telecomunicação nos anos 90 provavelmente ainda estão na Cisco (se não estudaram e tiveram _"sorte"_), tenha calma e escolha sabiamente o mercado que quer trabalhar. Sei que no começo da nossa vida profissional só queremos "qualquer" emprego, mas tente pensar estrategicamente onde quer chegar, isso lhe ajudará dizer não para o que não faz sentido em sua vida profissional. ## Tenha opções - seja flexível Você tem ocupado sempre a mesma posição profissional? Ou pode estar uma posição que vai preparar você para uma nova posição? Qual é a próximo cargo que você quer chegar? Você consegue trabalhar em um novo mercado (por exemplo, entrar na área farmacêutica) ou ocupar uma nova função (ocupar uma posição no time de produto ao invés de engenharia)? Geralmente nos limitamos fazendo a mesma coisa por diversas vezes, ao invés de aprender coisas novas (não é fácil sair da **zona de conforto**). Ser especialista é importante quando temos anos de experiência, não no começo de nossa vida profissional. ## Marca de peso - isso pode ser importante O nome da empresa que você trabalha é importante, principalmente se você nunca teve experiencia trabalhando em grandes times. Se você é formado em uma grande universidade (exemplo MIT) e trabalhou como engenheiro no Google, as pessoas vão assumir que você é um grande engenheiro, à reputação da instituição passará para você. Se você tiver 1 ou 2 marcas esse ponto é menos importante, eu olharia para os outros fatores listado acima. --- Para o blogpost não ficar grande e com uma leitura massante quebrei ele em 2 partes (ainda não terminei de escrever a segunda, ou seja, pode ser que seja mais 😊). --- # Reconhecimento pelo trabalho com Open Source - GitHub Star **URL**: https://avelino.run/reconhecimento-pelo-trabalho-com-open-source-github-star/ **Published**: 2021-06-10 **Tags**: opensource, github star, github **Word Count**: 220 words Tenho a felicidade de compartilhar que fui premiado com o status de GitHub Stars por GitHub e nomeação por diversas pessoas - obrigado a todos, que tornaram isso possível. [![GitHub Star Avelino](/blog/github-star-avelino.png#center)](https://stars.github.com/profiles/avelino/) Estou contribuindo e criando software Open Source desde 2008. Entrei no GitHub 31 outubro de 2008 e vê um universo de oportunidade para aprender olhando código de softwares que usava no meu dia a dia. No começo tive dificuldade de receber não em minhas contribuições (issues e pull requests), mas depois que entendi a "dinâmica" de um projeto open source comecei encarar o não como oportunidade de aprender. "Esse pull request NÃO esta legal, você só esta pensando nesse caso de uso, precisa pensar nesse outro caso" A maior parte da minha direção de carreira foi contribuindo com open source (FOSS). Open Source me trouxe muitas oportunidades e me fez conectar com o público global. Esse reconhecimento é um trabalho de longo prazo, com muita dedicação e disciplina, fazendo o que precisa ser feito e não só o que gosto (quero) fazer. Estou sempre entusiasmado em compartilhar o que construo com os outros. Obrigado por apoiar meu trabalho. Me siga no GitHub para acompanhar os projetos que estou contribuindo, se quer com contato direto o Twitter é a melhor opção. [👐 Follow me on GitHub](https://github.com/avelino) [🌟 Stars Profile](https://stars.github.com/profiles/avelino/) _[Publlication in English](https://www.linkedin.com/feed/update/urn:li:activity:6808675484038127616/)_ --- # Open Source Contributions - June 2021 **URL**: https://avelino.run/foss/2021/06/ **Published**: 2021-06-01 **Word Count**: 656 words **Summary**: June 2021 saw 17 repositories active, with 56 contributions including 7 pull requests and 21 reviews, enhancing collaboration and project development. Explore the timeline of contributions for June 2021, showcasing significant activity across 17 repositories. This month featured 56 contributions, including 7 open pull requests and 21 reviews, highlighting the collaborative efforts and advancements in various projects. ## 2021-06-30 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Githooks](https://github.com/avelino/awesome-go/pull/3633#pullrequestreview-696649526) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added lestrrat-go/jwx library to Authentication section](https://github.com/avelino/awesome-go/pull/3632#pullrequestreview-696648266) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Teleport](https://github.com/avelino/awesome-go/pull/3629#pullrequestreview-696647706) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add commitlog to list of utilities](https://github.com/avelino/awesome-go/pull/3628#pullrequestreview-696647149) (Changes requested) ## 2021-06-27 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-06-27](https://github.com/avelino/awesome-go/issues/3645) ## 2021-06-22 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [migrate ci to github actions](https://github.com/prest/prest/pull/560) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [PREST_SSL_MODE is PostgreSQL config not http ssl - and other ssl variables](https://github.com/prest/prest/issues/561) ## 2021-06-20 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add awesome-go-extra](https://github.com/avelino/awesome-go/pull/3622#pullrequestreview-687933415) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Prudence](https://github.com/avelino/awesome-go/pull/3624#pullrequestreview-687933249) (Changes requested) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-06-20](https://github.com/avelino/awesome-go/issues/3638) ## 2021-06-19 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Added some vimrc essential settings](https://github.com/editor-bootstrap/vim-bootstrap/pull/385#pullrequestreview-687840048) (Approved) ## 2021-06-18 - 🐛 Opened issue in [notaapp/talk](https://github.com/notaapp/talk): [~scratch~ visual render](https://github.com/notaapp/talk/issues/72) - 🐛 Opened issue in [notaapp/talk](https://github.com/notaapp/talk): [web version](https://github.com/notaapp/talk/issues/71) - 🐛 Opened issue in [notaapp/talk](https://github.com/notaapp/talk): [Font family Fira Code support](https://github.com/notaapp/talk/issues/70) - 🐛 Opened issue in [notaapp/talk](https://github.com/notaapp/talk): [dracula theme support](https://github.com/notaapp/talk/issues/69) ## 2021-06-17 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Report for `F` ... is for lots of things to Fix!](https://github.com/prest/prest/issues/558) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Change TravisCI to GitHub Actions ](https://github.com/prest/prest/issues/555) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [`ltree` field support](https://github.com/prest/prest/issues/554) ## 2021-06-16 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add support for RSA and ECDSA signed tokens](https://github.com/prest/prest/pull/552#pullrequestreview-685470968) (Changes requested) ## 2021-06-15 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [endpoint to file upload](https://github.com/prest/prest/issues/550) ## 2021-06-13 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-06-13](https://github.com/avelino/awesome-go/issues/3630) ## 2021-06-10 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Update Git commands](https://github.com/editor-bootstrap/vim-bootstrap/pull/384#pullrequestreview-680539603) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [So would it be possible to implement sending `SET ROLE` based on some predefined JWT attributes?](https://github.com/prest/prest/issues/548) ## 2021-06-08 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Avelino/new site layout](https://github.com/editor-bootstrap/vim-bootstrap/pull/383) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [atualização da imagem docker](https://github.com/editor-bootstrap/vim-bootstrap/pull/382) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [new layout used Dracula UI](https://github.com/editor-bootstrap/vim-bootstrap/pull/381) ## 2021-06-06 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-06-06](https://github.com/avelino/awesome-go/issues/3621) - 🐛 Opened issue in [noverde/serpens](https://github.com/noverde/serpens): [Project description - keep open source project of a lot of work](https://github.com/noverde/serpens/issues/30) ## 2021-06-05 - 🔀 Opened PR in [golang/go](https://github.com/golang/go): [go/types: use flag variable goversion](https://github.com/golang/go/pull/46585) ## 2021-06-04 - 🔀 Opened PR in [golang/go](https://github.com/golang/go): [go/types: use flag variable goVersion](https://github.com/golang/go/pull/46566) ## 2021-06-03 - 🔍 Reviewed PR in [confluentinc/ksql](https://github.com/confluentinc/ksql): [docs: add note about how to run the ksql cli via Maven](https://github.com/confluentinc/ksql/pull/7632#pullrequestreview-675592653) (Changes requested) - 🔍 Reviewed PR in [golang/appengine](https://github.com/golang/appengine): [Create the v2 in /v2 and revert the base directory back to 1.6.7](https://github.com/golang/appengine/pull/243#pullrequestreview-675142663) (Changes requested) - ✅ Reviewed PR in [solanum-ircd/solanum](https://github.com/solanum-ircd/solanum): [Improve README.md](https://github.com/solanum-ircd/solanum/pull/181#pullrequestreview-674779669) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Support for json style added - Postgres 14](https://github.com/prest/prest/issues/547) ## 2021-06-02 - 🔀 Opened PR in [RijulGulati/otpgen](https://github.com/RijulGulati/otpgen): [formatting the readme file](https://github.com/RijulGulati/otpgen/pull/1) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add ujson](https://github.com/avelino/awesome-go/pull/3616#pullrequestreview-674158023) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added otpgen](https://github.com/avelino/awesome-go/pull/3617#pullrequestreview-674155985) (Changes requested) ## 2021-06-01 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Walrus](https://github.com/avelino/awesome-go/pull/3615#pullrequestreview-672883530) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-swagger-ui](https://github.com/avelino/awesome-go/pull/3612#pullrequestreview-672880044) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add astgo](https://github.com/avelino/awesome-go/pull/3610#pullrequestreview-672877482) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gortsplib](https://github.com/avelino/awesome-go/pull/3606#pullrequestreview-672875002) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add project automi](https://github.com/avelino/awesome-go/pull/3605#pullrequestreview-672871826) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add hoofli](https://github.com/avelino/awesome-go/pull/3602#pullrequestreview-672864571) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add command-chain](https://github.com/avelino/awesome-go/pull/3601#pullrequestreview-672862650) (Commented) - 🐛 Opened issue in [solanum-ircd/solanum](https://github.com/solanum-ircd/solanum): [docker image](https://github.com/solanum-ircd/solanum/issues/179) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 6 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [prest/prestd.com](https://github.com/prest/prestd.com): 3 commit(s) - [See commits](https://github.com/prest/prestd.com/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 3 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [avelino/liquidluck](https://github.com/avelino/liquidluck): 1 commit(s) - [See commits](https://github.com/avelino/liquidluck/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 30 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [RijulGulati/otpgen](https://github.com/RijulGulati/otpgen): 1 commit(s) - [See commits](https://github.com/RijulGulati/otpgen/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 6 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [golang/gofrontend](https://github.com/golang/gofrontend): 1 commit(s) - [See commits](https://github.com/golang/gofrontend/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 8 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 3 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2021-06-01T00:00:00Z&until=2021-06-30T23:59:59Z) ## Private contributions - 🔒 6 private contribution(s) this month --- # Minha meta como gestor é: ser mandado embora no final do dia **URL**: https://avelino.run/minha-meta-como-gestor-eh-ser-mandado-embora-no-final-do-dia/ **Published**: 2021-05-19 **Tags**: team building, formação de pessoas, evolução pessoal **Word Count**: 118 words ![Minha meta como gestor é: ser mandado embora no final do dia - avelino.run](./blog/sucesso.jpg#center) Compartilho com meu time que minha meta é ser "mandado em bora" no final do dia, o que quero dizer com isso? Meu trabalho como gestor é fazer meu time trabalhar sem minha dependência, se eles estão conseguindo andar (entregar o combinado, dar suporte a profissionais menos experientes, se comunicar com pessoas não técnicas e etc) sem minha dependência quer dizer que fiz um ótimo trabalho dando a autonomia necessária para todos tomar decisão sem pedir permissão. > A liberdade pode ser o segredo para a inovação nas empresas O estudo _["Introducing the Freedom Report: How Successful 21st Century Companies Build Unique Competitive Advantage"](https://blog.lrn.com/archive/introducing-the-freedom-report-how-successful-21st-century-companies-build-unique-compet)_ feito pela LRN fala mais sobre esse assunto. Só não vamos esquecer: **liberdade com responsabilidade** --- # Observar nossa vida pela janela também é importante **URL**: https://avelino.run/observar-nossa-vida-pela-janela-tambem-e-importante/ **Published**: 2021-05-15 **Tags**: baby step, feedback, agil, foco, evolução pessoal **Word Count**: 206 words Essa semana você parou alguns minutos para analisar onde errou e como pode melhor? Em desenvolvimento de software (usando metodologias ágies) temos alguns rituais para olhar o que o time fez (tanto de erro e como acerto) para não voltar errar (sempre compartilhando o conhecimento para que todas as pessoas envolvidas possa aprender com o erro) e potencializar os acertos. Vejo algumas pessoas vivendo como não houvesse o amanhã, sem planejamento, sem saber onde quer chegar e geralmente não analisando como chegou até o momento atual. Quando falamos em parar para olhar o que estamos fazendo (olhar nossa própria vida pela janela) soa errado, que estamos perdendo tempo de agir (executar) e mais 1001 desculpas para não sentir novamente a "dor" do erro - _quem nunca deixou de acessar a conta bancaria para não saber quanto negativo esta a conta?_ Em alguns casos a ignorância é uma virtude, desde que usamos ela para potencializar o aprendizado assim que ganharmos conhecimento sobre nossa ignorância, mas não ficar empurrando com a barriga. Semanalmente tenho momento para analisar meus próprios erros e corrigi-los na próxima semana - ser duro no nosso **auto feedback** é extremamente importante para nos tornar uma pessoa melhor, sempre ao rumo de ser **1% melhor**. ![Observar nossa vida pela janela também é importante - avelino.run](./quote/observar-nossa-vida-pela-janela-tambem-e-importante.jpg#center) --- # O combinado não sai caro: 'Mentir pra si mesmo é sempre a pior mentira' **URL**: https://avelino.run/o-combinado-nao-sai-caro-mentir-pra-si-mesmo-e-sempre-a-pior-mentira/ **Published**: 2021-05-09 **Tags**: metira, foco, triathlon, determinação **Word Count**: 254 words Constantemente recebo msg dando parabéns pelo meu foco, disciplina, motivação e/ou alguma coisa na linha de me manter treinando todos os dias. Lógico que fico super feliz ao receber esse tipo de mensagem, mostra que estou gerando algum impacto (espero que positivo) na forma que encaro os meus desafios. Mas algumas vezes essa msg de __"parabéns"__ vem seguida de __"eu gostaria de ter esse foco"__. **Como faço para manter esse bendito foco?** Busco entender porque eu quero e porque estou fazendo as coisas (tanto treino como qualquer coisa que faço), quando entendemos o real objetivo/propósito fica mais fácil de levar a sério o que tem que ser feito, caso contrário vamos priorizar outras coisas mais "importantes". Isso se torna mais latente quando você está liderando algum time. Eu não culpo ninguém que não está fazendo o que eu acho que deveria fazer primeiro (de maior prioridade), assumo a responsabilidade que não fui capaz de compartilhar os motivos que deveríamos começar pela outra tarefa e não essa. **Por que você acorda todos os dias para ir trabalhar?** Você comprou alguma coisa (que esta muito afim) e no final do mês chegará a fatura do cartão (o bendito boleto), sabendo disso você acorda todos os dias para ir trabalhar (querendo ou não) - as contas não é paga "automagicamente". Eu encaro os treinos exatamente dessa forma: assumi compromisso comigo mesmo e não posso falhar porque no final do mês chega a conta para pagar 🤷‍♂️ Levo tudo com o seguinte dilema: > O combinado não sai caro ![O combinado não sai caro: "Mentir pra si mesmo é sempre a pior mentira"](./quote/o-combinado-nao-sai-caro-mentir-pra-si-mesmo-e-sempre-a-pior-mentira.jpeg) --- # Configurando limite de recursos em aplicações Java (JVM) no Kubernetes **URL**: https://avelino.run/configurando-limite-de-recursos-em-aplicacoes-java-jvm-no-kubernetes/ **Published**: 2021-05-01 **Tags**: java, jvm, kubernetes, heapsize, permsize **Word Count**: 955 words Fazer deploy de software desenvolvido usando tecnologias que foram criadas para ter escalabilidade vertical para escalar horizontalmente (_micro serviço, nano serviço_ e etc) em produção pode gerar alguns desafios que não estamos preparados. Principalmente quando o software esta rodando em JVM e não foi declarado limites de recursos. ## `-Xms`, `-Xmx` e seus problemas Ao estudar sobre a JVM você provavelmente passara pelos parâmetros de alocação inicial (`Xms`) e alocação máxima (`Xmx`) de memória, os parâmetros funcionam rigorosamente bem. Trazendo um exemplo, ao definir `-Xms128M` e `Xmx256M`, e começar monitorar a aplicação com [VisualVM](https://visualvm.github.io/), você alguma como essa: ![VisualVM declarado Xms e Xmx na JVM](/blog/jvm-xms-xmx-heapsize.png#center) ```shell java -Xms128m -Xmx256m hello.java ``` Ao ler a documentação da JVM (a parte de [Sizing the Generations](https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/sizing.html)) parece que funcionara como magica, no exemplo acima a aplicação querer mínimo de 128Mb de memória (JVM alocará assim que a aplicação iniciar), mas não deixando passar do limite de 256Mb. Vamos dar uma olhada como ficou na prática: ![Usando Xms e -Xmx na JVM](/blog/jvm-htop-xms-xmx.png#center) ```java public class Hello { public static void main(String[] args) throws Exception { while (true) { new Hello().hello(); Thread.sleep(1000); } } public void hello() { System.out.println("Hello, World"); } } ``` 😱 não saiu como eu imaginava, parece que usou um pouco mais que 256Mb... O motivo desse comportamento é que a **JVM usa memória para outros processos** como metaspace, cache de código e etc, o `Xmx` limita só sua aplicação não a JVM como todo. ## Alguns cuidados que precisamos ter ao limitar recursos Ao rodar software dentro do Kubernetes, temos que ter atenção no limite físico das máquinas que fazem parte do Cluster Kubernetes, para um pod não consumir todo recurso e outros pods acabar _"morrendo"_. Vou testar exemplificar... ### Configurando `Xms` e `Xmx` na imagem Docker Você pode passar estas flags (parâmetros) para JVM subir seu **JAR** na imagem Docker: ```dockerfile # Dockerfile # ... ENTRYPOINT ["java", "-Xms128M ", "-Xmx256m", "-jar", "hello-service-1.0.0.jar"] ``` Caso esteja usando [**Jib**](https://github.com/GoogleContainerTools/jib), pode declarar dentro do `build.gradle`: ```gradle // build.gradle jib { to { image = "hello-service:tag" } container { environment = ["JAVA_TOOL_OPTIONS": "-Xms128M -Xmx256M"] } } ``` ### Limitando memória dos pods no Kubernetes Ao usar `Xmx` no pods você pode facilmente chegar em uma configuração que causará restart contante, por motivos de [_Exceed a Container's memory limit (OOM)_ ](https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/#exceed-a-container-s-memory-limit), por motivos a limite de memória, lembre do printscreen acima que mesmo limitando a aplicação a **256Mb** a JVM usou mais de **700Mb**. Dependendo do seu software deve ser definido o limite de recurso no próprio Kubernetes no `YAML` do seu deployment: ```yaml apiVersion: apps/v1 kind: Deployment metadata: # ... spec: # ... template: # ... spec: containers: - image: hello-service:tag name: hello-service livenessProbe: initialDelaySeconds: 300 resources: requests: memory: 128Mi limits: memory: 256Mi ``` Vou assumir que você declarou os limites acima para seus pods, já que você também declarou os mesmos limites na sua imagem Docker via flags `-Xms` e `-Xmx`. Você faz deploy do seu software, ele funciona _"perfeitamente"_, como não teve problema vai para cama descansar (geralmente colocar software em produção é cansativo). No dia seguinte você da roda `kubectl get pods` para ter orgulho de ter colocado seu software no ~~Kubernetes~~ e se depara com isso: ```shell ❯ ~ kubectl get pods NAME READY STATUS RESTARTS AGE hello-service-3x85997760-qapo7 1/1 Running 156 9h ``` 💣 você não esperava ver isso né? Agora que conhece como funciona a JVM (com printscren do htop) você já sabe o que esta acontecendo: o uso de memória da JVM não é só do seu software, então ele é morto diversas vezes (campo RESTARTS do `get pods`) porquê o pod passou do limite de memória declarado e entra em um fluxo sem fim de _restart_. ## Abordagem correta Primeiro de tudo: assumiremos que os limites dentro da sua imagem Docker estejam bem definidos - com o que o software realmente precisa. Caso você queira reservar um valor fixo de memória para seu software e não ter concorrência com outro, você deve declarar `Xms` = `Xmx`, mas _use com moderação_. Para evitar _Exceed a Container's memory limit_ no pods do Kubernetes, você deve considerar os seguintes itens: 1. `requests` (parâmetro do `resources`) != `Xms` - o valor do `requests` deve ser maior que `Xms`, essa diferença depende do que seu software fará. Caso seja um _micro serviço_ "simples", ~30% de acréscimo é o suficiente, mas se seu software tem muitas conexões externas ou qualquer operação que consome memória recomendo estudar a particularidade do seu software; 2. `limits` (parâmetro do `resources`) != `Xmx` - O limite de memória sugerido para seu pod depende de muitas coisas e a imagem base do Java usada é um fator extremamente importante. Não vou passar um valor nem fórmula ~~magica~~, recomendo fazer **diversos benchmarks para conhecer melhor o software que esta desenvolvendo**; 3. Declarar `limits` com valores mais alto no começo é sempre uma boa prática, mas ir otimizando (diminuindo ou aumentando) conforme for conhecendo o comportamento do seu software em produção, sempre monitorando se o pod não entra em OOM; 4. `livenessProbe.initialDelaySeconds` - Tempo que o Kubernetes deve esperar seu software subir (JVM) antes de dar que não funcionou. Esse parâmetro é complicado, JVM tem fama de ser "lenta" para fazer boot, se seu software tem muitas conexões externas ela levará mais tempo. Olhando para o caso que foi descrito acima: declarar `requests` como ~320Mb e `limits` como ~512Mb seria um ótimo começo dado os valores do `Xms` e `Xmx`. > **Não existe bala de prata**, a melhor forma de chegar em valores reais para limites de recursos no Kubernetes é conhecer seu software e fazer **benchmarks** para entender o comportamento dele, acada software é único e se comporta de uma forma diferente. > Recentemente coloquei um micro serviço usando [Spring Boot](https://spring.io/projects/spring-boot) para rodar e o serviço não subia, depois de horas e horas debugando e "brigando" com limite recurso do software e Kubernetes percebi que o problema era o `initialDelaySeconds`. _#ficaadica_ --- # Open Source Contributions - May 2021 **URL**: https://avelino.run/foss/2021/05/ **Published**: 2021-05-01 **Word Count**: 442 words **Summary**: May 2021 saw significant contributions across 16 repositories, with 10 pull requests and 8 issues opened, showcasing active collaboration and development. Explore the timeline of contributions for May 2021, highlighting key activities across multiple repositories. This month featured a total of 36 events, including pushes, pull requests, and issue tracking, reflecting the ongoing commitment of developers to enhance and maintain their projects. ## 2021-05-31 - 🐛 Opened issue in [ergochat/ergo](https://github.com/ergochat/ergo): [Ergo is IRCd and service, why not split it into two services (software)?](https://github.com/ergochat/ergo/issues/1673) - 🐛 Opened issue in [ergochat/ergo](https://github.com/ergochat/ergo): [BotServ Service](https://github.com/ergochat/ergo/issues/1672) ## 2021-05-30 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Link migration docs page on configuration](https://github.com/prest/prest/pull/544) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-05-30](https://github.com/avelino/awesome-go/issues/3613) ## 2021-05-29 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [migration system explanation page](https://github.com/prest/prest/pull/543) - 🔀 Opened PR in [golang/gofrontend](https://github.com/golang/gofrontend): [README.md: convert README to markdown](https://github.com/golang/gofrontend/pull/5) - 🔀 Opened PR in [rlanhellas/Lanhellas.KafkaConsumerBatch](https://github.com/rlanhellas/Lanhellas.KafkaConsumerBatch): [set syntax highlight c# color in readme file](https://github.com/rlanhellas/Lanhellas.KafkaConsumerBatch/pull/1) - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [declare versions of dependent packages django](https://github.com/opps/opps/pull/510) - 🔀 Opened PR in [opps/opps-ganalytics](https://github.com/opps/opps-ganalytics): [declare versions of dependent packages](https://github.com/opps/opps-ganalytics/pull/5) ## 2021-05-26 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Documentation theme](https://github.com/prest/prest/issues/542) ## 2021-05-23 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-05-23](https://github.com/avelino/awesome-go/issues/3607) ## 2021-05-16 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Content observar nossa vida pela janela tambem e importante](https://github.com/avelino/avelino.run/pull/24) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-05-16](https://github.com/avelino/awesome-go/issues/3603) ## 2021-05-15 - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Content observar nossa vida pela janela tambem e importante](https://github.com/avelino/avelino.run/pull/23) - 🔀 Opened PR in [mikekonan/go-types](https://github.com/mikekonan/go-types): [format/style example source Go on readme](https://github.com/mikekonan/go-types/pull/2) ## 2021-05-14 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added GoFlake](https://github.com/avelino/awesome-go/pull/3597#pullrequestreview-659924981) (Commented) ## 2021-05-13 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added aduket](https://github.com/avelino/awesome-go/pull/3598#pullrequestreview-658721812) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add cron project from robfig to job schedule section](https://github.com/avelino/awesome-go/pull/3594#pullrequestreview-658718367) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add gitaligned](https://github.com/avelino/awesome-go/pull/3585#pullrequestreview-658701878) (Changes requested) ## 2021-05-09 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-05-09](https://github.com/avelino/awesome-go/issues/3596) ## 2021-05-03 - 🔀 Opened PR in [Foundry376/Mailspring](https://github.com/Foundry376/Mailspring): [add snooze shortcut](https://github.com/Foundry376/Mailspring/pull/2324) ## 2021-05-02 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-05-02](https://github.com/avelino/awesome-go/issues/3591) ## 2021-05-01 - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Upgrade to GitHub-native Dependabot](https://github.com/avelino/avelino.run/pull/20#pullrequestreview-649819038) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 15 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [rlanhellas/Lanhellas.KafkaConsumerBatch](https://github.com/rlanhellas/Lanhellas.KafkaConsumerBatch): 1 commit(s) - [See commits](https://github.com/rlanhellas/Lanhellas.KafkaConsumerBatch/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/editor-bootstrap.com](https://github.com/editor-bootstrap/editor-bootstrap.com): 4 commit(s) - [See commits](https://github.com/editor-bootstrap/editor-bootstrap.com/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 3 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [Foundry376/Mailspring](https://github.com/Foundry376/Mailspring): 1 commit(s) - [See commits](https://github.com/Foundry376/Mailspring/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [mikekonan/go-types](https://github.com/mikekonan/go-types): 1 commit(s) - [See commits](https://github.com/mikekonan/go-types/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 3 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 18 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [prest/prest-heroku](https://github.com/prest/prest-heroku): 2 commit(s) - [See commits](https://github.com/prest/prest-heroku/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [avelino/ritchie-cli-archpack](https://github.com/avelino/ritchie-cli-archpack): 2 commit(s) - [See commits](https://github.com/avelino/ritchie-cli-archpack/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [opps/opps-ganalytics](https://github.com/opps/opps-ganalytics): 13 commit(s) - [See commits](https://github.com/opps/opps-ganalytics/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 4 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-05-01T00:00:00Z&until=2021-05-31T23:59:59Z) ## Private contributions - 🔒 67 private contribution(s) this month --- # Falar sobre 'Assuntos Difíceis' **URL**: https://avelino.run/falar-sobre-assuntos-dif%C3%ADceis/ **Published**: 2021-04-29 **Tags**: team building, formação de pessoas, evolução pessoal **Word Count**: 963 words Em nossa vida é necessário encarar de frente assuntos considerados difíceis ou tabu com qualquer pessoa, para isso precisamos ter coragem e maturidade para lidar com naturalidade com qualquer tema - mesmo se ele nos tire da zona de conforto. Para falar sobre esse assunto, vamos começar pelo porquê. **Por que é comum procrastinar uma conversa quando envolve assunto difícil?** Quando não falamos constantemente sobre um tipo de assunto ele se torna "difícil" por falta de familiaridade e sensação de desconforto. Por exemplo, é comum as pessoas terem dificuldade para falar sobre sexo, dinheiro, relacionamento, homossexualidade, etc. - **Sexo:** geralmente é um tabu e tratado com "sigilo"; - **Dinheiro:** o brasileiro tem um problema estrutural na educação financeira e falar de dinheiro com nossa família geralmente soa "errado", principalmente quando estamos em uma mesa de jantar; - **Relacionamento:** quando está tudo bem é fácil, mas quando tem algo nos incomodando entendemos que não é tão fácil assim; - **Homossexualidade:** "nossa, falar disso é desnecessário", mas não é; - **...** posso passar horas e horas listando assuntos que a grande maioria das pessoas fogem > Conversas difíceis são… difíceis! Mas podemos deixar elas mais confortáveis Agora que estamos alinhados sobre o que é um assunto difícil: vamos trazer para nossa vida profissional. ![Falar sobre 'Assuntos Difíceis'](/blog/falar-sobre-assuntos-dificeis.jpg#center) ## Falar o que as pessoas não estão preparados para escutar *Depois de anos trabalhando em ambientes de startups, percebo que muitos gestores não querem escutar assuntos que gerem desconforto e sim assuntos que massageiem os seus egos.* Minha realidade é diferente da sua e isso esta diretamente relacionado a como chegamos até aqui, dado as experiências que vivi, amizades, ambientes que frequentei etc. O que é obvio para mim, pode não ser para você. Ao chegar para um amigo (a) de trabalho e falar de um assunto complicado que a pessoa ainda não tem consciência, é gerado um nível alto de estresse e cada pessoa tem uma forma de lidar com informações que os gera desconforto, medo, angústia e ansiedade. Quando temos a consciência de que cada pessoa vai reagir de uma forma diferente, precisamos ter empatia e estruturar a conversa de uma forma que ela fique menos desconfortável, deixando extremamente claro a mensagem *final* que queremos passar. E de uma forma compreensível pela outra parte, ou seja, não levar no "freestyle" (sair falando sem antes ter estruturado a conversa) quando estamos falando de "assuntos difíceis". Tenho o habito de escrever tudo o que fiz e que irei fazer, invisto mais tempo em planejamento e estruturando uma conversa do que de fato tendo a conversa "difícil". Não estou falando que é rápida a reunião com assunto desconfortável e sim que o planejamento (estruturação) da reunião leva mais tempo que a própria reunião — sei que isso pode soar estranho para as pessoas que entram em reunião sem se prepararem. Sabe quando você olha seu calendário de trabalho e tem uma reunião atrás da outra sem ter pelo menos 15 minutos para *"respirar"*? Pode ser que você não esteja preparado para essa reunião e seria melhor **não** participar da reunião. Alguns assuntos se tornam difíceis por não sabermos dizer **não**, mas isso é assunto para um próximo texto, *quem sabe em breve escrevo sobre isso*. ## Expor o problema e propor a solução Quantas vezes você expôs um problema da empresa e não propôs uma *possível* solução? Não precisa ser a solução final e sim uma solução que você acredite que dará certo. Se está inseguro da proposta, pode expor isso para todos e envolver as pessoas para contribuírem na construção da solução — um time vai muito mais longe quando joga junto. **~~Infelizmente eu já fiz isso, apontei o dedo para o problema sem se quer pensar em como resolver.~~** Todas as empresas têm diversos problemas a serem solucionados ou pontos que precisam de melhorias, se você acha que existe a empresa perfeita esta enganado (a). Sei que muitas empresas têm a cultura de fazerem as tomadas de decisões *topdown* (dos diretores para o time), não dando espaço para o time (você faz parte dele) proporem melhorias. > Será que a empresa que você está é a empresa que você gostaria de estar? Se a resposta for não, você está planejando sua saída dela? Olha aí nós falando sobre um assunto difícil. ## Estruturando conversas difíceis com padrão A, B e C - **A:** Fale de casos concretos, dando exemplos do que aconteceu: "Eu vi que você fez isso", "Eu ouvi aquilo", "~~Alguém me disse~~ que tal coisa aconteceu" (cuidado com esse, telefone sem fio existe) e ... - **B:** Descreva o impacto que esse fato gerou em você: "Você fez A e eu me senti desrespeitado" ou "Você não entregou o que combinamos e fiquei com a impressão de que você não entendeu a importância do que está fazendo". É possível mencionar como você se sentiu, mas **sem a carga emocional**. - **C:** Busque a posição da outra pessoa de forma interrogativa: "Podemos conversar sobre esse assunto?", "Você pode me explicar o que aconteceu?", "Você tem algo a dizer a esse respeito?" ou ainda "Escutei isso e gostaria de compartilhar minhas impressões com você, ok?". Dessa forma você não mantém o ambiente psicologicamente seguro com espaço aberto para diálogo, não queremos culpar e sim dialogar. Ninguém quer participar de uma conversa quando começa com conclusões. Como queremos um dialogo, nada mais justo que pedir licença antes de entrar no espaço do outro, é muito mais que sinal de respeito e educação, abrindo espaço para a pessoa expor seu ponto de vista. > Por último aprenda escutar e só depois que a pessoa terminar você fala. Conseguiu entender meu ponto de vista? Não é fácil e exige muita consciência e pensar antes, durante e depois destas conversas. Mas é questão de prática e ação. Deixe seu comentário sobre o que você pensa sobre esse assunto. --- # Insights/Anotações do mês 04/2021 **URL**: https://avelino.run/newsletter/2021-04-anotacoes/ **Published**: 2021-04-27 **Tags**: newsletter, anotações, insights, avelino, open source, thiago avelino **Word Count**: 758 words ## Aquele PR irritantes, como você gerencia seu tempo para fazer revisão de código Jessica Joy Kerr escreveu um excelente blogpost sobre revisões de código, ela linka alguns tweets que acabou me levando a reflexão > Hot take: in-house development has been influenced too much by the GitHub open source PR driven development process. A process driven by zero trust doesn’t fit well in a team with trust. — [Patricia Aas](https://twitter.com/pati_gallardo/status/1373343835330383878) > Sempre usei a gestão de produto open source como uma referência positiva para meu dia-a-dia, a pergunta que me fiz foi: *será que estou até hoje fazendo tudo errado?* Leia o artigo da Jessica para entender a provocação dela e como ela propõe resolver o problema de code review. [https://jessitron.com/2021/03/27/those-pesky-pull-request-reviews/](https://jessitron.com/2021/03/27/those-pesky-pull-request-reviews/) --- ## Pratica de atividade física de alta intensidade pôs COVID19 No começo de março comecei sentir os sintomas do COVID, mas demorei para identificar se realmente era essa doença. Meu primeiro cinto foram dores musculares, com meu volume de treino diário era alto sentia diariamente incomodo muscular, mas quando começou as dores de cabeça tinha quase certeza que estava com - não consigo lembrar quando tive dor de cabeça (antes do COVID). Antes de pegar essa doença *invisível* me sentia o atleta super-herói 🦸‍♂️,, hoje sou o cagão com receio de pegar novamente. Leia o post que fiz no Instagram sobre meu momento pôs COVID [https://www.instagram.com/p/CNc1XdKh4lW/](https://www.instagram.com/p/CNc1XdKh4lW/) --- ## A busca pela "formula de sucesso" É comum o ser-humano buscar atalhos para alcançar um objetivo e isso não é diferente no mundo de engenharia de software. Jacob (conhecido pela comunidade Django - core commiter do projeto - e Python) escreveu um blogpost que começa trazendo o segredo de um truque de mágica para ilustrar como as pessoas acreditã em "atalho/formula de sucesso". Ele compartilha sobre a experiencia que ele teve em um time que estava travado com milhares de bug report e não conseguia sanar os bugs e sempre chegava mais bugs (o que chamo da corrida dos ratos), descreve como fez para tirar as falhas que tinha o software da frente, ele termina afirmando que **não fez o impossivel** e sim **fez o trabalho chato que ninguem queria fazer.** [https://jacobian.org/2021/apr/7/embrace-the-grind/](https://jacobian.org/2021/apr/7/embrace-the-grind/) --- ## Você sabe a diferença entre urgente e importante? Tenho habito de estudar sobre produtividade e alta performance profissional, esse mês acabei esbarrando em um artido do Todoist sobre evitar à "armadilha da urgência" com a famosa estrutura de priorização de Dwight D. Eisenhower - [Eisenhower Matrix](https://www.eisenhower.me/eisenhower-matrix/). > “Who can define for us with accuracy the difference between the long and short term! Especially whenever our affairs seem to be in crisis, we are almost compelled to give our first attention to the urgent present rather than to the important future.” – Dwight D. Eisenhower, 1961 address to the Century Association > [https://todoist.com/pt-BR/productivity-methods/eisenhower-matrix](https://todoist.com/pt-BR/productivity-methods/eisenhower-matrix) --- ## Pesquisa mostra que seu cérebro precisa descansar - Trabalho remoto vs pandemia Você tem se sentido mais cansado agora do que antes da pandemia? Provavelmente você esta trabalhando remoto e tendo diversas reuniões por dia (vídeo conferencia). A Microsoft fez uma pesquisa com 14 pessoas medindo atividade cerebral dos participando em um dia de trabalho com vídeo chamadas (reuniões) usando capacete EEG e como imaginava o nível de estres dos participantes foi alto, principalmente quando não tem intervalos de pelo menos 10min entre reuniões. A pesquisa recomenda algumas coisas para minimizar nossa atividade cerebral para fazer durante o dia: - Mudar nossa forma de pensar - Meditação e prática de atividade física - Antes de agendar uma reunião veja se é necessária ou se é possível resolver via texto (se for resolver via texto, dê o máximo de contexto para os participantes - escreva texto com o pensando que as pessoas envolvidas não sabe que esta falando) - Fazer pausa constante - Tenha pauta para cada reunião (call, video chamada) - Manter os participantes engajado no assunto - o ser humano perde o foco em longas horas de reunião Veja o conteúdo completo da pesquisa: [https://www.microsoft.com/en-us/worklab/work-trend-index/brain-research](https://www.microsoft.com/en-us/worklab/work-trend-index/brain-research) --- ## DevHealthy Episódio 22: 110KG a menos, rotina de treino, triathlon e pôs COVID19 Participei do episódio 22 do DevHealthy com a Keit Oliveira e Raphael Fabeni. > O convidado da vez foi o Thiago Avelino, engenheiro open-source e triatleta. Com uma incrível transformação de 110kg a menos, falamos sobre o mundo do triathlon e como ele planeja sua rotina entre treinos e trabalho, além de relatar como foi ficar internado por conta do COVID. > Escute o episódio [https://avelino.run/quote/lifestyle/devhealthy-22-podcast-110kg-a-menos-triathlon-pos-covid/](https://avelino.run/quote/lifestyle/devhealthy-22-podcast-110kg-a-menos-triathlon-pos-covid/) --- # DevHealthy - Episódio 22: 110kg a menos, rotina de treino, triathlon e pôs COVID19 **URL**: https://avelino.run/quote/lifestyle/devhealthy-22-podcast-110kg-a-menos-triathlon-pos-covid/ **Published**: 2021-04-26 **Tags**: podcast, devhealthy, triathlon, pos-covid **Word Count**: 118 words Uma conversa super maneira com a [Keit Oliveira](https://twitter.com/seescrevekeit) e [Raphael Fabeni](https://twitter.com/raphaelfabeni) no [DevHealthy](https://anchor.fm/devhealthy/embed/episodes/DevHealthy-22---Bate-papo-Thiago-Avelino---110kg-a-menos--Triathlon-e-COVID-evn5fv/a-a5cea1p), sobre meu processo de perda de peso (-110kg 😲), rotina de treino no triathlon 🏊🏃🚴 e treinos pôs COVID19 🦠. {{< podcast "https://anchor.fm/devhealthy/embed/episodes/DevHealthy-22---Bate-papo-Thiago-Avelino---110kg-a-menos--Triathlon-e-COVID-evn5fv/a-a5cea1p" >}} ![DevHealthy - Episódio 22: 110kg a menos, rotina de treino, triathlon e pôs COVID19](https://d3t3ozftmdmh3i.cloudfront.net/production/podcast_uploaded_episode400/13162321/13162321-1619464102880-ea4feb0b4f46c.jpg#center) > O [DevHealthy](https://anchor.fm/devhealthy/) é um podcast que busca compartilhar experiências e opiniões sobre assuntos que envolvam um estilo de vida saudável e a área de tecnologia, podendo assim quebrar a idéia de que ambos tópicos não podem caminhar juntos. O convidado da vez foi o [Thiago Avelino](https://github.com/avelino), engenheiro open-source e [triatleta](https://www.instagram.com/avelinorun/). Com uma incrível transformação de 110kg a menos, falamos sobre o mundo do triathlon e como ele planeja sua rotina entre treinos e trabalho, além de relatar como foi ficar internado por conta do COVID. --- # Living our dream should be our priority **URL**: https://avelino.run/quote/lifestyle/living-our-dream-should-be-our-priority/ **Published**: 2021-04-25 **Tags**: resignify, sonho, dream, businessman **Word Count**: 89 words What is your dream? What is your priority for the day? Getting out of the rat race is not an easy task, but how do we connect our busy daily lives with our dreams? Resignify our way of living (why we do what we do) and put our dream at the center of our life - as a commitment and not: do it if we have time. But doing what must be done, not only what you like to do. A good dream is a dream that is lived! ![Living our dream should be our priority - by @avelinorun](/quote/lifestyle-living-our-dream-should-be-our-priorit.jpg) --- # Caminhada - que fase pós covid **URL**: https://avelino.run/quote/lifestyle/caminhada-que-fase-pos-covid/ **Published**: 2021-04-09 **Tags**: resignify, covid, quarentena, fiqueemcasa, triathlon **Word Count**: 236 words Que fase é essa meus amigo(a)s! 🤷‍♂️ Depois de me recuperar da fase mais crítica do COVID 🦠 o médico 🥼 pediu para ficar sem praticar atividade física por 2 semanas e voltar com ritmo leve. Até aí OK 👌, mentalmente imaginei uma corridinha leve e um pedal sem colocar muita intensidade. Bah, sabe de nada inocente 🤦‍♂️ Qualquer esforço que faço meus BPMs vão lá em cima, para ter uma referência: em treino de pedal indoor sempre tive dificuldade de chegar na casa de 160bpm mesmo no meu limiar de 250w, no meu primeiro treino estava entre 180 - 200w e minha frequência cardíaca entre 160 - 170bpm 💔 Pois é, minha fase atual de treino é treinar a paciência e curtir minhas micros evoluções, com o propósito de melhorar meu limiar 1 (z1 e z2) usando gordura como fonte de energia e glicogênio muscular (z4), minha meta é conquistar meu aeróbio novamente para aí sim voltar colocar intensidade nos treinos. Meu sistema cardio pulmonar está muito debilitado, em paralelo aos treinos estou fazendo fisioterapia pulmonar para recuperar 100% a capacidade pulmonar 🫁 Antes de pegar essa doença invisível me sentia o a atleta super herói 🦸‍♂️, hoje sou o cagão com receio de pegar novamente. Se cuida, não queira pegar a tal "gripezinha" que tem deixado diversas vítimas, graças a Deus fui apenas uma vítima e não uma estatística no relatório de óbito 🙏 ![Caminhada - que fase pós covid - por @avelinorun](/quote/caminhada-que-fase-pos-covid.jpg#center) --- # Open Source Contributions - April 2021 **URL**: https://avelino.run/foss/2021/04/ **Published**: 2021-04-01 **Word Count**: 508 words **Summary**: April 2021 saw 14 repositories contribute 44 events, including 10 pull requests and 17 reviews, driving significant enhancements and community engagement. In April 2021, the collaborative efforts across 14 repositories resulted in 44 contributions, including 10 pull requests and 17 reviews. This timeline captures the impactful activities and progress made during the month, highlighting key events and community interactions. ## 2021-04-28 - 🐛 Opened issue in [dracula/spec](https://github.com/dracula/spec): [Dracula UI theme](https://github.com/dracula/spec/issues/9) ## 2021-04-27 - 🔀 Opened PR in [dracula/mailspring](https://github.com/dracula/mailspring): [minor color improvements](https://github.com/dracula/mailspring/pull/9) ## 2021-04-26 - 🔀 Opened PR in [gotuna/gotuna](https://github.com/gotuna/gotuna): [set syntax highlight on example](https://github.com/gotuna/gotuna/pull/5) - 🔀 Opened PR in [hmdsefi/gowl](https://github.com/hmdsefi/gowl): [fixed identation of the example code](https://github.com/hmdsefi/gowl/pull/17) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add rosedb](https://github.com/avelino/awesome-go/pull/3584#pullrequestreview-644537635) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add milvus](https://github.com/avelino/awesome-go/pull/3582#pullrequestreview-644534498) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added GoTuna](https://github.com/avelino/awesome-go/pull/3579#pullrequestreview-644528953) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Gowl to the Goroutines list](https://github.com/avelino/awesome-go/pull/3578#pullrequestreview-644526414) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added github.com/alexeyco/pig](https://github.com/avelino/awesome-go/pull/3576#pullrequestreview-644524655) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add larapulse/migrator to the Database migrators list](https://github.com/avelino/awesome-go/pull/3572#pullrequestreview-644522483) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added PingMe cli](https://github.com/avelino/awesome-go/pull/3571#pullrequestreview-644518773) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add a code analyse tool: Golds](https://github.com/avelino/awesome-go/pull/3564#pullrequestreview-644516701) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add godesim & gitaligned](https://github.com/avelino/awesome-go/pull/3553#pullrequestreview-644513592) (Changes requested) ## 2021-04-25 - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [create build actions](https://github.com/avelino/hugo-theme-sarah/pull/36) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [upgrade node packages](https://github.com/avelino/hugo-theme-sarah/pull/35) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-04-25](https://github.com/avelino/awesome-go/issues/3583) ## 2021-04-21 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [doc deployment chapter](https://github.com/prest/prest/pull/525) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [add table of contents on single page](https://github.com/prest/doc-template/pull/40) ## 2021-04-18 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-04-18](https://github.com/avelino/awesome-go/issues/3574) ## 2021-04-15 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add echotron telegram bot library](https://github.com/avelino/awesome-go/pull/3570#pullrequestreview-636848132) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add neon link](https://github.com/avelino/awesome-go/pull/3569#pullrequestreview-636846782) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3568#pullrequestreview-636844730) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added syncbit in devops section](https://github.com/avelino/awesome-go/pull/3560#pullrequestreview-636810586) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add movio/bramble](https://github.com/avelino/awesome-go/pull/3559#pullrequestreview-636808638) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add higgs](https://github.com/avelino/awesome-go/pull/3557#pullrequestreview-636805269) (Changes requested) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [heroku: add environment variables on the installation page](https://github.com/prest/prest/issues/523) ## 2021-04-11 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-04-11](https://github.com/avelino/awesome-go/issues/3565) - 🐛 Opened issue in [scarsu/NotionX](https://github.com/scarsu/NotionX): [Dracula theme support](https://github.com/scarsu/NotionX/issues/10) ## 2021-04-09 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Revert "fixed warnings on travisci config"](https://github.com/avelino/awesome-go/pull/3563) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fixed warnings on travisci config](https://github.com/avelino/awesome-go/pull/3562) - 💬 Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Embed assets and templates](https://github.com/editor-bootstrap/vim-bootstrap/pull/379#pullrequestreview-632485439) (Commented) ## 2021-04-07 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Take advantage of the new README features](https://github.com/avelino/awesome-go/pull/3558#pullrequestreview-629495629) (Changes requested) ## 2021-04-04 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-04-04](https://github.com/avelino/awesome-go/issues/3555) ## 2021-04-02 - 🔀 Opened PR in [arxdsilva/golang-ifood-sdk](https://github.com/arxdsilva/golang-ifood-sdk): [Fixed ident typo on event loop](https://github.com/arxdsilva/golang-ifood-sdk/pull/1) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 34 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [arxdsilva/golang-ifood-sdk](https://github.com/arxdsilva/golang-ifood-sdk): 1 commit(s) - [See commits](https://github.com/arxdsilva/golang-ifood-sdk/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 27 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [dracula/mailspring](https://github.com/dracula/mailspring): 2 commit(s) - [See commits](https://github.com/dracula/mailspring/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 6 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 12 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [gotuna/gotuna](https://github.com/gotuna/gotuna): 1 commit(s) - [See commits](https://github.com/gotuna/gotuna/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 3 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2021-04-01T00:00:00Z&until=2021-04-30T23:59:59Z) ## Private contributions - 🔒 19 private contribution(s) this month --- # Open Source Contributions - March 2021 **URL**: https://avelino.run/foss/2021/03/ **Published**: 2021-03-01 **Word Count**: 535 words **Summary**: March 2021 saw 10 repositories contribute 47 events, including 10 pull requests and 21 reviews, marking a month of significant collaboration and development. Explore the contributions made in March 2021, where 10 repositories engaged in a total of 47 events, including pushes, pull requests, and reviews. This timeline showcases the collaborative efforts and advancements made during the month, highlighting key developments and community involvement. ## 2021-03-30 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [initial version k8s install manifests](https://github.com/prest/prest/pull/519) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [change ssl postgres default value to require](https://github.com/prest/prest/pull/518) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Clear docker image](https://github.com/prest/prest/pull/516) - 🔀 Opened PR in [prest/prest-heroku](https://github.com/prest/prest-heroku): [remove docker CMD, used entrypoint](https://github.com/prest/prest-heroku/pull/1) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [emoji on topicos (titles)](https://github.com/avelino/awesome-go/issues/3550) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [entrypoint file does not support database_url](https://github.com/prest/prest/issues/517) ## 2021-03-29 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3540#pullrequestreview-623633920) (Changes requested) ## 2021-03-28 - 🔀 Opened PR in [nedbat/gefilte](https://github.com/nedbat/gefilte): [Set python code-block on readme example](https://github.com/nedbat/gefilte/pull/1) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-03-28](https://github.com/avelino/awesome-go/issues/3546) ## 2021-03-27 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add roumon](https://github.com/avelino/awesome-go/pull/3545#pullrequestreview-622644727) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add docker-go-mingw](https://github.com/avelino/awesome-go/pull/3542#pullrequestreview-622644471) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Kuiper to the Stream Processing](https://github.com/avelino/awesome-go/pull/3539#pullrequestreview-622644181) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add jfcg/yell: yet another minimalistic logging library](https://github.com/avelino/awesome-go/pull/3536#pullrequestreview-622644090) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [ipsw](https://github.com/avelino/awesome-go/pull/3535#pullrequestreview-622643923) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add bloomfilter](https://github.com/avelino/awesome-go/pull/3533#pullrequestreview-622643799) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [godal: sql to golang model](https://github.com/avelino/awesome-go/pull/3532#pullrequestreview-622643703) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding Debugged.it Go patterns](https://github.com/avelino/awesome-go/pull/3528#pullrequestreview-622643439) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Confetti Framework](https://github.com/avelino/awesome-go/pull/3526#pullrequestreview-622643144) (Approved) ## 2021-03-21 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-03-21](https://github.com/avelino/awesome-go/issues/3538) ## 2021-03-14 - 🔀 Opened PR in [moclojer/chrondb](https://github.com/moclojer/chrondb): [initial compress json](https://github.com/moclojer/chrondb/pull/1) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-03-14](https://github.com/avelino/awesome-go/issues/3529) ## 2021-03-09 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Use pkg/embed (golang 1.16 feature)](https://github.com/editor-bootstrap/vim-bootstrap/issues/375) ## 2021-03-08 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove github.com/mengzhuo/cookiestxt](https://github.com/avelino/awesome-go/pull/3525) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove github.com/tcolgate/mp3](https://github.com/avelino/awesome-go/pull/3524) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove github.com/krig/go-sox](https://github.com/avelino/awesome-go/pull/3523) - 🔀 Opened PR in [Comcast/gaad](https://github.com/Comcast/gaad): [travis ci run latest golang version](https://github.com/Comcast/gaad/pull/15) ## 2021-03-07 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-03-07](https://github.com/avelino/awesome-go/issues/3522) ## 2021-03-06 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add new testing package](https://github.com/avelino/awesome-go/pull/3521#pullrequestreview-605783472) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added new twitter bot - GobotTweet](https://github.com/avelino/awesome-go/pull/3518#pullrequestreview-605783259) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add presentx tool](https://github.com/avelino/awesome-go/pull/3513#pullrequestreview-605783076) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Pantani go packages](https://github.com/avelino/awesome-go/pull/3510#pullrequestreview-605782722) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rsocket-go](https://github.com/avelino/awesome-go/pull/3509#pullrequestreview-605782570) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Gio to list of Gui libaries](https://github.com/avelino/awesome-go/pull/3508#pullrequestreview-605772776) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added gofp in the functional list](https://github.com/avelino/awesome-go/pull/3507#pullrequestreview-605772425) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Ory Hydra](https://github.com/avelino/awesome-go/pull/3502#pullrequestreview-605771588) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gh-ost](https://github.com/avelino/awesome-go/pull/3501#pullrequestreview-605771060) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add eujoy/erbuilder](https://github.com/avelino/awesome-go/pull/3498#pullrequestreview-605770287) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding Tasks](https://github.com/avelino/awesome-go/pull/3497#pullrequestreview-605770148) (Changes requested) ## Commits - 🔨 Push to [nedbat/gefilte](https://github.com/nedbat/gefilte): 1 commit(s) - [See commits](https://github.com/nedbat/gefilte/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [Comcast/gaad](https://github.com/Comcast/gaad): 1 commit(s) - [See commits](https://github.com/Comcast/gaad/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 5 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [prest/prest-heroku](https://github.com/prest/prest-heroku): 10 commit(s) - [See commits](https://github.com/prest/prest-heroku/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 14 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 14 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2021-03-01T00:00:00Z&until=2021-03-31T23:59:59Z) ## Private contributions - 🔒 2 private contribution(s) this month --- # Open Source Contributions - February 2021 **URL**: https://avelino.run/foss/2021/02/ **Published**: 2021-02-01 **Word Count**: 555 words **Summary**: February 2021 saw 12 repositories contribute 47 events, including 7 pull requests, 14 issues, and 9 pushes, driving significant collaborative development. In February 2021, the collaborative efforts across 12 repositories led to a total of 47 contributions, including 7 new pull requests and 14 issues raised. This timeline highlights the impactful developments and discussions within the community, showcasing ongoing enhancements and member engagement. ## 2021-02-28 - 🔀 Opened PR in [rumlang/rum](https://github.com/rumlang/rum): [organization stdlib, split any files](https://github.com/rumlang/rum/pull/142) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [HTTP server on stdlib](https://github.com/rumlang/rum/issues/143) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-02-28](https://github.com/avelino/awesome-go/issues/3512) ## 2021-02-27 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [Renaming the default branch from master to main](https://github.com/rumlang/rum/issues/141) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [migrate travis-ci to github actions](https://github.com/rumlang/rum/issues/140) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [pow (**) returning different values depending on the operating system](https://github.com/rumlang/rum/issues/139) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [pow (**) array process](https://github.com/rumlang/rum/issues/138) ## 2021-02-26 - 🔀 Opened PR in [rumlang/rum](https://github.com/rumlang/rum): [import alias support](https://github.com/rumlang/rum/pull/136) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [import alias support](https://github.com/rumlang/rum/issues/137) ## 2021-02-24 - 🔀 Opened PR in [rumlang/vscode-rum](https://github.com/rumlang/vscode-rum): [initial rumlang to vscode](https://github.com/rumlang/vscode-rum/pull/1) ## 2021-02-22 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added gofp in the functional list](https://github.com/avelino/awesome-go/pull/3507#pullrequestreview-595453412) (Changes requested) ## 2021-02-21 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-02-21](https://github.com/avelino/awesome-go/issues/3499) ## 2021-02-19 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rebed](https://github.com/avelino/awesome-go/pull/3494#pullrequestreview-594117899) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add appstore-sdk-go](https://github.com/avelino/awesome-go/pull/3493#pullrequestreview-594117233) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add link to hare under Databases.](https://github.com/avelino/awesome-go/pull/3490#pullrequestreview-594113826) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added "slack-bot"](https://github.com/avelino/awesome-go/pull/3484#pullrequestreview-594112434) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add godesim](https://github.com/avelino/awesome-go/pull/3483#pullrequestreview-594110571) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add pcopy](https://github.com/avelino/awesome-go/pull/3482#pullrequestreview-594108209) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add go-zero (https://github.com/tal-tech/go-zero)](https://github.com/avelino/awesome-go/pull/3480#pullrequestreview-594107064) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add iouring-go](https://github.com/avelino/awesome-go/pull/3479#pullrequestreview-594105893) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add blocky to other software](https://github.com/avelino/awesome-go/pull/3476#pullrequestreview-594104264) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add olric](https://github.com/avelino/awesome-go/pull/3475#pullrequestreview-594103512) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add tcpdog](https://github.com/avelino/awesome-go/pull/3472#pullrequestreview-594051235) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added ticker to Financial](https://github.com/avelino/awesome-go/pull/3470#pullrequestreview-594049735) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add maja42/goval](https://github.com/avelino/awesome-go/pull/3466#pullrequestreview-594041202) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gonfig to configuration libs](https://github.com/avelino/awesome-go/pull/3465#pullrequestreview-594040326) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add nject/npoint dependency injection frameworks](https://github.com/avelino/awesome-go/pull/3463#pullrequestreview-594037180) (Approved) ## 2021-02-18 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Documentation (integration) how to use FDW (Foreign Data Wrappers) + pREST](https://github.com/prest/prest/issues/511) ## 2021-02-15 - 🐛 Opened issue in [addnab/docker-run-action](https://github.com/addnab/docker-run-action): [Error on mount volume workspace github](https://github.com/addnab/docker-run-action/issues/5) ## 2021-02-14 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-02-14](https://github.com/avelino/awesome-go/issues/3486) - 🐛 Opened issue in [addnab/docker-run-action](https://github.com/addnab/docker-run-action): [Mount volume main repository folder](https://github.com/addnab/docker-run-action/issues/4) - 🐛 Opened issue in [torokmark/assert.sh](https://github.com/torokmark/assert.sh): [array_contains support](https://github.com/torokmark/assert.sh/issues/8) ## 2021-02-13 - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [WIP: Test environment on github actions](https://github.com/avelino/aur/pull/14) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [wirte how to generate backup/recovery](https://github.com/avelino/aur/pull/13) ## 2021-02-12 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Writing how to test and develop env pREST](https://github.com/prest/prest/pull/509) ## 2021-02-10 - 🔀 Opened PR in [avelino/boilerpipe-clj](https://github.com/avelino/boilerpipe-clj): [Merge/get image by seymores](https://github.com/avelino/boilerpipe-clj/pull/1) ## 2021-02-07 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-02-07](https://github.com/avelino/awesome-go/issues/3477) ## 2021-02-04 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Basic instruction to see the project works](https://github.com/prest/prest/pull/501#pullrequestreview-582946936) (Changes requested) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 6 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 1 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [avelino/aur](https://github.com/avelino/aur): 7 commit(s) - [See commits](https://github.com/avelino/aur/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [rumlang/vscode-rum](https://github.com/rumlang/vscode-rum): 4 commit(s) - [See commits](https://github.com/rumlang/vscode-rum/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [rumlang/rum](https://github.com/rumlang/rum): 25 commit(s) - [See commits](https://github.com/rumlang/rum/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 4 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2021-02-01T00:00:00Z&until=2021-02-28T23:59:59Z) ## Private contributions - 🔒 8 private contribution(s) this month --- # Open Source Contributions - January 2021 **URL**: https://avelino.run/foss/2021/01/ **Published**: 2021-01-01 **Word Count**: 441 words **Summary**: January 2021 saw significant contributions across 9 repositories, with 36 total activities including 6 pull requests and 17 reviews, enhancing project collaboration. Explore the timeline of contributions made in January 2021, highlighting key activities across various repositories. This month marked a robust engagement with multiple pull requests, reviews, and issues, showcasing the collaborative spirit of the developers. ## 2021-01-31 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-01-31](https://github.com/avelino/awesome-go/issues/3464) ## 2021-01-28 - 🔀 Opened PR in [dracula/telegram](https://github.com/dracula/telegram): [DOC: Active Buddle Mode option to install theme](https://github.com/dracula/telegram/pull/22) - ✅ Reviewed PR in [dracula/telegram](https://github.com/dracula/telegram): [Fixing Media View Playback Theming](https://github.com/dracula/telegram/pull/18#pullrequestreview-578678139) (Approved) ## 2021-01-26 - 🔀 Opened PR in [avelino/dotfiles](https://github.com/avelino/dotfiles): [upgrade before install on new machine](https://github.com/avelino/dotfiles/pull/2) ## 2021-01-24 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update - 2021-01-24](https://github.com/avelino/awesome-go/issues/3459) ## 2021-01-19 - ✅ Reviewed PR in [funcool/buddy-auth](https://github.com/funcool/buddy-auth): [Tiny typo in content.adoc](https://github.com/funcool/buddy-auth/pull/90#pullrequestreview-571429821) (Approved) ## 2021-01-18 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [set date now on investigate issue title](https://github.com/avelino/awesome-go/pull/3455) ## 2021-01-17 - 🔀 Opened PR in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [prest: rename binary name prest to prestd](https://github.com/Homebrew/homebrew-core/pull/69238) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3453) ## 2021-01-14 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Fix support hyphen in dbname](https://github.com/prest/prest/pull/491) ## 2021-01-13 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-tarantool database driver](https://github.com/avelino/awesome-go/pull/3442#pullrequestreview-567255797) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go-clip repo](https://github.com/avelino/awesome-go/pull/3388#pullrequestreview-567253540) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add fastjson](https://github.com/avelino/awesome-go/pull/3446#pullrequestreview-567251996) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go-live](https://github.com/avelino/awesome-go/pull/3445#pullrequestreview-567250863) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add skipper http proxy](https://github.com/avelino/awesome-go/pull/3443#pullrequestreview-567247588) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add box-cli-maker](https://github.com/avelino/awesome-go/pull/3439#pullrequestreview-567240564) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add webp-server](https://github.com/avelino/awesome-go/pull/3430#pullrequestreview-567179944) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add cuelang to config section](https://github.com/avelino/awesome-go/pull/3422#pullrequestreview-567177254) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Playwright](https://github.com/avelino/awesome-go/pull/3419#pullrequestreview-567175894) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-email-validator](https://github.com/avelino/awesome-go/pull/3418#pullrequestreview-567174901) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add zkits logger library.](https://github.com/avelino/awesome-go/pull/3417#pullrequestreview-567174322) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add mockito to testing section](https://github.com/avelino/awesome-go/pull/3416#pullrequestreview-567173332) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add REST client and `database/sql` driver for Azure Cosmos DB](https://github.com/avelino/awesome-go/pull/3414#pullrequestreview-567171372) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add wajox/gobase](https://github.com/avelino/awesome-go/pull/3413#pullrequestreview-567170004) (Changes requested) ## 2021-01-10 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3438) ## 2021-01-03 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [make image size smaller](https://github.com/prest/prest/pull/490#pullrequestreview-560726646) (Changes requested) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3426) ## 2021-01-01 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Give better visibility on the standard queries page](https://github.com/prest/prest/pull/489) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 21 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 8 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 7 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) - 🔨 Push to [prest/prestd.com](https://github.com/prest/prestd.com): 2 commit(s) - [See commits](https://github.com/prest/prestd.com/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 2 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) - 🔨 Push to [dracula/telegram](https://github.com/dracula/telegram): 1 commit(s) - [See commits](https://github.com/dracula/telegram/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) - 🔨 Push to [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): 1 commit(s) - [See commits](https://github.com/Homebrew/homebrew-core/commits?author=avelino&since=2021-01-01T00:00:00Z&until=2021-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - December 2020 **URL**: https://avelino.run/foss/2020/12/ **Published**: 2020-12-01 **Word Count**: 308 words **Summary**: December 2020 saw significant contributions with 23 events across 3 repositories, including 5 pull requests and 5 issues, enhancing project features and addressing updates. Explore the timeline of significant contributions made in December 2020, which highlights the collaborative efforts across three key repositories. This month was marked by the opening of five pull requests and the creation of five issues, showcasing ongoing development and improvements in the projects. ## 2020-12-31 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Implementation tsquery filter](https://github.com/prest/prest/pull/487) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [PostgreSQL Full Text Search support](https://github.com/prest/prest/issues/486) ## 2020-12-27 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3415) ## 2020-12-21 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3392#pullrequestreview-556512284) (Changes requested) ## 2020-12-20 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3404) ## 2020-12-13 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3399) ## 2020-12-11 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [access ignore table configuration](https://github.com/prest/prest/pull/482) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Auth: grant access to the endpoint when in the whitelist](https://github.com/prest/prest/pull/481) ## 2020-12-10 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [chenage jwt whitelist from string to slice (array)](https://github.com/prest/prest/pull/479) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [not check match url allow](https://github.com/prest/prest/pull/478) ## 2020-12-06 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3390) ## 2020-12-04 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added go-proxy-cache as server application](https://github.com/avelino/awesome-go/pull/3383#pullrequestreview-545281787) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add https://github.com/oam-dev/kubevela](https://github.com/avelino/awesome-go/pull/3377#pullrequestreview-545189999) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add libgosay project](https://github.com/avelino/awesome-go/pull/3374#pullrequestreview-545187415) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add binary to Serialization](https://github.com/avelino/awesome-go/pull/3371#pullrequestreview-545173140) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gnomock to testing frameworks list](https://github.com/avelino/awesome-go/pull/3370#pullrequestreview-545171908) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add golang-templates/seed](https://github.com/avelino/awesome-go/pull/3369#pullrequestreview-545154228) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add todotxt in file handling section](https://github.com/avelino/awesome-go/pull/3368#pullrequestreview-545151839) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add netpalmgo](https://github.com/avelino/awesome-go/pull/3365#pullrequestreview-545147908) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add https://gitlab.com/pjrpc/pjrpc](https://github.com/avelino/awesome-go/pull/3384#pullrequestreview-545144098) (Approved) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 9 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-12-01T00:00:00Z&until=2020-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 2 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2020-12-01T00:00:00Z&until=2020-12-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2020-12-01T00:00:00Z&until=2020-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2020 **URL**: https://avelino.run/foss/2020/11/ **Published**: 2020-11-01 **Word Count**: 371 words **Summary**: November 2020 saw 31 contributions across 7 repositories, including 5 pull requests and 17 reviews, driving significant enhancements and community engagement. Explore the timeline of contributions made in November 2020, showcasing the collaborative efforts across various repositories. This month featured key activities, including pull requests, reviews, and issue tracking, highlighting the active engagement of developers in enhancing projects. ## 2020-11-30 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [use docker image golang alpine latest](https://github.com/editor-bootstrap/vim-bootstrap/pull/367) ## 2020-11-29 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3381) ## 2020-11-24 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [WIP:exts so load](https://github.com/prest/prest/pull/475) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [unify go module files](https://github.com/prest/prest/pull/474) ## 2020-11-23 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add cfmt](https://github.com/avelino/awesome-go/pull/3363#pullrequestreview-536862913) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add goctx](https://github.com/avelino/awesome-go/pull/3362#pullrequestreview-536861619) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added setcfg to the list of configuration libraries.](https://github.com/avelino/awesome-go/pull/3360#pullrequestreview-536860716) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [1. add tagfmt command tool](https://github.com/avelino/awesome-go/pull/3354#pullrequestreview-536859128) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add package slices](https://github.com/avelino/awesome-go/pull/3353#pullrequestreview-536858126) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add immudb](https://github.com/avelino/awesome-go/pull/3355#pullrequestreview-536857489) (Approved) ## 2020-11-22 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3375) ## 2020-11-20 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fixing plural](https://github.com/avelino/awesome-go/pull/3367#pullrequestreview-535180408) (Approved) ## 2020-11-16 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Remove golangci-lint reference (golangci.com out of service)](https://github.com/avelino/awesome-go/pull/3364#pullrequestreview-531297650) (Commented) ## 2020-11-15 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3361) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Auto generate bindata file](https://github.com/editor-bootstrap/vim-bootstrap/issues/363) ## 2020-11-09 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add immudb](https://github.com/avelino/awesome-go/pull/3093#pullrequestreview-526168370) (Commented) ## 2020-11-08 - 🔀 Opened PR in [elgohr/stop-and-go](https://github.com/elgohr/stop-and-go): [Functional example on readme](https://github.com/elgohr/stop-and-go/pull/2) - 🔀 Opened PR in [avelino/mapoteca](https://github.com/avelino/mapoteca): [Fixed dataase -> database word typo](https://github.com/avelino/mapoteca/pull/1) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add stop-and-go](https://github.com/avelino/awesome-go/pull/3351#pullrequestreview-525819355) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [readme: add ruleguard](https://github.com/avelino/awesome-go/pull/3350#pullrequestreview-525819128) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add MTProto](https://github.com/avelino/awesome-go/pull/3349#pullrequestreview-525818938) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add godash module for lodash in go version](https://github.com/avelino/awesome-go/pull/3348#pullrequestreview-525818675) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add tcod-go](https://github.com/avelino/awesome-go/pull/3346#pullrequestreview-525818396) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add pterm](https://github.com/avelino/awesome-go/pull/3345#pullrequestreview-525818196) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add GoHooks](https://github.com/avelino/awesome-go/pull/3342#pullrequestreview-525817900) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add panoptes-stream streaming network telemetry](https://github.com/avelino/awesome-go/pull/3340#pullrequestreview-525817650) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3352) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 3 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-11-01T00:00:00Z&until=2020-11-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2020-11-01T00:00:00Z&until=2020-11-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-11-01T00:00:00Z&until=2020-11-30T23:59:59Z) - 🔨 Push to [prest/prest-node](https://github.com/prest/prest-node): 1 commit(s) - [See commits](https://github.com/prest/prest-node/commits?author=avelino&since=2020-11-01T00:00:00Z&until=2020-11-30T23:59:59Z) ## Private contributions - 🔒 2 private contribution(s) this month --- # Open Source Contributions - October 2020 **URL**: https://avelino.run/foss/2020/10/ **Published**: 2020-10-01 **Word Count**: 842 words **Summary**: In October 2020, 10 repositories saw 13 pull requests, 47 reviews, and 10 issues, showcasing significant contributions and improvements across projects. October 2020 was a dynamic month for our repositories, with a total of 10 active projects making substantial contributions. The timeline below highlights key events, including 13 pull requests and 47 reviews, illustrating the collaborative efforts and continuous enhancements within the community. ## 2020-10-31 - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Basic AUTH with JWT](https://github.com/prest/prest/pull/451#pullrequestreview-521146632) (Commented) ## 2020-10-30 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add statsviz](https://github.com/avelino/awesome-go/pull/3291#pullrequestreview-520920684) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added go-countries](https://github.com/avelino/awesome-go/pull/3338#pullrequestreview-520918292) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add fastme library](https://github.com/avelino/awesome-go/pull/3337#pullrequestreview-520916864) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add survey to Command Line libs](https://github.com/avelino/awesome-go/pull/3336#pullrequestreview-520915959) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Pirsch](https://github.com/avelino/awesome-go/pull/3335#pullrequestreview-520914371) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Cloudflared](https://github.com/avelino/awesome-go/pull/3334#pullrequestreview-520913543) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add RanGo](https://github.com/avelino/awesome-go/pull/3333#pullrequestreview-520912828) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add go-hit](https://github.com/avelino/awesome-go/pull/3332#pullrequestreview-520911488) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Belfast Gophers meetup](https://github.com/avelino/awesome-go/pull/3330#pullrequestreview-520909144) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sparkpost library](https://github.com/avelino/awesome-go/pull/3329#pullrequestreview-520906347) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add zoekt to search engine section](https://github.com/avelino/awesome-go/pull/3326#pullrequestreview-520903851) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Vaku](https://github.com/avelino/awesome-go/pull/3325#pullrequestreview-520901716) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update dasel description and change category](https://github.com/avelino/awesome-go/pull/3324#pullrequestreview-520900605) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Removed broken Edge X Foundry style-guide link](https://github.com/avelino/awesome-go/pull/3323#pullrequestreview-520898841) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-aws-news](https://github.com/avelino/awesome-go/pull/3315#pullrequestreview-520897289) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/kristijorgji/goseeder as go dabase seeder](https://github.com/avelino/awesome-go/pull/3314#pullrequestreview-520896148) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add simple-jwt-provider (https://github.com/leberKleber/simple-jwt-provider)](https://github.com/avelino/awesome-go/pull/3311#pullrequestreview-520894661) (Changes requested) ## 2020-10-28 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fixed typo string on mock query on SQL SELECT](https://github.com/prest/prest/pull/464) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add http headers support to SQL script templates](https://github.com/prest/prest/pull/462#pullrequestreview-518396176) (Approved) ## 2020-10-27 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [remove docker login on travis](https://github.com/prest/prest/pull/463) ## 2020-10-26 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add yq](https://github.com/avelino/awesome-go/pull/3312#pullrequestreview-517064440) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [HTML changing](https://github.com/avelino/awesome-go/pull/3320#pullrequestreview-517063348) (Changes requested) - 🐛 Opened issue in [openshift/osin](https://github.com/openshift/osin): [the project active?](https://github.com/openshift/osin/issues/203) ## 2020-10-25 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3316) ## 2020-10-23 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add ctxlog on read me list](https://github.com/avelino/awesome-go/pull/3304#pullrequestreview-515985127) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Gatus](https://github.com/avelino/awesome-go/pull/3310#pullrequestreview-515962648) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sleet](https://github.com/avelino/awesome-go/pull/3306#pullrequestreview-515958860) (Changes requested) ## 2020-10-22 - 🐛 Opened issue in [Jguer/yay](https://github.com/Jguer/yay): [go: cannot find GOROOT directory: /usr/local/opt/go/libexec](https://github.com/Jguer/yay/issues/1395) ## 2020-10-18 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3303) ## 2020-10-16 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add woke](https://github.com/avelino/awesome-go/pull/3301#pullrequestreview-510821346) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add tik](https://github.com/avelino/awesome-go/pull/3298#pullrequestreview-510542024) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [📝 Add gosentiwordnet library](https://github.com/avelino/awesome-go/pull/3297#pullrequestreview-510540815) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add temporal.io](https://github.com/avelino/awesome-go/pull/3296#pullrequestreview-510539719) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add protoxy](https://github.com/avelino/awesome-go/pull/3294#pullrequestreview-510538185) (Changes requested) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [improve coverage](https://github.com/prest/prest/pull/403#pullrequestreview-510286667) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Remove vim-polyglot and references](https://github.com/editor-bootstrap/vim-bootstrap/pull/360#pullrequestreview-510287700) (Approved) ## 2020-10-15 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [boundary auth support](https://github.com/prest/prest/issues/459) - 🐛 Opened issue in [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): [error when running the test when the site is offline - travis](https://github.com/lerrua/remote-jobs-brazil/issues/222) ## 2020-10-14 - 🔀 Opened PR in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [create procfile to heroku](https://github.com/editor-bootstrap/emacs-bootstrap/pull/57) ## 2020-10-11 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate repositories with more than 1 year without update](https://github.com/avelino/awesome-go/issues/3295) ## 2020-10-09 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fixed github issue template multi labels](https://github.com/prest/prest/pull/454) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Update issue templates](https://github.com/prest/prest/pull/453) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Basic AUTH with JWT](https://github.com/prest/prest/pull/451) - 🔀 Opened PR in [iedr/goodfirstissues](https://github.com/iedr/goodfirstissues): [run gofmt on backend source](https://github.com/iedr/goodfirstissues/pull/15) - 🔀 Opened PR in [iedr/goodfirstissues](https://github.com/iedr/goodfirstissues): [add awesome-go project and 1 issue](https://github.com/iedr/goodfirstissues/pull/14) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fixed description typo on id3v2](https://github.com/avelino/awesome-go/pull/3288) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added govader](https://github.com/avelino/awesome-go/pull/3287#pullrequestreview-505630118) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add jzon](https://github.com/avelino/awesome-go/pull/3282#pullrequestreview-505627276) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [websocket table endpoint support](https://github.com/prest/prest/issues/452) ## 2020-10-05 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [set target shell on shell script files](https://github.com/prest/prest/pull/450) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Use distroless image in docker distribution](https://github.com/prest/prest/pull/448) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [set contributing guide, /!\ warnning balance expectations](https://github.com/avelino/awesome-go/pull/3276) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Ninedraft floatring](https://github.com/avelino/awesome-go/pull/3245#pullrequestreview-501892877) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Virtual Networking, SDN, Openflow](https://github.com/avelino/awesome-go/pull/3250#pullrequestreview-501891467) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add janiltonmaciel/statiks](https://github.com/avelino/awesome-go/pull/3252#pullrequestreview-501889124) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add bokwoon95/go-structured-query to SQL query builder](https://github.com/avelino/awesome-go/pull/3254#pullrequestreview-501888272) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Dasel.](https://github.com/avelino/awesome-go/pull/3259#pullrequestreview-501884234) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Lille Gophers to website list](https://github.com/avelino/awesome-go/pull/3262#pullrequestreview-501882639) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add GenjiDB](https://github.com/avelino/awesome-go/pull/3264#pullrequestreview-501882038) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go-env to configuration](https://github.com/avelino/awesome-go/pull/3266#pullrequestreview-501877928) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3268#pullrequestreview-501876244) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fix test stale repositories workflow](https://github.com/avelino/awesome-go/pull/3270#pullrequestreview-501851617) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add pkgtop to Other Software](https://github.com/avelino/awesome-go/pull/3272#pullrequestreview-501850758) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gowatch](https://github.com/avelino/awesome-go/pull/3274#pullrequestreview-501848126) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add curlie](https://github.com/avelino/awesome-go/pull/3275#pullrequestreview-501846521) (Changes requested) - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Use distroless image in docker distribution](https://github.com/prest/prest/pull/448#pullrequestreview-502222459) (Commented) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Tips depend on target shell and yours is unknown on shell script files](https://github.com/prest/prest/issues/449) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Use distroless image in docker distribution](https://github.com/prest/prest/issues/447) ## 2020-10-02 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [set alpine latest version](https://github.com/prest/prest/pull/445) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 31 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-10-01T00:00:00Z&until=2020-10-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/emacs-bootstrap/commits?author=avelino&since=2020-10-01T00:00:00Z&until=2020-10-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2020-10-01T00:00:00Z&until=2020-10-31T23:59:59Z) - 🔨 Push to [prest/prest-node](https://github.com/prest/prest-node): 1 commit(s) - [See commits](https://github.com/prest/prest-node/commits?author=avelino&since=2020-10-01T00:00:00Z&until=2020-10-31T23:59:59Z) - 🔨 Push to [avelino/aur](https://github.com/avelino/aur): 1 commit(s) - [See commits](https://github.com/avelino/aur/commits?author=avelino&since=2020-10-01T00:00:00Z&until=2020-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2020 **URL**: https://avelino.run/foss/2020/09/ **Published**: 2020-09-01 **Word Count**: 488 words **Summary**: September 2020 saw 12 repositories contribute to 42 total events, including 6 new pull requests and 14 reviews, driving significant community engagement. Explore the timeline of contributions from September 2020, highlighting key activities across 12 repositories. This month featured 42 events, including 6 pull requests, 14 reviews, and 12 issues, showcasing the vibrant collaboration and development efforts within the community. ## 2020-09-30 - ✅ Reviewed PR in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [Add dumb-jump](https://github.com/editor-bootstrap/emacs-bootstrap/pull/56#pullrequestreview-499832875) (Approved) - ✅ Reviewed PR in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [Update Go template to use lsp-mode instead go-mode](https://github.com/editor-bootstrap/emacs-bootstrap/pull/55#pullrequestreview-499832571) (Approved) ## 2020-09-28 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [(SCC-compile) Error compiling](https://github.com/prest/prest/issues/444) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [(CRT-P0001) `append`s can be clubbed into a single call](https://github.com/prest/prest/issues/443) ## 2020-09-18 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Use COPY instead of ADD for files and folders ](https://github.com/prest/prest/pull/437#pullrequestreview-491502784) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Remove function HandleHook and references because is deprecated.](https://github.com/editor-bootstrap/vim-bootstrap/pull/350#pullrequestreview-491075985) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add function for serve favicon](https://github.com/editor-bootstrap/vim-bootstrap/pull/352#pullrequestreview-491075677) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Endpoint to execute custom query](https://github.com/prest/prest/issues/439) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Migrate TravisCI to Gihub Actions](https://github.com/prest/prest/issues/438) ## 2020-09-16 - 🔀 Opened PR in [dracula/emacs](https://github.com/dracula/emacs): [set powerline active and inactive dracula colors](https://github.com/dracula/emacs/pull/72) - 🐛 Opened issue in [uhub/awesome-go](https://github.com/uhub/awesome-go): [awesome-go repository merge](https://github.com/uhub/awesome-go/issues/46) ## 2020-09-14 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [list endpoint /show on docs](https://github.com/prest/prest/pull/434) ## 2020-09-13 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [set docker registry path](https://github.com/prest/prest/pull/432) - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Windows: could not parse script ... incomplete or empty template](https://github.com/prest/prest/pull/405#pullrequestreview-487345353) (Changes requested) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Use COPY instead of ADD for files and folders](https://github.com/prest/prest/issues/433) ## 2020-09-12 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Use only an allowed registry in the FROM image](https://github.com/prest/prest/issues/431) ## 2020-09-11 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add qeubar/usrconfig](https://github.com/avelino/awesome-go/pull/3229#pullrequestreview-486953923) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/pioz/faker package](https://github.com/avelino/awesome-go/pull/3235#pullrequestreview-486949862) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add otpgo library](https://github.com/avelino/awesome-go/pull/3236#pullrequestreview-486949057) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add pg_timetable to Database tools](https://github.com/avelino/awesome-go/pull/3239#pullrequestreview-486946987) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add hbollon/go-edlib library link](https://github.com/avelino/awesome-go/pull/3242#pullrequestreview-486945902) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Dalga to Jobs Schedulers section](https://github.com/avelino/awesome-go/pull/3244#pullrequestreview-486944797) (Changes requested) ## 2020-09-08 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [move docker login to releaser script](https://github.com/prest/prest/pull/415) - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [implemented endpoint to table description (/show/...)](https://github.com/prest/prest/pull/414#pullrequestreview-484407546) (Changes requested) ## 2020-09-06 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Organize issue template](https://github.com/prest/prest/pull/413) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [neovim Python lib not option ](https://github.com/editor-bootstrap/vim-bootstrap/issues/343) ## 2020-09-05 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Webhook event engine (trigger)](https://github.com/prest/prest/issues/411) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [docker file not build](https://github.com/editor-bootstrap/vim-bootstrap/issues/341) ## 2020-09-04 - 🔀 Opened PR in [github/explore](https://github.com/github/explore): [Add vim-bootstrap project](https://github.com/github/explore/pull/1733) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [table structure endpoint: /show/...](https://github.com/prest/prest/issues/410) ## 2020-09-03 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [WIP: test stale repositories](https://github.com/avelino/awesome-go/pull/3210#pullrequestreview-481615307) (Commented) ## 2020-09-01 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Uncontrolled data used in path expression](https://github.com/prest/prest/issues/407) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 10 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): 4 commit(s) - [See commits](https://github.com/editor-bootstrap/emacs-bootstrap/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 1 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [prest/prest-heroku](https://github.com/prest/prest-heroku): 1 commit(s) - [See commits](https://github.com/prest/prest-heroku/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [prest/prest.admin.archived](https://github.com/prest/prest.admin.archived): 1 commit(s) - [See commits](https://github.com/prest/prest.admin.archived/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [dracula/emacs](https://github.com/dracula/emacs): 1 commit(s) - [See commits](https://github.com/dracula/emacs/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 3 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 23 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2020-09-01T00:00:00Z&until=2020-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Kubicast - Episódio 45: Arquitetura de Software, existe algo além dos microsserviços? **URL**: https://avelino.run/kubicast-epis%C3%B3dio-45-arquitetura-de-software-existe-algo-al%C3%A9m-dos-microsservi%C3%A7os/ **Published**: 2020-08-27 **Tags**: podcast, getup-podcast, kubicast, microservice, arquitetura **Word Count**: 19 words Escute minha participação no [Kubicast](https://blog.getupcloud.com/kubicast-45-8f2e0a04ae25) junto com [Felipe Oliveira](https://www.linkedin.com/in/felipewebcloud/) falando sobre Arquitetura de Micros Serviços em comparação com Monolito: {{< podcast "https://www.buzzsprout.com/184652/5171518-45-batalha-de-microsservicos?iframe=true" >}} --- # Open Source Contributions - August 2020 **URL**: https://avelino.run/foss/2020/08/ **Published**: 2020-08-01 **Word Count**: 1122 words **Summary**: August 2020 saw 17 repositories contribute 108 total activities, including 22 PRs and 56 reviews, showcasing robust community engagement and collaboration. Explore the significant contributions made in August 2020 across various repositories. This timeline highlights the active participation in pull requests, reviews, and code pushes, reflecting a vibrant community dedicated to collaboration and improvement. ## 2020-08-31 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [fixed netlify build in PR](https://github.com/prest/prest/pull/406) - 🐛 Opened issue in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [awesome made by brazilians site](https://github.com/felipefialho/awesome-made-by-brazilians/issues/107) ## 2020-08-30 - ✅ Reviewed PR in [prest/prestd.com](https://github.com/prest/prestd.com): [rename queues to queries](https://github.com/prest/prestd.com/pull/2#pullrequestreview-478222221) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [platform.sh one-click deploy](https://github.com/prest/prest/issues/404) - 🐛 Opened issue in [platformsh/template-builder](https://github.com/platformsh/template-builder): [pREST support](https://github.com/platformsh/template-builder/issues/315) ## 2020-08-28 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-license](https://github.com/avelino/awesome-go/pull/3224#pullrequestreview-478007528) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added Go SDK for LoginRadius CIAM](https://github.com/avelino/awesome-go/pull/3221#pullrequestreview-478006919) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add bojanz/currency.](https://github.com/avelino/awesome-go/pull/3219#pullrequestreview-478005546) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add covergates - Self-hosted code coverage report review and management service](https://github.com/avelino/awesome-go/pull/3218#pullrequestreview-478005228) (Changes requested) ## 2020-08-24 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [WIP: test stale repositories](https://github.com/avelino/awesome-go/pull/3210#pullrequestreview-473536028) (Commented) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add goterator](https://github.com/avelino/awesome-go/pull/3212#pullrequestreview-473529369) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/komuw/ote](https://github.com/avelino/awesome-go/pull/3213#pullrequestreview-473528122) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added resource for top Golang courses and tutorials](https://github.com/avelino/awesome-go/pull/3214#pullrequestreview-473524717) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [JSON : add github.com/cocoonspace/dynjson](https://github.com/avelino/awesome-go/pull/3215#pullrequestreview-473517902) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update marlow reference](https://github.com/avelino/awesome-go/pull/3216#pullrequestreview-473517084) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-gpt3](https://github.com/avelino/awesome-go/pull/3217#pullrequestreview-473515840) (Changes requested) - 🔍 Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Added Delphi session](https://github.com/felipefialho/awesome-made-by-brazilians/pull/62#pullrequestreview-473513439) (Changes requested) ## 2020-08-22 - 🔀 Opened PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [One repository per PR/contribution](https://github.com/felipefialho/awesome-made-by-brazilians/pull/38) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Added go-dockerclient](https://github.com/felipefialho/awesome-made-by-brazilians/pull/46#pullrequestreview-472962120) (Approved) - 💬 Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Change the presentation format](https://github.com/felipefialho/awesome-made-by-brazilians/pull/44#pullrequestreview-472940934) (Commented) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Added dynaconf project](https://github.com/felipefialho/awesome-made-by-brazilians/pull/43#pullrequestreview-472933534) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Add pgModeler](https://github.com/felipefialho/awesome-made-by-brazilians/pull/40#pullrequestreview-472926153) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Fix hidden stars on Go section](https://github.com/felipefialho/awesome-made-by-brazilians/pull/39#pullrequestreview-472925991) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [add game datasets](https://github.com/felipefialho/awesome-made-by-brazilians/pull/29#pullrequestreview-472925773) (Approved) - 🔍 Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Update license shield icon sending to nonexistent file](https://github.com/felipefialho/awesome-made-by-brazilians/pull/37#pullrequestreview-472917369) (Changes requested) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [fix lowercase anchor to elixir and lua](https://github.com/felipefialho/awesome-made-by-brazilians/pull/36#pullrequestreview-472917325) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Add Elixir and Lua as programming languages created by Brazilians](https://github.com/felipefialho/awesome-made-by-brazilians/pull/35#pullrequestreview-472917239) (Approved) - 🔍 Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Adding egua, a brazilian programing language in portuguese](https://github.com/felipefialho/awesome-made-by-brazilians/pull/32#pullrequestreview-472917194) (Changes requested) - 🔍 Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Add C# section and some other links](https://github.com/felipefialho/awesome-made-by-brazilians/pull/30#pullrequestreview-472916876) (Changes requested) - 🔍 Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Add Siler to PHP section](https://github.com/felipefialho/awesome-made-by-brazilians/pull/27#pullrequestreview-472916737) (Changes requested) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Add Brasilino](https://github.com/felipefialho/awesome-made-by-brazilians/pull/28#pullrequestreview-472916698) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Adicionando alguns recursos pra secão flutter](https://github.com/felipefialho/awesome-made-by-brazilians/pull/26#pullrequestreview-472916589) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [add Unform by Rocketseat](https://github.com/felipefialho/awesome-made-by-brazilians/pull/31#pullrequestreview-472916517) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Include GoCity and Corcel](https://github.com/felipefialho/awesome-made-by-brazilians/pull/24#pullrequestreview-472905430) (Approved) - ✅ Reviewed PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [Added Awesome Brazilian DevBlogs](https://github.com/felipefialho/awesome-made-by-brazilians/pull/25#pullrequestreview-472905305) (Approved) ## 2020-08-21 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [incorporate documentation as part of the main project](https://github.com/prest/prest/pull/402) - 🔀 Opened PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [add goreleaser](https://github.com/felipefialho/awesome-made-by-brazilians/pull/23) - 🔀 Opened PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [add remote-jobs-brazil](https://github.com/felipefialho/awesome-made-by-brazilians/pull/14) - 🔀 Opened PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [add vim-bootstrap](https://github.com/felipefialho/awesome-made-by-brazilians/pull/12) - 🔀 Opened PR in [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): [add pREST](https://github.com/felipefialho/awesome-made-by-brazilians/pull/11) - 🔀 Opened PR in [avelino/awesome-made-by-brazilians](https://github.com/avelino/awesome-made-by-brazilians): [add goreleaser](https://github.com/avelino/awesome-made-by-brazilians/pull/3) - 🔀 Opened PR in [avelino/awesome-made-by-brazilians](https://github.com/avelino/awesome-made-by-brazilians): [sync](https://github.com/avelino/awesome-made-by-brazilians/pull/2) - 🔀 Opened PR in [avelino/awesome-made-by-brazilians](https://github.com/avelino/awesome-made-by-brazilians): [add pREST](https://github.com/avelino/awesome-made-by-brazilians/pull/1) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [installment doc page](https://github.com/prest/doc-template/pull/39) ## 2020-08-20 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [new logo](https://github.com/prest/doc-template/pull/38) - 🐛 Opened issue in [avelino/avelino](https://github.com/avelino/avelino): [github sponsor icon](https://github.com/avelino/avelino/issues/1) ## 2020-08-18 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [dracula theme by default](https://github.com/editor-bootstrap/vim-bootstrap/issues/337) ## 2020-08-17 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [add tcp port wait on docker entrypoint](https://github.com/prest/prest/pull/400) - 🔀 Opened PR in [hoppscotch/hopp-cli](https://github.com/hoppscotch/hopp-cli): [readme: change name postwoman to hoppscotch](https://github.com/hoppscotch/hopp-cli/pull/14) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [create docker compose file](https://github.com/prest/prest/issues/399) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Generate docker image using goreleaser](https://github.com/prest/prest/issues/398) - 🐛 Opened issue in [hoppscotch/hopp-cli](https://github.com/hoppscotch/hopp-cli): [pwcli to hscli?](https://github.com/hoppscotch/hopp-cli/issues/15) ## 2020-08-15 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [goreleaser: Current docker image broken](https://github.com/prest/prest/pull/396) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [DigitalOcean Marketplace click install](https://github.com/prest/prest/issues/392) ## 2020-08-14 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [docker by goreleaser](https://github.com/prest/prest/pull/390) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [docker auto build by goreleaser](https://github.com/prest/prest/issues/389) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Integration: TimescaleDB for Time-Series Data](https://github.com/prest/prest/issues/388) ## 2020-08-13 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add scany to utilities section](https://github.com/avelino/awesome-go/pull/3179#pullrequestreview-466646053) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Themis crypto library to Security](https://github.com/avelino/awesome-go/pull/3208#pullrequestreview-466645576) (Approved) - ✅ Reviewed PR in [dracula/mailspring](https://github.com/dracula/mailspring): [Replace missing bracket in index.less](https://github.com/dracula/mailspring/pull/5#pullrequestreview-466646262) (Approved) ## 2020-08-12 - 🔀 Opened PR in [noverde/pequi](https://github.com/noverde/pequi): [reduce docker layers using 1 RUN](https://github.com/noverde/pequi/pull/8) - 🔀 Opened PR in [noverde/pequi](https://github.com/noverde/pequi): [document how to run the project (aka readme)](https://github.com/noverde/pequi/pull/7) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update SFTPGo description](https://github.com/avelino/awesome-go/pull/3209#pullrequestreview-465975186) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add "Better Go Playground" service](https://github.com/avelino/awesome-go/pull/3199#pullrequestreview-465956774) (Approved) - 🐛 Opened issue in [noverde/pequi](https://github.com/noverde/pequi): [catalog history of test coverage](https://github.com/noverde/pequi/issues/11) - 🐛 Opened issue in [noverde/pequi](https://github.com/noverde/pequi): [CI to run the automated tests](https://github.com/noverde/pequi/issues/10) - 🐛 Opened issue in [noverde/pequi](https://github.com/noverde/pequi): [unittests](https://github.com/noverde/pequi/issues/9) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Investigate if the package (repository) has not had a commit in over a year](https://github.com/avelino/awesome-go/issues/3211) ## 2020-08-11 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Change vim church link](https://github.com/editor-bootstrap/vim-bootstrap/pull/336#pullrequestreview-465388596) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add tag to vim-ruby-refactoring in ruby.bundle template](https://github.com/editor-bootstrap/vim-bootstrap/pull/335#pullrequestreview-465388236) (Approved) ## 2020-08-10 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/3207#pullrequestreview-464449316) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add neilotoole/errgroup to Goroutines section](https://github.com/avelino/awesome-go/pull/3202#pullrequestreview-464263968) (Changes requested) ## 2020-08-07 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add kanka](https://github.com/avelino/awesome-go/pull/3201#pullrequestreview-463585759) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add html-to-markdown](https://github.com/avelino/awesome-go/pull/3200#pullrequestreview-463584923) (Changes requested) ## 2020-08-05 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [Create LICENSE](https://github.com/prest/doc-template/pull/37) - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [Update incorrect table name attribute](https://github.com/prest/doc-template/pull/33#pullrequestreview-461954901) (Approved) - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [Added PREST_PG_DATABASE var and network param](https://github.com/prest/doc-template/pull/36#pullrequestreview-461954296) (Approved) ## 2020-08-04 - 🔀 Opened PR in [orbit-love/orbit-model](https://github.com/orbit-love/orbit-model): [fixed minimal typo on link Orbit levels](https://github.com/orbit-love/orbit-model/pull/31) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add goimports-reviser](https://github.com/avelino/awesome-go/pull/3195#pullrequestreview-460666394) (Changes requested) ## 2020-08-03 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [add support go 1.1[3-4] on travis build](https://github.com/prest/prest/pull/384) - 🔀 Opened PR in [kak-tus/nan](https://github.com/kak-tus/nan): [warning: package comment should be of the form: Package nan](https://github.com/kak-tus/nan/pull/4) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gosd](https://github.com/avelino/awesome-go/pull/3190#pullrequestreview-459908464) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Coveralls switch](https://github.com/prest/prest/pull/382#pullrequestreview-459904397) (Approved) ## 2020-08-02 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add cristalhq/aconfig](https://github.com/avelino/awesome-go/pull/3184#pullrequestreview-459676720) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add cristalhq/jwt](https://github.com/avelino/awesome-go/pull/3185#pullrequestreview-459676686) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add nan.](https://github.com/avelino/awesome-go/pull/3192#pullrequestreview-459671597) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add SDNS - A DNS Resolver Server](https://github.com/avelino/awesome-go/pull/3189#pullrequestreview-459670942) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add go-quartz](https://github.com/avelino/awesome-go/pull/3188#pullrequestreview-459670796) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add https://github.com/godror/godror in Relational Databases](https://github.com/avelino/awesome-go/pull/3187#pullrequestreview-459670658) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update main location and description of ttlcache](https://github.com/avelino/awesome-go/pull/3186#pullrequestreview-459670377) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add kemba](https://github.com/avelino/awesome-go/pull/3183#pullrequestreview-459669983) (Approved) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Skeleton](https://github.com/avelino/awesome-go/pull/3182#pullrequestreview-459669897) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Gebug](https://github.com/avelino/awesome-go/pull/3180#pullrequestreview-459669614) (Changes requested) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 10 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [hoppscotch/hopp-cli](https://github.com/hoppscotch/hopp-cli): 1 commit(s) - [See commits](https://github.com/hoppscotch/hopp-cli/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 2 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [kak-tus/nan](https://github.com/kak-tus/nan): 1 commit(s) - [See commits](https://github.com/kak-tus/nan/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [dracula/mailspring](https://github.com/dracula/mailspring): 1 commit(s) - [See commits](https://github.com/dracula/mailspring/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [prest/prestd.com](https://github.com/prest/prestd.com): 5 commit(s) - [See commits](https://github.com/prest/prestd.com/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 7 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [prest/prest-heroku](https://github.com/prest/prest-heroku): 16 commit(s) - [See commits](https://github.com/prest/prest-heroku/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 3 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [noverde/pequi](https://github.com/noverde/pequi): 3 commit(s) - [See commits](https://github.com/noverde/pequi/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [orbit-love/orbit-model](https://github.com/orbit-love/orbit-model): 4 commit(s) - [See commits](https://github.com/orbit-love/orbit-model/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 78 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [felipefialho/awesome-made-by-brazilians](https://github.com/felipefialho/awesome-made-by-brazilians): 7 commit(s) - [See commits](https://github.com/felipefialho/awesome-made-by-brazilians/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 11 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2020-08-01T00:00:00Z&until=2020-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # 3 passos importantes para cumprir nosso objetivo e metas **URL**: https://avelino.run/quote/3-passos-importantes-para-cumprir-nosso-objetivo-e-metas/ **Published**: 2020-07-31 **Tags**: instagram, anti fragil, disciplina, performance, metas, objetivo **Word Count**: 234 words [![3 passos importantes para cumprir nosso objetivo e metas](/quote/3-passos-importantes-para-cumprir-nosso-objetivo-e-metas.png)](https://www.instagram.com/p/CDUfuJGh--j/) Durante essa semana falamos muito sobre objetivo, metas e planejamento, mas como faço para cumprir meus objetivos e metas? 1. Planejamento: Após estabelecer objetivo e metas, é organizá-los. Crie planilhas e documentos com o que precisa ser concluído, quais os prazos e as prioridades. Assim tenho ciência do que é necessário ser desenvolvido e quais pessoas preciso envolver (no meu caso profissionais do esporte) para a concretização do que foi planejado inicialmente; 1. Disciplina (dedicação): Motivação nos faz começar, disciplina é o que nos levará para próxima meta. Tenha em mente o que é necessário para alcançar seu objetivo e motive-se para cumprir cada meta. Sem dedicação, persistência e resiliência (ser antifrágil, aprender com os erros e acertos), podemos nos perder no meio do caminho, mas busque não desistir no meio do caminho. O planejamento pode (e irá) falar, mas com disciplina chegamos lá; 1. Objeto claro (e metas): Quando temos claro o que estamos fazendo e porque estamos fazendo, alcançar a próxima meta rumo ao objetivo fica muito mais fácil por conseguir contar com nossa motivação, mas tenha certeza que não é todos os dias que irá acordar motivado. O mais importante é ter compromisso connosco, se disse para mim que iria fazer, por que não vou fazer? Principalmente em objetivo pessoal esqueça as pessoas e olhe para você. Como você faz para se manter focado até alcançar seu objeto e metas? ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CDUfuJGh--j/) --- # Usando 5W2H para planejar objetivo (e metas) **URL**: https://avelino.run/quote/usando-5w2h-para-planejar-objetivo-e-metas/ **Published**: 2020-07-29 **Tags**: instagram, planejamento, objetivo, meta, performance, alta performance **Word Count**: 204 words [![Usando 5W2H para planejar objetivo (e metas)](/quote/usando-5w2h-para-planejar-objetivo-e-metas.png)](https://www.instagram.com/p/CDOvqNZhBru/) **5W2H**? sigla que diz respeito a um apanhado de diretrizes, que vão auxiliar e deixar claro tudo o que precisa ser desenvolvido para que uma meta seja atingida passo a passo. **5W:** - What (o que será feito?) - definir o que será realizado ao longo do processo para que a meta seja devidamente concluída; - Why (por que será feito?) - as razões porque as metas devem ser cumpridas uma a uma; - Where (onde será feito?) - empregar ações imediatas para o objetivo (e metas) seja alcançado; - When (quando?) - estabelecer um cronograma, com os prazos para a entrega de cada uma das demandas e atividades; - Who (por quem será feito?) - nomear as pessoas, ou seja, quem ira colocar a mão na massa e fazer o passo a passo para que tudo saia do papel e tome forma. **2H:** - How (como será feito?) - determinar como cada passo do processo será colocado em prática por seus responsáveis; - How much (quanto vai custar?) - quais serão os custos de cada ação que envolve o objetivo (e as metas). Assim consigo ter objetivo e metas claras e não irei me perder ao longo do caminho⁉️ > Como você planejar seu objetivo e metas❓ ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CDOvqNZhBru/) --- # Você tem consciência alimentar? **URL**: https://avelino.run/quote/voce-tem-consciencia-alimentar/ **Published**: 2020-07-28 **Tags**: instagram, alimentação consciente, alta performance **Word Count**: 138 words [![Você tem consciência alimentar?](/quote/voce-tem-consciencia-alimentar.png)](https://www.instagram.com/p/CDMPNvxByWZ/) Comer bem é algo mais simples do que pensamos e não tem relacionamento com custo, frutas e verduras são caras ou o que colocamos ao redor dela é caro? O ato de cozinhar e comer algo feito em casa tem um impacto positivo considerável na sua alimentação, principalmente porque é mais fácil evitar produtos industrializados e que fazem muito mal. Tudo o que você come influência diretamente o funcionamento do seu organismo, estude qual o comportamento do alimento dentro do seu organismo, isso lhe trará consciência alimentar. Portanto, inclua "bastante" (alinhe com sua nutricionista a quantidade) frutas e vegetais em seu cardápio e dê preferência a pratos nutritivos e coloridos. Mas caso queira comer alguma coisa _"não saudável"_ **tudo bem**, desde que você esteja consciente na sua escolha e entendendo o que esta ingerindo! ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CDMPNvxByWZ/) --- # Por que devemos ter objetivo e metas? **URL**: https://avelino.run/quote/por-que-devemos-ter-objetivo-e-metas/ **Published**: 2020-07-27 **Tags**: instagram, metas, objetivo, alta performance, performance **Word Count**: 289 words [![Por que devemos ter objetivo e metas?](/quote/por-que-devemos-ter-objetivo-e-metas.png)](https://www.instagram.com/p/CDJlxo9hmPY/) 🎯 Objetivo e metas nos ajuda a sair da cama para alcança-los (realizar os feitos necessários para vê-lo concretizado), motivação nos ajuda começar e compromisso conosco mesmo (disciplina) nos faz continuar. Objetivo sem metas e ação é apenas sonho, quando temos metas claras (entendemos de fato porque estamos fazendo) encaramos com responsabilidade nosso objetivo (tendo compromisso connosco mesmo), se falei para mim que iria fazer por que não iriei fazer? Ao colocarmos como meta não beber refrigerante e bebermos, quer dizer que fomos fracos, se não somos capazes de ganhar de um simples refrigerante, você acha que irá ganhar de quem? Busco ter consciência em tudo que faço, por exemplo: quando vou comer alguma "coisa" busco entender o que aquele alimento irá me trazer de nutrientes e, porque preciso dele. Quando a resposta é "eu mereço" porque fiz tal coisa, porque estou triste ou qualquer coisa nessa direção, minha resposta para mim mesmo é "eu não mereço nada, ainda não cheguei no meu objetivo, quando chegar lá penso se realmente mereço", até chegar lá pode ter certeza que já esqueci, esse é um hack mental que uso constantemente. É por meio da concretização de metas e objetivo que conseguimos experimentar, verdadeiramente, o gosto e a sensação da felicidade em nossa jornada evolutiva. É fundamental que tenhamos clareza do que queremos alcançar ao longo da vida e de que maneira vamos fazer para atingir as metas e objetivo que traçarmos rumo ao nosso próprio sonho, uma vez que esta missão cabe somente a nós mesmos e a mais ninguém. Você tem clareza do seu objetivo ou esta seguindo no "deixa a vida me levar"❓Não faça isso com você mesmo, dite as regras de sua vida ⁉️ ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CDJlxo9hmPY/) --- # Diferença entre metas e objetivo? **URL**: https://avelino.run/quote/diferenca-entre-metas-e-objetivo/ **Published**: 2020-07-24 **Tags**: instagram, high proformance, objetivo, metas, qual a diferença de objetivo e metas, qual a diferença, performance **Word Count**: 213 words [![Diferença entre metas e objetivo?](/quote/objetivo-meta.png)](https://www.instagram.com/p/CDB8mwGhzsp/) Para mim um objetivo é composto por diversas metas Acredito que todos tem anseios, vontades e propósitos, por isso, cria objetivo e metas (ou pelo menos tentamos). Porém, algumas pessoas acabam confundindo esses dois termos e, com isso, podem ter problemas em defini-los, principalmente na hora de criar um planejamento para alcançar as metas e objetivos pessoal/profissional. Objetivo? Dar descrição concreta de onde queremos chegar, ou o que estamos tentando alcançar (direção), ou seja, o propósito. O objetivo é estratégico e abrangente. Metas? Andando em direção ao objetivo, as metas são tarefas específicas para alcançá-lo, sendo que elas são temporais, ou seja, têm prazo específico para acontecer. Por exemplo, se o seu objetivo é fazer IRONMAN 70.3 de São Paulo em 2021, suas metas serão traçar caminhos que te levarão ao objetivo, ou seja, você deve quebrar o objetivo em diversas metas: - Treinar X horas por dia/semana; - Dar feedback diariamente sobre percepção do treino para o coach; - Seguir a dieta diariamente com um total X calorias por semana; - Participar dos treinos presenciais aos sábados junto com a assessoria esportiva; - Fazer prova X, Y e Z; - e assim sucessivamente... Objetivo deve ser único e as metas é o que nos levará até o objetivo. Objetivo sem meta é sonho 🧠 ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CDB8mwGhzsp/) --- # Tenha Objetivo Inteligente **URL**: https://avelino.run/quote/tenha-objetivo-inteligente/ **Published**: 2020-07-23 **Tags**: instagram, high proformance, objetivo, objetivo inteligente, objetivo smart, performance **Word Count**: 283 words [![Tenha Objetivo Inteligente](/quote/objetivo-smart.png)](https://www.instagram.com/p/CC_U92XBeMD/) Tenho falado constantemente em ter objetivo claro, mas por minha ignorância nunca perguntei se você tem objetivo❓ Tudo bem caso você não tenha objetivo⁉️ Tente extrair conhecimento dessa postagem para organizar suas ideias de onde quer chegar e busque ter um objetivo SMART. Cada letra da expressão SMART, cuja tradução significa inteligente, corresponde a uma palavra. São elas: specific, measurable, achievable, relevant, and time-bound. O nosso objetivo deve ser específico, mensurável, atingível, relevante e com limite de tempo definido. Quanto mais inteligente for o seu objetivo maiores são as chances de alcançar o resultado esperado. Entenda mais sobre cada uma dessas características: - **S:** Specific (Específico): Quero fazer meu primeiro IRONMAN 70.3 para vou fazer meu primeiro IRONMAN 70.3 São Paulo em 2021 (2020 já era meu amigo(a)). - **M:** Measurable (Mensurável): Valores e porcentagens são essenciais para saber se você está perto ou longe de atingir um objetivo. Ex: estou com XXX de FITNESS, FORM e FATIGUE. Tenha profissionais para auxiliar você entender e propor métricas. - **A:** Attainable (Atingível): Lembre-se que não temos super poderes, estabeleça um objetivo real, que esteja dentro da sua realidade. Se IRONMAN 70.3 é muito, comece com SPRINT. - **R:** Relevant/Realistic (Relevante/Realista): Você deve se perguntar qual é o benefício desse objetivo para você, se vai lhe ajudar no seu crescimento pessoal. Seja critico com você - jogue duro. - **T:** Time-bound (Tempo limite): Seu objetivo precisa ter um prazo para ser alcançado. Sem prazo, tudo que temos é um sonho. Não existe nada mais frustrante para alguém do que gastar muito tempo, dedicação, dinheiro e etc para alcançar um objetivo e depois de muito esforço não chegar nem perto do resultado proposto, isso irá gerar frustração. ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CC_U92XBeMD/) --- # Comunicação é a base dos projetos Open Source **URL**: https://avelino.run/comunica%C3%A7%C3%A3o-%C3%A9-a-base-dos-projetos-open-source/ **Published**: 2020-07-23 **Tags**: opensource, open source, comunicação, iniciativa **Word Count**: 435 words Sou criador e mantenedor (junto com uma incrivel comunidade, composta por pessoas ao redor do mundo) de um projeto chamado **[awesome-go](https://github.com/avelino/awesome-go)** _Lista curada pela comunidade de frameworks, bibliotecas e software escritos em Go_. Quando comecei contribuir e criar projeto Open Source achava que o foco principal era código, com o passar dos anos comecei perceber que o projeto era um meio para chegar em algum lugar, ou seja, código tem sua importância, mas não basta tem um projeto com código impecável vendo que "ninguém" ou poucas pessoas conseguem usar. Por isso nós mantenedores devemos criar comunidade ao redor de projeto open source e sempre estimular outras pessoas a contribuir. > Outro blogpost relacionado com esse assunto: [Atrás de projetos Open Source existe pessoas](https://avelino.run/por-tr%C3%A1s-de-projetos-open-source-existe-pessoas/) ## Proposta para mesclar projetos ![observar a movimentação de pessoas estratégica](/blog/opensource-stay-tuned.png#center) Ontem (_2020-07-22_) olhando a timeline do Github (pessoas e projetos que companho) e me deparei com a criação de um repositório chamado **awesome-go-style** feito pelo [Damian Gryski](https://github.com/dgryski) (de Vancouver/Canada e uma grande referência na comunidade Golang). Olhando o conteúdo do repositório fazia total sentido ele ser um tópico do **awesome-go** e não um repositório isolado como estava nascendo. Tinha duas de lidar **falar ou não falar** com Damian em trazer o projeto dele para awesome-go. Parto do princípio que já tenho o **não** (não quero, não faz sentido, não ...), tomei a iniciativa de escrever um e-mail para Damian explicando meu ponto de vista referente ao repositório awesome-go-style e por que achava que deveria fazer merge dos projetos - sei que muitos engenheiro(a)s não gostam do assunto "venda", mas propor uma mudança em um software é um processo de venda porque temos que expor e defender nosso ponto de vista. Veja a thread de e-mail criada: ![E-mails trocado com Damian sobre awesome-go-style](/blog/2020-07-22-damian-awesome-go.png) Ele concordou que fazia sentido, simplesmente tinha esquecido da existência do projeto **awesome-go** (mesmo sendo um grande projeto é comum não lembrarmos de alguns projetos quando não usamos no dia a dia) e aceitou fazer esse merge, permitindo eu fazer o merge. Logico que poderia fazer o merge (era pegar o conteúdo e trazer para o awesome-go), mas meu papel como mantenedor de projeto (aka líder) é criar comunidade e incentivar as pessoas contribuírem. Propus dele abrir PR (pull request) e contribuir. ![Primeiro PR do Damian fazendo merge do awesome-go-style com awesome-go](/blog/2020-07-22-damian-awesome-go-first-pr.png) > Evolua seus skills de comunicação, escrever código é importante, mas comunicação vem antes de código - antes de escrever qualquer código você deve entender o que ser implementado. --- [Veja os projetos que mantenho e já contribuir](https://github.com/avelino), precisa de ajuda para contribuir e/ou manter projeto Open Source sinta-se livre em entrar em contato comigo [avelinorun AT gmail DOT com](avelinorun+oss@gmail.com). Fique por dentro das novidades do mundo Open Source se inscrevendo nessa [newsletter](https://mailchi.mp/fd3190254650/open-source). --- # É mais difícil se manter no topo do que chegar no topo **URL**: https://avelino.run/quote/e-mais-dificil-se-manter-no-topo-do-que-chegar-no-topo/ **Published**: 2020-07-22 **Tags**: instagram, high proformance, se manter no topo, chegar no topo, o que é o topo, como chegar no topo, performance **Word Count**: 176 words [![É mais difícil se manter no topo do que chegar no topo](/quote/se-manter-no-topo.png)](https://www.instagram.com/p/CC8xurcBh28/) Não é fácil chegar ao topo (indiferente do que seja o topo), mas ficar nele é ainda mais difícil⁉️ Para mim, chegar no topo é se tornar referência em um assunto. Quando nos tornamos referência em um determinado assunto, começamos chamar a atenção em tudo que falamos e existe um misticismo que temos que saber tudo sobre aquilo, mas saber tudo é muita coisa. Sou convidado para palestrar em diversas conferências de desenvolvimento de software, ao terminar de palestrar gosto de abrir espaço para perguntas e não sei o que as pessoas iram perguntar - eita frio na barriga - tem algumas perguntas que é perceptível que são feitas para nos deixar desconfortável (de saia justa). Quando chega a pergunta que não sei responder simplesmente respondo que "não sei, mas podemos aprender juntos". Não pense em estar no topo e sim aprender chegar lá, em nossa vida iremos alcançar diversos topos 🤯 Se manter no topo requer disciplina, foco e constância 🎯 Como você faz para se manter foco em seu objetivo? ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CC8xurcBh28/) --- # Tem momento que é necessário desacelerar para continuar **URL**: https://avelino.run/quote/tem-momento-que-e-necessario-desacelerar-para-continuar/ **Published**: 2020-07-21 **Tags**: instagram, high proformance, olhar para dentro, expansão de consciencia, performance **Word Count**: 239 words [![Tem momento que é necessário desacelerar para continuar](/quote/desacelerar.png)](https://www.instagram.com/p/CC6Lh86BNee/) Após alguns meses seguindo a planilha do novo treinador senti que conseguiria dedicar mais tempo por semana para treino, terminava os treinos bem e com energia para mais, olhando para o volume e carga da semana sentia que conseguiria mais. Não sei dizer o quanto mais, mas tinha energia acumulada. Sentei com o treinador e pedi mais volume de treino, deixando claro o porquê. Ele foi meio relutante a colocar mais volume, mas chegamos no meio termo (nem para mim, nem para ele KKKKKKKK). Foi um pouco mais de um mês nessa nova vida com quase 20 horas de treino por semana , até que comecei sentir o nervo ciático 💥, começou doendo a lombar e em alguns dias os glúteos 🍑 também estava doendo para andar (imagina para treinar). Alguns dias antes de sentir essas dores, estava trocando áudio com o treinador e comentei com ele que não sabia onde era meu limite, a resposta dele foi "seu limite é a lesão, precisamos identificar se esta chegando no limite antes de chegar nele". Pensei em parar de treinar para me recuperar, mas tinha alguma coisa falando para mim não parar e sim tirar o pé do acelerador 🏎️, fazer o que estava planejado sem me cobrar tanto e junto com fisioterapeuta arrumar o que estava "quebrado". Mas qual lição tiro dessa brincadeira❓ Tem momento que é necessário desacelerar, para voltar ainda mais forte 💪⁉️ ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CC6Lh86BNee/) --- # Shu-Ha-Ri: conceito aprendizagem para atingir a maestria **URL**: https://avelino.run/quote/shuhari-conceito-aprendizagem-para-atingir-a-maestria/ **Published**: 2020-07-20 **Tags**: instagram, high proformance, shuhari, artemarcial, performance **Word Count**: 258 words [![Shu-Ha-Ri: conceito aprendizagem para atingir a maestria](/quote/Shu-Ha-Ri.png)](https://www.instagram.com/p/CC3lAo_BsEK/) Não sou muito fã de prática de artes marciais 🥋, mas por trás da grande maioria das artes marciais tem muita filosofia e princípios de aprendizado, disciplina e etc, em Aikido, Judo ou Kendo está o Shu-ha-ri, conceito que descreve os três princípios do aprendizado: - Shu: "aprender", "seguir" ⏭️ - Quando quero aprender alguma coisa e não tenho conhecimento para criar e/ou inovar, então sigo o que o especialista no assunto pede para fazer, mesmo que eu não entenda muito bem porque fazer, ainda não é momento de questionar - ainda não sei fazer as perguntas certa; - Ha: "refletir", "colecionar" 🧘‍♂️ - Após aprender o básico, aqui começo ser capaz de questionar (fazer as perguntas certas ou +- certas); - Ri: "ser", "definir" 📈 - Agora é momento de criar/inovar, já sei porque estou fazendo aquilo e consigo juntar o meu conhecimento de outra área com o que estou aprendendo. Conceito que levo para tudo que quero aprender, como faço na pratica? 1. Busco alguém referência no assunto que consiga acelerar meu processo de aprendizado, mudo meu ambiente para viver o que quero aprender - Shu 1. Questiono tudo que tenho duvida, esse é o momento de validar o que aprendi pensando na próxima fase - Ha 1. Momento de evoluir sozinho e criar novas experiencias - Ri Sobre buscar alguém referencia no assunto, escrevi uma postagem sobre "terceirizando responsabilidade" da uma olhadinha no feed \o/ Deixa no comentário a técnica que usa para aprender ou evoluir em alguma área. Agora é com você, bom estudo e/ou treino! ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CC3lAo_BsEK/) --- # Por trás de projetos Open Source existe pessoas **URL**: https://avelino.run/por-tr%C3%A1s-de-projetos-open-source-existe-pessoas/ **Published**: 2020-07-08 **Tags**: opensource, open source, contribuição, pessoas > tecnologia **Word Count**: 311 words ![Pessoas > Tecnologia, sejá humano ao receber contribuição](/blog/open-source-community.jpg#center) Muitos **engenheiro(a)s** esquecem ao contribuir com _projetos Open Source_ que por trás de todos _projetos_ temos **pessoas**. Não conhecemos as pessoas que estão do outro lado (mantenedores do projeto) e como eles receberá nossa contribuição, isso nos gera a necessidade da comunicação ser extremamente clara e não assumirmos que os mantenedores (contribuidores) tenha o mesmo conhecimento que nós (não temos como saber o que as outras pessoas tem de conhecimento), mesmo conceitos que achamos óbvios é importante deixar claro na comunicação (issue, pull request e etc). Não tenha apego ao código - código é um meio para chegarmos na solução de um problema. Pode ser que sua implementação de código ou comunicação não esteja clara, não leve feedback negativo para o lado pessoal, em geral os contribuidores olha a implementação que esta chegando não quem esta mandando - mas lembre que isso não é uma regra, não posso falar por todos os projetos e/ou pessoas. Quando estamos do lado de mantenedor do projeto: encare toda e qualquer contribuição como a melhor contribuição possível da pessoa, ela (pessoa que contrinuiu) deixou seus afazeres para contribuir com um projeto que não é dele, busque entender porque ela teve afinidade com projeto - isso lhe ajudará criar uma comunidade (terá ajuda para manter o projeto). Uma das coisas que julgo o "sucesso" é quando temos uma comunidade envolta do projeto com pessoas com diversas realidades e necessidades, isso ajuda o projeto crescer. Principalmente quando conseguimos dar atenção para novos contribuidores, formar lideres é essencial para qualquer projeto. > Boa contribuição meus amigo(a)s, espero ter incentivado você contribuir com algum projeto Open Source. [Veja os projetos que mantenho e já contribuir](https://github.com/avelino), precisa de ajuda para contribuir e/ou manter projeto Open Source sinta-se livre em entrar em contato comigo [avelinorun AT gmail DOT com](avelinorun+oss@gmail.com). Fique por dentro das novidades do mundo Open Source se inscrevendo nessa [newsletter](https://mailchi.mp/fd3190254650/open-source). --- # Open Source Contributions - July 2020 **URL**: https://avelino.run/foss/2020/07/ **Published**: 2020-07-01 **Word Count**: 438 words **Summary**: July 2020 saw 9 repositories contribute with 38 total activities, including 9 pull requests and 17 reviews, showcasing robust community engagement. Explore the timeline of contributions made in July 2020, featuring an impressive total of 38 activities across 9 repositories. This month highlights significant engagement through push events, pull requests, and reviews, reflecting the vibrant collaboration within the community. ## 2020-07-31 - 🔀 Opened PR in [dracula/mailspring](https://github.com/dracula/mailspring): [use dracula green on sync activity folder progress](https://github.com/dracula/mailspring/pull/4) - 🔀 Opened PR in [dracula/mailspring](https://github.com/dracula/mailspring): [set dracula color on undo redo toast](https://github.com/dracula/mailspring/pull/3) - 🔀 Opened PR in [dracula/mailspring](https://github.com/dracula/mailspring): [change selection color pink to purple](https://github.com/dracula/mailspring/pull/2) - 🔀 Opened PR in [Foundry376/Mailspring](https://github.com/Foundry376/Mailspring): [open email: keep white content area](https://github.com/Foundry376/Mailspring/pull/2110) - 🐛 Opened issue in [Foundry376/Mailspring](https://github.com/Foundry376/Mailspring): [Feature Request: keep the content area (where the email is displayed) black theme](https://github.com/Foundry376/Mailspring/issues/2109) ## 2020-07-30 - 🔀 Opened PR in [dracula/mailspring](https://github.com/dracula/mailspring): [screenshot improve](https://github.com/dracula/mailspring/pull/1) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [upgrade and generate all gomodule files](https://github.com/prest/prest/pull/379) ## 2020-07-29 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [avoid panic on tx.commit calls](https://github.com/prest/prest/pull/376) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Add ssl certs to migrate command URL](https://github.com/prest/prest/pull/375) ## 2020-07-28 - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [repositories merge](https://github.com/prest/prest/pull/370#pullrequestreview-456990639) (Commented) ## 2020-07-24 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add scany to utilities section](https://github.com/avelino/awesome-go/pull/3179#pullrequestreview-455067798) (Changes requested) ## 2020-07-23 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add tablewriter - ASCII Table Writer](https://github.com/avelino/awesome-go/pull/3177#pullrequestreview-454489559) (Changes requested) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [GeoServer endpoints and outputs](https://github.com/prest/prest/issues/373) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [ST_AsKML support](https://github.com/prest/prest/issues/372) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Geometric Types support](https://github.com/prest/prest/issues/371) ## 2020-07-20 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add smex - sitemap extraction utility](https://github.com/avelino/awesome-go/pull/3175#pullrequestreview-451956899) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Zepto in Web Frameworks section](https://github.com/avelino/awesome-go/pull/3174#pullrequestreview-451954899) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [[patch] added github.com/bnkamalesh/errors](https://github.com/avelino/awesome-go/pull/3173#pullrequestreview-451952958) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add cmap in datastructure](https://github.com/avelino/awesome-go/pull/3171#pullrequestreview-451952254) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding github.com/henvic/httpretty HTTP debugging package.](https://github.com/avelino/awesome-go/pull/3170#pullrequestreview-451951348) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Weaviate](https://github.com/avelino/awesome-go/pull/3169#pullrequestreview-451950802) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add baraka](https://github.com/avelino/awesome-go/pull/3168#pullrequestreview-451949548) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Go Brain Teasers](https://github.com/avelino/awesome-go/pull/3167#pullrequestreview-451947213) (Changes requested) - 🔍 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Fix insertTableNameQuotesRegex to support hyphen in dbname](https://github.com/prest/adapters/pull/54#pullrequestreview-452024114) (Changes requested) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [avoid panic on tx.commit calls](https://github.com/prest/adapters/pull/55#pullrequestreview-452023486) (Approved) ## 2020-07-16 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [repositories merge](https://github.com/prest/prest/pull/370) ## 2020-07-10 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add last-commit "badges" to all github repos](https://github.com/avelino/awesome-go/issues/3163) ## 2020-07-08 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add lesismal/arpc](https://github.com/avelino/awesome-go/pull/3155#pullrequestreview-444972759) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add facebookincubator/ent](https://github.com/avelino/awesome-go/pull/3156#pullrequestreview-444970429) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add go-glmatrix in opengl section](https://github.com/avelino/awesome-go/pull/3157#pullrequestreview-444969534) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/lqs/sqlingo](https://github.com/avelino/awesome-go/pull/3158#pullrequestreview-444968475) (Approved) ## 2020-07-04 - 🐛 Opened issue in [dracula/zsh](https://github.com/dracula/zsh): [antigen support](https://github.com/dracula/zsh/issues/19) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 15 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-07-01T00:00:00Z&until=2020-07-31T23:59:59Z) - 🔨 Push to [dracula/mailspring](https://github.com/dracula/mailspring): 8 commit(s) - [See commits](https://github.com/dracula/mailspring/commits?author=avelino&since=2020-07-01T00:00:00Z&until=2020-07-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 8 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-07-01T00:00:00Z&until=2020-07-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 8 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2020-07-01T00:00:00Z&until=2020-07-31T23:59:59Z) - 🔨 Push to [avelino/avelino](https://github.com/avelino/avelino): 3 commit(s) - [See commits](https://github.com/avelino/avelino/commits?author=avelino&since=2020-07-01T00:00:00Z&until=2020-07-31T23:59:59Z) - 🔨 Push to [amply/statuspage](https://github.com/amply/statuspage): 2 commit(s) - [See commits](https://github.com/amply/statuspage/commits?author=avelino&since=2020-07-01T00:00:00Z&until=2020-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Foco no jogo, não no que está em jogo **URL**: https://avelino.run/quote/foco-no-jogo-nao-no-que-esta-em-jogo/ **Published**: 2020-06-09 **Tags**: instagram, high proformance, foco, poker, performance **Word Count**: 178 words [![Foco no jogo, não no que está em jogo](/quote/foco-no-jogo.jpg)](https://www.instagram.com/p/CBneElXAs0N/) É fácil falar, mas com prática diária começa se torna natural Quantas vezes ficamos preocupados com o que podemos perder, a ponto de ter o emocional abalado e acabar influenciando no nosso desempenho em determinada situação? Pode ter sido em uma prova (triathlon, corrida e/ou qualquer esporte), reunião, apresentação em que temos que falar em público, ou até mesmo em uma reunião de família. Começamos pensar o quanto aquilo é importante, quanto tem a perder se nosso desempenho for ruim e o nervosismo toma conta - chegando perder o controle de nós mesmo. O problema disso é: quanto mais nos preocupamos com o que está em jogo, maiores são as chances de se atrapalhar e colocar tudo a perder. É preciso FOCAR no jogo (no momento), na sua missão a ser cumprida e não no que pode ocorrer se algo der errado e nem nas consequências disso tudo. Quando começar o "jogo", deixe as preocupações do lado de fora e pense apenas no presente. O AGORA é o que importa para você neste momento. ---- [Originally published at instagram.com/avelinorun](https://www.instagram.com/p/CBneElXAs0N/) --- # A prática nos leva à perfeição/performance **URL**: https://avelino.run/quote/lifestyle/2020-06-01-a-pratica-nos-leva-a-perfeicao-performance/ **Published**: 2020-06-01 **Tags**: alta performance, auto conhecimento, evolução **Word Count**: 231 words ![A prática nos leva à perfeição/performance](/blog/a-pratica-nos-leva-a-perfeicao-performance.jpeg) Em alguns story comento sobre fazer 2 "coisas" por 2 mil vezes e não 2 mil "coisas" por 2 vezes, mas por que tenho falado sobre isso? Provavelmente você já ouviu essa frase antes, talvez dita por algum parente mais velho ou algum amigo, é algo comumente utilizada em nosso dia-a-dia. Pode ser também que você já tenha ouvido falar em algum momento sobre a regra das 10 mil horas, que propõe que é necessária essa quantidade total de horas para se atingir um nível de maestria em uma habilidade. A partir do ponto de vista em que há um maior entendimento do processo que envolve a realização de um movimento, bem como o de desenvolver e refiná-lo para determinada prática. A motricidade pode ser entendida como um conjunto de funções nervosas e musculares que nos permite realizar movimentos voluntários e involuntários. Sendo um processo que abrange planejar, sequenciar, iniciar, executar e corrigir as ações motoras. Então se voltarmos ao pensamento inicial: podemos considerar que na realidade o treino e a pratica leva a uma maior capacidade de o nosso sistema motor realizar os movimentos e corrigi-los, e nesse processo de aprendizagem o modelo se mostra um elemento primordial, pois é a partir de um exemplo de como executar uma tarefa que aprendemos a realizá-la com maior proficiência. Ter disciplina e constância levará você a perfeição, consequentemente alcançar sua maior performance. --- # Open Source Contributions - June 2020 **URL**: https://avelino.run/foss/2020/06/ **Published**: 2020-06-01 **Word Count**: 107 words **Summary**: June 2020 saw significant contributions with 7 repositories updated, 4 pushes, and 2 pull request reviews, showcasing active development and collaboration. Explore the timeline of contributions from June 2020, highlighting key activities across various repositories. This month featured notable pushes and reviews, demonstrating the ongoing commitment to project enhancement and community engagement. ## 2020-06-29 - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [add PREST_CONF environment var](https://github.com/prest/doc-template/pull/34#pullrequestreview-439370228) (Approved) ## 2020-06-24 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Group function alias names](https://github.com/prest/adapters/pull/53#pullrequestreview-436720410) (Approved) ## 2020-06-15 - 🐛 Opened issue in [yinggaozhen/awesome-go-cn](https://github.com/yinggaozhen/awesome-go-cn): [create multi-language support in avelino/awesome-go, starting CN](https://github.com/yinggaozhen/awesome-go-cn/issues/333) ## Commits - 🔨 Push to [prest/prest](https://github.com/prest/prest): 19 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-06-01T00:00:00Z&until=2020-06-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2020-06-01T00:00:00Z&until=2020-06-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-06-01T00:00:00Z&until=2020-06-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2020-06-01T00:00:00Z&until=2020-06-30T23:59:59Z) ## Private contributions - 🔒 6 private contribution(s) this month --- # Se permita, viva a vida mais leve! **URL**: https://avelino.run/quote/lifestyle/2020-05-31-se-permita-viva-a-vida-mais-leve/ **Published**: 2020-05-31 **Tags**: mudança, alta performance, auto conhecimento, distanciamento social, quarentena, bournout **Word Count**: 249 words ![Se permita, viva a vida mais leve!](/blog/se-permita-viva-a-vida-mais-leve.jpeg) A busca pela evolução pessoal é viciante, mas não se cobre tanto nesse momento de distanciamento social. Se você conseguiu encaixar sua rotina que estimule a alta performance siga o jogo, caso você não conseguiu é momento de afrouxar o "cabo" e se permitir viver outro momento para manter sua performance e não evoluir - será temporário, logo logo voltamos com gás total. Você tem trabalhado "home office" (saiu do escritório e está trabalhando em casa)? Vou te contar uma verdade, isso não é "home office". Você foi forçado(a) fazer isso pela pandemia e não teve tempo se planejar e adaptar com essa nova "rotina", pare de se cobrar tanto por uma coisa que você nunca fez e julga não está performando como na sua rotina anterior/"antiga". Depois de anos e anos trabalhando distribuído (desde 2008) é necessário entender qual momento devo parar por não estar rendendo (não gosto da palavra home office, trabalho de onde estiver não necessariamente em casa/home). O trabalho distribuído requer disciplina e compromisso, costumo falar para meu time: "o combinado não sai caro" Se você assumir compromisso de entregar o trabalho em dia X (onde esse prazo foi consentido por todas as partes) e quiser passar N dia jogando vídeo game 🎮 OK, mas entregue no dia combinado. "Vestir a camisa da empresa" é saber o momento de parar e recarregar a energia para continuar no próximo dia, não virar noites e ter burnout (geralmente causado pelo cansaço extremo) ou qualquer outra síndrome psicológica! --- # Como você lida com mudança? **URL**: https://avelino.run/quote/lifestyle/2020-05-28-como-voce-lida-com-mudanca/ **Published**: 2020-05-28 **Tags**: mudança, alta performance, auto conhecimento **Word Count**: 177 words ![Como você lida com mudança?](/blog/como-voce-lida-com-mudanca.png) Por que temos tanta resistência à mudança se a vida é feita delas? A mudança é a única constante, o mais seguro que temos no universo. Hoje não somos a mesma pessoa de ontem, mas tampouco a de amanhã, por mais que tentemos. Um acúmulo de circunstâncias acontece para que isso seja assim, mesmo que não percebamos. Por esta razão, devemos quebrar o medo da mudança. Existem melhores maneiras de viver do que resistência infinita ao novo. > "Ninguém se banha no mesmo rio duas vezes, porque tudo muda no rio na qual você se banha" por Heráclito de Efeso - Hoje gosto de mudança, mas nem sempre foi assim: friozinho na barrida (adrenalina) é gostoso; - Existe variáveis que não controlamos: apenas aceite e planeje o que esteja no seu controle - Nem sempre vamos nos sair bem no novo ambiente, é importante aprender lidar com frustrações, mas sempre em busca da evolução (ser antifrágil) E você, gosta de mudança? Comente como você tem lidado com mudança ultimamente e qual foi o maior aprendizado na sua busca gostar de mudança. --- # Como está seu hábito de colecionar conhecimentos? **URL**: https://avelino.run/quote/lifestyle/2020-05-27-como-esta-seu-habito-de-colecionar-conhecimento/ **Published**: 2020-05-27 **Tags**: leitura, leituraatual, leia um livro, habito de leitura, se permita, não se cobre tanto **Word Count**: 282 words ![você deve sempre elevar seus padrões de exigência, pois corpo e mente são totalmente capazes de se adaptar - Livro 100% Presente do Joel Jota](/blog/como-esta-seu-habito-de-colecionar-conhecimento.png) Essa postagem nasce em um momento que acabou a luz aqui em casa em pleno horário de trabalho, poderia surtar por não conseguir entregar o que tinha planejado para hoje, mas pelo contrário estou lendo para aumentar minha performance e amanhã (daqui X tempo) conseguir entregar muito mais que entrego hoje. > "O livro alimentava minha imaginação. Toda a minha imaginação comia, comia e comia e de barriga assim toda cheia, me levava pra morar no mundo inteiro…!" por **Lígia Bojunga Nunes** Tenho a leitura como a melhor estratégia para aprimorar habilidades cognitivas e comunicação, considerando que ler é uma forma de estarmos conectado com a experiência de outra pessoa (o autor), então podemos afirmar que estamos ganhando experiência. Aliás, ao longo da história da humanidade, o hábito de ler representa um sinal distintivo, de dignidade e saber. Não é por acaso que muitas pessoas se deixam fotografar tendo um livro nas mãos. Mesmo no mundo de hoje, informatizado, invadido por imagens, a leitura ocupa um lugar de destaque, pois está associada ao desenvolvimento pessoal e ao status intelectual. ### Faça anotações Escreva todos os insights que o livro está lhe dando e grife trechos que você pode revisitar no futuro. Geralmente faço anotações no caderno e grifo o livro ou Kindle - ainda prefiro ler no papel, mas Kindle tem me dado mais mobilidade. Esse estudo pode ajudar você condensar o conhecimento e dar visibilidade no seu hábito de leitura. Sempre que termino de ler respondo as seguintes perguntas: - Qual os 3 maiores inputs que aprendi com esse livro? - O que irei aplicar agora na minha vida? - O que levarei pra minha vida? Tenha hábito de leitura, coloque isso em sua rotina diária. --- # Período de adaptação: nunca é fácil, principalmente quando é forçado **URL**: https://avelino.run/quote/lifestyle/periodo-de-adaptacao-nunca-e-facil-principalmente-quando-e-forcado/ **Published**: 2020-05-11 **Tags**: distanciamento social, isolamento social, quarentena, filho **Word Count**: 470 words Apos dois meses vivendo o distanciamento social o que aprendemos nesse período (algumas pessoas chamam de quarentena ou isolamento social)? Às vezes só damos valor depois que perdemos, nesse período não foi diferente. Tinha hábito de ir para estrada todos os sábados para nadar, pedalar e correr, no começo de março/2020 resolvi adotar o distanciamento social, após 2 semanas comecei sentir falta de ver pessoas (olha que sempre gosto de ficar em casa "sem ver pessoas"), sair para praticar atividade física ao ar livre e ir ao mercado sem me preocupar onde iria colocar a mão, foi aí que comecei entender a liberdade de escolha que tinha e do dia para noite me restringi (tinha perdido) - esse sentimento de perca não é confortável - surtei durante alguns dias até cair a ficha e entender o fato que não estava saindo de casa (loucura né, eu que tinha escolhido ficar em casa e mesmo assim "não sabia" o porque), humanos se adaptam a diferentes ambientes e com o passar do tempo a rotina voltou se encaixar e tudo voltou fluir (na medida do possível). O colégio que meu filho (de 7 anos) estuda adotou aula à distância ao vivo (live), porem é gravada para os alunos que não tiver como participar ver em outro horário, comecei observar quanto tempo ele levaria nessa adaptação. Quando comecei imaginar como seria aula online para crianças de 7 anos imaginei que seria um caos e no primeiro dia não foi diferente, os alunos estavam alguns dias sem se ver e todos querendo falar ao mesmo tempo, ninguém colocando microfone no mute e a professora fazendo a pergunta no positivo "todos entenderam?" motivando os alunos a falar ao mesmo tempo, eu escutando de fora achei que aquilo estava um caos (principalmente por trabalhar remoto a muitos anos). Algumas horas depois do primeiro dia de aula a professora tomou ciência do problema e mandou mensagem para todos os pais orientando colocar no mute e só liberando o microfone quando o aluno tivesse duvida, ela mudou a forma de perguntar passando para o modo de negação "quem não entendeu?", assim minimizando o número de alunos falar ao mesmo tempo, e abrindo espaço para os que tem dúvida falar. O processo de adaptação para as crianças foram menos de 1 semana, porque nós adultos levamos tanto tempo para nos adaptar? Estudo dizem que alguns hábitos levam em torno de 254 dias para formar - a maior parte de um ano! Mas muitos livros fala que levamos 21 dias para formar um hábito e provavelmente está certo, desde que tudo que você quer fazer é beber um copo de água gelada após acordar. Qualquer coisa mais difícil é provável que leve mais tempo para se tornar um hábito muito forte, e, no caso de algumas atividades, muito mais tempo. --- # Nem tudo é como gostaríamos **URL**: https://avelino.run/quote/lifestyle/nem-tudo-e-como-gostariamos/ **Published**: 2020-05-09 **Tags**: esporte, foco, mindfulness, planejamento, ansiedade, 100% presente **Word Count**: 111 words ![Nem tudo é como gostaríamos - 2020-05-08](https://scontent-lga3-1.cdninstagram.com/v/t51.2885-15/e35/p1080x1080/96000122_527635767912048_3757347483643174151_n.jpg?_nc_ht=scontent-lga3-1.cdninstagram.com&_nc_cat=100&_nc_ohc=FL0t1Bh6exYAX9Sjw4G&oh=99cafe90dd9746eb01779425796dd930&oe=5EE0FB74&dl=1) Buscamos ter controle de todas as variáveis da vida, mas infelizmente (diria felizmente) não temos! Depois de muitos anos tentando controlar todas as possíveis variáveis, acabei deixando de tentar, essas sabia escolha me fez não ter ansiedade que gerava 1001 questionamentos: - **"e se"** acontecer tal coisa! - **"e se"** as pessoas pensarem XYZ de mim! - **"e se"** não funcionar? - **"e se"** não der certo? - **"e se"** _..._ Busco viver o presente (estando 100% presente) e planejar o que está no meu alcance para o futuro, sabendo que adversidades acontece e terei que passar por elas. > Tudo faz parte da grande caixa de "mistérios" da vida que gostaríamos de espiar, mas não podemos! --- # Foco em evoluir e auto conhecimento **URL**: https://avelino.run/quote/lifestyle/foco-em-evoluir-e-auto-conhecimento/ **Published**: 2020-05-03 **Tags**: esporte, mindfulness, pensamento positivo, rotina, objetivo claro, disciplina **Word Count**: 334 words ![Avelino Pedalando 100km dentro de casa - 2020-05-02](/blog/photo_2020-05-0308.12.08-2020-05-03.jpeg) É comum se sentirmos desmotivado (não é todos os dias que acordamos bem), principalmente para nós atletas que nesse momento de restrição social onde _não temos provas em vista_, que é uma motivação para manter a rotina de treino. Como faço para manter minha planilha de treino em dia? ## Objetivo claro Motivação nos faz começar, disciplina é o que nos faz continuar, se não tiver objetivo claro na primeira dificuldade abandonamos nosso objetivo por não ter clareza para onde estamos indo. ## Disciplina Não faço só o que gosto de fazer e sim o que precisa ser feito, a disciplina me trouxe constância e a constância me faz evoluir 1% ao dia. Não dou tempo para os pensamentos "ruins", meu foco é auto conhecimento para ter a cada dia mais disciplina. O esporte me trouxe muita disciplina, não sou um bom corredor, nem ciclista e muito menos nadador, para conseguir chegar próximo dos amigos que faz às três modalidades super bem, preciso ter muito foco e disciplina: * ser o primeiro a chegar no treino; * ultimo a sair do treino; * manter constância do treino; * estar 100% presente para absorver o máximo do treino; * fazer 20% a mais - coloque qualquer numero aqui; _para tentar chegar próximo deles._ ## Rotina Busco manter a _"mesma"_ rotina que tinha antes. Algumas coisas mudaram (na real muita coisa mudou), mas me fez adaptar e transformar na minha nova rotina a melhor rotina: cuidar da minha saúde mental, treinar em casa para manter meu corpo ativo, trabalhar (sempre fazendo o meu melhor) e viver momentos memoráveis com à família (filho, esposa e dog). ## Pensamento positivo — todos nós temos problemas Quando alguém me pergunta se estou bem, minha resposta é **"estou sempre bem"**, mas será que realmente estou bem? Em alguns momentos não, mas para que irei reforçar que não estou bem? Energia negativa atrai mais energia negativa, sempre busco estar em um ambiente que tenha uma energia positiva e leve. > Quando não aguentar mais, tenha certeza que você aguenta mais 20% --- # Open Source Contributions - May 2020 **URL**: https://avelino.run/foss/2020/05/ **Published**: 2020-05-01 **Word Count**: 61 words **Summary**: May 2020 saw impactful contributions with 3 repositories pushed, totaling 36 commits, showcasing active development and collaboration. This timeline highlights the key contributions made in May 2020, including significant pushes to three repositories, demonstrating a focused effort in software development and collaboration within the community. ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 28 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-05-01T00:00:00Z&until=2020-05-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 7 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2020-05-01T00:00:00Z&until=2020-05-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2020-05-01T00:00:00Z&until=2020-05-31T23:59:59Z) ## Private contributions - 🔒 67 private contribution(s) this month --- # Preparação para IRONMAN VR (70.3) em 3 dias **URL**: https://avelino.run/quote/lifestyle/preparacao-para-ironman-vr-703-em-3-dias/ **Published**: 2020-04-05 **Tags**: ironmanvr, objetivo, meta, desafio, ironman, triathlon **Word Count**: 464 words ![IRONMAN Virtual Club - VR1 2020](/blog/ironmanvc-2020-04-05.png "IRONMAN Virtual Club - VR1 2020") A preparação para IRONMAN 70.3 não é um processo simples (requer dedicação e disciplina), principalmente quando resolvemos fazer essa loucura com 3 dias de antecedência em uma fazer que meu volume de treino esta extremamente baixo por conta do COVID19 (treino com alta intensidade e com grandes volumes faz a imunidade cair, nesse momento não podemos vacilar com nossa imunidade), foi assim que aconteceu com [#IRONMANVR1](https://www.ironmanvirtualclub.com/ "IRONMAN VR1") (primeiro IRONMAN Virtual, 5km de corrida, 90km de pedal e 21km de corrida tudo dentro de casa em esteira e rolo). Tinha ciência que não seria uma prova fácil, pedalar e correr grandes volumes não é fácil quando estamos na estrada (outdoor), agora imagina fazer isso indoor? Quando disso sim para o desafio minha preparação foi 100% mental - física sabia que não teria tempo hábito - com muita meditação, técnica de mentalização e descontração (aprendido no DeROSE Method). Sabia que precisava de uma motivação extra por estar dentro de casa, com tudo me motivando para parar (geladeira, sofá, Netflix, trabalho, família e tudo que temos dentro de casa), mas eu disse sim e usei alguns mind hacking para fazer meu cérebro chegar até o fim, o principal foi a pressão social. Acredito que você nunca tenha visto eu falando no story e ontem foi dia de reportar cada etapa da prova, cobrança mental por se expor em público para começar e chegar ao fim. Outro ponto extremamente importante foi envolver a família no desafio, com meu filho de staff (aquela pessoa que lhe ajuda quando precisa de algum, por exemplo pegar o próximo esquisse de água), à esposa como apoio do filho que poderia não lembrar onde estava alguma coisa e principalmente me motivar em momentos difíceis (sabia que chegaria o KM 15 da meia maratona), ela é casca grosa quando o assunto é chegar ao fim de um desafio - _Samara Avelino_ valeu por jogar duro comigo nesse desafio! Os primeiros 5km de esteira foi tranquilo, praticamente foi o tempo do corpo esquentar e começar o pedal sem precisar girar com cadência alta, como já estava quente os primeiro 50km foi tranquilo, após o 50km foi momento de começar sentir os glúteos e músculos das coxas queimar (não muito). Subi na esteira forte e com muita energia, como tinha tomado muito líquido para hidratação no KM 8 comecei sentir vontade ir ao banho, mas segurei até o KM 10, até que chegou no tão esperado KM 15 - aqui foi onde começou o desafio - onde comecei me arrastar até o KM 18 aonde voltou a fluir, chegando super bem no KM 21. Terminei me sentindo super forte e muito bem por ter passado por mais esse desafio psicológico. Em nem um momento passou em minha cabeça que não iria conseguir. Cérebro que manda no corpo! --- # Open Source Contributions - April 2020 **URL**: https://avelino.run/foss/2020/04/ **Published**: 2020-04-01 **Word Count**: 229 words **Summary**: April 2020 saw 15 repositories contribute 21 events, including 12 pushes, 4 issues, and impactful pull requests and reviews, enhancing project collaboration. In April 2020, a diverse range of contributions unfolded across 15 repositories, showcasing a total of 21 events. This timeline captures the collaborative efforts, including pushes, issues, and reviews that shaped the month. ## 2020-04-21 - 🐛 Opened issue in [cljsjs/packages](https://github.com/cljsjs/packages): [firebase build error: refers to file not in jar: cljsjs/common/firebase-analytics-externs.js](https://github.com/cljsjs/packages/issues/2064) ## 2020-04-19 - 🔀 Opened PR in [avelino/cljs-google-datastore](https://github.com/avelino/cljs-google-datastore): [Create CODE_OF_CONDUCT.md](https://github.com/avelino/cljs-google-datastore/pull/4) - 🔀 Opened PR in [avelino/cljs-google-datastore](https://github.com/avelino/cljs-google-datastore): [Create LICENSE](https://github.com/avelino/cljs-google-datastore/pull/3) ## 2020-04-18 - 🐛 Opened issue in [avelino/cljs-google-datastore](https://github.com/avelino/cljs-google-datastore): [multi filter on key](https://github.com/avelino/cljs-google-datastore/issues/2) - 🐛 Opened issue in [avelino/cljs-google-datastore](https://github.com/avelino/cljs-google-datastore): [.group-by](https://github.com/avelino/cljs-google-datastore/issues/1) ## 2020-04-12 - ✅ Reviewed PR in [kxxoling/jupyter-clojure-docker](https://github.com/kxxoling/jupyter-clojure-docker): [fixed notebooks path in README, fixing #2](https://github.com/kxxoling/jupyter-clojure-docker/pull/3#pullrequestreview-391811497) (Approved) - 🐛 Opened issue in [roman01la/javascript-to-clojurescript](https://github.com/roman01la/javascript-to-clojurescript): [No translation for with "of"](https://github.com/roman01la/javascript-to-clojurescript/issues/6) ## 2020-04-07 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add WebAssembly category](https://github.com/avelino/awesome-go/pull/3030#pullrequestreview-388913924) (Approved) ## 2020-04-06 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added argon2-hashing package](https://github.com/avelino/awesome-go/pull/3035#pullrequestreview-388461292) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 16 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [avelino/awesome-racket](https://github.com/avelino/awesome-racket): 1 commit(s) - [See commits](https://github.com/avelino/awesome-racket/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 6 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [avelino/pycorreios](https://github.com/avelino/pycorreios): 3 commit(s) - [See commits](https://github.com/avelino/pycorreios/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/emacs-bootstrap/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap-updater](https://github.com/editor-bootstrap/vim-bootstrap-updater): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap-updater/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [railwaycat/homebrew-emacsmacport](https://github.com/railwaycat/homebrew-emacsmacport): 1 commit(s) - [See commits](https://github.com/railwaycat/homebrew-emacsmacport/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 3 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) - 🔨 Push to [avelino/cljs-google-datastore](https://github.com/avelino/cljs-google-datastore): 31 commit(s) - [See commits](https://github.com/avelino/cljs-google-datastore/commits?author=avelino&since=2020-04-01T00:00:00Z&until=2020-04-30T23:59:59Z) ## Private contributions - 🔒 56 private contribution(s) this month --- # Qual é o seu IRONMAN? **URL**: https://avelino.run/quote/lifestyle/qual-%C3%A9-o-seu-ironman/ **Published**: 2020-03-07 **Tags**: objetivo, meta, desafio, ironman, triathlon **Word Count**: 843 words ![Primeira modalidade do Triathlon, natação em águas abertas na Billings CountryClub](/blog/IMG_1071-2020-03-07.png "Primeira modalidade do Triathlon, natação em águas abertas na Billings CountryClub") Vamos começar com um assunto complicado, expor nossas fraquezas não são muito fácil né? Mas depois de supera-lá acho importante compartilhar como foi aquela luta. Qual é seu atual IRONMAN? Nesse texto usarei o nome **"IRONMAN"** como um sinônimo de **"desafio"** que você julga muito complicado, onde envolve muito treino, dedicação e perseverança. Agora senta que lá vem textão: No carnaval resolvi não ir para Salvador (como já tinha planejado 1 ano a traz), nem ir para bloquinhos em São Paulo e sim ir para o Lobo Tri Experience (aka mini Camp), onde passaríamos 4 dias treinando no período da manhã. No dia 25/12 (último dia do camp) fecharíamos com 4 simulados, ou seja, nadar, pedalar correr e voltava tudo novamente. E lá vou eu mais uma vez para um lugar onde teria que vencer uma das aflições internas a tal Águas Abertas, pois é falo de Triathlon a +- 3 anos e águas abertas ainda era (vamos rasgar o verbo do presente e usar passado) um desafio interno, nunca queria estar ali e sempre negligenciando os treinos de natação. Quando entrei na água, senti que não estava legal, só queria sair correndo de lá para casa e ficar em posição fetal, mas se estou dentro da água bora nadar. Toca a buzina do primeiro simulado e vai o fanfarrão dando braçada forte, sem respirar direito e com menos de 200m me sinto perdido no meio da represa sem ninguém do meu lado, bate aquele desespero e minha cabeça assume o controle do meu corpo com diversas afirmações e questionamentos: * o que estou fazendo aqui? * a primeira boia nunca chega! * não irei aguentar! * não estou conseguindo nem boiar! * vou voltar! Olho para o lado e vejo o caiaque se aproximando e o coach [Jose Belarmino](https://www.instagram.com/josebelarmino/) do meu lado, vendo eu me desesperando, ao olhar para ele começa um diálogo no meio da represa: A: Zé, não aguento vou voltar! Zé: Calma Avelino, segura no caiaque e tira os óculos A: Zé, você não esta entendendo, fodeu não irei aguentar! Zé: Calma Avelino, respira, tira os óculos, olhe para trás e veja o quanto já nadou, olhe para frente e veja o quanto falta para a primeira boia Ele estava fazendo eu me acalmar e me colocar no estado presente (estudo e vivo muito mindfulness, mas ali não estava rolando), após me acalmar e me colocar no estado presente foi momento de voltar nadar, por fim levei 23 minutos para fazer 500m, sai d'agua destruído e muito abalado. Chegou o momento que mais gosto do triathlon, o tal pedal, quando saio na estrada para pedalar, sinto que algo estava diferente e não conseguia fazer força, comecei tentar fazer respiratória para ajudar na recuperação muscular, porem não fluiu. A corrida consegui sair forte com o pace de 4:50, mas terminei morrendo. Se você se lembra tinha mais 3x, entrar na água pela segunda vez era tudo que eu menos queria, entrei sentindo calafrio de medo, angustia e ansiedade, a primeira natação tinha me destruído psicologicamente e não consegui segurar as rédias. Lá foi eu, dessa vez fluiu melhor na parte de respiração, mas o tempo foi para o vinagre, o pedal e corrida não encaixava e acabei jogando a toalha devendo 2x. No final do treino foi momento de bater um papo com o coach, comecei a conversa falando que não iria conseguir fazer a prova do dia 15/3 e mais 1001 frases negativas. Quando dei tempo para ele falar, olhou para mim e falou para ter calma e que precisaria entrar mais em águas abertas para perder esse "medo". Após chegar em casa e chorar muito (sim meus olhos ficou repleto de suor kkk), dois dias depois desse capítulo tinha plena certeza que _triathlon não era para mim_, olhei algumas provas de duathlon (sem água) e blábláblá, mas eu que quiz fazer triathlon, ninguém me forçou a isso. No terceiro dia após o acontecido caiu minha ficha, eu que escolhi o triathlon, porque eu estou querendo desistir no "primeiro" desafio? Foram 2 semanas até aqui, fazendo natação todos os dias focando na correção da respiração e técnica, alguns dias foram de águas abertas, ficando na boia de 50m, sabe quando uma criança entra na água pela primeira vez e treme de medo? Era eu quando entrava na represa. Após essas 2 semanas foi dia de fazer simulado (hoje 07/03/2020), fiz tudo diferente da outra vez: * queria esta ali * antes de sair nadando fiz bastante respiração * fiz o corpo a costumar com a água * nadei 100m para aquecer o mínimo possível E fui, após nadar 1000m, sai da água super bem e forte para seguir com o pedal e corrida! Paro a história por aqui para voltar ao conteúdo desse texto, com a seguinte pergunta: > **Qual seu atual IRONMAN?** O meu **IRONMAN** era essa tal de águas abertas, para vencer ele foi com base em meta, foco, perseverança e método. Não tente abraçar o mundo, foque no seu **IRONMAN**, após passar por ele curta cada segunda de sua conquista antes de ir para próxima **meta**. --- # Open Source Contributions - March 2020 **URL**: https://avelino.run/foss/2020/03/ **Published**: 2020-03-01 **Word Count**: 146 words **Summary**: March 2020 highlights significant contributions including 6 repositories, 8 pull request reviews, and 2 pushes, reflecting active collaboration and development. In March 2020, the development community showcased robust activity with a total of 10 contributions across 6 repositories. This timeline captures key events, including pull request reviews and code pushes, illustrating the collaborative efforts and advancements made during the month. ## 2020-03-30 - 💬 Reviewed PR in [MinimalCompact/thumbor](https://github.com/MinimalCompact/thumbor): [refs #67 Thumbor 7.0.0a2](https://github.com/MinimalCompact/thumbor/pull/68#pullrequestreview-383808180) (Commented) ## 2020-03-23 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add olivia-ai/olivia to the bot building section](https://github.com/avelino/awesome-go/pull/3020#pullrequestreview-379256368) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Tutorial for Gorilla Mux ](https://github.com/avelino/awesome-go/pull/3019#pullrequestreview-379255163) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add yacspin](https://github.com/avelino/awesome-go/pull/3017#pullrequestreview-379252775) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-localstack](https://github.com/avelino/awesome-go/pull/3016#pullrequestreview-379252198) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add xgen](https://github.com/avelino/awesome-go/pull/3015#pullrequestreview-379248960) (Approved) ## 2020-03-04 - 🔍 Reviewed PR in [avelino/pycorreios](https://github.com/avelino/pycorreios): [setup.py](https://github.com/avelino/pycorreios/pull/27#pullrequestreview-368817697) (Changes requested) ## 2020-03-03 - ✅ Reviewed PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [Add Devopsdays João Pessoa-PB.](https://github.com/jusbrasil/tech-calendar/pull/42#pullrequestreview-368194241) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 12 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-03-01T00:00:00Z&until=2020-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2020-03-01T00:00:00Z&until=2020-03-31T23:59:59Z) ## Private contributions - 🔒 36 private contribution(s) this month --- # Foco no ambiente, acelerando o aprendizado! **URL**: https://avelino.run/foco-no-ambiente-acelerando-o-aprendizado/ **Published**: 2020-02-28 **Tags**: evolua, aprendizado, foco no ambiente, foco **Word Count**: 513 words ![pense grande e mantenha o foco em seu objetivo](/blog/Pense_grande_347-2020-02-28.jpg "pense grande e mantenha o foco em seu objetivo") Objetivo desse blogpost é compartilhar como geralmente faço para acelerar meu aprendizado em uma área que não tenho tanta experiencia e quero (e/ou preciso) ganhar mais experiência. Quando entrei na área de tecnologia (desenvolvimento de software) não sabia praticamente nada e comecei estudar como poderia acelerar meu aprendizado, até que me deparei em um texto no reddit que falava sobre foco no ambiente, foi o extremamente difícil eu conseguir entender o que estava querendo dizer aquele texto, mas depois de dias lendo e relendo consegui absorver que deveria frequentar lugares onde tinha pessoas fazendo o que buscava aprender, assim aceleraria meu aprendizado. Como tinha acabado de chegar na área, não sabia o ambiente (locais) onde as pessoas desenvolvedora de software frequentava, depois de muita pesquisa me deparei com uma conferência de Python fora de São Paulo, e lá fui eu sair da zona de conforto, na emoção de ter achado essa conferencia, comprei passagem e hospedagem próximo à universidade que seria a conferência, assim que comprei comecei alimentar alguns bichos dentro da minha cabeça (medo do desconhecido e novo, quem sabe no futuro escrevo alguma coisa sobre o assunto): * Todo mundo deve se conhecer, ficarei deslocado! * Será palestras muita avançada, não irei entender nada! * Como puxarei assunto com uma pessoa desenvolvedora de Python sendo que conheço pouco da linguagem? * O que motiva essa galera está lá? Não deve ser o mesmo motivo que eu! * … mais uma porrada de afirmação sem embasamento Pensei diversas vezes em não ir, na real alguns dias após a compra das passagens tinha certeza que não iria e só tinha gastado dinheiro. Chegando na data próximo da conferência consegui me convencer que iria e caso não tivesse interação com o pessoal iria conhecer a cidade. Após vencer os bichos que tinha dentro da minha cabeça e dar o primeiro passo (ou segundo porque o primeiro foi comprar as passagens), foi momento de focar no ambiente e tentar absorver o máximo que podia e conhecer pessoas (julga esse ponto ser o divisor de águas da minha carreira), foi momento de voltar para casa sabendo onde poderia encontrar outras conferências locais (na minha cidade) para respirar o mesmo ar que a galera. Com o passar do tempo comecei ajudar o [Grupy-SP](https://www.meetup.com/pt-BR/Grupy-SP/) (Grupo de usuários Python da cidade de São Paulo), nesse momento ainda "não existia" usávamos [lista de e-mail](https://groups.google.com/forum/#!forum/grupy-sp) e canal no IRC para comunicação e todos os eventos eram publicados no [Wiki da Python Brasil](https://wiki.python.org.br/GrupySP). Quando quero aprender alguma coisa que não domino, meu primeiro passo é sair da zona de conforte e ir estudar por conta, depois é buscar locais que tenha pessoas que domine o assunto que eu quero aprender, isso serve para acelerar meu conhecimento, aprender o que não fazer com quem tem experiência (errou muito), assim evito passar horas e horas onde não me levará a lugar algum. Quando estamos estudando um tema novo é muito comum nos perdermos com o que estudar (perder o foco) ou colocar esforços em conteúdo que não deveríamos no momento atual. > Frequente ambiente que tenha pessoas melhores que você! --- # Chegando no limite da tecnologia, e agora para aonde vou? **URL**: https://avelino.run/chegando-no-limite-da-tecnologia-e-agora-para-aonde-vou/ **Published**: 2020-02-19 **Tags**: limite da tecnologia, melhor tecnologia, google usa, mongodb, limite **Word Count**: 1011 words Nós de tecnologia em geral, somos **early adopter** (gostamos de abraçar novas tecnologias, mesmo sem saber ao certo porque ela existe), quando falamos em desenvolvimento não é muito diferente. * Por que não usamos o banco de dados X? * Podemos usar a linguagem de programação Y! * O serviço Z resolve 100% dos nossos problemas! Vamos assumir que as afirmações acima estejam 100% corretas (lançamos o primeiro erro), a solução irá servir para **"vida toda"** ou daqui a alguns meses tenham que olhar para ela, porque batemos em algum limite da implementação, arquitetura ou da própria tecnologia? Se chegarmos em algum limite qual será os passos para correção? Dado que o software está em produção e não temos tempo hábil para pousar o avião? Você já escutou pessoas com mais experiência dizendo: **a teoria, na prática é outra** Quando estamos lendo texto onde fala: * o Google usa * o Facebook usa Busque entender se essa tecnologia (ou solução) é para o momento atual da sua empresa e/ou software, ou está indo na onda de grandes players que tem estrutura totalmente diferente da sua? ## O software, qual o problema à ser solucionado > _Time_, precisamos desenvolver uma API que irá solicitar consulta em diversas APIs (software de terceiros), pré processar (colocar os dados em nossa estrutura unificada), após processar salvar no **Serviço de Store** (serviço já existente) Olhando a descrição acima e pensando em arquitetura de software, chego em uma arquitetura nesse caminho: ![](/blog/Screen Shot 2020-02-19 at 12.25.17-2020-02-19.png) Software X (API): API interna onde recebemos solicitação para disparar consulta nas APIs de terceiros Serviço Y: Consulta assíncrono todas as APIs de terceiro, coloca na estrutura que o Serviço Store precisa e envia para o Serviço Store API 1, 2, 3, 4: APIs a ser consumida, cada API retorna de uma forma, JSON, XML, SOAP e etc Serviço Store: Serviço já existente para armazenamento de dados DB: transitório: Banco de dados que armazenamos o retorno de todas APIs (1, 2, 3, 4) antes do pré processamento, _após ser processado pode ser deletado_. Queue: Bando de dados de fila ## Dados transitórios Escolher os componentes que iremos utilizar para compor uma solução não é um trabalho muito simples, principalmente quando olhamos para uma solução com pensamento macro e não o que ela pode se tornar no futuro. Vamos colocar uma premissa para essa escolha: **o time conhece e usa MongoDB em produção** Como o time usa MongoDB em _produção_ vamos usar esse banco de dados para armazenar o retorno das APIs com a seguinte estrutura: { "headers": {}, "body": "", // retorno da API, nem sempre será JSON, pode ser XML e sera salvo como raw (string) "status_code": 200 // http status code } ## Software em produção O desenvolvimento do software foi relativamente tranquilo, foi usado soluções que o time possuía domínio e não gerou débito técnico. Aproximadamente _1 ano_ depois a solução de monitoramento começou enviar alguns alerta reportando que não estava conseguindo salvar os dados no MongoDB, o documento estava com mais de **16mb**, ou seja, chegamos no _"limite"_ do banco de dados. Ao olhar esses casos mais de perto, chegava um grande XML que passava do limite pré definido pelo MongoDB. Se você está começando usar MongoDB não chegou até essa parte da documentação, vale a leitura para entender sobre os limites do MongoDB. Após chegar nessa limitação pensamos em 4 possíveis soluções: 1. Compressão no conteúdo, dado que é XML poderia tirar espaço e/ou alguns parâmetros que não usamos, mas estaria postergando o problema, no futuro poderia voltar ter o mesmo problema; 2. Alterar a estrutura de registro salvando 1 registro para controlar outros N registro com documento feito split (dividindo a string); 3. Alterar o limite do tamanho máximo da coleção; 4. GridFS (recomendação do MongoDB, _To store documents larger than the maximum size, MongoDB provides the GridFS API_). No primeiro momento a _solução 3_ me parecia ser ótima, bastava mudar o tamanho do limite máximo pré definido pelo MongoDB (para criação de novos documentos) e tudo funcionaria perfeitamente, olhando a documentação (alterar a opção nsSize) é extremamente simples, de fato a alteração no MongoDB é simples, porém o drive do MongoDB para Python seta os _16mb_ em variável interna para tratar documentos, alterar esse limite não é tão trivial, seria necessário fazer monkey patch ou um fork do drive, quando cheguei nesse momento foi o momento de tirar o pé do acelerador e pensar na próxima alternativa. Para o próximo passo a _solução 2_ me parecia ser ótima, até ter que lidar com uma grande string e ter que colocar grandes funções para tratar tamanho de strings menores, isso que não cheguei no momento de ter um registro para controlar outros registros. Ao ver o começo da implementação a complexidade me fez abrir mão e passar para próxima opção. As soluções listadas acima foi mais ou menos a ordem até chegar na solução **4**. ## Solução final O software envia para o MongoDB para salvar como uma collection normal, quando recebemos o erro de **documento muito grande**, tratamos o erro criando um arquivo no GridFS com o conteúdo do XML e colocando a referência do arquivo criado na estrutura do documento, ficando da seguinte forma: { "headers": {}, "gridfs": ObjectID(""), // ID interno de referência do mongodb "status_code": 200 // http status code } No software que lê esse documento fazemos uma condição if tratando se existe o nó **gridfs**: obj = mongodb.find_one({...}) if obj.get('gridfs'): fs = GridFS(...) body = fs.get(obj['gridfs']) obj['body'] = body.read() obj.pop('gridfs') return obj Dessa forma retornamos a mesma estrutura independente de onde foi salvo o conteúdo (próprio documento ou GridFS), assim ficando agnóstico para o software lê os dados. **Nem tudo funciona tão bem como esperamos (não existe bala de prata)**, alguns pontos extremamente importantes para ter conhecimento: * Leitura e escrita no GridFS é mais lenta que um documento; * Estamos armazenando dados em outra coleção do MongoDB, ou seja, o processo de limpeza do banco de dados agora precisa olhar para outras coleções (como mencionado é um dado transitório, podemos apagar todos os dados a qualquer momento), usamos Expire Data via TTL do MongoDB. --- # atleta nunca tenta descobrir seu limite, mas deseja superá-lo a cada instante **URL**: https://avelino.run/quote/lifestyle/atleta-nunca-tenta-descobrir-seu-limite-mas-deseja-super%C3%A1-lo-a-cada-instante/ **Published**: 2020-02-09 **Tags**: mindset, obesidade, triathlon **Word Count**: 434 words ![atleta nunca tenta descobrir seu limite, mas deseja superá-lo a cada instante - por @avelinorun](/blog/84755956_10157686036278726_3890545620561166336_o-2020-02-09.jpg) Constantemente recebo mensagem perguntando o que me fez mudar minha vida, praticar esporte, fazer academia, acordar 4:30am e outras coisas que acabo publicando que soa maluquice. Vou tentar responder alguns questionamentos. * O que me fez querer mudar? Sair de uma vida muito sedentária para prática de esporte. O estopim sem sombra de dúvida foi medo de morrer, após alguns exames no cardiologista recebi a notícia "nas últimas 2 horas tive 3 começo de infarto", sei o que é um infarto, mas o que é um começo de infarto? * O que me fez fazer academia e praticar esporte? Após +- 2 meses da cirurgia bariátrica o médico falou que já poderia ir para academia, minha resposta para ele foi "como assim ir para academia? Não era só fazer a cirurgia e perderia peso?", nesse momento que tive a sensação de ser enganado 🤔. Lá fui eu, chegando na academia vem uma pessoa toda animada e perguntou qual era meu propósito, mentalmente veio a resposta "sei lá, minha mãe mandou", na tentativa de cortar o assunto ali, falei que queria correr (confesso que não sei porquê dessa resposta), porém ele continuou o assunto, "mais quer correr prova de 5, 10, 21, 42km? ", louco para fugir do assunto minha resposta foi o que não sabia e "só" queria correr. Fui para esteira parecendo um rato "correndo", na real me arrastando que nem trotar eu conseguia, mas percebi que no momento que estava na esteira não conseguia pensar em nada além de prestar atenção para não cair, comecei usar esse momento para me desconectar e viver aquele momento. Após alguns meses "treinando" fiz uma prova de 5, 10 e 18km - sempre chegando no final morrendo -, mas o corredor sempre quer mais KMs, chegando no fim da prova de 18km com muita endorfina comecei pensar para onde eu iria e veio na minha mente a marca do IRONMAN (até então não sabia o que era, apenas lembrei do nome), chegando em caso foi momento de pesquisar e entender que era triathlon, mas o que é triathlon? Quando entendi que era nadar, pedalar e correr, falei para mim "isso é fácil, eu já estou correndo, fiz natação quando tinha 7 anos de idade e pedalo desde criança, será tranquilo", inocente eu né KKKKKJKK. Olhando para meu pensamento de 2016, não sabia pedalar e sim andar de bicicleta, não nadava e sim boiava e correr prefiro não comentar (nem trote era 😜). **Triathlon é estilo de vida (lifestyle)!** Em resumo estou no triathlon pelo psicológico, escrevi alguns textos porque estou no triathlon, você deve achar aí na timeline. --- # Open Source Contributions - February 2020 **URL**: https://avelino.run/foss/2020/02/ **Published**: 2020-02-01 **Word Count**: 40 words **Summary**: February 2020 saw significant activity with a major push event in the avelino/avelino.run repository, contributing 9 commits to enhance functionality. Explore the timeline of contributions for February 2020, showcasing a pivotal push event in the avelino/avelino.run repository that marked the month's key developments. ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-02-01T00:00:00Z&until=2020-02-29T23:59:59Z) ## Private contributions - 🔒 25 private contribution(s) this month --- # Começar viver, esteja consciente dos seus passos! **URL**: https://avelino.run/quote/lifestyle/come%C3%A7ar-viver-esteja-consciente-dos-seus-passos/ **Published**: 2020-01-27 **Tags**: familia, hobby, empreender, startup **Word Count**: 389 words ![Mindfulness meditation](/blog/Mindfulness-meditation-2019-11-05.jpeg) Refletir sobre nossos momentos difíceis não são muito fáceis (falar de nossas intimidades muito menos), mas é esses momentos de auto conhecimento e crítica que nos ajuda alavancar para cima e subir nossa própria barra (nos tornar uma pessoa melhor). Para quem é novo por aqui eu tive algumas empresas de 2011 até 2019, algumas deram certo (fui comprado por outras empresas e sócios), porém outras deram super errado e acabou me levando lá em baixo fazendo eu voltar a "corrida dos ratos". Geralmente falamos apenas das histórias de sucesso, mas particularmente gosto de escutar as histórias de insucesso, isso nos ajuda filtrar os caminhos para termos umas atenções. Mas por que estou falando isso aqui👆? Durante anos - começar empreender não é nada fácil, sair do 0 para 1 - não olhava para outro lado além de fazer minha empresa acontecer, foi anos intensos com muito dedicação, perseverança e resiliência (e coloca resiliência isso). No começo de 2018 olhei para trás e me surgiu alguns questionamentos: * Por que estou fazendo isso mesmo? * Estou dando atenção para minha família ou apenas vivendo em no meu mundo de "negócios"? * Quantas vezes viajei com minha família nos últimos 12 meses? * Porque as pessoas tiram férias? * Eu realmente trabalho por hobby? Sempre gostei muito do que eu fazia, por isso pensava que trabalhava por hobby * ... mais uma porrada de perguntas para mim mesmo! Até que cheguei a conclusão que estava no momento de encerrar mais um ciclo, sair do dia a dia da empresa que fundei em 2015 que vinha crescendo muito, não foi uma olha fácil, mas chegou a hora de mudar a prioridade da minha vida e pensar mais em minha e em minha família (principalmente minha esposa que sempre abraçou as ideias malucas que tinha, falta algum parafuso na cabeça dela 🖤). Minha escolha por sair da empresa foi para começar viver, ganhei muito dinheiro empreendendo, mas não sabia responder porque e para que eu queria tanto dinheiro. Dinheiro é importante, mas ele não deve ser o fim e sim o meio para alcançar nossas metas. Você esta vivendo consciente seu momento atual ou esta no modo Zeca Pagodinho "deixa a vida me levar"? Tenha consciência do seu momento e seus passos, confesso que eu não tinha, em 2018 foi ano de tomar a rédeas da minha vida... --- # Open Source Contributions - January 2020 **URL**: https://avelino.run/foss/2020/01/ **Published**: 2020-01-01 **Word Count**: 184 words **Summary**: January 2020 saw 8 repositories contribute 13 events, including 4 opened pull requests and 3 new issues, marking a productive start to the year. Welcome to the January 2020 contributions timeline. This month highlights significant activity across 8 repositories, showcasing a total of 13 events, including push events, pull requests, and issue creation. Explore the details of each contribution and discover how developers engaged with the community to kick off the new year. ## 2020-01-30 - 🐛 Opened issue in [meilisearch/meilisearch-go](https://github.com/meilisearch/meilisearch-go): [license file not exist](https://github.com/meilisearch/meilisearch-go/issues/2) - 🐛 Opened issue in [meilisearch/meilisearch-go](https://github.com/meilisearch/meilisearch-go): [lint review](https://github.com/meilisearch/meilisearch-go/issues/1) ## 2020-01-29 - ✅ Reviewed PR in [ReactiveX/rxjs](https://github.com/ReactiveX/rxjs): [docs(operators): describe your change...](https://github.com/ReactiveX/rxjs/pull/5275#pullrequestreview-350398962) (Approved) ## 2020-01-16 - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [elixir br 2020](https://github.com/jusbrasil/tech-calendar/pull/38) ## 2020-01-15 - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [main technology and programming events of the first half of 2020](https://github.com/jusbrasil/tech-calendar/pull/36) ## 2020-01-09 - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [Starting 2020 calendar](https://github.com/jusbrasil/tech-calendar/pull/35) ## 2020-01-03 - 🐛 Opened issue in [marick/Midje](https://github.com/marick/Midje): [Syntax error (IllegalArgumentException) compiling deftype*](https://github.com/marick/Midje/issues/465) ## 2020-01-02 - 🔀 Opened PR in [funcool/buddy-auth](https://github.com/funcool/buddy-auth): [fixed typo: Signed JWT login exampe](https://github.com/funcool/buddy-auth/pull/87) ## Commits - 🔨 Push to [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): 3 commit(s) - [See commits](https://github.com/jusbrasil/tech-calendar/commits?author=avelino&since=2020-01-01T00:00:00Z&until=2020-01-31T23:59:59Z) - 🔨 Push to [amply/statuspage](https://github.com/amply/statuspage): 3 commit(s) - [See commits](https://github.com/amply/statuspage/commits?author=avelino&since=2020-01-01T00:00:00Z&until=2020-01-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2020-01-01T00:00:00Z&until=2020-01-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 1 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2020-01-01T00:00:00Z&until=2020-01-31T23:59:59Z) - 🔨 Push to [funcool/buddy-auth](https://github.com/funcool/buddy-auth): 1 commit(s) - [See commits](https://github.com/funcool/buddy-auth/commits?author=avelino&since=2020-01-01T00:00:00Z&until=2020-01-31T23:59:59Z) ## Private contributions - 🔒 12 private contribution(s) this month --- # O que dizer de 2019? Ano de autoconhecimento! **URL**: https://avelino.run/quote/lifestyle/o-que-dizer-de-2019-ano-de-autoconhecimento/ **Published**: 2019-12-31 **Tags**: vem2020, retrospectiva, corridaderua, startups, triathlon **Word Count**: 188 words ![São Silvestre São Paulo 31/12/2019 - Vem 2020](/blog/photo_2019-12-31 12.25.26-2019-12-31.jpeg "São Silvestre São Paulo 31/12/2019") Vou começando relembrando meu [2018 que foi um ano de muito aprendizado](https://avelino.run/lifestyle/2018-12-28-meu-2018-foi-ano-de-muito-aprendizado/ "Meu 2018 foi ano de muito aprendizado"), entendo o que de fato eu gostaria de fazer profissionalmente e me desligar do que me deixava longe do que eu queria/quero para mim. E assim dei inicio em 2019... 2019 foi o ano de autoconhecimento e entendo que hobby é hobby, profissão é profissão (cada um em seu lugar) e juntos um complementa o outro, isso acabou me trazendo alguns RP (recordes pessoais) em provas que nunca imaginei na vida que iria conseguir (tinha 180kg, o esporte me fez perder 108kg). Com esse "negocio" de empreender acabei fazendo terapia (ainda faço, desde 2015), assim consigo me entender e sempre me desconstruir para me ser minha melhor versão a cada dia. O esporte (triathlon) entrou em minha vida como uma válvula de escalpe, onde consigo deixar todo o estresse da semana de trabalho em alguma estrada e voltando para casa extremamente tranquilo com vontade de começar mais uma semana. O que espero de 2020? Tenho certeza que irei colher o que plantei! --- # Open Source Contributions - December 2019 **URL**: https://avelino.run/foss/2019/12/ **Published**: 2019-12-01 **Word Count**: 236 words **Summary**: December 2019 saw 13 repositories contribute 17 impactful events, including pushes, reviews, and issue resolutions, driving community collaboration and innovation. Explore the timeline of contributions from December 2019, showcasing a vibrant month of activity across 13 repositories. This month featured notable pushes, pull requests, and issue discussions, highlighting the collaborative efforts of developers and the ongoing development of various projects. ## 2019-12-30 - 🐛 Opened issue in [puppetlabs/clj-kitchensink](https://github.com/puppetlabs/clj-kitchensink): [not convert org.postgresql.util.PGobject (postgres jsonb field)](https://github.com/puppetlabs/clj-kitchensink/issues/102) - 🐛 Opened issue in [dakrone/cheshire](https://github.com/dakrone/cheshire): [not convert org.postgresql.util.PGobject](https://github.com/dakrone/cheshire/issues/160) ## 2019-12-28 - ✅ Reviewed PR in [remodoy/clj-postgresql](https://github.com/remodoy/clj-postgresql): [Cleanup on clj-kondo linter results](https://github.com/remodoy/clj-postgresql/pull/22#pullrequestreview-336922474) (Approved) ## 2019-12-19 - 🔍 Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Add support for non-empty requests with no Content-Length header.](https://github.com/bottlepy/bottle/pull/1185#pullrequestreview-334963762) (Changes requested) ## 2019-12-17 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Curitiba meetup](https://github.com/avelino/awesome-go/pull/2863#pullrequestreview-332955927) (Changes requested) ## 2019-12-12 - ✅ Reviewed PR in [okfn-brasil/querido-diario](https://github.com/okfn-brasil/querido-diario): [Update Apache Tika](https://github.com/okfn-brasil/querido-diario/pull/149#pullrequestreview-330932490) (Approved) ## 2019-12-10 - 🐛 Opened issue in [okfn-brasil/querido-diario](https://github.com/okfn-brasil/querido-diario): [tika-app-1.22.jar Not Found](https://github.com/okfn-brasil/querido-diario/issues/147) ## 2019-12-06 - 🔀 Opened PR in [okfn-brasil/querido-diario](https://github.com/okfn-brasil/querido-diario): [Dockerfile python 3.7 and docker layers grouping](https://github.com/okfn-brasil/querido-diario/pull/146) - 🐛 Opened issue in [okfn-brasil/querido-diario](https://github.com/okfn-brasil/querido-diario): [postgres save error: duplicate key value violates unique constraint](https://github.com/okfn-brasil/querido-diario/issues/145) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [mistakes in the package architecture (fail), proposed to simplify evolution and project maintenance](https://github.com/prest/prest/issues/361) ## 2019-12-05 - ✅ Reviewed PR in [prest/adapter-mysql](https://github.com/prest/adapter-mysql): [fix sql template window compatible](https://github.com/prest/adapter-mysql/pull/1#pullrequestreview-327639361) (Approved) ## 2019-12-01 - 🔍 Reviewed PR in [prest/middlewares](https://github.com/prest/middlewares): [Add csv renderer](https://github.com/prest/middlewares/pull/17#pullrequestreview-324959529) (Changes requested) ## Commits - 🔨 Push to [moclojer/chrondb](https://github.com/moclojer/chrondb): 9 commit(s) - [See commits](https://github.com/moclojer/chrondb/commits?author=avelino&since=2019-12-01T00:00:00Z&until=2019-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 7 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-12-01T00:00:00Z&until=2019-12-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 3 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2019-12-01T00:00:00Z&until=2019-12-31T23:59:59Z) - 🔨 Push to [okfn-brasil/querido-diario](https://github.com/okfn-brasil/querido-diario): 3 commit(s) - [See commits](https://github.com/okfn-brasil/querido-diario/commits?author=avelino&since=2019-12-01T00:00:00Z&until=2019-12-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2019-12-01T00:00:00Z&until=2019-12-31T23:59:59Z) ## Private contributions - 🔒 14 private contribution(s) this month --- # Alta performance com dieta baseada em plantas **URL**: https://avelino.run/quote/lifestyle/alta-performance-com-dieta-baseada-em-plantas/ **Published**: 2019-11-30 **Tags**: proteina vegana, atleta vegano, dieta vegana, vegano, alta performance, dieta base de plantas, dieta, triathlon **Word Count**: 1084 words ![Dieta a baseada em platas para atleta de alta performance](/blog/diet%20plant%20based-2019-11-30.png "Dieta a baseada em platas para atleta de alta performance") A pergunta que os atletas que segue dieta baseada em plantas recebe é a suposição de que os alimentos de origem animal são a única fonte de proteína, isso é um equívoco, mas infelizmente muitas pessoas têm essa visão por falta de informação. Na verdade: * Uma porção de brócolis cozido ou espinafre tem tanta proteína como um ovo médio (6 gramas) * Espirulina (alga azul-esverdeada) é o alimento mais denso em proteínas do planeta * 3 colheres de sopa de sementes de cânhamo têm proteína igual a 1/2 xícara de iogurte grego (10 gramas), além de 6 gramas de ácidos graxos ômega 3 Nos _Estados Unidos_, a recomendação diária de proteína (RDA) é 0,8 gramas por quilograma de peso corporal. Porém, esta recomendação destina-se a simplesmente manter funções corporais básicas, a ingestão diária de proteínas deve ser maior para a maioria das pessoas. Pesquisas mostram que os atletas de alta performance deve ingerir aproximadamente 50% mais proteína do que pessoas sedentárias - 1.2 - 2.0/kg de proteína diariamente - dependendo da fase de treinamento, dependendo de peso, dieta, gênero e idade. ## Proteína vegetal Aminoácidos são os blocos de construção da proteína. Dos 20 aminoácidos, seu organismo é capaz de produzir 11 deles - eles são conhecidos como aminoácidos não essenciais. Os outros 9 são denominados aminoácidos essenciais - eles não são produzidos pelo organismo e devem ser ingeridos através de alimentos. Alimentos de origem animal (carne, laticínios e ovos) contêm aminoácidos essenciais em quantidades aproximadamente iguais. Alimentos vegetais como quinoa, trigo-sarraceno, espirulina, soja, chia, grão-de-bico e pães também contêm os 9, mas a maioria dos alimentos vegetais tem ausência de pelo menos um aminoácido essencial. Mas não precisamos de todos os aminoácidos em cada mordida de alimentos, alcançar e manter a síntese de proteína do corpo requer uma dieta que inclui uma variedade de proteínas vegetais, incluindo grãos integrais, legumes, nozes, sementes e legumes. A lisina (fórmula C6H14N2O2) é o único aminoácido essencial que é difícil de obter em uma dieta _vegana_, porque as plantas contêm quantidade muito baixa. Lisina é um precursor da carnitina (fórmula C7H15NO3), molécula-chave na oxidação beta (a conversão de ácidos graxos em energia). Carnitina auxilia remover toxinas do músculo, reduz o colesterol, e ajuda na produção de colágeno - principal proteína estrutural do corpo encontrada no osso, cartilagem, tendões, ligamentos e pele. Dieta mista que inclui carne, ovos e/ou laticínios fornece 60 - 180mg por dia de carnitina, enquanto dieta vegana fornece 10 - 12mg. Por esses motivos atletas com dietas a base de plantas (veganos) deve ingerir proteína vegetal com grandes fontes de lisina. Os alimentos mais ricos em Lisina incluem tempeh, lentilhas, tofu germinado, amaranto, quinoa, pistache, grão-de-bico e sementes de abóbora. ## Proteína e Performance Pessoas pode se safar com uma dieta vegana abaixo do ideal; no entanto, o aumento do volume de treino e corrida pode levar a má performance, recuperação e saúde para atletas vegano. Alguns riscos: * Falta de açúcar no sangue, as fontes de proteína vegetal contém mais carboidratos e menos gordura, comparada com proteínas animais. Isso pode resultar em ineficiência metabólica e diminuição da capacidade de usar gordura como energia, além de menos saciedade e aumento no desejo de açúcar. * Baixa disponibilidade de energia (EA), devido à alta ingestão de fibras, reduz a absorção de calorias e nutrientes. A EA é a quantidade de energia deixada para funções corporais básicas após o gasto energético do exercício ser subtraído da ingestão de energia. Baixo EA pode prejudicar a densidade mineral óssea (BMD), função hormonal, imunidade e função menstrual, entre outros problemas de saúde. * Deficiências de micronutrientes, incluindo ferro, zinco, vitamina B12, ácidos graxos ômega-3 (EPA/DHA), cálcio e vitamina D. Isto é devido à exclusão das principais fontes de nutrientes e diminuição da absorção devido à alta carga de fibras. * Má recuperação, devido à remoção de alimentos com alto teor de leucina (presentes nos alimentos lácteos). Leucine é um aminoácido de cadeia ramificada e é fundamental para a recuperação muscular. Atletas (especialmente mulheres) devem obter 3 gramas de leucina a cada 30 minutos de exercício intenso ou longos. * Diarreia (intestino funcionando mais que o normal), especialmente durante a execução de exercício, relacionada à ingestão de grande volume de fibras. * Atletas que seguem dieta à base de plantas deve ter acompanhamento regular com nutricionista esportivo. ## Um dia com dieta à base de plantas Plano de refeição a seguir fornece uma variedade de proteínas vegetais ricas em lisina e combinam alimentos ricos em zinco e ferro com vitamina C e atende a exigência diária de vitamina B12, cálcio e ômega-3. * Café da manhã (pré-treino): Aveia ou quinoa com sementes de abóbora e pistache, melaço (para ferro) e bagas (para vitamina C). Adicione leite de nozes (alta proteína), pó de proteína vegetal para proteína extra (ervilha, arroz, chia, amêndoas, amendoim, cânhamo). * Lanche pós-treino: pudim de chia ou smoothie com proteína em pó de alta leucina e frutas. * Almoço: Uma salada saudável com folhas verdes (couve, espinafre ou couve para ferro e cálcio), abundância de legumes (beterraba para nitratos, pimentas para vitamina C), grão de bico e tempeh orgânico, abacate (para gorduras ômega-3) e levedura nutricional (para vitamina B12). * Lanche: pão integral ou legumes em palito com hummus; ou maçã, banana, ou pão integral com manteiga de nozes e sementes de cânhamo. * Jantar: Feijão ou lentilha com pimentão, tomates e batata-doce. Couves de Bruxelas assadas ou brócolis (proteína extra mais cálcio e vitamina C). **Referências:** 1. _Wooding DJ, Packer JE, Kato H, West DWD, Courtney-Martin G, Pencharz, PB, Moore DR. Increased protein requirements in female athletes after variable-intensity exercise. Med Sci Sports Exer. 2017;49(11):2297-2304._ 2. _Thomas DT, Erdman KA, Burke LM. Position of the Academy of Nutrition and Dietetics, Dietitians of Canada, and the American College of Sports Medicine: nutrition and athletic performance. J Acad Nutr Diet. 2016;116(3):501-28._ 3. _Rebouche CJ. Carnitine. In: Shils ME, Olson JA, Shike M, Ross AC (eds). Modern Nutrition in Health and Disease, 9th Edition. Lippincott Williams & Wilkins, New York, 1999, pp.505-12._ 4. _Fuhrman J and Ferreri DM. Fueling the vegetarian (vegan) athlete. Curr Sports Med Rep. 2010;9(4):233-41._ 5. _Heidi Strickler, RD, CSSD, METS I, ISAK I is a Registered Sports Dietitian with eNRG Performance. An avid endurance athlete, triathlete, and ultra-runner herself, she has a passion for providing nutrition coaching to endurance athletes. She also specializes in plant-based nutrition, female physiology, and collegiate athlete nutrition. In July, she will graduate with a Master’s degree in Sports Nutrition from Liverpool John Moores University in England, United Kingdom. Find out more about Heidi at enrgperformance.com._ 6. [The Game Changers](https://filmow.com/dieta-de-gladiadores-t256320/ "Dieta de Gladiadores, serie produzida pela Netflix - Filmow") 7. [What The Health](https://filmow.com/que-raio-de-saude-t236070/ "Que Raio de Saúde - Filmow") --- # Transformando dores musculares em prazer (amor) **URL**: https://avelino.run/quote/lifestyle/transformando-dores-musculares-em-amor/ **Published**: 2019-11-24 **Tags**: corridaderua, bikelife, nadapedalacorre, triathlontraining, triathlon **Word Count**: 242 words ![Thiago Avelino pedalando na estrada caminho do mar - estrada velha de santos](/blog/_MG_1754-2019-11-24.JPG "Thiago Avelino pedalando na estrada caminho do mar - estrada velha de santos") De arrepios de dores musculares a amor, acredito que essa seja a evolução que tive dentro da modalidade de bike. Quando comecei pedalar eu sentia diversas dores muscular e muita dor na "bunda" (na real é no períneo), começar pedalar era uma tortura, chegava no "escritório" (local que fica minha bike) e demorava muito tempo para começar (em alguns dias chegava a horas). Lembro como se fosse hoje eu indo comprar minha primeira bicicleta para o triathlon, quando cheguei em casa comentei com minha esposa "pedalar é tranquilo, nem transpirei". Na minha cabeça eu sabia pedalar, quando era moleque sempre andei de bike, após começar pedalar entendi que sempre andei de bike e que não sabia pedalar. Com o passar dos meses trabalhei minha mente colocando outra motivação para tirar o foco das dores e começar de fato evoluir na modalidade que tinha mais dificuldade. Após tirar o foco da dificuldade que tinha (dores 😬) minha evolução na modalidade começou evoluir muito. Sou muito grato pelos meus familiares (especialmente pela minha esposa e filho 🖤), amigos e marcas por está junto nessa luta diária, sem o apoio deles não seria possível. Mindhacking é uma prática que está me ajudando muito na evolução no esporte, principalmente nos dias que não estou afim de treinar. Eu tenho publicado bastante coisa da minha vida nos treinos, não é todos os dias que estou motivado, mas se está planejado é necessário fazer, vou lá e faço. --- # Performance vs. Trust, identifying toxic people **URL**: https://avelino.run/quote/performance-vs-trust-identifying-toxic-people/ **Published**: 2019-11-18 **Tags**: high proformance, startup, startups, career, trust, performance **Word Count**: 78 words There is one simple question to ask if you want to build a high performing team. > "Who is the asshole?" [Simon Sinek](https://en.wikipedia.org/wiki/Simon_Sinek "Simon Sinek - Wikipedia") explains a powerful and, ironically, very simple way to identify toxic people in your teams which might be successful short-term but harm a team long-term. The majority of companies out there are run a system of incentives which fuels toxic cultures as the bonus structure is mainly based on performance.

👉 control your to-do list 👋


{{< youtube YPDmNaEG8v4 >}} --- # Diferença entre amadores e profissionais **URL**: https://avelino.run/diferen%C3%A7a-entre-amadores-e-profissionais/ **Published**: 2019-11-11 **Tags**: alta performance, psicologia, triathlon, esporte, profissional, amador **Word Count**: 565 words Porque algumas pessoas _parecem ser_ extremamente bem sucedidas e fazer muito, enquanto a grande maioria de **nós** luta para pisar na água? A resposta é complicada e provavelmente composta por diversas respostas. O aspecto principal é a forma de pensar e planejamento. ![](/blog/maxresdefault-2019-11-11.jpg) ## Mas qual é a diferença? Na verdade, há diversas diferenças: * Amadores param quando chega a seu objetivo, profissionais entendem que a realização inicial é apenas o começo; * Amadores têm um objetivo, profissionais têm um processo; * Amadores pensam que são bons em tudo, profissionais entendem seus círculos de competência; * Amadores ver feedback e concelho como criticas, profissionais sabem que têm pontos fracos e procuram críticas construtivas; * Amadores valorizam o desempenho isolado, pense sobre o receptor que pega a bola uma vez em um lance difícil. Profissionais valorizam a consistência, posso pegar a bola na mesma situações 9 vezes em cada 10? * Amadores desiste no primeiro problema e assumi que é um fracassado, profissionais veem o fracasso como parte do caminho para o crescimento e evolução do ponto fraco; * Amadores não têm ideia do que melhorar para alcançar bons resultados, profissionais entende; * Amadores pratica para se divertir, profissionais sabe o que nos treinos ira acontecer no jogo; * Amadores foca em identificar suas fraquezas e melhorá-las, profissionais focam em seus pontos fortes e em encontrar pessoas que são fortes onde são fracos; * Amadores pensam que o conhecimento é poder, profissionais transmitem conhecimento e conselhos; * Amadores foca em ter razão (estar certos), profissionais focam em obter o melhor resultado; * Amadores foca no pensamento de primeiro nível, profissionais focam no pensamento de segunda ordem. * Amadores pensa que bons resultados são os seus próprios resultados, profissionais sabe que bons resultados são o resultado das suas ações; * Amadores foca em curto prazo, profissionais focam a longo prazo; * Amadores foca em derrubar outras pessoas, profissionais focam em tornar todos melhores; * Amadores buscam decisões em conjunto para que não haja uma pessoa responsável caso de errado, profissionais tomam decisões por si e aceitam a responsabilidade; * Amadores buscam culpados, profissionais aceitam a responsabilidade; * Amadores aparecem de forma inconsistente, profissionais aparecem todos os dias; * Amadores vão "mais rápido", profissionais vão mais longe; * Amadores vão com a primeira ideia que vem em sua cabeça, profissionais percebem que a primeira ideia raramente é a melhor; * Amadores acham que sua ideia não pode ser invalidada, profissionais tem certeza que pode; * Amadores tem pensamento absoluto, profissionais pensam em probabilidades; * Amadores pensam que a probabilidade de ter a melhor ideia é alta, profissionais sabem que a probabilidade disso é baixa; * Amadores pensam que a realidade é o que eles querem ver, profissionais sabem que a realidade é a verdade. * Amadores pensam que a divergência é ameaça, profissional vê como oportunidade de aprender. > Existem diversas outras diferenças, mas eles podem efetivamente ser resumidos a duas palavras: **medo** e **realidade** Amadores _acreditam_ que o mundo deve trabalhar da maneira que eles querem, profissionais percebem que eles têm que trabalhar com o mundo como ele é. Amadores estão com **medo** - com medo de ser _vulnerável_ e _honesto_ consigo mesmos, profissionais sentem que são capazes de lidar com quase qualquer **adversidade (são resilientes)**. 'Qual abordagem você acha que vai produzir melhores resultados?' ## Motivo de reflexão: * Em qual circunstâncias você se comporta como **amador** em vez de **profissional**? * O que lhe segura? Você está preso em tentáculos dos povos que são **amadores**, quando você deveria esta ao lado dos **profissionais**? Tradução de: https://fs.blog/2017/08/amateurs-professionals/ --- # Chegar ao estado de Flow, para alcançar metas **URL**: https://avelino.run/chegar-ao-estado-de-flow-para-alcan%C3%A7ar-metas/ **Published**: 2019-11-08 **Tags**: mindhacking, alta performance, Mihaly Csikszentmihalyi, concentração, psicologia do flow, psicologia, fluxo, flow, estado de flow **Word Count**: 667 words ![Compreendendo a Psicologia do Flow](/blog/guitar-girl-flow-beach-1080x675-2019-11-08.jpg "Compreendendo a Psicologia do Flow") _Compreendendo a Psicologia do Flow_ Você já se sentiu completamente imerso em uma atividade? Se sim, você pode ter experimentado um estado mental que os psicólogos chama de **flow**, mas o que é isso? Vamos fazer uma analogia para tentar explicar: imagine que você está fazendo uma corrida Sua atenção está focada nos movimentos do seu corpo, na força dos seus músculos, sua respiração e sensação da rua aos seus pés. Você está vivendo aquele momento, totalmente absorvido pelo ato de correr, você está cansado (tem ciência e sensação de cansaço), mas mal percebe o tempo passar. > De acordo com o psicólogo [Mihaly Csikszentmihalyi](https://en.wikipedia.org/wiki/Mihaly_Csikszentmihalyi), o que você esta vivendo naquele momento é conhecido com **flow**, um estado de imersão completa em uma atividade. Ele descreve o estado mental de **flow** como "estar completamente envolvido na atividade para seu próprio bem, o tempo voa, cada ação, movimento e pensamento acontece natualmente, como tocar um estrumento, todo seu ser está envolvido, e você está usando suas habilidades ao máximo". Experiências de **flow** geralmente é _"ativada"_ de maneiras distintas para cada pessoa. Alguns podem experimentar o flow, enquanto esta concentrada em um esporte como triathlon, corrida, esqui, tênis, futebol ou dança, outros podem ter essa experiência enquanto envolvido em atividade de pintura, programação, desenho ou escrita. Estes momentos de flow muitas vezes ocorrem quando você está envolvido em uma atividade que você gosta e tem mais aptidão. ## Qual sensação de estar em flow? De acordo com Csíkszentmihályi, há dez fatores que acompanham a experiência do flow. Embora muitos desses componentes possam estar presentes, não é necessário experimentar _todos_ eles para que o fluxo ocorra: 1. Objetivos extremamente claros, embora desafiadores, sente que esta próximo de atingir 2. Forte concentração e extremamente focado 3. A _atividade_ é intrinsecamente gratificante (prazer de esta fazendo) 4. Sentimentos de serenidade; perda do sentimento de autoconsciência 5. Intemporalidade (_adjetivo usado para qualificar algo ou alguém que não é afetado pelo passar do tempo_); uma sensação distorcida de tempo; sentindo-se tão focado no **presente** que você perde a noção do tempo passar 6. Feedback imediato, seu cérebro lhe da constante informação que esta alcançando suas micro metas 7. Sabendo que o objetivo é factível; um equilíbrio entre o nível de habilidade perante ao objetivo 8. Sentimentos de controle pessoal sobre a situação 9. Falta de consciência das necessidades físicas 10. Foco completo na atividade ## Como chegar ao flow Em seu livro, _Csíkszentmihályi_ explica que o flow é provável ocorrer quando conseguimos enfrentar o objetivo após desconstruir-ló por diversas vezes, assim somos capazes de ter rápidas respostas do momento que já vivemos (mesmo que mentalmente). Um jogo de xadrez é um bom exemplo de quando um estado de flow ocorre. Durante uma competição, o jogador tem objetivos e auto feedback muito claro, permitindo que seu foco seja 100% no jogo durante o período da partida. ### Se você quer alcançar o estado de flow, esse itens pode te ajudar: * Você ter objetivo e plano de ação extremamente claro * Objetivo que você gosta ou é apaixonado * Há elementos de desafios * Você é capaz de subir nível da habilidade (conhecimento) atual "O flow também acontece quando o objetivo esta totalmente envolvida na superação de um desafio que é gerenciável, por isso funciona como um ímã (lhe prende) para aprender novas habilidades e aumentar os desafios", explica _Csíkszentmihályi_. ## Benefícios do flow Além de tornar as atividades mais agradáveis, o flow também tem uma série de outras vantagens. * O flow pode levar a alta performance (melhor desempenho). Os pesquisadores encontraram que o flow pode subir o desempenho em uma grande variedade de áreas que incluem o ensino, a aprendizagem, aos atletas (esporte) e o lado criativo * O flow também pode levar ao aprendizado e desenvolvimento de novas habilidades. Como o ato de alcançar o flow indica o domínio substancial de certa habilidade, o indivíduo deve buscar continuamente novos desafios e informações para manter este estado ## Leia também * [Mindfulness, hacking mental para concentração plena](https://avelino.run/lifestyle/mindfulness-hacking-mental-para-concentra%C3%A7%C3%A3o-plena/ "Mindfulness, hacking mental para concentração plena") * [Foco e disciplina é a arma a favor dos seus objetivos](https://avelino.run/lifestyle/foco-e-disciplina-%C3%A9-a-arma-a-favor-dos-seus-objetivos/ "Foco e disciplina é a arma a favor dos seus objetivos") * [Por que triathlon? Qual é o seu limite?](https://avelino.run/lifestyle/2019-06-21-por-que-triathlon/ "Por que triathlon? Qual é o seu limite?") --- # Mindfulness, hacking mental para concentração plena **URL**: https://avelino.run/quote/lifestyle/mindfulness-hacking-mental-para-concentra%C3%A7%C3%A3o-plena/ **Published**: 2019-11-05 **Tags**: meditação, triathlon, biohacking, mindhacking, mindfulness **Word Count**: 109 words ![Mindfulness, hacking mental para concentração plena](/blog/Mindfulness-meditation-2019-11-05.jpeg "Mindfulness, hacking mental para concentração plena") É muito comum, pessoas perguntar quantas horas treino por dia/semana, quando eu falo +- á quantidade surge diversos questionamentos, um deles é _"como você aguenta tudo isso?"_. A resposta é ter objetivo extremamente claro e praticar constantemente mindfulness (Atenção Plena): é um estado onde treinamos qualidades de atenção ao momento presente, aprendemos a perceber pensamentos, sensações corporais e emoções no momento que ocorrem, sem reagir de maneira automática ou habitual. Com isso, aprendemos a fazer escolhas mais conscientes e funcionais, influenciando positivamente na maneira como lidamos com os desafios cotidianos. É um dos principais mindhacking que uso para "hackear" minha mente e focar nos treinos e alcançar meus objetivos. --- # Open Source Contributions - November 2019 **URL**: https://avelino.run/foss/2019/11/ **Published**: 2019-11-01 **Word Count**: 239 words **Summary**: November 2019 saw significant contributions across 10 repositories, with 20 total events including pushes, pull requests, and reviews, highlighting community engagement. Explore the impactful contributions made in November 2019, showcasing a total of 20 events across 10 repositories. This timeline captures the collaborative efforts, including push events, pull requests, and reviews that drove development forward during the month. ## 2019-11-19 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go.dev](https://github.com/avelino/awesome-go/pull/2826#pullrequestreview-319266390) (Approved) ## 2019-11-18 - ✅ Reviewed PR in [microsoft/WSL2-Linux-Kernel](https://github.com/microsoft/WSL2-Linux-Kernel): [Fix README-Microsoft.WSL2](https://github.com/microsoft/WSL2-Linux-Kernel/pull/54#pullrequestreview-318354957) (Approved) ## 2019-11-14 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [neovim generate, check 2 condition name](https://github.com/editor-bootstrap/vim-bootstrap/pull/327) - 🔍 Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Added Black for Python](https://github.com/editor-bootstrap/vim-bootstrap/pull/317#pullrequestreview-317030642) (Changes requested) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [fixed Go path package use](https://github.com/editor-bootstrap/vim-bootstrap/issues/328) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [to neovim install E117: Unknown function: plug#begin](https://github.com/editor-bootstrap/vim-bootstrap/issues/326) ## 2019-11-11 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gort](https://github.com/avelino/awesome-go/pull/2811#pullrequestreview-314869134) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add entigo](https://github.com/avelino/awesome-go/pull/2792#pullrequestreview-314867151) (Changes requested) ## 2019-11-08 - ✅ Reviewed PR in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [#24 De-selecting languages](https://github.com/editor-bootstrap/emacs-bootstrap/pull/47#pullrequestreview-313730529) (Approved) - ✅ Reviewed PR in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [#43 Added cargo-process-new global keybind](https://github.com/editor-bootstrap/emacs-bootstrap/pull/44#pullrequestreview-313730364) (Approved) ## 2019-11-07 - ✅ Reviewed PR in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [Added the doom-one theme](https://github.com/editor-bootstrap/emacs-bootstrap/pull/46#pullrequestreview-313522866) (Approved) - ✅ Reviewed PR in [golang/dep](https://github.com/golang/dep): [update CI for go 1.13](https://github.com/golang/dep/pull/2202#pullrequestreview-313595794) (Approved) ## 2019-11-06 - 🔀 Opened PR in [railwaycat/homebrew-emacsmacport](https://github.com/railwaycat/homebrew-emacsmacport): [emacs.sexy icon support](https://github.com/railwaycat/homebrew-emacsmacport/pull/180) - 🐛 Opened issue in [picandocodigo/emacs.sexy](https://github.com/picandocodigo/emacs.sexy): [github release to hosting emacs.sexy icons](https://github.com/picandocodigo/emacs.sexy/issues/35) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 37 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-11-01T00:00:00Z&until=2019-11-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 17 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2019-11-01T00:00:00Z&until=2019-11-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/emacs-bootstrap/commits?author=avelino&since=2019-11-01T00:00:00Z&until=2019-11-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2019-11-01T00:00:00Z&until=2019-11-30T23:59:59Z) - 🔨 Push to [railwaycat/homebrew-emacsmacport](https://github.com/railwaycat/homebrew-emacsmacport): 1 commit(s) - [See commits](https://github.com/railwaycat/homebrew-emacsmacport/commits?author=avelino&since=2019-11-01T00:00:00Z&until=2019-11-30T23:59:59Z) - 🔨 Push to [rumlang/rum](https://github.com/rumlang/rum): 1 commit(s) - [See commits](https://github.com/rumlang/rum/commits?author=avelino&since=2019-11-01T00:00:00Z&until=2019-11-30T23:59:59Z) ## Private contributions - 🔒 43 private contribution(s) this month --- # Foco e disciplina é a arma a favor dos seus objetivos **URL**: https://avelino.run/quote/lifestyle/foco-e-disciplina-%C3%A9-a-arma-a-favor-dos-seus-objetivos/ **Published**: 2019-10-15 **Tags**: corridaderua, im703, ironman, triathlon **Word Count**: 415 words Não sei dizer quantos dias por semana penso em desistir do meu objetivo que me faz sair todos os dias para treinar (domingo a domingo). ![IRONMAN Brasil - Com foco e disciplina alcançamos nossos objetivos](/blog/IMG_7764-2019-10-15.jpeg "IRONMAN Brasil - Com foco e disciplina alcançamos nossos objetivos") Ontem (domingo dia 2019-10-13) não foi diferente, não estava em casa, tinha passado uma noite mal dormida, comi besteira na noite anterior, mesmo assim o relógio despertou as 4 am, desliguei e falei para mim "hoje não vou treinar, foda-se" e voltei a dormir, após 1h o arrependimento bateu e lá foi eu para mais um dia de treino, em uma estrada que não conhecia, sem vontade de treinar, com pensamento super negativo, sem café da manhã e etc (tudo que geralmente passa pela nossa cabeça quando não estou afim de treinar). Durante o caminho até a estrada que iria correr passei por diversos ciclistas e todos fazendo muita força, quando passava por eles e olhava no retrovisor do carro estavam dando risada (super feliz por está ali pedalando), tudo para reforçar meu pensamento "por que diabos eu estou vindo para cá". Em fim cheguei no local de treino, fiquei enrolando dentro do carro até que chegou um grupo de ciclista e comecei ficar incomodado por esta dentro do carro. Resolvi sair e começar me arrumar para correr. Por fim sai para correr, os passos não encaixavam, meu pace estava abaixo da planilha (treino que teria que rodar), não conseguia me desconectar, ou seja, não estava fluindo. Até encarar aquela corrida como a única coisa que tinha que fazer, começar pensar sempre em mais 100 metros (geralmente uso essa técnica para +1 km, mas hoje tive que trocar o parâmetro de distância) e reparar na paisagem que tinha a minha frente. \#PQP que lugar foda, foi dia de mudar o local do escritório (correr em lugar novo), com ar mais leve e uma sensação diferente de todos as outras corridas que já fiz até hoje. Incrível como nosso cérebro tenta nos deixar na zona de conforto. Tem uma galera que manda mensagem me perguntando como faço para conseguir ter ânimo para treinar todos os dias e seguir com disciplina, a minha resposta sempre será ter objetivo claro, metas de curto, médio e longo prazo (objetivo diário, semanal, mensal, anual e de vida), mas é uma luta diária para conseguir, nada vem fácil em nossas vidas. É uma briga comigo mesmo (psicológica), quer entender o que me chama atenção no Triathlon leia esse blogpost: [Por que triathlon? Qual é o seu limite?](https://avelino.run/lifestyle/2019-06-21-por-que-triathlon/ "Por que triathlon? Qual é o seu limite?") Lute pelos seus sonhos/objetivos, ninguém disse que será fácil! --- # Open Source Contributions - October 2019 **URL**: https://avelino.run/foss/2019/10/ **Published**: 2019-10-01 **Word Count**: 189 words **Summary**: October 2019 saw 9 repositories contribute 16 impactful events, including 4 pull requests and 5 reviews, enhancing community collaboration and project growth. Explore the timeline of contributions for October 2019, showcasing a vibrant month with 9 repositories actively participating. Highlights include 4 new pull requests and 5 reviews, demonstrating a commitment to collaborative development and continuous improvement. ## 2019-10-28 - ✅ Reviewed PR in [okfn-brasil/querido-diario](https://github.com/okfn-brasil/querido-diario): [Add Uberaba/MG spider](https://github.com/okfn-brasil/querido-diario/pull/132#pullrequestreview-308160698) (Approved) ## 2019-10-14 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add fxamacker/cbor](https://github.com/avelino/awesome-go/pull/2746#pullrequestreview-301164098) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add lastpass-go](https://github.com/avelino/awesome-go/pull/2747#pullrequestreview-301163767) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adds bitcask & bitraft to Database section](https://github.com/avelino/awesome-go/pull/2776#pullrequestreview-301157813) (Approved) ## 2019-10-10 - ✅ Reviewed PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [Add Blumenau Dev Day](https://github.com/jusbrasil/tech-calendar/pull/31#pullrequestreview-300105030) (Approved) ## 2019-10-09 - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [Add Coda.Br conference](https://github.com/jusbrasil/tech-calendar/pull/30) - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [latinoware date change](https://github.com/jusbrasil/tech-calendar/pull/29) ## 2019-10-04 - 🔀 Opened PR in [rumlang/rum-mode](https://github.com/rumlang/rum-mode): [fixed typo: link melpa stable](https://github.com/rumlang/rum-mode/pull/2) ## 2019-10-01 - 🔀 Opened PR in [gojp/goreportcard](https://github.com/gojp/goreportcard): [create json report endpoint](https://github.com/gojp/goreportcard/pull/297) - 🐛 Opened issue in [gojp/goreportcard](https://github.com/gojp/goreportcard): [endpoint json return](https://github.com/gojp/goreportcard/issues/296) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-10-01T00:00:00Z&until=2019-10-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 9 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2019-10-01T00:00:00Z&until=2019-10-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2019-10-01T00:00:00Z&until=2019-10-31T23:59:59Z) - 🔨 Push to [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): 2 commit(s) - [See commits](https://github.com/jusbrasil/tech-calendar/commits?author=avelino&since=2019-10-01T00:00:00Z&until=2019-10-31T23:59:59Z) - 🔨 Push to [rumlang/rum-mode](https://github.com/rumlang/rum-mode): 2 commit(s) - [See commits](https://github.com/rumlang/rum-mode/commits?author=avelino&since=2019-10-01T00:00:00Z&until=2019-10-31T23:59:59Z) - 🔨 Push to [filmow/docker-ytbot](https://github.com/filmow/docker-ytbot): 1 commit(s) - [See commits](https://github.com/filmow/docker-ytbot/commits?author=avelino&since=2019-10-01T00:00:00Z&until=2019-10-31T23:59:59Z) ## Private contributions - 🔒 12 private contribution(s) this month --- # Open Source Contributions - September 2019 **URL**: https://avelino.run/foss/2019/09/ **Published**: 2019-09-01 **Word Count**: 70 words **Summary**: September 2019 saw a total of 3 contributions across 3 repositories, including code pushes, issue creation, and a pull request review. In September 2019, contributors made significant strides across three repositories. This timeline showcases key events such as code pushes, issue tracking, and collaborative reviews, highlighting the ongoing development and engagement within the community. ## 2019-09-30 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add wI2L/jettison](https://github.com/avelino/awesome-go/pull/2745#pullrequestreview-295191884) (Changes requested) ## 2019-09-23 - 🐛 Opened issue in [kintesh/containerise](https://github.com/kintesh/containerise): [Multi-Account Containers rules sync](https://github.com/kintesh/containerise/issues/98) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-09-01T00:00:00Z&until=2019-09-30T23:59:59Z) ## Private contributions - 🔒 2 private contribution(s) this month --- # Diga mais SIM, coloque foco no que você realmente quer **URL**: https://avelino.run/quote/2019-08-14-miga-mais-smi-coloque-foco-no-que-voce-realmente-quer/ **Published**: 2019-08-14 **Tags**: quote, mindset, diga não, diga sim, evolua **Word Count**: 261 words ![Mantenha o foco em seus objetivos](/blog/foco.png) Durante anos falava para muitas pessoas que deveria dizer mais **"não"**, que falar não tinha nada de errado dizer **"não"**, que não era simplesmente uma palavra que diria: - não quero agora - não consigo - não gosto - não estou afim - não ... Ou seja, não tinha nada de errado em dizer **"não"**, pelo contrario, monstra que você não quer abraçar o mundo e esta focado em seus objetivos. > Eita, não entendi nada agora! Por que o titulo "Diga mais SIM, coloque foco no que você realmente quer"? Como comentei _"durante anos **falava**"_ (passado, busco sempre evoluir, a principio para melhor e me forço sair da zona de conforto S2), quando usava isso com afirmação estava passando uma mensagem _subliminar para meu cérebro_ para focar no meu objetivo, isso me gerava esforço desnecessario e uma volta para lembro qual era meu real proposito de dizer **NÃO**. Hoje digo **"sim"** para meu objetivo, com isso falo **não** para tudo que sai fora do foco! A primeira vista parece ser a mesma coisa né? Essa simples troca de **mindset** gera menos consumo mental para dizer **não**, porque deixa a cada **não** meu **SIM** ainda mais claro. Como dizer **não** é um tema complicado para muitas pessoas, sua mente fica tranquila porque esta colocando seu objetivo a frente do não. **#evolua** ## Blogpost relacionado: - [Porque que triathlon? Qual é seu limite?](https://avelino.run/lifestyle/2019-06-21-por-que-triathlon/) - [Life Won’t Wait / A vida não vai esperar](https://avelino.run/lifestyle/2019-05-24-life-wont-wait/) - [Meu 2018 foi ano de muito aprendizado](https://avelino.run/lifestyle/2018-12-28-meu-2018-foi-ano-de-muito-aprendizado/) - [Motivação é pessoal, encontre oque lhe motiva continuar](https://avelino.run/quote/2018-08-13-motivacao-e-pessoal-encontre-oque-lhe-motiva-continuar/) - [A oportunidade disfarçada de trabalho](https://avelino.run/quote/2018-05-28-ann-landers-a-oportunidade-disfarcada-de-trabalho/) - [Férias/2018: Viagem de carro pelo Nordeste em família](https://avelino.run/lifestyle/2018-11-12-viagem-de-carro-em-familia-2018/) --- # Meu treino: reboot metabólico **URL**: https://avelino.run/quote/lifestyle/2019-08-09-meu-treino-reboot-metabolico/ **Published**: 2019-08-09 **Tags**: meu treino, reboot metabólico, triathlon, biohacking **Word Count**: 292 words ![reboot metabólico - Biohacking](/blog/biohacking.jpg) Sempre que inicio um novo ciclo gosto de fazer esse reboot para dar um gás e voltar logo ao ritmo de antes. Esse reboot me ajuda a desinchar, perder peso e acelerar o metabolismo. São algumas experiência pessoais e passos que sigo (tem me ajudado muito), não tenho nenhum artigo científico para balizar isso. Se quiser tentar, se liga: 1. Durma melhor. Existem inúmeras pesquisas falando sobre os benefícios do sono. Ajuda na perda de peso e regulação dos hormônios que podem diminuir o metabolismo. Tente aumentar as horas de sono de qualidade. 1. Aumente a ingestão de águe e _CORTE O ÁLCOOL_ (eu não bebo, mas _fica a dica_). Nem preciso falar da importância da água. Mas é algo que não prestamos muita atenção quando estamos de férias. Beba muita água. Principalmente quem quer perder peso, a água vai ajudar a desinchar e diminuir a vontade de doces. Cortar o álcool é complicado, especialmente por causa dos compromissos sociais KKKKKJKK , mas é por um período pequeno e vale a pena. 1. Diminua a ingestão de carboidratos, se puder corte o açúcar por um tempo. Vai por mim, eu não acredito nessa história de "detox" mas parar com o açúcar por um período sempre me ajuda a ter mais foco e prestar mais atenção na dieta. 1. Inclua treinos de força. A musculação deve fazer parte da rotina de qualquer atleta, mas especialmente nessa período de reboot é importante caprichar nos exercícios resistidos para aumentar o metabolismo. 1. Capriche nos treinos de tiros. Seja correndo, pedalando ou nadando, nesse período gosto de incluir treinos de alta intensidade e curta duração. Esses treinos tb devem fazer parte da rotina de qualquer atleta, mas gosto de aumentar a frequência deles nessa época. Lhe convido em embarcar nessa comigo! --- # Open Source Contributions - August 2019 **URL**: https://avelino.run/foss/2019/08/ **Published**: 2019-08-01 **Word Count**: 100 words **Summary**: August 2019 saw significant contributions with 4 repositories updated, 1 issue opened, and 1 pull request reviewed, showcasing ongoing collaboration and project enhancement. In August 2019, a series of contributions were made across multiple repositories, reflecting a commitment to collaboration and improvement within the community. This timeline highlights the key activities, including pushes, a pull request review, and issue management that shaped the month. ## 2019-08-20 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add new repository: pletter](https://github.com/avelino/awesome-go/pull/2614#pullrequestreview-277351011) (Approved) ## 2019-08-01 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [periodic review of the projects contained in the list](https://github.com/avelino/awesome-go/issues/2649) ## Commits - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 6 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2019-08-01T00:00:00Z&until=2019-08-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-08-01T00:00:00Z&until=2019-08-31T23:59:59Z) - 🔨 Push to [avelino/awesome-racket](https://github.com/avelino/awesome-racket): 2 commit(s) - [See commits](https://github.com/avelino/awesome-racket/commits?author=avelino&since=2019-08-01T00:00:00Z&until=2019-08-31T23:59:59Z) ## Private contributions - 🔒 11 private contribution(s) this month --- # SPCity Marathon 42KM **URL**: https://avelino.run/quote/lifestyle/2019-07-28-spcity-maratona-corrida-de-rua/ **Published**: 2019-07-28 **Tags**: quote, instagram, maratona, meia maratona, corrida de rua **Word Count**: 83 words ![SPCity Maratona 21/42KM](https://scontent.fcgh17-1.fna.fbcdn.net/v/t1.0-9/67775430_10157150948743726_6941111919969304576_n.jpg?_nc_cat=106&_nc_oc=AQnCdB-RSLFHWculg3cfFntvpnvzPpWWnym8diSZdzAUqNslhV8vwoVDJC0Zk0AkWXs&_nc_ht=scontent.fcgh17-1.fna&oh=c0612df98e5002cd0d3e8e2218c34aaf&oe=5DA1F72C) > Mais uma prova, seguido de mais um textão. O que dizer dessa prova dura onde a subida castigou (23 de maio)? Não saiu como eu esperava, mas fui minha melhor versão, passei o tempo todo com tosse por causa do resfriado. O que me chama atenção em prova de longa distância é o psicológico onde precisamos lidar com a adversidade, manter a resiliência e os pensamentos no lugar... Sem sobra de dúvida nessa prova o meu cérebro trabalhou muito. *Que venha as próximas!* --- # Trocando forma de pensar (mudando mindset) de empresário para 'empregado' **URL**: https://avelino.run/trocando-forma-de-pensar-mudando-mindset-de-empres%C3%A1rio-para-empregado/ **Published**: 2019-07-07 **Tags**: mindset, empreender, startup, startups, clt, empreendedor, empresario, evolua **Word Count**: 674 words ![Fechando a startup e voltando para o mercado de travalho](/blog/close.jpg#center) Se ainda não me conhece empreendi desde 2011 até junho/2019 (durante esse tempo comentei algumas vezes que [nunca mais iria empreender](https://avelino.run/eu-nunca-mais-vou-empreender/ "Eu nunca mais vou empreender")) e resolvi voltar para o mercado de trabalho e não é por motivos que quebrei financeiramente, indo na contramão do _hype_ de **startups**. Acredito que surgiu diversas perguntas em sua cabeça ao ler o texto acima, acredite que na minha cabeça foram longos meses (quase 1 ano) refletindo sobre o assunto, colocando no papel os prós e contras, imaginando como seria, como me portaria em algumas situações até que por fim resolvi experimentar um ambiente novo, “desconhecido” e acredito que seja desafiador (pelo menos para mim). Recomenda à leitura desse blogpost [Encerrando ciclos, viva no presente não se paralise pelo passado](https://avelino.run/encerrando-ciclos-viva-no-presente-n%C3%A3o-se-paralise-pelo-passado/) ## Como pensava durante alguns anos? Quando entrei na área de engenharia de software (desenvolvimento, programação) meus colegas de trabalho me auxiliaram criar um pensamento o de que carreira seria uma escada onde começaríamos como desenvolvedor Júnior (baixa experiência e com muita sede de aprender) até um cargo de executivo (muita experiência e perfil de líder, na época não sabia o que era liderar e chamava de chefe), seguindo uma escada mais ou menos assim: 1. Estagiário 2. Desenvolvedor Júnior 3. Desenvolvedor Pleno 4. Desenvolvedor Sênior 5. Líder técnico 6. Gerente de desenvolvimento ou projeto 7. Gerente da área de tecnologia 8. Diretor da área de tecnologia 9. Empresario - big boss, esse tópico surgiu depois de alguns anos trabalhando Conforme o tempo vai passando e vamos ganhando experiência na área técnica começamos perceber que não é uma escadinha e podemos nos manter na área técnica ou gestão - vulgo chamada carreira em Y - dependendo do perfil do profissional, onde cada pessoa senta mais familiaridade (gostar). Para chegar nesse pensamento tive que me desconstruir diversas vezes e conversar com diversas pessoas para entender o que elas pensavam sobre o assunto, até em um discernimento e conseguir discutir sobre assunto. Em 2018/2019 palestrei bastante sobre a carreira do engenheiro de software, expondo porque existe especialização academia (por exemplo, MBA) e falando sobre essa tal de carreira em Y. Mesmo depois dessa viagem de desconstrução pessoal o meu pensamento sobre se tornar empresario não mudou, ou seja, uma vez empresario sempre empresario e terei que criar outra empresa caso canse do que estou fazendo. Durante alguns momentos de meditação voltada para meu lado profissional eu comecei refletir sobre esse assunto, até relacionar meu antigo pensamento com a área de desenvolvimento de software e empreender, surgindo turbilhões de questionamentos: * Por que não posso voltar para o mercado caso eu queria? * Estou quebrado financeiramente para voltar ao mercado? * Só voltarei para o mercado caso eu quebrei e não consiga recomeçar? * Uma vez empresario, sempre empresario? * O que eu gosto de fazer? O que tenho prazer de fazer? * ... Como comentado foi um processo longo para conseguir responder algumas perguntas, mergulhando dentro do meu próprio eu e com muita ajuda de terapia, sempre evoluindo pessoalmente um degrau por vez. `Dizem que empreender faz ganhar muito dinheiro, mas gastamos igual ou mais com terapia.` ## Voltei ser funcionário? Sim e não, meu perfil de empreendedor (fazer o projeto/empresa acontecer) é uma característica pessoal minha, onde não quero mudar (acredito que consigo, mas não quero). Hoje ocupo o cargo de [head de engenharia](https://www.linkedin.com/feed/update/urn:li:activity:6552198793771659264/) no [Jusbrasil](https://www.jusbrasil.com.br/) que é referência no mercado Jurídico Brasileiro, tocando um projeto que tem tudo para revolucionar a forma que os advogados produzem suas peças. Em 2014 palestrei muito sobre [empreendendo dentro da empresa que você trabalha](https://avelino.run/quote/2018-03-19-quote-empreendendo-em-seu-local-de-trabalho/) e mesmo assim eu voltei pensar ao contrário da forma que pensava antes. O cérebro humano é uma máquina que se adapta a qualquer ambiente e adversidade, treine ele para fazer o que você quer e precise fazer, sempre com o foco em longevidade com uma rotina sustentável e saudável para você. `Você comentou que voltou ser funcionário e respondeu “sim e não”, como assim?` Estou usando todos meus skills de empreendedor que envolve controle de fluxo de caixa, vontade de fazer, liderança de time, gerenciamento de expectativas e muito mais, para tocar o projeto que estou envolvido. **#evolua** --- # Open Source Contributions - July 2019 **URL**: https://avelino.run/foss/2019/07/ **Published**: 2019-07-01 **Word Count**: 430 words **Summary**: July 2019 saw 8 repositories contribute 37 events, including 5 new pull requests and 26 reviews, highlighting significant collaboration in the open-source community. Explore the contributions made in July 2019, where a total of 8 repositories engaged in 37 events. This month featured 5 newly opened pull requests, 26 reviews, and 1 issue, reflecting the vibrant activity and collaboration within the open-source community. ## 2019-07-26 - 🐛 Opened issue in [frontendbr/vagas](https://github.com/frontendbr/vagas): [[Remoto] Senior Fullstack Engineer at Jusbrasil](https://github.com/frontendbr/vagas/issues/2241) ## 2019-07-25 - 🔀 Opened PR in [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): [add jusbrasil](https://github.com/lerrua/remote-jobs-brazil/pull/159) ## 2019-07-20 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add flute](https://github.com/avelino/awesome-go/pull/2624#pullrequestreview-264474492) (Approved) ## 2019-07-19 - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [add latinoware conference](https://github.com/jusbrasil/tech-calendar/pull/23) - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [add GopherCon Brazil 2019](https://github.com/jusbrasil/tech-calendar/pull/22) - 🔀 Opened PR in [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): [fixed TDC 2019 date](https://github.com/jusbrasil/tech-calendar/pull/21) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add tdewolff/canvas](https://github.com/avelino/awesome-go/pull/2623#pullrequestreview-264425158) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add new repository: pletter](https://github.com/avelino/awesome-go/pull/2614#pullrequestreview-264424278) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added go2p](https://github.com/avelino/awesome-go/pull/2615#pullrequestreview-264423820) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add thazelart/terraform-validator in validation](https://github.com/avelino/awesome-go/pull/2628#pullrequestreview-264423185) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [appointy/jaal added in query language](https://github.com/avelino/awesome-go/pull/2627#pullrequestreview-264422918) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-twitch-ext](https://github.com/avelino/awesome-go/pull/2625#pullrequestreview-264422633) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Performance section, review some packages](https://github.com/avelino/awesome-go/pull/2622#pullrequestreview-264422211) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add HugoSmits86/mcquant in images](https://github.com/avelino/awesome-go/pull/2629#pullrequestreview-264421591) (Changes requested) ## 2019-07-16 - 🔍 Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [Added games in main distribution](https://github.com/avelino/awesome-racket/pull/9#pullrequestreview-262689367) (Changes requested) ## 2019-07-12 - ✅ Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [added GUI Development](https://github.com/avelino/awesome-racket/pull/7#pullrequestreview-261311291) (Approved) - ✅ Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [Update README.md](https://github.com/avelino/awesome-racket/pull/6#pullrequestreview-261027963) (Approved) ## 2019-07-08 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Performance section, review some packages](https://github.com/avelino/awesome-go/pull/2613#pullrequestreview-259095884) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add bokchoy library](https://github.com/avelino/awesome-go/pull/2612#pullrequestreview-259058134) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Darkroom to the Images section](https://github.com/avelino/awesome-go/pull/2598#pullrequestreview-258741643) (Approved) ## 2019-07-07 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gqlc](https://github.com/avelino/awesome-go/pull/2611#pullrequestreview-258641373) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [docs: fix typo](https://github.com/avelino/awesome-go/pull/2610#pullrequestreview-258631090) (Approved) ## 2019-07-06 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add linker to awesome-go misc section](https://github.com/avelino/awesome-go/pull/2605#pullrequestreview-258603576) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Nano ID - unique ID generator](https://github.com/avelino/awesome-go/pull/2600#pullrequestreview-258583831) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add godis, a redis client library](https://github.com/avelino/awesome-go/pull/2601#pullrequestreview-258583802) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add sops (mozilla-services/sops)](https://github.com/avelino/awesome-go/pull/2603#pullrequestreview-258583689) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added ptrie](https://github.com/avelino/awesome-go/pull/2606#pullrequestreview-258583571) (Approved) ## 2019-07-05 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [fixed travis: install hugo cms latest version](https://github.com/prest/doc-template/pull/32) - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [add some chinese language version docs](https://github.com/prest/doc-template/pull/30#pullrequestreview-258187120) (Approved) ## 2019-07-04 - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [Include the explanation of debug mode](https://github.com/prest/doc-template/pull/31#pullrequestreview-258132413) (Approved) ## 2019-07-01 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [adding in ops](https://github.com/avelino/awesome-go/pull/2597#pullrequestreview-256547803) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [uniq added under UUID](https://github.com/avelino/awesome-go/pull/2573#pullrequestreview-256547142) (Changes requested) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 18 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-07-01T00:00:00Z&until=2019-07-31T23:59:59Z) - 🔨 Push to [jusbrasil/tech-calendar](https://github.com/jusbrasil/tech-calendar): 5 commit(s) - [See commits](https://github.com/jusbrasil/tech-calendar/commits?author=avelino&since=2019-07-01T00:00:00Z&until=2019-07-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2019-07-01T00:00:00Z&until=2019-07-31T23:59:59Z) - 🔨 Push to [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): 1 commit(s) - [See commits](https://github.com/lerrua/remote-jobs-brazil/commits?author=avelino&since=2019-07-01T00:00:00Z&until=2019-07-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 1 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2019-07-01T00:00:00Z&until=2019-07-31T23:59:59Z) ## Private contributions - 🔒 45 private contribution(s) this month --- # About **URL**: https://avelino.run/about/ **Published**: 2019-06-24 **Tags**: about, avelino, open source, thiago avelino **Word Count**: 111 words I'm Thiago Avelino, CTO at [Buser](https://linkedin.com/company/buserbrasil/), creator and maintainer of several open source projects, and an Applied Mathematics alumnus from [IME-USP](https://www.ime.usp.br). I contribute to many open source initiatives. My current focus is on team building, technical leadership, people management (human/evolutionary psychology), and the open source/distributed contribution ecosystem. In my day-to-day work, I help my team grow professionally and deliver outstanding business results. I often speak about open source contribution. While I now spend more time on people management than coding, I still enjoy programming. I usually work with: - Distributed systems - Lisp dialects (Clojure/Racket) - Go - Python Notably, I'm a long-time maintainer of [Awesome Go](https://github.com/avelino/awesome-go). > 🚴‍♂️ A good dream is a dream lived --- # Voltando ter prazer em palestrar **URL**: https://avelino.run/quote/2019-06-22-prazer-em-palestrar/ **Published**: 2019-06-22 **Tags**: quote, instagram, cto, palestra, palestrante, evolua **Word Count**: 128 words Fazia anos que não palestrava e sentia tesão pelo que eu estava falando, após me processo de perca de peso eu geralmente palestrava porque era convidado, mas descia do palco como um profissional frustrado por não exalar o prazer pelo que eu estava falando. Essa conferência foi diferente, falei sobre minha carreira de engenheiro de software e ver o pessoal conectado com cada passo que eu dava foi fantástico e extremamente motivador! Busque fazer o que você realmente gosta de fazer, não olhe para sua carreira profissional apenas para o lado financeiro, faça o que gosta e mova-se para sua profissão pagar o que você merece receber, nos somos bons em arrumar desculpas, não jogue seu tempo fora tentando mudar o mundo e mude o seu mundo **#evolua** --- # Por que triathlon? Qual é o seu limite? **URL**: https://avelino.run/quote/lifestyle/2019-06-21-por-que-triathlon/ **Published**: 2019-06-21 **Tags**: triathlon, corrida de rua, bariatrica, perca de peso, esporte, letspush **Word Count**: 492 words Esporte? O que é isso? ![IRONMAN (triathlon), minha meta é chegar até lá](/blog/ironman-triathlon.jpg#center) Meu pai quase foi um jogador de futebol e por ele gostar muito de futebol desde pequeno sempre me incentivou a gostar, mas nunca foi minha cara! Cresci pensando que só existia futebol como esporte e nunca tive curiosidade em nenhum outro tipo de esporte, cá entre nós, por que sair da zona de conforto? Depois de ganhar muito peso (chegando a 180kg) resolvi começar correr para me desconectar do “dia a dia empreendedor” e durante a corrida pensar em como resolver algum problema que tinha dentro da empresa, porém o tiro saiu pela culatra. Enquanto estava “correndo” (no começo caminhando) não conseguia pensar em nada e esse tempo começou ser importante para mim, era o momento de cuidar da minha saúde mental. Não sou um corredor rápido, mas o que sempre me chamou atenção na corrida são longas distâncias, principalmente depois que comecei ligar o fato de correr durante muito tempo com luta mental, como mudar minha forma de pensar (mindset) para conseguir correr 10, 15, 21km, ou a distância que você conseguir imaginar? Após a primeira prova de 5km sempre busquei provas com distâncias maiores e sempre lutando contra meu próprio cérebro. Com o passar do tempo comecei seguir algumas pessoas que julgo correr bem e via que eles praticavam outros esporte também, na real eles praticam triathlon que é composto por 3 modalidades: nadar, pedalar e correr. Nós de tecnologia somos curiosos ao entender como surgiu as coisas, comigo não foi diferente ao olhar para o triathlon, fui buscar como surgiu e acabei achando um esporte lindo, principalmente pela superação de nós mesmos, como faço para passar 12 horas (tem atleta que faz em menos e o limite são 17 horas) em uma prova sem morrer, pô 12 horas é meio-dia, eu reclamava de correr 30 minutos imagina se conseguiria ficar durante 12 horas fazendo uma prova (começar na parte da amanhã e terminar na parte da noite), estou falando de uma prova chamada IRONMAN. Até que por fim comecei treinar para esse negócio e é viciante. A briga psicológica contra nós mesmo para vencer nossas dores musculares e buscar qual é nosso real limite. Muitas pessoas me perguntam se não sinto: - dor - preguiça - vontade de parar, mas sei que é nesse momento que irei me destacar dos outros participantes - saudade do que gostava de fazer (balada, festa, trabalhar muito, etc) - acordar tarde - dormir tarde Logicamente que sinto dores, para cada **sim** que damos ele vem repleto de **não**, ou seja, vou fazer meu primeiro **IRONMAN (triathlon, me tornar um homem de ferro)**, para isso preciso me dedicar aos treinos e focar 100% no que me levará até a prova. Se fui capaz de seguir o treino que o coach (assessoria esportiva) passou para fazer antes da prova, no dia da prova será uma puta diversão seguido de diversos desafios psicológicos e nesse momento devo ser forte para resistir as diversidades com muita resiliência. --- # Open Source Contributions - June 2019 **URL**: https://avelino.run/foss/2019/06/ **Published**: 2019-06-01 **Word Count**: 151 words **Summary**: June 2019 saw 5 repositories contribute 13 activities, including 8 pull request reviews and 5 significant code pushes, enhancing community collaboration. Explore the contributions made in June 2019, highlighting the collaborative efforts across five repositories. This timeline showcases the impactful code pushes and reviews that shaped the month. ## 2019-06-19 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go-firestorm ORM lib for firestore](https://github.com/avelino/awesome-go/pull/2576#pullrequestreview-251647576) (Approved) ## 2019-06-17 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add commander](https://github.com/avelino/awesome-go/pull/2475#pullrequestreview-250565020) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added project Tagify](https://github.com/avelino/awesome-go/pull/2569#pullrequestreview-250551784) (Approved) ## 2019-06-03 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add cmdr](https://github.com/avelino/awesome-go/pull/2550#pullrequestreview-244942380) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Activating Open Collective](https://github.com/avelino/awesome-go/pull/2552#pullrequestreview-244770637) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add inject](https://github.com/avelino/awesome-go/pull/2549#pullrequestreview-244767700) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add certificates](https://github.com/avelino/awesome-go/pull/2548#pullrequestreview-244767379) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/cabify/gotoprom library](https://github.com/avelino/awesome-go/pull/2543#pullrequestreview-244765622) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 11 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-06-01T00:00:00Z&until=2019-06-30T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 5 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2019-06-01T00:00:00Z&until=2019-06-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2019-06-01T00:00:00Z&until=2019-06-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2019-06-01T00:00:00Z&until=2019-06-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2019-06-01T00:00:00Z&until=2019-06-30T23:59:59Z) ## Private contributions - 🔒 7 private contribution(s) this month --- # Life Won’t Wait / A vida não vai esperar **URL**: https://avelino.run/quote/lifestyle/2019-05-24-life-wont-wait/ **Published**: 2019-05-24 **Tags**: quote, instagram, a vida não espera **Word Count**: 147 words ![Life Won’t Wait/A vida não vai esperar](https://scontent.fcgh17-1.fna.fbcdn.net/v/t1.0-9/60848261_10156991528318726_6304360040262270976_n.jpg?_nc_cat=100&_nc_oc=AQmiy3hJFolcsu9YKKaTG-SGX8aTe8_Fkp6wRlIAi5Y_Ust0aHbVcqUbPWLHJ4f3Eo8&_nc_ht=scontent.fcgh17-1.fna&oh=cd845a1736df0da965efc2ecb49e501a&oe=5DAAFC13) Nossa vida não irá parar o cronômetro esperando você terminar suas atividades do trabalho para começar ter hábitos saudáveis. Sem desculpa que não temos tempo, está cansado e mais um monte de *blablablá*, o que esta faltando é **equilíbrio** no seu dia a dia, trabalhar é extremamente importe e necessário (os boletos não para de chegar né meus amigos(as)), mas cuidarmos da pessoa que mais nos ama é mais importante, sem ela não se consegue fazer mais nada. Mas quem é a pessoa que mais nos ama? Você próprio, cuide de sua saúde, pare imediatamente de procrastinar a virada de chave para uma vida onde você tenha controle dos seus passos sendo saudável, equilibrada, sem ansiedade, com exercício fisico, etc. Mova-se para frente, deixe os seus maus hábitos para trás, viva o presente usando o passado como base de aprendizado e mapa para saber onde não voltar! --- # Open Source Contributions - May 2019 **URL**: https://avelino.run/foss/2019/05/ **Published**: 2019-05-01 **Word Count**: 216 words **Summary**: May 2019 saw 12 repositories contributing 18 total events, including 9 pushes, 2 pull requests, and 6 reviews, highlighting active collaboration in open-source projects. In May 2019, the open-source community made significant strides with 12 repositories contributing to a total of 18 events. This timeline showcases the collaborative efforts, including pushes, pull requests, and reviews that defined the month, reflecting the vibrant activity and continuous improvement within the projects. ## 2019-05-31 - 🐛 Opened issue in [curiouslychase/dotfiles](https://github.com/curiouslychase/dotfiles): [argon-theme (emacs) support 256 color (term)](https://github.com/curiouslychase/dotfiles/issues/21) ## 2019-05-28 - 🔀 Opened PR in [j-mcnally/buildpack-caddy](https://github.com/j-mcnally/buildpack-caddy): [upgrade caddy bin version](https://github.com/j-mcnally/buildpack-caddy/pull/2) ## 2019-05-27 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add x-mod/routine package](https://github.com/avelino/awesome-go/pull/2540#pullrequestreview-242324812) (Approved) ## 2019-05-26 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add victoriametrics to database list](https://github.com/avelino/awesome-go/pull/2539#pullrequestreview-242043996) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add lets-proxy2](https://github.com/avelino/awesome-go/pull/2537#pullrequestreview-242035364) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update maintenance status of mgo](https://github.com/avelino/awesome-go/pull/2538#pullrequestreview-242034972) (Approved) ## 2019-05-14 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update resgate](https://github.com/avelino/awesome-go/pull/2523#pullrequestreview-237504300) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add vardius/gollback](https://github.com/avelino/awesome-go/pull/2522#pullrequestreview-237503707) (Approved) ## 2019-05-02 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [upgrade editURL](https://github.com/prest/doc-template/pull/29) ## Commits - 🔨 Push to [avelino/cover.run](https://github.com/avelino/cover.run): 1 commit(s) - [See commits](https://github.com/avelino/cover.run/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [avelino/awesome-racket](https://github.com/avelino/awesome-racket): 2 commit(s) - [See commits](https://github.com/avelino/awesome-racket/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [filmow/docker-ytbot](https://github.com/filmow/docker-ytbot): 6 commit(s) - [See commits](https://github.com/filmow/docker-ytbot/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 2 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [structy/porganizer](https://github.com/structy/porganizer): 1 commit(s) - [See commits](https://github.com/structy/porganizer/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2019-05-01T00:00:00Z&until=2019-05-31T23:59:59Z) ## Private contributions - 🔒 99 private contribution(s) this month --- # Formando desenvolvedores de alta performance **URL**: https://avelino.run/formando-desenvolvedores-de-alta-performance/ **Published**: 2019-04-15 **Tags**: time, alta performance, formação, desenvolvimento **Word Count**: 710 words ![Transformando desenvolvedores junior em desenvolvedor de alta performance](/blog/atleta-alta-junior.jpg#center) Estou a mais de 1 ano treinando para meu primeiro triathlon (**IRONMAN 70.3**) e nos últimos 7 meses treinando com time de alta performance que faz triathlon profissionalmente a muitos anos. O ano de 2018 foi um ano de muito aprendizado em uma área que nunca imaginei que entraria, para contextualizar segue o conteúdo abaixo: ## Novos atletas no time Quando recebi o convite para fazer parte do time de alta performance (aka senior) eu me vi alguns anos atras entrando no mercado de trabalho como desenvolvedor **junior** e com muita sede de aprender. Infelizmente não foi tão fácil, eu já vinha treinando por conta propria a alguns meses para o Triathlon (que até então não tinha data), com isso trouxe alguns vícios (por sinal muito errado) para o meu dia a dia de treino com atletas profissionais, venho aprendendo a cada dia que passa a respeitar meus limites, me conhecendo e buscando um pouco mais a cada dia. Nos primeiros dias de treino junto com o time tentei entender ao máximo cada momento do treino, mas era difícil fazer as perguntas certas na hora certa, era tudo muito novo e diferente do que eu estava acostumado treinar, com o passar dos dias eu comecei conseguir fazer algumas perguntas, pois consegui organizar o fluxo de ideias e as dúvidas ficaram mais claras. Nesse time que faço parte é extremamente comum entrar _“novos membros”_, com isso eles tem um processo de onboard bem definido e claro por todos os membros, assim não dependendo só de um membro (o personal training por exemplo) para explicar o que deve ser feito e onde estou errando (julgo o mais importante), assim deixando o feedback em um tempo extremamente curto evitando ao máximo lesões. Como estamos lidando com parte muscular do corpo de uma pessoa que tem que se levar ao limite, qual quer erro não corrigido corretamente trará uma lesão muscular, que em muitos casos levam algumas semanas para se recuperar. Quando acontece lesões em um membro todos os atletas irão _“pagar”_ por esse erro, tendo que diminuir o ritmo para o atleta lesionado se recuperar e conseguir acompanhar novamente o treino. Todos os atletas do time tem objetivos claros e não quer ter impedimento para alcançar seus objetivos, por esse motivo todos os membros se ajuda e corrige uns aos outros. Deixa eu resumir isso tudo: * Objetivo claro - alta performance em que? * Disciplina: fazer todos os dias (ser constante), mesmo quando não queremos * _não precisa acelerar, basta não parar_ * Pensamento a longo prazo: os grandes saltos vêm vivendo o presente pensando em colher no futuro > Ninguém segura uma pessoa com foco e motivada > **Passe bom:** Te leva a meta > **Passe certo:** Te leva a e alavanca para aproxima meta > > _busque **fazer** passe certo_ ## Cruzando paralelo com time de desenvolvimento de software Após entender o processo de onboard de novos atletas comecei refletir sobre o onboard de novos membros **júniores** na área de desenvolvimento, me surgindo alguns questionamentos: * Porque não colocamos os novos desenvolvedores júnior junto com desenvolvedores sênior? * Quais tarefas passamos para os desenvolvedores júnior quando ele começa? * Porque não colocamos eles junto em um time que está em todo vapor e sincronizado? * Como, porque ... diversas perguntas me veio átona Em meus projetos e empresas eu não colocava desenvolvedores júnior em time que estava entregando achando que ele iria ficar extremamente perdido e coagido por está lidando com desenvolvedores mais experientes onde está com tempo para entregar. Analisando agora acho que _sempre_ fiz errado. Se queremos que uma pessoa ganhe skill sem ter que quebrar muito a cabeça (conhecido como **“auto de data”**), basta colocar essa pessoa para interagir com quem domina o assunto em questão, as pessoas mais experientes ajudará você _cortar_ um enorme caminho. Principalmente em desenvolvimento de software que não é uma ciência exata e experiência conta muito, experiência não é uma coisa que consigamos tirar da cabeça da pessoa X e colocar na pessoa Y, mais podemos diminuir essa barreira quando ambos estão interagindo no dia a dia. Não basta colocar o desenvolvedor júnior em time que tenha mais experiencia, precisamos ter um processo de onboard bem definido e com todos os membros do time alinhado com o proposito a ser alcançado com novos membros ingressando ao time. --- # Open Source Contributions - April 2019 **URL**: https://avelino.run/foss/2019/04/ **Published**: 2019-04-01 **Word Count**: 225 words **Summary**: April 2019 saw 9 repositories contribute 18 events, including pushes, pull requests, and reviews, highlighting active collaboration and development progress. In April 2019, developers made significant contributions across 9 repositories, resulting in a total of 18 events. This timeline showcases the collaborative efforts, including code pushes, pull requests, and reviews, that propelled project advancements and fostered community engagement. ## 2019-04-30 - ✅ Reviewed PR in [nuveo/log](https://github.com/nuveo/log): [log: fix typo](https://github.com/nuveo/log/pull/26#pullrequestreview-232305166) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [URI white list](https://github.com/prest/prest/issues/354) ## 2019-04-28 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Go modules are the official package management going forward](https://github.com/avelino/awesome-go/pull/2492#pullrequestreview-231453417) (Approved) ## 2019-04-16 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add commander](https://github.com/avelino/awesome-go/pull/2475#pullrequestreview-227143085) (Changes requested) ## 2019-04-10 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [template: split used example](https://github.com/prest/doc-template/pull/28) ## 2019-04-09 - 🔀 Opened PR in [prest/template](https://github.com/prest/template): [add split func on template](https://github.com/prest/template/pull/5) ## 2019-04-08 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add osamingo/checkdigit lib](https://github.com/avelino/awesome-go/pull/2464#pullrequestreview-224069121) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [Database url fix](https://github.com/prest/config/pull/26#pullrequestreview-223990988) (Approved) ## 2019-04-06 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add sslmgr](https://github.com/avelino/awesome-go/pull/2460#pullrequestreview-223537314) (Changes requested) ## 2019-04-05 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go-urlshortener](https://github.com/avelino/awesome-go/pull/2459#pullrequestreview-223448219) (Changes requested) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Do not add stmt in cache if use transaction](https://github.com/prest/adapters/pull/52#pullrequestreview-223334131) (Approved) ## 2019-04-04 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add treap](https://github.com/avelino/awesome-go/pull/2457#pullrequestreview-222990363) (Changes requested) ## 2019-04-02 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add dotchain/dot](https://github.com/avelino/awesome-go/pull/2451#pullrequestreview-221927980) (Approved) ## Commits - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 3 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2019-04-01T00:00:00Z&until=2019-04-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 2 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2019-04-01T00:00:00Z&until=2019-04-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-04-01T00:00:00Z&until=2019-04-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2019-04-01T00:00:00Z&until=2019-04-30T23:59:59Z) - 🔨 Push to [prest/template](https://github.com/prest/template): 1 commit(s) - [See commits](https://github.com/prest/template/commits?author=avelino&since=2019-04-01T00:00:00Z&until=2019-04-30T23:59:59Z) ## Private contributions - 🔒 163 private contribution(s) this month --- # Thanks ❤️🙌 **URL**: https://avelino.run/thanks/ **Published**: 2019-03-24 **Tags**: thanks, supporting, support **Word Count**: 41 words I’m truly grateful to all the wonderful humans and companies [supporting](https://github.com/sponsors/avelino) my open source work. ## Name list - [@cristaloleg](https://github.com/cristaloleg) - [@fcpimenta](https://github.com/fcpimenta) - [@aidasap](https://github.com/aidasap) - [@dans-stuff](https://github.com/dans-stuff) - [@sashamelentyev](https://github.com/sashamelentyev) - [your name here...](https://github.com/sponsors/avelino) > Want to talk to me? i look forward to your [email](mailto:avelinorun+oss@gmail.com) ## Companies - [![Doppler](/sponsors/doppler-logo.png)](https://bit.ly/awesome-go-doppler) - [![x-team](/sponsors/xteam-logo.svg)](https://bit.ly/awesome-go-xteam) - [![WorkOS](/sponsors/workos-logo-white-bg.svg)](https://bit.ly/awesome-go-workos) - [![keygen](/sponsors/keygen-logo.png)](https://bit.ly/awesome-go-keygen) - [![Deploys by Netlify](https://www.netlify.com/img/global/badges/netlify-dark.svg)](https://bit.ly/awesome-go-netlify) - [![CTO.ai](/sponsors/cto-logo.png)](https://go.cto.ai/3KJfMKv) - [![Digital Ocean](/sponsors/do_logo_horizontal_blue-210.png)](https://bit.ly/awesome-go-digitalocean) [learn more here](https://twitter.com/avelinorun/status/1293969216417214466) - [around](https://bit.ly/awesome-go-around) --- # Open Source Contributions - March 2019 **URL**: https://avelino.run/foss/2019/03/ **Published**: 2019-03-01 **Word Count**: 673 words **Summary**: March 2019 saw 16 repositories with 7 pull requests and 29 reviews, showcasing community engagement and significant contributions across various projects. In March 2019, the collaborative efforts across 16 repositories resulted in 7 new pull requests and 29 reviews. This timeline highlights key contributions and events, reflecting the vibrant activity and dedication within the community. ## 2019-03-31 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add `testmd` -- a markdown-to-golang-test converter](https://github.com/avelino/awesome-go/pull/2447#pullrequestreview-220860522) (Approved) ## 2019-03-28 - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [Relase assets with different name pattern](https://github.com/coder/code-server/issues/373) ## 2019-03-27 - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Remove local machine reference](https://github.com/coder/code-server/pull/342#pullrequestreview-219354064) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add `go-tools/multithreading` library for managing goroutines](https://github.com/avelino/awesome-go/pull/2446#pullrequestreview-219775419) (Approved) ## 2019-03-26 - 🔀 Opened PR in [nuveo/docconv](https://github.com/nuveo/docconv): [upgrade excelize GetRows package](https://github.com/nuveo/docconv/pull/14) - ✅ Reviewed PR in [nuveo/docconv](https://github.com/nuveo/docconv): [Handle GetRows error in line 51 from xlsx.go](https://github.com/nuveo/docconv/pull/13#pullrequestreview-218993435) (Approved) - ✅ Reviewed PR in [nuveo/docconv](https://github.com/nuveo/docconv): [Download dependences and run test in verbose mode](https://github.com/nuveo/docconv/pull/15#pullrequestreview-218993024) (Approved) - 🐛 Opened issue in [nuveo/docconv](https://github.com/nuveo/docconv): [TestConvertPDF crash](https://github.com/nuveo/docconv/issues/16) ## 2019-03-24 - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Update Dockerfile](https://github.com/coder/code-server/pull/327#pullrequestreview-218086525) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gondolier database schema migration.](https://github.com/avelino/awesome-go/pull/2439#pullrequestreview-218087839) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-git](https://github.com/avelino/awesome-go/pull/2442#pullrequestreview-218087720) (Approved) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [Change name code-server to coder](https://github.com/coder/code-server/issues/331) ## 2019-03-23 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Netlify hosting](https://github.com/avelino/awesome-go/pull/2441) ## 2019-03-21 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add "ocrserver"](https://github.com/avelino/awesome-go/pull/2436#pullrequestreview-217102123) (Approved) ## 2019-03-20 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [update deps and drop 1.9 support](https://github.com/prest/prest/pull/347#pullrequestreview-216987201) (Approved) - ✅ Reviewed PR in [prest/cmd](https://github.com/prest/cmd): [treats if load postgres adapter](https://github.com/prest/cmd/pull/14#pullrequestreview-216777630) (Approved) ## 2019-03-18 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-flutter](https://github.com/avelino/awesome-go/pull/2431#pullrequestreview-215759530) (Changes requested) ## 2019-03-17 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add httpmock package](https://github.com/avelino/awesome-go/pull/2430#pullrequestreview-215364855) (Approved) - ✅ Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [add "Routy" to "Web Frameworks" ](https://github.com/avelino/awesome-racket/pull/4#pullrequestreview-215364332) (Approved) ## 2019-03-16 - 🔍 Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Fixed documentation download links based on latest version](https://github.com/coder/code-server/pull/130#pullrequestreview-215310345) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update gubrak link](https://github.com/avelino/awesome-go/pull/2428#pullrequestreview-215327505) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gophercises as a resource](https://github.com/avelino/awesome-go/pull/2429#pullrequestreview-215327465) (Approved) ## 2019-03-14 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update description for kamilsk/retry package](https://github.com/avelino/awesome-go/pull/2421#pullrequestreview-214356014) (Approved) ## 2019-03-12 - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Add error message for incorrect password. Fix issue #55](https://github.com/coder/code-server/pull/201#pullrequestreview-213676116) (Approved) - 🐛 Opened issue in [cheynewallace/tabby](https://github.com/cheynewallace/tabby): [AddHeader It's not a good name](https://github.com/cheynewallace/tabby/issues/3) ## 2019-03-11 - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Add note about extensions needing to be OSS](https://github.com/coder/code-server/pull/113#pullrequestreview-212949972) (Approved) - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Adding minus to flag '-i'](https://github.com/coder/code-server/pull/198#pullrequestreview-212948496) (Approved) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [workspace actions](https://github.com/coder/code-server/issues/196) ## 2019-03-10 - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Another fix for the Dockerfile and build](https://github.com/coder/code-server/pull/188#pullrequestreview-212629022) (Approved) - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Add -t flag to docker example](https://github.com/coder/code-server/pull/181#pullrequestreview-212590827) (Approved) - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Add nginx reverse proxy guide for selfhosted](https://github.com/coder/code-server/pull/172#pullrequestreview-212583872) (Approved) - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Update docker oneliner and fix clone task](https://github.com/coder/code-server/pull/179#pullrequestreview-212583834) (Approved) - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Added serviceworker and web-manifest](https://github.com/coder/code-server/pull/154#pullrequestreview-212583802) (Approved) ## 2019-03-09 - 🔀 Opened PR in [coder/code-server](https://github.com/coder/code-server): [Improve github issue template](https://github.com/coder/code-server/pull/162) - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Adhere to XDG base directory spec for dataDir and logDir](https://github.com/coder/code-server/pull/156#pullrequestreview-212558229) (Approved) - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [Golang 1.12](https://github.com/avelino/cover.run/pull/31#pullrequestreview-212574200) (Approved) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [terminal: duplicates first carecter of command name](https://github.com/coder/code-server/issues/175) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [Browser back button weird behaviour](https://github.com/coder/code-server/issues/174) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [Postgers extension does working](https://github.com/coder/code-server/issues/168) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [File toolbar horizontal scroll](https://github.com/coder/code-server/issues/166) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [Allow opening files, folders, and workspaces in existing code-server from CLI](https://github.com/coder/code-server/issues/164) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [slow input on terminal (buffer)](https://github.com/coder/code-server/issues/163) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [Select and paste over](https://github.com/coder/code-server/issues/161) ## 2019-03-08 - ✅ Reviewed PR in [coder/code-server](https://github.com/coder/code-server): [Improve .dockerignore](https://github.com/coder/code-server/pull/111#pullrequestreview-212278030) (Approved) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [/__webpack_hmr 404](https://github.com/coder/code-server/issues/141) - 🐛 Opened issue in [coder/code-server](https://github.com/coder/code-server): [dockerfile build yarn task build:server:binary returned a non-zero code: 1](https://github.com/coder/code-server/issues/134) ## 2019-03-06 - 🔀 Opened PR in [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): [ go: upgrade go tools packages](https://github.com/theia-ide/theia-apps/pull/141) ## 2019-03-04 - 🔀 Opened PR in [avelino/theia-apps](https://github.com/avelino/theia-apps): [Fixed gpg typo](https://github.com/avelino/theia-apps/pull/1) - 🔀 Opened PR in [Grupy-ABC/Grupy-ABC.github.io](https://github.com/Grupy-ABC/Grupy-ABC.github.io): [add topic "Stay inside" on about page](https://github.com/Grupy-ABC/Grupy-ABC.github.io/pull/5) ## 2019-03-01 - 🔀 Opened PR in [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): [docker full: fixed gpg typo (ubuntu 18.04)](https://github.com/theia-ide/theia-apps/pull/140) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [Grupy-ABC/Grupy-ABC.github.io](https://github.com/Grupy-ABC/Grupy-ABC.github.io): 1 commit(s) - [See commits](https://github.com/Grupy-ABC/Grupy-ABC.github.io/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): 1 commit(s) - [See commits](https://github.com/theia-ide/theia-apps/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [avelino/dockerfiles](https://github.com/avelino/dockerfiles): 1 commit(s) - [See commits](https://github.com/avelino/dockerfiles/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [structy/porganizer](https://github.com/structy/porganizer): 1 commit(s) - [See commits](https://github.com/structy/porganizer/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 4 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [coder/code-server](https://github.com/coder/code-server): 1 commit(s) - [See commits](https://github.com/coder/code-server/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 5 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2019-03-01T00:00:00Z&until=2019-03-31T23:59:59Z) ## Private contributions - 🔒 137 private contribution(s) this month --- # Open Source Contributions - February 2019 **URL**: https://avelino.run/foss/2019/02/ **Published**: 2019-02-01 **Word Count**: 283 words **Summary**: February 2019 showcased significant contributions with 10 repositories, 11 pull requests, and 6 issues, highlighting collaboration and innovation in the developer community. In February 2019, the development community made notable strides with a total of 23 contributions across 10 repositories. This timeline captures the vital activities, including push events, pull requests, and issues raised, reflecting the collaborative efforts and ongoing improvements in various projects. ## 2019-02-27 - 🔀 Opened PR in [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): [upgrate golang to 1.12](https://github.com/theia-ide/theia-apps/pull/138) - 🔀 Opened PR in [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): [Upgrade to go 1.12](https://github.com/theia-ide/theia-apps/pull/137) - 🔀 Opened PR in [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): [Docker full upgrate to Ubuntu 18.04](https://github.com/theia-ide/theia-apps/pull/136) ## 2019-02-25 - 🔀 Opened PR in [theia-ide/go-language-server](https://github.com/theia-ide/go-language-server): [upgrade prerequisites documentation](https://github.com/theia-ide/go-language-server/pull/30) - 🔀 Opened PR in [theia-ide/go-language-server](https://github.com/theia-ide/go-language-server): [go tools: sync fork upstream Oct 15, 2018 last](https://github.com/theia-ide/go-language-server/pull/29) - 🔀 Opened PR in [theia-ide/go-language-server](https://github.com/theia-ide/go-language-server): [active go Package initial control](https://github.com/theia-ide/go-language-server/pull/28) - 🔀 Opened PR in [levpay/surl](https://github.com/levpay/surl): [set redis max retry](https://github.com/levpay/surl/pull/3) ## 2019-02-19 - 🔀 Opened PR in [theia-ide/go-language-server](https://github.com/theia-ide/go-language-server): [fixed lint on vs-code mock](https://github.com/theia-ide/go-language-server/pull/27) - 🔀 Opened PR in [theia-ide/go-language-server](https://github.com/theia-ide/go-language-server): [fixed lint on goSuggest](https://github.com/theia-ide/go-language-server/pull/26) ## 2019-02-18 - 🐛 Opened issue in [pydio/cells](https://github.com/pydio/cells): [Database adapter, PostgreSQL support ](https://github.com/pydio/cells/issues/85) ## 2019-02-17 - 🔀 Opened PR in [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): [decrease number of layers (run)](https://github.com/theia-ide/theia-apps/pull/133) - 🐛 Opened issue in [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): [Upgrade to Ubuntu 18.04](https://github.com/theia-ide/theia-apps/issues/134) ## 2019-02-11 - 🐛 Opened issue in [eclipse-theia/theia](https://github.com/eclipse-theia/theia): [next version crash: Error: Couldn't find any versions for "@theia/languages" that matches "0.4.0-next.34e35a90"](https://github.com/eclipse-theia/theia/issues/4303) ## 2019-02-09 - 🐛 Opened issue in [eclipse-theia/theia](https://github.com/eclipse-theia/theia): [slow input on terminal](https://github.com/eclipse-theia/theia/issues/4299) ## 2019-02-08 - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [Upgrade node.extend to version 2.0.1 or later](https://github.com/avelino/hugo-theme-sarah/issues/20) ## 2019-02-06 - 🐛 Opened issue in [levpay/surl](https://github.com/levpay/surl): [get redis client: EOF](https://github.com/levpay/surl/issues/2) ## 2019-02-04 - 🔀 Opened PR in [nuveo/boxos](https://github.com/nuveo/boxos): [fix ubuntu 18.04/10 support](https://github.com/nuveo/boxos/pull/6) ## Commits - 🔨 Push to [avelino/dockerfiles](https://github.com/avelino/dockerfiles): 17 commit(s) - [See commits](https://github.com/avelino/dockerfiles/commits?author=avelino&since=2019-02-01T00:00:00Z&until=2019-02-28T23:59:59Z) - 🔨 Push to [levpay/surl](https://github.com/levpay/surl): 8 commit(s) - [See commits](https://github.com/levpay/surl/commits?author=avelino&since=2019-02-01T00:00:00Z&until=2019-02-28T23:59:59Z) - 🔨 Push to [theia-ide/theia-apps](https://github.com/theia-ide/theia-apps): 3 commit(s) - [See commits](https://github.com/theia-ide/theia-apps/commits?author=avelino&since=2019-02-01T00:00:00Z&until=2019-02-28T23:59:59Z) - 🔨 Push to [structy/structchain](https://github.com/structy/structchain): 3 commit(s) - [See commits](https://github.com/structy/structchain/commits?author=avelino&since=2019-02-01T00:00:00Z&until=2019-02-28T23:59:59Z) - 🔨 Push to [nuveo/storing](https://github.com/nuveo/storing): 1 commit(s) - [See commits](https://github.com/nuveo/storing/commits?author=avelino&since=2019-02-01T00:00:00Z&until=2019-02-28T23:59:59Z) - 🔨 Push to [nuveo/boxos](https://github.com/nuveo/boxos): 1 commit(s) - [See commits](https://github.com/nuveo/boxos/commits?author=avelino&since=2019-02-01T00:00:00Z&until=2019-02-28T23:59:59Z) ## Private contributions - 🔒 152 private contribution(s) this month --- # Open Source Contributions - January 2019 **URL**: https://avelino.run/foss/2019/01/ **Published**: 2019-01-01 **Word Count**: 117 words **Summary**: January 2019 saw 6 repositories with 8 contributions, including 4 pushes and 3 pull request reviews, highlighting a collaborative month of development. In January 2019, our contributors made significant strides across 6 repositories. This timeline captures the key events and contributions, showcasing the team's collaborative efforts and progress in various projects. ## 2019-01-28 - ✅ Reviewed PR in [levpay/surl](https://github.com/levpay/surl): [Export errors](https://github.com/levpay/surl/pull/1#pullrequestreview-197146522) (Approved) ## 2019-01-15 - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [Add port 6000 blockage infomation to configurations toml](https://github.com/prest/doc-template/pull/26#pullrequestreview-192837866) (Approved) - ✅ Reviewed PR in [prest/middlewares](https://github.com/prest/middlewares): [Move the statements package into the middlewares package](https://github.com/prest/middlewares/pull/15#pullrequestreview-192584232) (Approved) ## 2019-01-05 - 🔀 Opened PR in [dgladkov/django-turbolinks](https://github.com/dgladkov/django-turbolinks): [django 1.5 support](https://github.com/dgladkov/django-turbolinks/pull/5) ## Commits - 🔨 Push to [levpay/surl](https://github.com/levpay/surl): 6 commit(s) - [See commits](https://github.com/levpay/surl/commits?author=avelino&since=2019-01-01T00:00:00Z&until=2019-01-31T23:59:59Z) - 🔨 Push to [structy/porganizer](https://github.com/structy/porganizer): 4 commit(s) - [See commits](https://github.com/structy/porganizer/commits?author=avelino&since=2019-01-01T00:00:00Z&until=2019-01-31T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2019-01-01T00:00:00Z&until=2019-01-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2019-01-01T00:00:00Z&until=2019-01-31T23:59:59Z) ## Private contributions - 🔒 225 private contribution(s) this month --- # Meu 2018 foi ano de muito aprendizado **URL**: https://avelino.run/quote/lifestyle/2018-12-28-meu-2018-foi-ano-de-muito-aprendizado/ **Published**: 2018-12-28 **Tags**: retrospectiva, aprendizado, mudança, 2018 **Word Count**: 598 words ![Retrospectiva de 2018 do Thiago Avelino](/blog/best-year.jpg#center) Já faz alguns anos que sigo em um voo solo, sem trabalhar para uma empresa e sim fazendo a minha empresa acontecer. Em 2018 não foi diferente, sigo com a [Nuveo](https://nuveo.ai/) (empresa que trabalha com Inteligência Artificial e Visão Computacional aplicado para automatização de backoffice, fundada em 2015). Após alguns anos, foi momento de trazer um Diretor de Tecnologia para fazer parte do trabalho que vinha fazendo, esse momento não é um processo simples, principalmente por ser fundador da empresa e querer sempre o melhor para ela, mas fiz e tenho a certeza que foi o melhor passo tomado para o crescimento e amadurecimento da empresa. Foi um processo intenso de aprendizado pensando no futuro da Nuveo. ## Respirando novos ares Aos que não conhece o “Avelino do passado” não sabe que eu tinha 180 kg e que agora estou treinando para meu primeiro triathlon, não vou entra muito nesse tema, tera outros blogposts referente a isso em breve. Quero falar um pouco mais sobre esse tweet: Essa certeza de querer mudar só veio a tona quando eu [tirei um tempo para refletir na minha vida](https://avelino.run/lifestyle/2018-11-12-viagem-de-carro-em-familia-2018/), eu já queria fazer, mas a insegurança não deixava. ### Mudar a carreira profissional para outra área? Não estou saindo da área de tecnologia (na real acho que não consigo, pelo menos hoje) e sim levando a sério (profissionalmente) uma responsabilidade de treinar para fazer minha primeira prova de triathlon. Essa mudança de área me fez “voltar” ser junior e absorver muito conteúdo. Se você quer acelerar seu processo de aprendizado se envolva com profissionais da área que esta estudando, eles lhe ajudara passar por algumas barreiras que você ficaria parado por muito tempo e no final descobriria que é mais simples. Certamente gerarei conteúdo traçando um paralelo da minha entrada na área do esporte com minha entrada na área de desenvolvimento. ### Escrever livro? Como comentei acima eu era bem grande e encarei o processo de perda de peso a sério e envolvendo esporte como base do processo. “ *[…]* você deveria escrever um **livro** sobre seu processo de perca de penso, cara você tinha 180 kg e hoje esta treinando para fazer seu primeiro **triathlon** (media de 13 horas de prova, onde levara você ao extremo), isso não é normal, puta superação pessoal *[…]* ” Escutei frases +- assim algumas vezes durante esse ano de 2018 e sempre vinha em minha mente: - pô, isso que estou fazendo é normal - eu escrever um livro? - eu não sei escrever - eu não sou capaz - ... e diversas outras desculpas, mas nunca saía da cabeça e após meu momento de meditação (quando o cérebro esta tranquilo), voltava pensar nisso **#WTF #PQ** Durante alguns meses eu vinha rabiscando algumas coisas que acharia importante ter escutado quando tinha 180 kg. Em linhas gerais precisava escutar mais verdades e menos tapinhas nas costas! 2018 resolvi dar o primeiro passo de querer fazer e encarar como um projeto com começo, meio e fim. ### Se tornar atleta? Sinto que estou muito longe de me tornar um atleta, comecei faz poucos anos nessa fase de treinar e profissionalmente tem poucos meses, mas sei que depende apenas de mim para isso se tornar realidade. Vamos deixar os anos dizer se me tornarei atleta ou não, adianto que estou gostando de me superar a cada dia. Hoje tem uma marca financiando meu dia a dia de treino, acredito que só consegui porque estou fazendo por gostar do que estou vivendo e saber aproveitar as oportunidades que vem aparecendo com minha exposição proposital no Instagram, pressão social (se expor publicamente) geralmente funciona para nos cobrar psicologicamente. --- # Open Source Contributions - December 2018 **URL**: https://avelino.run/foss/2018/12/ **Published**: 2018-12-01 **Word Count**: 504 words **Summary**: In December 2018, 14 repositories saw 47 contributions, including 18 pull requests and 12 issues, showcasing vibrant collaboration and development activity. This timeline captures the key contributions and activities in December 2018 across various repositories. With a total of 47 contributions, including multiple pull requests and issues, it highlights the dynamic engagement within the developer community during this month. ## 2018-12-30 - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [homebrew cask formule](https://github.com/devhubapp/devhub/issues/78) ## 2018-12-25 - 🔀 Opened PR in [avelino/dotfiles](https://github.com/avelino/dotfiles): [[WIP] initial bkp with gpg](https://github.com/avelino/dotfiles/pull/1) ## 2018-12-24 - 🔀 Opened PR in [structy/porganizer](https://github.com/structy/porganizer): [initial project config](https://github.com/structy/porganizer/pull/3) - 🔀 Opened PR in [structy/porganizer](https://github.com/structy/porganizer): [writer history project on readme](https://github.com/structy/porganizer/pull/2) - 🔀 Opened PR in [structy/porganizer](https://github.com/structy/porganizer): [create label file example](https://github.com/structy/porganizer/pull/1) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [include gitter sidecar on documentation](https://github.com/prest/doc-template/pull/27) - 🔀 Opened PR in [Coderockr/coderockr-way-github-setup](https://github.com/Coderockr/coderockr-way-github-setup): [support file label](https://github.com/Coderockr/coderockr-way-github-setup/pull/8) - 🐛 Opened issue in [structy/porganizer](https://github.com/structy/porganizer): [Example labels](https://github.com/structy/porganizer/issues/4) - 🐛 Opened issue in [Coderockr/coderockr-way-github-setup](https://github.com/Coderockr/coderockr-way-github-setup): [file support with labels](https://github.com/Coderockr/coderockr-way-github-setup/issues/7) ## 2018-12-21 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [ Increase response time and add mentioned badge](https://github.com/avelino/awesome-go/pull/2295#pullrequestreview-187502112) (Approved) ## 2018-12-19 - ✅ Reviewed PR in [prest/controllers](https://github.com/prest/controllers): [Return 404 response for inserts,updates and deletes ](https://github.com/prest/controllers/pull/21#pullrequestreview-186520862) (Approved) ## 2018-12-18 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [build error github.com/shurcooL/highlight_go on go 1.11 alpine](https://github.com/avelino/awesome-go/pull/2291) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fixed install github_flavored_markdown package](https://github.com/avelino/awesome-go/pull/2290) ## 2018-12-17 - 🔀 Opened PR in [jarun/nnn](https://github.com/jarun/nnn): [describe that homebrew is installer for macOS](https://github.com/jarun/nnn/pull/169) - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [Offline support](https://github.com/devhubapp/devhub/issues/46) ## 2018-12-16 - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [Github team discussions timeline ](https://github.com/devhubapp/devhub/issues/40) - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [Improve iOS bottom bar design](https://github.com/devhubapp/devhub/issues/39) - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [Show images of comments as a gallery](https://github.com/devhubapp/devhub/issues/38) - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [iOS: pull to refresh](https://github.com/devhubapp/devhub/issues/37) ## 2018-12-14 - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [Allow reacting to comments (GitHub Reactions)](https://github.com/devhubapp/devhub/issues/30) ## 2018-12-12 - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [GitLab support](https://github.com/devhubapp/devhub/issues/5) - 🐛 Opened issue in [devhubapp/devhub](https://github.com/devhubapp/devhub): [Desktop client](https://github.com/devhubapp/devhub/issues/2) ## 2018-12-11 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Private images](https://github.com/gofn/gofn/pull/125#pullrequestreview-183700405) (Approved) ## 2018-12-10 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Revert "StartWith operator"](https://github.com/ReactiveX/RxGo/pull/160) ## 2018-12-05 - 🔀 Opened PR in [rust-lang/rustc-dev-guide](https://github.com/rust-lang/rustc-dev-guide): [fixed typo issues link](https://github.com/rust-lang/rustc-dev-guide/pull/251) - 🔀 Opened PR in [avelino/rustc-guide](https://github.com/avelino/rustc-guide): [fixed typo issues link](https://github.com/avelino/rustc-guide/pull/1) ## 2018-12-04 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [add race on go test](https://github.com/ReactiveX/RxGo/pull/119) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Math operators: Average, Concat, Min and Max](https://github.com/ReactiveX/RxGo/pull/117#pullrequestreview-181143593) (Approved) ## 2018-12-03 - 🔍 Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Repeat operator](https://github.com/ReactiveX/RxGo/pull/115#pullrequestreview-180839983) (Changes requested) ## 2018-12-02 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [fixed travis image status to v2](https://github.com/ReactiveX/RxGo/pull/116) - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Coverge v2](https://github.com/ReactiveX/RxGo/pull/113) - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [official channel on gitter.im to ReactiveX/RxGo v2](https://github.com/ReactiveX/RxGo/pull/112) - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [official channel on gitter.im to ReactiveX/RxGo](https://github.com/ReactiveX/RxGo/pull/111) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [All operator](https://github.com/ReactiveX/RxGo/pull/104#pullrequestreview-180556413) (Approved) - 🐛 Opened issue in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [example on readme to v2](https://github.com/ReactiveX/RxGo/issues/114) ## 2018-12-01 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [starting developer RxGo version 2](https://github.com/ReactiveX/RxGo/pull/100) - 🔍 Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Catch operators](https://github.com/ReactiveX/RxGo/pull/102#pullrequestreview-180539581) (Changes requested) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Migration of the create operators](https://github.com/ReactiveX/RxGo/pull/101#pullrequestreview-180539558) (Approved) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Major refactoring & new operators](https://github.com/ReactiveX/RxGo/pull/95#pullrequestreview-180515868) (Approved) ## Commits - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 18 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) - 🔨 Push to [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): 11 commit(s) - [See commits](https://github.com/ReactiveX/RxGo/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) - 🔨 Push to [structy/porganizer](https://github.com/structy/porganizer): 10 commit(s) - [See commits](https://github.com/structy/porganizer/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) - 🔨 Push to [jarun/nnn](https://github.com/jarun/nnn): 1 commit(s) - [See commits](https://github.com/jarun/nnn/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) - 🔨 Push to [rust-lang/rustc-dev-guide](https://github.com/rust-lang/rustc-dev-guide): 1 commit(s) - [See commits](https://github.com/rust-lang/rustc-dev-guide/commits?author=avelino&since=2018-12-01T00:00:00Z&until=2018-12-31T23:59:59Z) ## Private contributions - 🔒 127 private contribution(s) this month --- # Férias/2018: Viagem de carro pelo Nordeste em família **URL**: https://avelino.run/quote/lifestyle/2018-11-12-viagem-de-carro-em-familia-2018/ **Published**: 2018-11-12 **Tags**: ferias, trip, roudtrip, viagem, nordeste **Word Count**: 1139 words _“Eu não preciso de férias, trabalho com o que eu gosto, é um hobby o que eu faço”_ Eu disse isso por alguns anos em minha vida, até tirar férias e perceber que eu também precisava de férias. ![família de férias 2018](/trip-familia-2018.png#center "família de férias 2018") Após ler o [blogpost do Raphael Amorim](https://medium.com/@raphamorim/recarregando-baterias-95bbd12b95ef) comecei refletir sobre como seria tirar férias e passar alguns dias vivendo para mim e minha família. Não foi um exercício fácil, nunca tinha feito isso na vida, trabalho profissionalmente a 13 anos e não me recordo ter tirado férias de verdade nesse período, sempre estive na corrida dos ratos ([termo usado para um exercício sem fim, auto-destrutivo ou inútil](https://en.m.wikipedia.org/wiki/Rat_race)). ## Trabalhar por hobby É muito comum profissional da área de tecnologia falar que trabalhamos por hobby, será que isso realmente é (100%) verdade ou usamos essa “desculpa” para ressaltar que trabalhamos com o que gostamos? Em todos os trabalhos, projetos (privado e open source) e etc, temos as coisas legais (o que nos motiva continuar), mas temos os “problemas” também. Muitas vezes nós brasileiros usamos termos em inglês e em ambiente errado, mas qual o significado da palavra hobby? > Hobby é uma palavra inglesa frequentemente usada na língua portuguesa e significa passatempo, ou seja, uma atividade que é praticada por prazer nos tempos livres. > Um hobby não é uma ocupação a tempo inteiro, e tem como objetivo o relaxamento do praticante. > Normalmente, a prática de um hobby não implica vantagem financeira para a pessoa em questão. Apesar disso, ele pode se transformar em uma tarefa que resulta em benefício financeiro para o praticante. Por exemplo, uma pessoa que tem a pintura como um passatempo, pode vender um dos seus quadros. Não trabalhamos por hobby e sim fazemos o que gostamos, por esse motivo relacionamos o trabalho com hobby, com o passar do tempo dentro de uma empresa começa chegar “problemas” (isso em qual quer empresa, mesmo aquela que você sonha trabalhar) e nesse momento é comum os desenvolvedores quererem mudar de empresa, soando que o desenvolvedor fica pulando de galho em galho. O _“pular de galho em galho”_ ocorre pela _“busca da felicidade”_, mas será que existe alguma empresa que não teremos “problemas”? ## Planejamento Como tudo em minha vida eu “tento” planejar (algumas vezes falho miseravelmente, mas em grande maioria tem dado certo), não é um trabalho muito fácil fazer planejamento de alguma coisa que você nunca fez, principalmente quando envolve viajar de carro com a família (tenho um filho de 5 anos) por mais de 1000 km em estrada e locais que não conhece, logicamente que preciso pensar na segurança da minha família. Com a ajuda da minha esposa, paramos algumas horas durante muitos dias para fazer o planejamento de lugares que queríamos conhecer do Nordeste. A primeira versão foi uma lista gigante, mas fomos colocando alguns filtros até chegar em um roteiro realmente executável mentalmente, mas lógico que não tínhamos ideia que seria tão cansativo (como foi). O grande trabalho que vejo no começo do planejamento (principalmente com mais de uma pessoa) é ambos conseguir tirar ideias da cabeça e colocar em um “papel” onde todas as pessoas envolvidas consigam ter visibilidade de todas as ideias e artefatos, para aí sim começar o planejamento de fato. É uma viagem em família (mas poderia ser entre amigos) e temos que colocar a vontade de ambos no planejamento. Usamos alguns apps para nos ajudar no planejamento da viagem, principalmente o trecho que seria percorrido de carro, conhecer locais no destino e local para passar a noite (dormir): * - planejamento dos trecho percorrido de carro; * - locação de local para ficar (evitamos hotel caros pois queríamos uma experiencia real de cada local); * - locação de local para ficar; * - conhecer lugares de um destino planejado; * - conhecer lugares de um destino planejado, principalmente locais para comer; * - Navegação de um destino para outro (GPS); * - Navegação de um destino para outro (GPS) e locais para abastecer o carro; * - Senha do WiFi. ## Por que Nordeste? É um lugar maravilhoso (_é afirmação após ter vivido mais de 20 dias por lá_), mas existe muito conteúdo falando do Nordeste Brasileiro, principalmente fotos mostrando praias exuberantes. Particularmente eu queria um lugar onde tivesse dificuldade de conectividade com internet, era uma premissa que eu coloquei mentalmente (acabei não expondo isso no planejamento para não deixar a esposa preocupada) para dificultar acesso ao trabalho durante os dias que iria tirar para viver minha família e eu mesmo, o tempo para eu pensar no meu futuro, [será que já não esta/estava na hora de encerrar algum ciclo na minha vida?](https://avelino.run/encerrando-ciclos-viva-no-presente-n%C3%A3o-se-paralise-pelo-passado/) A PythonBrasil\[14\] (conferência de Python em 2018) foi em Natal e aproveitamos para juntar a conferência com alguns dias off (férias que julgava não precisar), então tínhamos o ponto inicial de onde “sairíamos”, Natal. ## Destinos 1. São Paulo: Início da viagem, saída de casa; 2. Foz do Iguaçu: Latinoware (conferência); 3. São Paulo: Parada com destino a Natal; 4. Fortaleza: Parada com destino a Natal; 5. Natal: PythonBrasil\[14\] (conferência) e local onde encontrei a família; 6. Praia de Pipa, Natal: Parada planejada com a família; 7. Porto de Galinha, Recife: Parada planejada com a família; 8. Maragogi, Alagoas: Parada planejada com a família; 9. São Miguel dos Milagres, Alagoas: Parada planejada com a família; 10. Aracaju: Parada planejada com a família; Veja no mapa abaixo os **pins** para ter uma ideia do trajeto que foi percorrido. {{< googlemaps 1vmr0dHs0fWQ0Q6w_va_G2BYbcCfFsprM >}} Esse foi o trajeto todo que fiz, as férias começou logo após a PythonBrasil\[14\] em Natal (local onde encontrei com a família). ## Resumo geral Preciso comentar que o começo não foi fácil me _desconectar_, mas forcei, forcei e forcei, por fim eu “consegui” (pelo menos 1 vez por dia brincava com algum projeto Open Source, estava de férias acho que devemos fazer o que gostamos :D). Estava vivendo em um ritmo frenético e estava precisando tirar alguns dias para colocar os pensamentos no lugar e viver momentos que nunca tínhamos vivido junto com minha família (bens memoráveis, acredito que isso é a única coisa que levamos desse mundo corrido e agitado). Esse tempo off-line me fez ter muitas (muitas mesmo) ideias me causando ansiedade no último dia, não sabia como iria conseguir executar todas as ideias que tive, para não entrar em um _burnout_ foi o momento de fazer planejamento de tudo que eu realmente queria fazer (tirar as ideias da cabeça e passar para um _“papel”_) **Notas finais:** Precisamos nos desconectar de nosso dia a dia para viver com as pessoas que correm conosco (no meu caso família) todos os dias e acabam me aguentando nos momentos que não é compartilhado em redes sociais ([Instagram](https://instagram.com/avelinorun)), geralmente publicamos momentos bons, mas nem tudo é Instagram e analisar se estamos seguindo nossas premissas de vida ou se estamos postergando (empurrando com a barrida) alguma decisão que já deveria ter tomado. ## Algumas fotos * * * * * * --- # Open Source Contributions - November 2018 **URL**: https://avelino.run/foss/2018/11/ **Published**: 2018-11-01 **Word Count**: 381 words **Summary**: November 2018 saw 33 contributions across 13 repositories, including 4 pull requests and 15 reviews, showcasing active collaboration and innovation in the developer community. Explore the timeline of contributions made in November 2018, highlighting significant activities across various repositories. This month featured a total of 33 contributions, including pushes, pull requests, and reviews, reflecting the dynamic engagement of developers in enhancing projects and fostering collaboration. ## 2018-11-30 - 💬 Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Add a Gitter chat badge to README.md](https://github.com/ReactiveX/RxGo/pull/97#pullrequestreview-180377960) (Commented) - 🔍 Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Major refactoring & new operators](https://github.com/ReactiveX/RxGo/pull/95#pullrequestreview-180175428) (Changes requested) - 🐛 Opened issue in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Official channel on gitter.im](https://github.com/ReactiveX/RxGo/issues/98) - 🐛 Opened issue in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [github.com/stretchr/testify to go testing (native)](https://github.com/ReactiveX/RxGo/issues/96) ## 2018-11-28 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [travis: go master version allow failures](https://github.com/ReactiveX/RxGo/pull/87) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [fix scan func repetitive operation](https://github.com/ReactiveX/RxGo/pull/77#pullrequestreview-179160196) (Approved) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Parallelize an observable subscription](https://github.com/ReactiveX/RxGo/pull/78#pullrequestreview-179159680) (Approved) ## 2018-11-26 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-zero-width](https://github.com/avelino/awesome-go/pull/2242#pullrequestreview-178240917) (Approved) - 🐛 Opened issue in [subutai-io/agent](https://github.com/subutai-io/agent): [vendor folder is recommended to versioning](https://github.com/subutai-io/agent/issues/864) ## 2018-11-22 - 🐛 Opened issue in [structy/structbase](https://github.com/structy/structbase): [Object relationship in the JSON structure](https://github.com/structy/structbase/issues/8) ## 2018-11-20 - 🔀 Opened PR in [WildUtah/the-suspender](https://github.com/WildUtah/the-suspender): [change utahbrian.com/the-suspender to github.com/WildUtah/the-suspender](https://github.com/WildUtah/the-suspender/pull/5) ## 2018-11-19 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add did](https://github.com/avelino/awesome-go/pull/2235#pullrequestreview-176169910) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gofuckyourself](https://github.com/avelino/awesome-go/pull/2234#pullrequestreview-176169695) (Approved) ## 2018-11-17 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [[fuego] Add fuego](https://github.com/avelino/awesome-go/pull/2233#pullrequestreview-176047121) (Approved) ## 2018-11-16 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add errorx](https://github.com/avelino/awesome-go/pull/2231#pullrequestreview-175863919) (Changes requested) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [fazendo links virarem hiperlinks, errinhos de ptbr](https://github.com/avelino/avelino.run/pull/5#pullrequestreview-176019549) (Approved) ## 2018-11-12 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added GoKi, GoGi, Gide, and rasterx packages.](https://github.com/avelino/awesome-go/pull/2222#pullrequestreview-174128242) (Changes requested) - 🔍 Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [named pipe support](https://github.com/gofn/gofn/pull/123#pullrequestreview-174020621) (Changes requested) ## 2018-11-11 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Go Playground for iOS](https://github.com/avelino/awesome-go/pull/2221#pullrequestreview-173701047) (Approved) ## 2018-11-07 - 🔀 Opened PR in [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): [add levpay](https://github.com/lerrua/remote-jobs-brazil/pull/138) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Refactor iaas](https://github.com/gofn/gofn/pull/120#pullrequestreview-172593844) (Approved) ## 2018-11-06 - 🐛 Opened issue in [cnwangjie/better-onetab](https://github.com/cnwangjie/better-onetab): [firefox container support](https://github.com/cnwangjie/better-onetab/issues/65) ## 2018-11-03 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [clear subscription comment source](https://github.com/ReactiveX/RxGo/pull/74) - 🔍 Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [improve test coverage and fix on error behavior](https://github.com/ReactiveX/RxGo/pull/75#pullrequestreview-171341529) (Changes requested) - 🐛 Opened issue in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Todo to be removed](https://github.com/ReactiveX/RxGo/issues/73) - 🐛 Opened issue in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [flatmap: write documentation](https://github.com/ReactiveX/RxGo/issues/72) ## Commits - 🔨 Push to [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): 14 commit(s) - [See commits](https://github.com/ReactiveX/RxGo/commits?author=avelino&since=2018-11-01T00:00:00Z&until=2018-11-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 9 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-11-01T00:00:00Z&until=2018-11-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-11-01T00:00:00Z&until=2018-11-30T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 3 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-11-01T00:00:00Z&until=2018-11-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2018-11-01T00:00:00Z&until=2018-11-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2018-11-01T00:00:00Z&until=2018-11-30T23:59:59Z) - 🔨 Push to [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): 1 commit(s) - [See commits](https://github.com/lerrua/remote-jobs-brazil/commits?author=avelino&since=2018-11-01T00:00:00Z&until=2018-11-30T23:59:59Z) ## Private contributions - 🔒 37 private contribution(s) this month --- # A arte de reescrever software **URL**: https://avelino.run/a-arte-de-reescrever-software/ **Published**: 2018-10-21 **Tags**: desenvolvimento, software, senior, experiencia **Word Count**: 858 words Lidar com software legado hoje em dia é mais comum do que podemos imaginar, costumo dizer que muitos softwares nascem legado, como assim? Para mim software que não tem teste automatizado é legado, não tem como garantir funcionamento de absolutamente nada dentro dele e muitos comportamentos (recursos ou bugs) só irá aparecer com usuários usando constantemente. ![Experiencia se conquista, arquitetura de software é pratica](/blog/arquiteto-tirinha.jpg#center) Após alinhamento do que é software legado é comum a empresa (principalmente as com cultura de startup) e desenvolvedores ter que trocar peças do software em pleno o voo, não temos como pousar o avião para fazer manutenção e depois decolar novamente quando a empresa está com clientes usando o software em produção. Com isso vem o trabalho do engenheiro de software junto com time para fazer planejamento de trocar peças (componentes, módulos pacotes, serviços ou qual seja o nome que você de para isso) do software com ele no ar. ## Planejamento No meu ponto de vista esse trabalho deve ser feito com muito planejamento e pé no chão, só assim conseguimos pensar nos possíveis problemas que possamos ter, mas tenha em mente que não terá como prever todos os possíveis problemas, mesmo passando meses e meses planejando, a única certeza que podemos ter é: ao colocar no ar surgirá imprevistos, bem-vindo a vida de desenvolvimento de software. Esse é o momento de alinhamento do “problema” e possíveis soluções junto com o time envolvido, tenha certeza que todos os envolvidos entendeu o problema antes de dar o próximo passo de sair vomitando soluções e consequentemente escolher a melhor solução. Se um dos membros não entendeu o problema não deve ignorar, ele não enxergou como um possível problema ou o trabalho de expor o problema não foi claro para todos, essa deve ser a hora de praticar a comunicação entre os membros do time, geralmente não é um trabalho fácil, mantenha sempre a calma, seja objetivo e traga o time de volta ao tema quando começar sair, para mim não existe nível hierárquico para fazer isso, todos devem estar com o mesmo propósito: resolver o “problema”. Em software usamos um termo chamado baby step (passos de bebê), ou seja, dê o próximo passo após concluir o atual (um de cada vez). ## Chegando à solução Para qualquer “problema” existem diversas soluções e isso não é diferente no mundo de software. Lidando com software legado (contexto desse blogpost) temos que ter o equilíbrio do melhor software e da solução que resolve o que estamos buscando resolver. Desenvolvedores geralmente quer partir para melhorar software ao nível de software, mas precisamos pesar isso com outras métricas para ver qual é a melhor solução realmente: * Tempo * Esforço * Conhecimento (do time, esse é extremamente importante) Minha escolha sempre será por uma solução que o time consiga dar manutenção e mais de uma pessoa já usou a abordagem sugerida em produção - existe um abismo enorme entre teoria e produção (infelizmente). Esse é o momento de exercitar o conhecimento do time para escolher qual caminho seguir: * Micro Serviço (REST, RPC ...) * Fila de processamento * Serverless * Serverless + API Gateway * Módulo, pacote, biblioteca e/ou ... * ... Como tudo em minha vida, tento ter mais de uma opção caso a primeira escolhida não funcione, trago essa abordagem para desenvolvimento de software também - mas já tive casos que todas as possíveis soluções não funcional e infelizmente foi momento de jogar a toalha e repensar no negócio, via software estava impossível resolver. ## Reescrevendo as peças Dado que o time escolheu a melhor solução para o “problema” é momento colocar à teoria discutida em prática, pode ser que a primeira solução não seja possível, estava implícito algum ponto que não tinha visibilidade antes começar, infelizmente em alguns casos (e não por falta de experiência) isso acontece, principalmente quando estamos falando de software legado. Gosto da analogia cavar um buraco na areia, existem diversas ferramentas que pode “adivinhar” o que tem onde vamos cavar, mas se realmente funcionasse 100% (algumas pode chegar muito próximo desse número) não precisaríamos de arquivologista ou outras profissões seguindo essa área de atuação. ## Deploy, grande momento de ir para produção Mesmo tudo funcionando extremamente bem em ambiente de teste, homologação ou qualquer nome que você dê, a tendência de ter imprevistos quando colocarmos o software em produção é grande, esteja preparado para ter que lidar com eles. Algumas coisas que tento evitar (sempre que possível): * Certifique-se se realmente tudo foi escritório teste e de fato testado por todos envolvidos nos outros ambientes; * Deploy de sexta, ninguém do time está afim de perder o final de semana em família e/ou suas obrigações pessoais. Mas tem casos que não temos como esperar, planejamento é à alma desse ponto; * Caso apareça problema evite ser o **super-herói** e se tranque ao seu mundo para resolver o problema e volte com a “bala de prata”; * Caso apareça problema evite hacking no servidor de produção, tenha um plano de roll back (voltar para versão anterior) caso necessário; * Na linha do roll back, mantenha os logs gerados no momento do crash. No calor do momento é sempre um problema lembra desse pequeno/grande detalhe; Deixe algumas recomendações nos comentários para o pessoal que ler esse blogpost após você. --- # Open Source Contributions - October 2018 **URL**: https://avelino.run/foss/2018/10/ **Published**: 2018-10-01 **Word Count**: 445 words **Summary**: October 2018 showcased significant contributions with 14 repositories, 9 pull requests, and 19 reviews, enhancing collaboration and code quality in the community. Explore the timeline of October 2018, highlighting key contributions across various repositories. This month saw active development with 14 repositories contributing to 9 pull requests and 19 reviews, underscoring the collaborative spirit and commitment to quality within the community. ## 2018-10-31 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [active gitter/travis notification](https://github.com/ReactiveX/RxGo/pull/70) ## 2018-10-30 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Support go 1.9, 1.10, 1.11 and tip](https://github.com/ReactiveX/RxGo/pull/69) - 🔀 Opened PR in [avelino/riak-dashboard](https://github.com/avelino/riak-dashboard): [update suggested: requests ~> 2.20.0](https://github.com/avelino/riak-dashboard/pull/1) - 🔍 Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [49 feature request flatmap](https://github.com/ReactiveX/RxGo/pull/57#pullrequestreview-169747903) (Changes requested) - 🐛 Opened issue in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [github.com/gorilla/websocket: package context, unrecognized import path "context" (import path does not begin with hostname)](https://github.com/ReactiveX/RxGo/issues/67) ## 2018-10-28 - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [Dynamic section](https://github.com/avelino/hugo-theme-sarah/pull/19) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [upgrade sarah theme section dynamic](https://github.com/avelino/avelino.run/pull/4) ## 2018-10-24 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added dataframe-go](https://github.com/avelino/awesome-go/pull/2165#pullrequestreview-168085450) (Approved) ## 2018-10-22 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add two/tcp library](https://github.com/avelino/awesome-go/pull/2142#pullrequestreview-166962006) (Approved) ## 2018-10-13 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fixed typos at readme](https://github.com/avelino/awesome-go/pull/2150#pullrequestreview-164455480) (Commented) - ✅ Reviewed PR in [cstate/cstate](https://github.com/cstate/cstate): [v3 Beta 1 (originally dev2)](https://github.com/cstate/cstate/pull/38#pullrequestreview-164460796) (Approved) ## 2018-10-11 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add wit-go official wit.ai Go client](https://github.com/avelino/awesome-go/pull/2144#pullrequestreview-163691267) (Approved) - 🐛 Opened issue in [docker-library/golang](https://github.com/docker-library/golang): [Debian sid with Go 1.11 and 1.10](https://github.com/docker-library/golang/issues/244) ## 2018-10-10 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add mimetype package](https://github.com/avelino/awesome-go/pull/2143#pullrequestreview-163147950) (Changes requested) ## 2018-10-08 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add TarsGo](https://github.com/avelino/awesome-go/pull/2113#pullrequestreview-162617196) (Changes requested) ## 2018-10-07 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add: prettyslice printer](https://github.com/avelino/awesome-go/pull/2139#pullrequestreview-162303776) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-commander](https://github.com/avelino/awesome-go/pull/2138#pullrequestreview-162274295) (Approved) ## 2018-10-06 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Fix goreportcard URL](https://github.com/avelino/awesome-go/pull/2126#pullrequestreview-162248793) (Approved) ## 2018-10-05 - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [Content parans](https://github.com/avelino/hugo-theme-sarah/pull/18) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [amp only content page](https://github.com/avelino/hugo-theme-sarah/pull/17) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [removed rss/feed duplicate](https://github.com/avelino/hugo-theme-sarah/pull/16) - 🔀 Opened PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [upgrade sarah theme](https://github.com/avelino/avelino.run/pull/3) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Kair - Time and Date Lib - Insert](https://github.com/avelino/awesome-go/pull/2135#pullrequestreview-162208834) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added Fyne toolkit](https://github.com/avelino/awesome-go/pull/2110#pullrequestreview-162208564) (Changes requested) ## 2018-10-03 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adds me to Maintainers list](https://github.com/avelino/awesome-go/pull/2131#pullrequestreview-161354688) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [[WIP/TESTS]Add Runtime flag on creation containers](https://github.com/gofn/gofn/pull/116#pullrequestreview-160979293) (Approved) - ✅ Reviewed PR in [nuveo/splinter-docker](https://github.com/nuveo/splinter-docker): [fixing markdown formatting](https://github.com/nuveo/splinter-docker/pull/1#pullrequestreview-161127386) (Approved) - ✅ Reviewed PR in [levpay/infobip](https://github.com/levpay/infobip): [renaming from nuveo to levpay](https://github.com/levpay/infobip/pull/7#pullrequestreview-161069266) (Approved) ## 2018-10-02 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [iaas/amazonec2/amazonec2: Fixed context import and return into DeleteMachine](https://github.com/gofn/gofn/pull/117#pullrequestreview-160599919) (Approved) ## 2018-10-01 - 💬 Reviewed PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [Fix wrong param for twitter](https://github.com/avelino/hugo-theme-sarah/pull/15#pullrequestreview-160187154) (Commented) ## Commits - 🔨 Push to [avelino/cover.run](https://github.com/avelino/cover.run): 2 commit(s) - [See commits](https://github.com/avelino/cover.run/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 10 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 13 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [nuveo/docker-opencv](https://github.com/nuveo/docker-opencv): 7 commit(s) - [See commits](https://github.com/nuveo/docker-opencv/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 10 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [levpay/infobip](https://github.com/levpay/infobip): 1 commit(s) - [See commits](https://github.com/levpay/infobip/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): 9 commit(s) - [See commits](https://github.com/ReactiveX/RxGo/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [avelino/riak-dashboard](https://github.com/avelino/riak-dashboard): 2 commit(s) - [See commits](https://github.com/avelino/riak-dashboard/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) - 🔨 Push to [gofn/cli](https://github.com/gofn/cli): 1 commit(s) - [See commits](https://github.com/gofn/cli/commits?author=avelino&since=2018-10-01T00:00:00Z&until=2018-10-31T23:59:59Z) ## Private contributions - 🔒 52 private contribution(s) this month --- # Keeping open source projects - awesome-go **URL**: https://avelino.run/keeping-open-source-projects-awesome-go/ **Published**: 2018-09-25 **Tags**: awesome-go, golang, open source, hacktoberfest **Word Count**: 546 words Beginning of any project (especially when we are talking about open source) is extremely entertaining for developer, over the years the fun passes and it is the responsibility to keep your "son" following the path of it. ![Open Source is Collaboration](/blog/collaboration.png#center) ## How did the starting awesome-go? All projects I started are out of necessity, the awesome-go was no different. After knowing the [awesome-python](https://github.com/vinta/awesome-python) and seeing other "awesomes" projects I searched for the awesome-go and did not get results. Wanted to do a "simple" project where he had markdown code with a list of legal projects written in go, this in **"Jul 6, 2014"** with the commit "[start environment Awesome for Go](https://github.com/avelino/awesome-go/commit/8d356bc0dfbe817a378186b9b6fb5afe81781d42)" After many people help the project began to have access and receive contributions. That was the moment I realized I would have to write code to help revise the contributions (dubbed as pull request within GitHub). Maintainers have written test to validate the following patterns within the markdown: * Test alphabetical order * Test if exist duplicated links * Test if an entry has description, it must be separated from link with ` - ` Work that was done manually by the maintainers and the volume of contributions was virtually impossible to revise all. ## What big challenge of maintaining an open source project? There are several, but I will talk about what I currently find most complicated (involves very very dedication). I always thought the big challenge of keeping project open source would be to write code, but for many years I believe it was wrong. Today I see that the biggest challenge of maintaining project is to create community, train new leaders, write documentation for new contributors understand and to be new covers join the project. The awesome-go is no different from other open source projects, just contribute, interact, engage and etc, which will have your space. From now on, I welcome you to the project. Interested in contributing, recommends reading: * [Contribution Guidelines](https://github.com/avelino/awesome-go/blob/master/CONTRIBUTING.md) * [Code of Conduct](https://github.com/avelino/awesome-go/blob/master/CODE_OF_CONDUCT.md) [Top Contributors](https://github.com/avelino/awesome-go/graphs/contributors) and [Fork Members](https://github.com/avelino/awesome-go/network/members), these are the contributors (and maintainers) of the project, they that make the awesome-go be busy until today. Here is my heartfelt thanks to all involved. ## What's the focus the project today? The focus has not changed (it is the same), we are a list of go packages, categorized and maintained by the community. Last year I sent e-mail to some current maintainers go language team proposing to move the repository to golang organization to be managed by the core team, after a few email exchanges they responded to me with some "problems" if the awesome-go was maintained by the golang organization. In a brief summary the awesome-go would go from a list of packages (maintained by the community) to a list of "official packages approved by the core team", and that not purpose of the project. ## What's the future of the project? As all open source projects the focus is to grow community maintainer, thus bringing new ideas (and diversity) to improve each day the list of packages and agility in reviewing the contributions. We need to improve the visibility of the site [awesome-go.com](https://awesome-go.com) on Google (SEO), for this we need people with new ideas and willingness to contribute. All the idea to improve the life of the awesome-go project will be very welcome! Stay inside: * [Open contributions](https://github.com/avelino/awesome-go/pulls) * [Problems and/or suggestions](https://github.com/avelino/awesome-go/issues) --- # Open Source Contributions - September 2018 **URL**: https://avelino.run/foss/2018/09/ **Published**: 2018-09-01 **Word Count**: 600 words **Summary**: September 2018 saw 25 repositories contribute to 58 total activities, including 7 open PRs, 30 reviews, and notable commits across various projects. Explore the significant contributions made in September 2018 across 25 repositories. This timeline highlights key activities, including pull requests, reviews, and pushes, showcasing the collaborative efforts and innovations within the community. ## 2018-09-28 - 💬 Reviewed PR in [nuveo/storing](https://github.com/nuveo/storing): [adding logs](https://github.com/nuveo/storing/pull/10#pullrequestreview-160035021) (Commented) ## 2018-09-24 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [remove not used import](https://github.com/ReactiveX/RxGo/pull/61) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [fix yakvs link](https://github.com/avelino/awesome-go/pull/2098#pullrequestreview-158184029) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ormlite](https://github.com/avelino/awesome-go/pull/2081#pullrequestreview-158182979) (Approved) ## 2018-09-22 - 🔀 Opened PR in [avelino/cover.run](https://github.com/avelino/cover.run): [Go 1.11 support](https://github.com/avelino/cover.run/pull/22) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add gribouille/go-assert library](https://github.com/avelino/awesome-go/pull/2085#pullrequestreview-157919972) (Commented) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding depcharge to devops list](https://github.com/avelino/awesome-go/pull/2083#pullrequestreview-157919943) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add pipeline](https://github.com/avelino/awesome-go/pull/2082#pullrequestreview-157919895) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ln-paywall](https://github.com/avelino/awesome-go/pull/2078#pullrequestreview-157919859) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rbac](https://github.com/avelino/awesome-go/pull/2076#pullrequestreview-157919849) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add triangolatte](https://github.com/avelino/awesome-go/pull/2069#pullrequestreview-157919824) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gotest.tools](https://github.com/avelino/awesome-go/pull/2053#pullrequestreview-157919526) (Approved) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added [IoT]/gosmart link.](https://github.com/avelino/awesome-go/pull/2086#pullrequestreview-157919492) (Commented) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add https://github.com/runner-mei/GoBatis to list of ORM](https://github.com/avelino/awesome-go/pull/2088#pullrequestreview-157919449) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [moved sprbox from Utilities to Config section](https://github.com/avelino/awesome-go/pull/2089#pullrequestreview-157919437) (Approved) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add the Dumby IoT protocol](https://github.com/avelino/awesome-go/pull/2090#pullrequestreview-157919392) (Commented) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-sophos](https://github.com/avelino/awesome-go/pull/2092#pullrequestreview-157919328) (Approved) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added benchmark "benchmark-postgres-mongo"](https://github.com/avelino/awesome-go/pull/2095#pullrequestreview-157919228) (Commented) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added "50 Shades of Go" into tutorials.](https://github.com/avelino/awesome-go/pull/2096#pullrequestreview-157919169) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add CovenantSQL](https://github.com/avelino/awesome-go/pull/2099#pullrequestreview-157919155) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Remove fleet and coop](https://github.com/avelino/awesome-go/pull/2102#pullrequestreview-157919128) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [NLP libraries in Chinese, Japanese](https://github.com/avelino/awesome-go/pull/2104#pullrequestreview-157919093) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add duci](https://github.com/avelino/awesome-go/pull/2108#pullrequestreview-157918987) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added Fyne toolkit](https://github.com/avelino/awesome-go/pull/2110#pullrequestreview-157918962) (Approved) ## 2018-09-20 - ✅ Reviewed PR in [nuveo/gofn](https://github.com/nuveo/gofn): [Add Runtime flag on creation containers](https://github.com/nuveo/gofn/pull/1#pullrequestreview-157465180) (Approved) - 🐛 Opened issue in [RapidSoftwareSolutions/rapidapi-go-sdk](https://github.com/RapidSoftwareSolutions/rapidapi-go-sdk): [idiomatic code style in this packate](https://github.com/RapidSoftwareSolutions/rapidapi-go-sdk/issues/4) ## 2018-09-18 - ✅ Reviewed PR in [levpay/infobip](https://github.com/levpay/infobip): [adding the feature to sending advanced messages](https://github.com/levpay/infobip/pull/6#pullrequestreview-156502169) (Approved) ## 2018-09-17 - 💬 Reviewed PR in [racket/racket](https://github.com/racket/racket): [Enable coverity scan when committing to coverity_scan](https://github.com/racket/racket/pull/2274#pullrequestreview-155875987) (Commented) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [prest/adapter: pREST documentation](https://github.com/prest/prest/issues/335) ## 2018-09-16 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added entry for pdfcpu (#2105)](https://github.com/avelino/awesome-go/pull/2106#pullrequestreview-155762129) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Updating Rust default configuration to become Vim as Rust IDE.](https://github.com/editor-bootstrap/vim-bootstrap/pull/296#pullrequestreview-155752815) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [prest/adapter: FindOne, return object not list](https://github.com/prest/prest/issues/334) ## 2018-09-15 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [documentation HTTP PORT env](https://github.com/prest/doc-template/pull/25) - 🔀 Opened PR in [prest/config](https://github.com/prest/config): [cloud factor support: PORT to http port](https://github.com/prest/config/pull/25) - 🔀 Opened PR in [structy/structbase](https://github.com/structy/structbase): [Tokens](https://github.com/structy/structbase/pull/6) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [PORT var env to HTTP Port pattern in SaaS provider](https://github.com/prest/prest/issues/333) ## 2018-09-13 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Implements transaction](https://github.com/prest/adapters/pull/51#pullrequestreview-155052223) (Approved) - 🐛 Opened issue in [jojojames/flymake-racket](https://github.com/jojojames/flymake-racket): [send to melpa repo](https://github.com/jojojames/flymake-racket/issues/1) ## 2018-09-10 - ✅ Reviewed PR in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [add some racket projects and new sections](https://github.com/avelino/awesome-racket/pull/2#pullrequestreview-153792973) (Approved) - 🐛 Opened issue in [avelino/awesome-racket](https://github.com/avelino/awesome-racket): [Validate alphabetical ordem in markdown ](https://github.com/avelino/awesome-racket/issues/1) ## 2018-09-09 - 🔀 Opened PR in [sindresorhus/awesome](https://github.com/sindresorhus/awesome): [Add Racket](https://github.com/sindresorhus/awesome/pull/1393) ## 2018-09-08 - ✅ Reviewed PR in [cstate/cstate](https://github.com/cstate/cstate): [v3.0 — Preview 1](https://github.com/cstate/cstate/pull/20#pullrequestreview-153552650) (Approved) ## 2018-09-07 - 🔀 Opened PR in [greghendershott/frog](https://github.com/greghendershott/frog): [fixed typo: raco link](https://github.com/greghendershott/frog/pull/228) ## 2018-09-04 - 🐛 Opened issue in [muan/github-dashboard](https://github.com/muan/github-dashboard): [firefox version](https://github.com/muan/github-dashboard/issues/14) ## Commits - 🔨 Push to [avelino/cover.run](https://github.com/avelino/cover.run): 1 commit(s) - [See commits](https://github.com/avelino/cover.run/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 7 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [prest/config](https://github.com/prest/config): 1 commit(s) - [See commits](https://github.com/prest/config/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [avelino/awesome-racket](https://github.com/avelino/awesome-racket): 3 commit(s) - [See commits](https://github.com/avelino/awesome-racket/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 1 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [structy/structbase](https://github.com/structy/structbase): 19 commit(s) - [See commits](https://github.com/structy/structbase/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [greghendershott/frog](https://github.com/greghendershott/frog): 1 commit(s) - [See commits](https://github.com/greghendershott/frog/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [levpay/infobip](https://github.com/levpay/infobip): 1 commit(s) - [See commits](https://github.com/levpay/infobip/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [avelino/paddle](https://github.com/avelino/paddle): 2 commit(s) - [See commits](https://github.com/avelino/paddle/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 4 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 7 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 3 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2018-09-01T00:00:00Z&until=2018-09-30T23:59:59Z) ## Private contributions - 🔒 91 private contribution(s) this month --- # Usando iPad Pro como laptop principal **URL**: https://avelino.run/usando-ipad-pro-como-laptop-principal/ **Published**: 2018-08-19 **Tags**: ipad, ipadpro, laptop, desenvolvimento, ambiente de trabalho **Word Count**: 1318 words Após ler alguns blogpost sobre usar o iPad como computador principal e conversar com um amigo que trabalha no Google que usa em caso como **"main laptop"**, resolvi estudar os apps para iOS que eu teria que usar para atender a minha demanda do dia a dia como gestor e desenvolvedor. Como sempre a Apple faz um ótimo trabalho nos seus produtos, sempre pensando na simplicidade de uso do seu cliente final, ou seja, isso ajuda o onboard em qualquer dispositivo/software deles. Nem tudo são flores, ao deixar algumas coisas muito óbvias acaba confundindo (no começo) quem vem da experiência de usar um laptop para um iPad, mas acredita que em alguns dias (no meu caso 1 semana) já estava extremamente acostumado com o meu ambiente e clicando com o dele como não houvesse amanhã! ## Mas é possível desenvolver usando o iPad? Bom vamos lá, deixa eu contextualizar como era meu ambiente de desenvolvimento antes de responder essa pergunta. Eu usava um Macbook de 12’ com a seguinte configuração: Processador: i7 Memoria: 16GB RAM Disco: 512GB ssd Cor: Ouro Rose (por escolha própria, muitos me questionava pela cor dele, mas eu simplesmente gostei, até o atendente da Apple perguntou se seria para a minha esposa 😕) Era um super avião em poder de processamento e extremamente portátil, mas nem tudo é era tão bom como esperado, algumas coisas previstas, mas outras não. Um USB-C, acabei-me acostumando, pois usava a dock station DELL WD15 quando estava em casa para ligar monitor externo (HDMI ou VGA), ethernet, USBs e etc, o problema que vejo é a tela quando estou na rua (fora do home office), ela é meia “mole”, isso acontecia em um MacBook Air 11’ que tive no passado, acredito que isso seja uma feature não bug para Apple. Com essa máquina eu sempre mantive o meu ambiente de desenvolvimento remoto, isso mesmo, tudo em um servidor conectando via mosh (ssh com menos buffer, leia mais sobre aqui [MOSH](https://mosh.org/)), a anos não uso IDE para desenvolver software passando com alguns editores que roda em console (sem interface gráfica), VIM durante muitos anos (eis que surgiu o [vim-bootstrap](https://vim-bootstrap.com/)) e hoje EMACS (acredito que isso seja assunto para outro blogpost kkkkk). Dia a dia de desenvolvimento é entorno das seguintes tecnologias: - Go - Python - Clojure (quando preciso rodar alguma coisa em JVM) - TypeScript (quando preciso mexer em forntend, mas tento correr disso sempre que posso, sorry) - [Rum](https://www.rumlang.org/) (brinquedo que ultimamente não estou com tempo de brincar 😞) Olhando as tecnologias acima é possível se virar bem sem interface gráfica, Clojure dando um pouco mais de trabalho por causa da JVM (build dá um pouco de trabalho, IDE existe click build 😋), mas é possível. Agora respondendo a pergunta “é possível desenvolver usando o iPad?" Para a minha necessidade atual sim, lógico que levou um tempo (julgo anos) até conseguir viver sem uma interface gráfica para desenvolver, hoje eu consigo me virar super bem. ## Porque escolher o iPad como computador principal? Escolha pelo iOS como ambiente principal foi após olhar se todos os aplicativos que eu precisava seria possível ter no iPad. O meu dia a dia estava mais em ferramentas office que desenvolvimento de software. Sou CTO da [Nuveo](https://nuveo.ai/) (empresa que trabalha com Inteligência artificial) e o meu dia estava se resumindo em reuniões (texto que foi dito dentro da reunião), detalhamento de história para o time técnico transformar em software, criação de diagrama (forma de expressar ideia em fluxo), desenvolvimento de software (ssh/mosh) e responder muitos emails. Não consigo ficar tão longe de desenvolvimento de software, como leu no tópico anterior eu mantinha o meu ambiente de desenvolvimento remoto, isso tornou (100%) viável a minha ida para um iPad Pro. - Reunião: Existem muitos apps para anotações e muitos deles dá suporte a iPencil ("caneta" da Apple); - Criação de diagrama: iPad, combinado com a iPencil e Apps que existem para esse fim a atividade de criação de diagrama fica extremamente dinâmica e fluida; - Desenvolvimento (ssh): Tem algumas clientes ótimos para ssh e mosh, onde não deixa a desejar para openssh cliente em laptop; - Ferramentas office (responder email): iOS está muito bem servido para ferramentas de escritório iWorks (Number, Pages, Keynote e etc) e Office 365 (Microsoft Office), cliente de email existem muitos (alguns extremamente completo), cloud store (Dropbox, Google Drive e iCloud). ## Acessórios Existem diversos acessórios que ajuda a auxilia no uso diário do iPad, segue abaixo a lista de acessórios que eu usava: - Smart Keyboard: olhando por vídeo e imagem pensava que seria horrível digitar com ele, sinceramente me surpreendeu e muito, está muito longe para ser o melhor teclado, mas é relativamente confortável digitar - iPencil: nunca usei outra “caneta” para iPad ou outro device, na minha opinião é excepcional após aprender manipular ela (no começo fiquei meio perdido) - Adaptador Lightning HDMI (monitor externo) - Logitech Create Backlit Keyboard Case (substitui pelo Smart Keyboard, não achei muito portátil para carregar, fica muito grande) Existem muitos acessórios para deixar o iPad mais laptop. ## Apps? - Blink: Cliente mosh e ssh (super recomendo) - SSH Tunnel: Criar tunnel ssh (proxy) - OpenVPN: Cliente para VPN - 1Password: Não consigo viver sem ele hoje em dia 😄 - MIHTool: Developer Tools do Browser - Safari: Poderia usar o Chrome, mas no iOS não liberar trocar o browser padrão (acredito que isso irá se manter até eles levar um processo) - Airmail: Cliente de email - ProtonMail: Cliente de email pessoal (criptografado) - PivotalTracker: Gestão de tarefa usada na Nuveo - Dropbox: O meu “File System”, dado que o iOS não libera acesso no FS do iOS - Documents by Readdle: Conecta em diversos Cloud Store - Editorial: Editor de markdown (texto) com sync no Dropbox - Notability: Editor com suporte a iPencil - Telegram: Comunicação pessoal - Slack: Ferramenta de chat usado para comunicação interna na Nuveo - Lucidchart: Ferramenta de diagrama - MindMeister: Ferramenta de mind manager - appear.in: Vídeo conferência - Google Meet: Vídeo conferência - Skype: Vídeo conferência - MUDRammer — Cliente MUD (game via telnet) Acredito que eram esses apps que usava no dia a dia. ## Para qual uso eu recomendo o iPad? Esse é um assunto extremamente complicado dado que o iPad Pro não é um hardware barato e sim um hardware de “luxo”. Para quem quer um hardware para navegar na internet e utilizar ferramentas offices acredito que seja uma escolha ideal (se não entrarmos em relação do valor). ## Continuo usando o iPad? Costumo dizer que ter um iPad Pro é um ambiente de luxo, consegue viver sem ele, mas tenha certeza que como qualquer ferramenta boa ganha dependência extremamente fácil e rápido. Passei 2 meses usando diariamente o iPad para todo o tipo de trabalho até ir em cliente onde tive que passar o dia desenvolvendo (via 4G, o cliente não tinha WIFI liberado para terceiro). Um dos motivos claros que me fez deixar o uso do iPad (vendi 😞) foi a falta do trackpad (achei extremamente triste isso), acostumei viver clicando na tela, mas particularmente não é para qualquer momento, mouse ainda é mais prático — pelo menos para mim — para o meu filho de 5 anos tenho certeza que ele prefere clicar na tela. “Uso do iPad no colo”, não é muito confortável usar o iPad no colo com o Smart Keyboard (nem Logitech Create Backlit), é possível não pratico. Sinceramente acredito que fiz uma escolha errada, usava uma laptop de 12’ (extremamente portátil) e comprei o iPad Pro de 12.9’ (maior que meu laptop), essa escolha me fez voltar para laptop. Hoje estou usando MacBook Pro de 13 com TouchBar (não consegui acostumar com ele ainda 😞), praticamente o mesmo tamanho e peso do meu iPad Pro de 12.9 com case/keyboard. Sinto falta da praticidade de expressar coisas com iPencil, mas é possível viver sem. ## Ambiente de desenvolvimento Como comentei eu conecto em servidor remoto, ou seja, uso Debian Sid e instalo tudo que preciso lá, assim nada fica local na iPad e/ou laptop. ### Outros blogposts Recomendo ler esse blogpost: [Conheça seu ambiente de trabalho](https://medium.com/@avelino0/conhe%C3%A7a-seu-ambiente-de-trabalho-cf16f8cd555a) --- # Motivação é pessoal, encontre oque lhe motiva continuar **URL**: https://avelino.run/quote/2018-08-13-motivacao-e-pessoal-encontre-oque-lhe-motiva-continuar/ **Published**: 2018-08-13 **Tags**: quote, evolua, corrida, foco, motivacao, dominesuamente, the5amclub **Word Count**: 223 words ![Motivação é pessoal](/motivacao-air.jpg#center) Muitas pessoas pergunta-me por estou praticando corrida sendo que existem outros esportes mais “legais” e com mais “adrenalina”! Sempre gostei de ver minha evolução pessoal (isso é uma das coisas que me motiva), a corrida é um esporte que é você, seu cérebro e nada mais, podemos dizer, você e você mesmo(a). Todos os dias que estou me aquecendo para começar correr meu cérebro quer me vencer tentando convencer meu corpo que não vou conseguir chegar ao final, já corro mais de 1 ano (todos os dias) e continua o mesmo sentimento até hoje. O prazer de conseguir chegar no final (vitória) diária é o que me motiva acordar amanhã #5am para meditação e correr, motivação é pessoal, encontre o que lhe motiva continuar, pare de pensar que sua motivação é a mesma que seu amiguinho do [Instagram](https://instagram.com/avelino0) que só pública o lado bonito e positivo da vida, quem gosta de compartilhar as quedas? Tenha certeza que todos cai, mas poucos tem coragem de compartilhar publicamente, compartilhas as quedas podem ajudar outras pessoas não tropeçarem na mesma pedra que você. Não são todos os dias que acordamos bem, mas é todos os dias que saio para correte e alcançar meus objetivos de vida! #evolua #corrida #academia #glamour #palco #foco #olofotes #atuar #dominesuamente #vida #life #umpassodecadavez #rotina #the5amclub #the5am #mude #planeje #planejamento #vidaatravesdalente #textao --- # Open Source Contributions - August 2018 **URL**: https://avelino.run/foss/2018/08/ **Published**: 2018-08-01 **Word Count**: 536 words **Summary**: August 2018 saw 48 contributions across 18 repositories, including 11 pull requests and 16 reviews, showcasing our active development and community engagement. In August 2018, our community made significant strides with a total of 48 contributions across 18 repositories. This timeline highlights key events, including pull requests, reviews, and issue tracking, reflecting our commitment to continuous improvement and collaboration. ## 2018-08-31 - 🐛 Opened issue in [cstate/cstate](https://github.com/cstate/cstate): [issue affected list](https://github.com/cstate/cstate/issues/25) ## 2018-08-30 - 🔀 Opened PR in [cstate/cstate](https://github.com/cstate/cstate): [typo new repo name](https://github.com/cstate/cstate/pull/24) - 🔀 Opened PR in [cstate/cstate](https://github.com/cstate/cstate): [fixed systems loop](https://github.com/cstate/cstate/pull/23) - 🔍 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Implements transaction](https://github.com/prest/adapters/pull/51#pullrequestreview-151138555) (Changes requested) - 🐛 Opened issue in [cstate/cstate](https://github.com/cstate/cstate): [Error while rendering "home" in "": template: index.html:63:25: executing "index.html" at <$systems>: undefined variable: $index](https://github.com/cstate/cstate/issues/22) ## 2018-08-28 - 🐛 Opened issue in [sina-al/pynlp](https://github.com/sina-al/pynlp): [typo error on StanfordCoreNLP __init__](https://github.com/sina-al/pynlp/issues/20) ## 2018-08-26 - 🐛 Opened issue in [codelucas/newspaper](https://github.com/codelucas/newspaper): [Did not locate the content this URL](https://github.com/codelucas/newspaper/issues/616) ## 2018-08-23 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [quickly history commands from FZF](https://github.com/editor-bootstrap/vim-bootstrap/pull/298#pullrequestreview-148909143) (Approved) - 🐛 Opened issue in [rkazakov/ampify](https://github.com/rkazakov/ampify): [real site convert html to amp crash](https://github.com/rkazakov/ampify/issues/25) ## 2018-08-22 - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [from os/user to github.com/mitchellh/go-homedir](https://github.com/prest/config/pull/24#pullrequestreview-148460738) (Approved) ## 2018-08-21 - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [added disqus support](https://github.com/avelino/hugo-theme-sarah/pull/14) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [import google analytics on footer](https://github.com/avelino/hugo-theme-sarah/pull/13) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [added pagination (hugo partial) support](https://github.com/avelino/hugo-theme-sarah/pull/12) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [fixed title mobile guide crash](https://github.com/avelino/hugo-theme-sarah/pull/11) - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [disqus comment system Support](https://github.com/avelino/hugo-theme-sarah/issues/10) - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [Google Analytics support](https://github.com/avelino/hugo-theme-sarah/issues/9) - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [New style title crash on mobile](https://github.com/avelino/hugo-theme-sarah/issues/8) - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [Blogpost list paginate](https://github.com/avelino/hugo-theme-sarah/issues/7) ## 2018-08-20 - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [title guide style, more highlight](https://github.com/avelino/hugo-theme-sarah/pull/6) - 🔀 Opened PR in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [fixed markdown list "not parsing in HTML"](https://github.com/avelino/hugo-theme-sarah/pull/4) - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [[WIP] TCP client conection](https://github.com/gofn/gofn/pull/115) - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [title guide style](https://github.com/avelino/hugo-theme-sarah/issues/5) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [docker tcp socket](https://github.com/gofn/gofn/issues/114) ## 2018-08-15 - 🐛 Opened issue in [racket/plt-web](https://github.com/racket/plt-web): [package name, related to the old language name](https://github.com/racket/plt-web/issues/2) - 🐛 Opened issue in [racket/racket-lang-org](https://github.com/racket/racket-lang-org): [gmane mirror It's not working](https://github.com/racket/racket-lang-org/issues/76) ## 2018-08-12 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add cache proxy overlord](https://github.com/avelino/awesome-go/pull/2023#pullrequestreview-145470321) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add f4go](https://github.com/avelino/awesome-go/pull/2059#pullrequestreview-145470117) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add branca](https://github.com/avelino/awesome-go/pull/2057#pullrequestreview-145470032) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add two books to E-Books section](https://github.com/avelino/awesome-go/pull/2056#pullrequestreview-145470011) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/2055#pullrequestreview-145469984) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ws](https://github.com/avelino/awesome-go/pull/2054#pullrequestreview-145469956) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gotest.tools](https://github.com/avelino/awesome-go/pull/2053#pullrequestreview-145469899) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Dataflow kit](https://github.com/avelino/awesome-go/pull/2052#pullrequestreview-145469835) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add b2](https://github.com/avelino/awesome-go/pull/2051#pullrequestreview-145469808) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added github.com/euroteltr/rbac](https://github.com/avelino/awesome-go/pull/2050#pullrequestreview-145469740) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add Acra, database protection suite [security]](https://github.com/avelino/awesome-go/pull/2049#pullrequestreview-145469693) (Approved) ## 2018-08-10 - 🔀 Opened PR in [racket/racket-lang-org](https://github.com/racket/racket-lang-org): [fixed typo plt/racket to racket/racket](https://github.com/racket/racket-lang-org/pull/75) ## 2018-08-07 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Add Google Compute Engine provder to gofn](https://github.com/gofn/gofn/pull/113#pullrequestreview-144019133) (Approved) ## 2018-08-06 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [added pREST logo on right top readme file](https://github.com/prest/prest/pull/330) ## 2018-08-05 - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [- Go test is now recursively run to get coverage](https://github.com/avelino/cover.run/pull/21#pullrequestreview-143405973) (Approved) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 20 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 18 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 8 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 6 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) - 🔨 Push to [amply/statuspage](https://github.com/amply/statuspage): 3 commit(s) - [See commits](https://github.com/amply/statuspage/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) - 🔨 Push to [cstate/cstate](https://github.com/cstate/cstate): 3 commit(s) - [See commits](https://github.com/cstate/cstate/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) - 🔨 Push to [racket/racket-lang-org](https://github.com/racket/racket-lang-org): 1 commit(s) - [See commits](https://github.com/racket/racket-lang-org/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 1 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2018-08-01T00:00:00Z&until=2018-08-31T23:59:59Z) ## Private contributions - 🔒 56 private contribution(s) this month --- # Open Source Contributions - July 2018 **URL**: https://avelino.run/foss/2018/07/ **Published**: 2018-07-01 **Word Count**: 533 words **Summary**: July 2018 saw 12 repositories with 48 total contributions, including 4 pull requests and 27 reviews, driving significant project advancements. In July 2018, the development community made notable strides across 12 repositories, contributing a total of 48 activities. This timeline highlights key events, including pull requests, reviews, and issue tracking, showcasing the collaborative efforts that shaped the month. ## 2018-07-31 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Module](https://github.com/prest/prest/pull/328#pullrequestreview-141854972) (Approved) ## 2018-07-25 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Add amazon EC2 Provider to IaaS](https://github.com/gofn/gofn/pull/111#pullrequestreview-140458194) (Approved) ## 2018-07-24 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [query statement ilike operation](https://github.com/prest/doc-template/pull/23) - 🔀 Opened PR in [prest/adapters](https://github.com/prest/adapters): [ilike support](https://github.com/prest/adapters/pull/49) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add percolate/retry](https://github.com/avelino/awesome-go/pull/2022#pullrequestreview-140023929) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gookit/config](https://github.com/avelino/awesome-go/pull/2027#pullrequestreview-140023527) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added GoStats](https://github.com/avelino/awesome-go/pull/2029#pullrequestreview-140023327) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Pattern matching ilike](https://github.com/prest/prest/issues/324) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [query filter _select exclude field](https://github.com/prest/prest/issues/323) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [documentation location](https://github.com/gofn/gofn/issues/112) ## 2018-07-23 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [report database URL configuration in documentation](https://github.com/prest/doc-template/pull/22) ## 2018-07-22 - 🔀 Opened PR in [prest/config](https://github.com/prest/config): [database connection url support](https://github.com/prest/config/pull/23) ## 2018-07-21 - 🐛 Opened issue in [cuducos/twitter-cleanup](https://github.com/cuducos/twitter-cleanup): [tweepy limit rate error](https://github.com/cuducos/twitter-cleanup/issues/3) - 🐛 Opened issue in [cuducos/twitter-cleanup](https://github.com/cuducos/twitter-cleanup): [unfollow_inactive_for error: AttributeError: 'User' object has no attribute 'status'](https://github.com/cuducos/twitter-cleanup/issues/2) - 🐛 Opened issue in [cuducos/twitter-cleanup](https://github.com/cuducos/twitter-cleanup): [soft_block_bots error: account has no tweet published](https://github.com/cuducos/twitter-cleanup/issues/1) ## 2018-07-19 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [update field permission to allow multiple config and operations](https://github.com/prest/adapters/pull/48#pullrequestreview-138708751) (Approved) - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [add example for separated configuration for read and write](https://github.com/prest/doc-template/pull/21#pullrequestreview-138708829) (Approved) ## 2018-07-18 - 🐛 Opened issue in [jinzhu/inflection](https://github.com/jinzhu/inflection): [added your project in awesome-go](https://github.com/jinzhu/inflection/issues/6) - 🐛 Opened issue in [jinzhu/inflection](https://github.com/jinzhu/inflection): [pluralInflections why not be public?](https://github.com/jinzhu/inflection/issues/5) ## 2018-07-16 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added LSB Steganography Library](https://github.com/avelino/awesome-go/pull/2005#pullrequestreview-137497097) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Move Jaeger to distributed system](https://github.com/avelino/awesome-go/pull/2004#pullrequestreview-137496968) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ctc](https://github.com/avelino/awesome-go/pull/2008#pullrequestreview-137496415) (Approved) ## 2018-07-12 - ✅ Reviewed PR in [gofn/cli](https://github.com/gofn/cli): [modify cli to match new digital ocean api](https://github.com/gofn/cli/pull/1#pullrequestreview-136781151) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [delete messages](https://github.com/prest/config/pull/22#pullrequestreview-136780688) (Approved) ## 2018-07-11 - 💬 Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Add management of iaas via docker machine](https://github.com/gofn/gofn/pull/109#pullrequestreview-136410395) (Commented) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [mark functions as test helpers](https://github.com/prest/adapters/pull/47#pullrequestreview-136377539) (Approved) ## 2018-07-06 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-testdeep to the Testing Frameworks list](https://github.com/avelino/awesome-go/pull/1969#pullrequestreview-135147897) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add awless, command line interface for AWS](https://github.com/avelino/awesome-go/pull/1983#pullrequestreview-135147659) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add yunabe/lgo - Interactive Go programming with Jupyter.](https://github.com/avelino/awesome-go/pull/1984#pullrequestreview-135147196) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add stl](https://github.com/avelino/awesome-go/pull/1988#pullrequestreview-135146998) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add jsonslice](https://github.com/avelino/awesome-go/pull/1997#pullrequestreview-135146730) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [removed https://github.com/odeke-em/drive](https://github.com/avelino/awesome-go/pull/2000#pullrequestreview-135146284) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add conflate config library/tool](https://github.com/avelino/awesome-go/pull/2002#pullrequestreview-135145245) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add mort](https://github.com/avelino/awesome-go/pull/1991#pullrequestreview-135142668) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added gNxI](https://github.com/avelino/awesome-go/pull/1986#pullrequestreview-135142263) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add percolate/charlatan](https://github.com/avelino/awesome-go/pull/1981#pullrequestreview-135141973) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [discovery](https://github.com/avelino/awesome-go/pull/1977#pullrequestreview-135141547) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add AwGo (Alfred library)](https://github.com/avelino/awesome-go/pull/1935#pullrequestreview-135140683) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added g3n - Go 3D Game Engine!](https://github.com/avelino/awesome-go/pull/1933#pullrequestreview-135140547) (Approved) ## 2018-07-01 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [PREST_PG_URL config var now set automatically when provisioning Postgres](https://github.com/prest/prest/issues/315) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 7 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 4 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 2 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 2 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) - 🔨 Push to [prest/adapters](https://github.com/prest/adapters): 1 commit(s) - [See commits](https://github.com/prest/adapters/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) - 🔨 Push to [prest/config](https://github.com/prest/config): 1 commit(s) - [See commits](https://github.com/prest/config/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) - 🔨 Push to [gofn/cli](https://github.com/gofn/cli): 1 commit(s) - [See commits](https://github.com/gofn/cli/commits?author=avelino&since=2018-07-01T00:00:00Z&until=2018-07-31T23:59:59Z) ## Private contributions - 🔒 77 private contribution(s) this month --- # Realizando sonho de trabalhar full time com Open Source **URL**: https://avelino.run/realizando-sonho-de-trabalhar-full-time-com-open-source/ **Published**: 2018-06-15 **Tags**: opensource, open source, sonho, golang, python, full time, contribuição **Word Count**: 693 words É extremamente comum ver amigos que começam a contribuir com open source quererem arrumar um “emprego” para passar o dia contribuindo com o projeto (em geral, deixando o Github verdinho...). Será que é realmente legal, como muitos imaginam, trabalhar para uma empresa para **só** contribuir com open source? ![Vivendo o sonho de contribuir com Open Source](/sonho-opensource.png#center) Costumo dizer que contribuir com open source é viciante, faz você passar horas e horas entendendo o projeto que alguém (ou alguma empresa) idealizou, até que chega o momento de mandar o primeiro PR (*pull request*, *patch* e etc) e defender sua implementação. Vem a aí a primeira **skill** que o desenvolvedor (você) precisa evoluir (caso ainda não tenha). Sim estou falando de **venda**. Não venda de produto e sim da sua ideia (`aprender a se comunicar via texto - em geral em inglês`) Está aí outro *problema*, pois texto não passa sentimento. Hoje acho bom, principalmente pensando em uma contribuição, pensar na evolução do software e não levar só o que acreditamos para dentro do software (se você mantém um software open source, esteja aberto às novas ideias/necessidades). Em um primeiro momento sim, mas como qualquer sonho nem tudo é previsível (principalmente quando você nunca ocupou essa posição antes). A ideia de escrever esse blogpost é expor um cenário que provavelmente você não analisou. Quando estamos apaixonados achamos que o caminho a percorrer é composto de flores. ## Vamos direto ao ponto! Quando você contribui com qualquer projeto (principalmente open source), dedica algumas horas (dias, meses e até mesmo anos) do seu tempo para entendê-lo e após compreendê-lo, existem duas linhas a seguir: - - Propor/implementar alguma necessidade que você tem; - - Assumir alguma **issue** proposta por alguém. Ou seja, a escolha (autonomia) está em suas mãos. Esse é o ponto no qual eu quero chegar: **autonomia**. Mas quando eu estiver dentro de uma empresa será igual? Então, bem provavelmente não. Sabe por quê? Porque você está sendo pago para implementar as necessidades que a empresa tem e não as suas necessidades! Se você chegou até esse ponto, isso pode piorar, principalmente se você estiver contribuindo com um **grande** projeto open source. Já pensou que a empresa em que você **trabalha** pode necessitar de um recurso que você não concorda em ter no projeto? E você terá que defender uma ideia que não concorda, pois está sendo pago para isso? Esse é um ponto que muitas pessoas que querem ser pagas para contribuir com open source não pensam e te desafio a pensar o que você faria quando passasse por este cenário (caso queira ocupar uma posição desse tipo). - O que você faria? Tenha em mente que nada é **para sempre** e amanhã você pode estar em outra empresa, mas a pessoa que defendeu/propôs/lutou/se expôs (use a palavra que se encaixa no seu mundo) o recurso X, Y e Z foi você e não a empresa que te pagava! ## Então não devo aceitar trabalho para contribuir com open source? Acredito que surgiu a seguinte duvida: `Durante quase todo o texto parece que você (Avelino) apoia o fato de que a pessoa deve fazer aquilo que ela está sendo paga para fazer, mas no último parágrafo parece que você (Avelino) muda de ideia e traz a mensagem de que é o indivíduo que contribui e não a empresa e que deve-se ter cuidado.` Não existe certo ou errado, estou escrevendo esse blogpost para fazer você refletir que **ser pago para contribuir com** open source pode não ser tão divertido como muitos pensam. Minha dica seria você evoluir os seguintes skills: - - Venda: não necessariamente vender um "produto" e sim sua ideia; - - Comunicação: nem todos irão abraçar sua ideia (isso é bom não é ruim); - - Aprenda a dizer **não**: costumo dizer que o aprender dizer não vem com a senioridade. Nesse contexto a palavra *não* expõem que você não concorda com alguma coisa proposta, não que você é contra a *pessoa*, ou seja, não é uma negação a pessoa e sim ao contexto (nesse caso proposta) a ser seguida; - - Aprenda a debater idéias, não convicções; - - Aprenda a ouvir: extremamente importante. Por último e julgo o mais importante você ter ciência é: **Open Source é mantido por pessoas** Lição aprendida na **PythonBrasil[13]** --- # Open Source Contributions - June 2018 **URL**: https://avelino.run/foss/2018/06/ **Published**: 2018-06-01 **Word Count**: 261 words **Summary**: June 2018 showcased 14 repositories with 21 contributions, including 12 pull request reviews and 5 new issues, highlighting collaborative development efforts. Explore the timeline of contributions made in June 2018, where 14 repositories saw a total of 21 contributions, including significant push events and pull request reviews that enhanced project collaboration and development. ## 2018-06-29 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [BSD Support](https://github.com/prest/prest/pull/312#pullrequestreview-133239440) (Approved) ## 2018-06-28 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [add goreleaser](https://github.com/prest/prest/pull/311#pullrequestreview-132767049) (Approved) - 🔍 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [mark functions as test helpers](https://github.com/prest/adapters/pull/47#pullrequestreview-133053830) (Changes requested) ## 2018-06-25 - ✅ Reviewed PR in [prest/cmd](https://github.com/prest/cmd): [add configuration warnings](https://github.com/prest/cmd/pull/12#pullrequestreview-131517340) (Approved) ## 2018-06-17 - 🐛 Opened issue in [wbinnssmith/base16-oceanic-next](https://github.com/wbinnssmith/base16-oceanic-next): [emacs: melpa register](https://github.com/wbinnssmith/base16-oceanic-next/issues/1) ## 2018-06-14 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add fsnotify and watcher](https://github.com/avelino/awesome-go/pull/1955#pullrequestreview-128705833) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add HTTPLab](https://github.com/avelino/awesome-go/pull/1896#pullrequestreview-128703877) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add golax framework](https://github.com/avelino/awesome-go/pull/1971#pullrequestreview-128703105) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [doc: add rql](https://github.com/avelino/awesome-go/pull/1975#pullrequestreview-128702683) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add url-shortener](https://github.com/avelino/awesome-go/pull/1976#pullrequestreview-128701950) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add SandID](https://github.com/avelino/awesome-go/pull/1979#pullrequestreview-128700283) (Approved) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [check if database is available](https://github.com/prest/adapters/pull/45#pullrequestreview-128688296) (Approved) ## 2018-06-12 - ✅ Reviewed PR in [nuveo/log](https://github.com/nuveo/log): [Remove code that made the log always be in UTC](https://github.com/nuveo/log/pull/25#pullrequestreview-128024387) (Approved) ## 2018-06-10 - 🐛 Opened issue in [cloe-lang/cloe](https://github.com/cloe-lang/cloe): [import golang packages eco-system](https://github.com/cloe-lang/cloe/issues/98) ## 2018-06-05 - 🐛 Opened issue in [python-social-auth/social-core](https://github.com/python-social-auth/social-core): [New Instagram Graph API](https://github.com/python-social-auth/social-core/issues/247) ## 2018-06-02 - 🐛 Opened issue in [RocketChat/meteor-buildpack-horse](https://github.com/RocketChat/meteor-buildpack-horse): [App creation failed. Please ensure you have valid values in the above form fields. ](https://github.com/RocketChat/meteor-buildpack-horse/issues/13) - 🐛 Opened issue in [seedifferently/boto_rsync](https://github.com/seedifferently/boto_rsync): [RuntimeError: Requires Python 2.5 or above and does not support Python 3](https://github.com/seedifferently/boto_rsync/issues/32) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 8 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-06-01T00:00:00Z&until=2018-06-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-06-01T00:00:00Z&until=2018-06-30T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 1 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2018-06-01T00:00:00Z&until=2018-06-30T23:59:59Z) - 🔨 Push to [gofn/gofn](https://github.com/gofn/gofn): 1 commit(s) - [See commits](https://github.com/gofn/gofn/commits?author=avelino&since=2018-06-01T00:00:00Z&until=2018-06-30T23:59:59Z) ## Private contributions - 🔒 26 private contribution(s) this month --- # A oportunidade disfarçada de trabalho **URL**: https://avelino.run/quote/2018-05-28-ann-landers-a-oportunidade-disfarcada-de-trabalho/ **Published**: 2018-05-28 **Tags**: quote, evolua, fase **Word Count**: 21 words ![Analise pessoas tóxicas](/evolua-mascara.jpeg#center) **"As oportunidades normalmente se apresentam disfarçadas de trabalho árduo, e é por isso que muitos não as reconhecem."** Por [Ann Landers](https://en.wikipedia.org/wiki/Ask_Ann_Landers) --- # Why is the name of the language, 'Clojure'? **URL**: https://avelino.run/quote/2018-05-21-why-is-the-name-of-the-language-clojure/ **Published**: 2018-05-21 **Tags**: quote, clojure, lisp, jvm, java **Word Count**: 149 words ![Sit down there comes history](/sit-history.jpg#center) Many who did not seek the **"history"** thinks: **`Did you pick the name based on starting with the word "closure" and replacing the "s" with "j" for Java? It seems pretty likely, but it would be nice to have that confirmed.`** [Rich Hickey](https://twitter.com/richhickey)'s response (creator of the **Clojure**): **`The name was chosen to be unique. I wanted to involve c (c#), l (lisp) and j (java). Once I came up with Clojure, given the pun on closure, the available domains and vast emptiness of the googlespace, it was an easy decision.`** We have strong influence of **Lisp**, **C#** and **Java** languages, well-consolidated languages what trans security for you to use in your projects! [(Understand more about!)](https://groups.google.com/forum/#!msg/clojure/4uDxeOS8pwY/UHiYp7p1a3YJ) ## Learn Clojure links - [Clojure by example](https://kimh.github.io/clojure-by-example/) - [Clojure from the ground up](https://aphyr.com/tags/Clojure-from-the-ground-up) - [Brave Clojure](https://www.braveclojure.com/) - become a better programmer - [Programming Clojure](https://pragprog.com/titles/shcloj/programming-clojure) - [Clojure Cheatsheet](https://clojure.org/api/cheatsheet) - [Clojure Guides](https://clojure.org/guides/getting_started) - getting started - [About more LISP History (pt-BR sorry)](http://avelino.run/historia-do-lisp-abra-os-olhos-para-programacao-funcional/) --- # The 5am club? Just crazy to do it **URL**: https://avelino.run/quote/2018-05-19-the-5am-club-just-crazy-to-do-it/ **Published**: 2018-05-19 **Tags**: quote, the5amclub, 5amclub, high achievers **Word Count**: 91 words ![Start lifting the 5am](/The-5am-Club-It-Can-Change-Your-Life.png#center) Have you ever heard of **[#the5amclub](https://the5am.club/)**? Do you know how powerful the range of 5 to 8 A.M.? Few people are willing to wake up at 5 A.M. by choice, but that's exactly what makes the most successful people in the world, the 5am club class, the `high achievers`. Who does this madness? **Tim Cook** (Apple's CEO), **Richard Branson** (from Virgin), **Robert Iger** (from Disney), **Howard Schultz** (from Starbucks) and **Benjamin Franklin** are some of the people who adhered to this lifestyle. **[Understand why every day the club wins more fans!](https://the5am.club/)** --- # Acelerar no caminho errado ou desacelerar para chegar onde realmente deve chegar? **URL**: https://avelino.run/quote/2018-05-16-acelerar-no-caminho-errado-ou-desacelerar-para-chegar-onde-realmente-deve-chegar/ **Published**: 2018-05-16 **Tags**: quote, startup, startups, acelerar, desacelerar **Word Count**: 134 words ![Corra não importa para onde, apenas corra!](/supere-se.jpeg#center) E quando raramente param para refletir sobre a vida, se deparam com um imenso abismo emocional entre elas e as pessoas que lhe são mais caras. A realidade é que não adianta você acelerar muito, estando no caminho errado. Você só vai chegar mais rápido a lugar algum. Mesmo sendo algo contra intuitivo, desacelerar é justamente o que fará com que você atinja seus objetivos de vida de forma mais rápida. Desacelerar seus pensamentos te trará clareza de quais realmente são suas prioridades, de quais vícios abandonar, quais pessoas andar, quais decisões tomar. E à partir desse nível de clareza, naturalmente você terá mais foco. E com foco, seu nível de ansiedade e stress será completamente diferente. E o resultado final? Mais qualidade de vida para você e todos que estão ao seu redor. --- # Medo? Lute contra os seus medos e mude seu futuro **URL**: https://avelino.run/quote/2018-05-13-lute-contra-os-seus-medos-e-mude-seu-futuro/ **Published**: 2018-05-13 **Tags**: quote, medo, fracasso, fracasso, arriscar, faça **Word Count**: 420 words Por onde começar? Que tal essa enquete abaixo! ![Oque lhe causa medo?](/medo.png#center) **AVISO:** *Estou expondo minha opinião pessoal (recomendo considerar como loucura da minha cabeça)* Analisando o resultado da enquete fica extremamente claro que o medo de muitos é o **fracasso**, não é nada fácil combater esse medo (mas é necessário para uma evolução pessoal), uma das formas de combater qualquer medo é encarar ele de frente, isso não quer dizer que você não tem medo e sim que esta batendo de frente com você mesmo. Lendo a história de muitos atletas de alta performance muitos tem medo de não conseguir, mas com muito treino (onde geram dores, lesões e etc) o medo de não conseguir passa pois você se preparou para o momento que lhe gera medo. Qual a diferença disso para nossa vida? Nenhuma, tudo é questão de treino, persistência e muita meditação (alinhamento de pensamento). ## Medo de empreender? Empreender é uma vida de ansiedade e baixa visão (mesmo quando sua empresa esta indo **muito bem**), ou seja, isso gera uma ansiedade extremamente grande e consequentemente **medos**. Na real não é um **medo** de empreender e sim responsabilidade com todos os colaboradores da empresa. - E se o cliente não fechar - E se o dinheiro acabar - E se não funcionar a solução proposta - E se não vender - E se não acontecer como estamos planejando (*essa pode ter certeza que não ira contracena, mas planejamento é importante para minimizar o risco kkkkk*) - E se ... - E se ... - E se ... Se for pensar em todos **e se** você não sai do lugar e não dá o próximo passo, ou seja, acabará não fazendo. Tenha em mente que só a idea de fazer não irá mudar sua história, agora a ação/execução (o fazer) tem valor e lhe ajudará derrubar o **medo do fracasso**. Costumo dizer: `Prefiro pedir desculpa por ter feito errado do que pedir desculpa por não fazer`, ser proativo lhe ajudará perder o medo. ## Dê o primeiro passo Minha dica para todos que tem algum **medo** é dar o primeiro que os outro passos acontecem naturalmente. Faça, execute, saia da zona de conforto e encare de frente seus **medos**. Escrever esse **quote** não foi fácil mas julgo importante todos saber que mesmo por trás de um cara *durão* (não sei se tão durão assim *kkkk*) que sempre julgou (mostrou) não ter **medo** em alguns passos da minha vida eu tive/tenho medo mas faço e controlo minha ansiedade até o resultado chegar. Um passo de cada vez nos faz alcançar nosso resultado almejado. --- # Open Source Contributions - May 2018 **URL**: https://avelino.run/foss/2018/05/ **Published**: 2018-05-01 **Word Count**: 285 words **Summary**: May 2018 showcased 16 repositories with 27 contributions, including 5 pull requests and 8 issues, highlighting significant community engagement and development progress. Explore the timeline of contributions made in May 2018, featuring a total of 27 impactful events across 16 repositories. This month saw a vibrant mix of pull requests, issue discussions, and code pushes, reflecting a strong collaborative spirit within the developer community. ## 2018-05-31 - 🔀 Opened PR in [microsoft/monaco-languages](https://github.com/microsoft/monaco-languages): [Clojure: added more keywords](https://github.com/microsoft/monaco-languages/pull/37) - 🔀 Opened PR in [microsoft/monaco-editor](https://github.com/microsoft/monaco-editor): [added clojure exampple](https://github.com/microsoft/monaco-editor/pull/904) ## 2018-05-30 - 🔀 Opened PR in [microsoft/monaco-languages](https://github.com/microsoft/monaco-languages): [Clojure support](https://github.com/microsoft/monaco-languages/pull/36) - 🔀 Opened PR in [microsoft/monaco-languages](https://github.com/microsoft/monaco-languages): [upgrade all language support (today)](https://github.com/microsoft/monaco-languages/pull/35) - 🐛 Opened issue in [lacion/cookiecutter-golang](https://github.com/lacion/cookiecutter-golang): [nuveo/log logging alternative](https://github.com/lacion/cookiecutter-golang/issues/14) ## 2018-05-17 - 🐛 Opened issue in [avelino/cover.run](https://github.com/avelino/cover.run): [basic report page](https://github.com/avelino/cover.run/issues/18) ## 2018-05-14 - ✅ Reviewed PR in [prest/doc-template](https://github.com/prest/doc-template): [Document batch insert](https://github.com/prest/doc-template/pull/20#pullrequestreview-119912801) (Approved) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [pt-br review and corrections](https://github.com/avelino/avelino.run/pull/2#pullrequestreview-119730723) (Approved) - 🐛 Opened issue in [blinksh/blink](https://github.com/blinksh/blink): [Smart Keyboard connect disable bar](https://github.com/blinksh/blink/issues/504) ## 2018-05-05 - 🐛 Opened issue in [avelino/cover.run](https://github.com/avelino/cover.run): [local static badge](https://github.com/avelino/cover.run/issues/16) ## 2018-05-04 - 🐛 Opened issue in [atlas-engineer/nyxt](https://github.com/atlas-engineer/nyxt): [homebrew/cask package (macOS)](https://github.com/atlas-engineer/nyxt/issues/95) ## 2018-05-03 - 🔀 Opened PR in [kxxoling/jupyter-clojure-docker](https://github.com/kxxoling/jupyter-clojure-docker): [upgrade image and clear dockerfile](https://github.com/kxxoling/jupyter-clojure-docker/pull/1) - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [F/updating gofn](https://github.com/avelino/cover.run/pull/14#pullrequestreview-117451158) (Approved) - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [Travis](https://github.com/avelino/cover.run/pull/12#pullrequestreview-117246778) (Approved) - 🐛 Opened issue in [avelino/cover.run](https://github.com/avelino/cover.run): [upgrade gofn version](https://github.com/avelino/cover.run/issues/13) ## 2018-05-02 - 🐛 Opened issue in [wsvincent/awesome-django](https://github.com/wsvincent/awesome-django): [Already exist rosarior/awesome-django](https://github.com/wsvincent/awesome-django/issues/1) ## 2018-05-01 - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [import bottle.ext... not pythonic](https://github.com/bottlepy/bottle/issues/1063) ## Commits - 🔨 Push to [avelino/cover.run](https://github.com/avelino/cover.run): 3 commit(s) - [See commits](https://github.com/avelino/cover.run/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 8 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [kxxoling/jupyter-clojure-docker](https://github.com/kxxoling/jupyter-clojure-docker): 1 commit(s) - [See commits](https://github.com/kxxoling/jupyter-clojure-docker/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [microsoft/monaco-editor](https://github.com/microsoft/monaco-editor): 2 commit(s) - [See commits](https://github.com/microsoft/monaco-editor/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [microsoft/monaco-languages](https://github.com/microsoft/monaco-languages): 14 commit(s) - [See commits](https://github.com/microsoft/monaco-languages/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 3 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 1 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [avelino/the5am.club](https://github.com/avelino/the5am.club): 3 commit(s) - [See commits](https://github.com/avelino/the5am.club/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [avelino/slugify](https://github.com/avelino/slugify): 1 commit(s) - [See commits](https://github.com/avelino/slugify/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) - 🔨 Push to [avelino/estimaai.com](https://github.com/avelino/estimaai.com): 2 commit(s) - [See commits](https://github.com/avelino/estimaai.com/commits?author=avelino&since=2018-05-01T00:00:00Z&until=2018-05-31T23:59:59Z) ## Private contributions - 🔒 25 private contribution(s) this month --- # Dev Na Estrada 151 - Entrevista Thiago Avelino **URL**: https://avelino.run/dev-na-estrada-151-entrevista-thiago-avelino/ **Published**: 2018-04-06 **Tags**: podcast, dne-podcast, opensource, open source, carreira, entrevista **Word Count**: 13 words Escute minha participação no Podcast [Dev Na Estrada](https://devnaestrada.com.br/2018/04/06/entrevista-thiago-avelino.html) falando sobre minha carreira profissional: {{< podcast "https://html5-player.libsyn.com/embed/episode/id/6451362/height/90/theme/custom/thumbnail/yes/direction/backward/render-playlist/no/custom-color/3CD52E/" >}} --- # Guia de estilo para pacotes Go **URL**: https://avelino.run/guia-de-estilo-para-pacotes-go/ **Published**: 2018-04-02 **Tags**: golang, style guide, guia de estilo, packages, pacotes **Word Count**: 1497 words Tradução do blogpost [Style guideline for Go packages](https://rakyll.org/style-packages/) escrito pela [@rakyll](https://twitter.com/rakyll). ![One code style to rule all](/one-code-style-to-rule-all.jpg#center) Código organizado em Go é fácil de entender, usar e ler. A falta de organização em código Go é tão crítica quanto as APIs mal projetadas. Os diretórios, nome e a estrutura dos seus pacotes são os primeiros elementos com os quais os utilizadores vêem e interagem. O objetivo deste blogpost é ajudá-lo(a) com boas práticas comuns para não definir regras ruins. Você deve sempre usar o seu julgamento para escolher a solução mais elegante para sua implementação. ## Pacotes Todos os códigos Go são organizados em pacotes. Pacote em Go é simplesmente um diretório (pasta) com um ou mais arquivos `.go` dentro dele. Pacotes Go fornecem isolamento e organização de código semelhante a diretórios e organização de arquivos em um computador. Todo o código Go vive em um pacote e um pacote é o ponto de entrada para acessar o código Go. Compreender e estabelecer boas práticas em torno de pacotes é importante para escrever um bom pacote (código) Go. ## Organização do pacote Vamos começar com sugestões de como você deve organizar código Go e explicar convenções sobre o nome de pacotes Go. ### Usar vários arquivos Pacote é um diretório com um ou mais arquivos Go. Sinta-se livre para separar seu código em quantos arquivos achar melhor para a legibilidade ideal. Por exemplo, o pacote HTTP pode ter sido separado em arquivos diferentes de acordo com o aspecto de handles HTTP. No exemplo a seguir, o pacote HTTP é dividido em alguns arquivos: tipos do cabeçalho e código, tipos de cookie e código, a implementação HTTP real e a documentação do pacote. ```markdown - doc.go // documentação do pacote - headers.go // HTTP tipos de headers e código - cookies.go // HTTP tipos de cookies e código - http.go // HTTP implementação do cliente, request e tipo de response, etc. ``` ### Manter os tipos próximos Como regra geral, mantenha os tipos mais próximos de onde eles são usados. Isso tornará mais fácil qualquer contribuição e manutenção (para você ou outra pessoa externa) para encontrar um tipo. Um bom lugar para as estruturas de dados (*struct*) pode estar no começo do arquivo `headers.go`. ```bash $ cat headers.go package http // Header represents an HTTP header. type Header struct {...} ``` A linguagem Go não restrige onde você deve definir os tipos, uma boa prática é manter os tipos na parte superior do arquivo, dentro do pacote que ele faz parte. ### Organização por responsabilidade Uma prática comum de outras linguagens é organizar tipos juntos em um pacote chamado *modelos* (ou algum nome nessa linha). Em Go, nós organizamos o código por suas responsabilidades funcionais. ```go package models // DON'T DO IT!!! // User represents a user in the system. type User struct {...} ``` Em vez de criar um pacote chamado *modelos* e declarar todos os tipos de entidade lá, um tipo de usuário deve viver em um pacote de camada de serviço. ```go package mngtservice // User represents a user in the system. type User struct {...} func UsersByQuery(ctx context.Context, q *Query) ([]*User, *Iterator, error) func UserIDByEmail(ctx context.Context, email string) (int64, error) ``` ### Pensando no godoc Não é muito facil pensar (usar) Godoc na fase inicial do desenvolvimento da API do seu pacote para ver como seus conceitos serão renderizados no doc. Muitas vezes, essa visualização tem um impacto sobre o projeto (em geral para melhor). Godoc é a forma como os usuários vão consumir um pacote, por isso é extremamente importante ajustar as coisas para torná-las mais acessíveis, tenha certeza que isso melhora a API dos seus pacotes. ### Exemplos para preencher as lacunas Em alguns casos, talvez não seja possível fornecer todos os tipos relacionados de um único pacote. Pode ser confuso fazer isso (em uma fase inicial), você pode querer publicar implementações concretas de uma interface comum de pacote separado ou esses tipos podem ser propriedade de um pacote de terceiros. Dê exemplos para ajudar o usuário a descobrir e entender como eles são usados juntos. ```bash $ godoc cloud.google.com/go/datastore func NewClient(ctx context.Context, projectID string, opts ...option.ClientOption) (*Client, error) ... ``` `NewClient` trabalha com `option.ClientOptions` mas não é nem o pacote de armazenamento de informações nem o pacote de opção que exporta todos os tipos de opção. ```bash $ godoc google.golang.org/extraoption func WithCustomValue(v string) option.ClientOption ... ``` Caso a API do seu pacote exija que muitos pacotes **não padrão** sejam importados, é útil adicionar um [exemplo Go](https://blog.golang.org/examples) para mostrar aos usuários código de exemplo. Exemplos é uma ótima maneira de aumentar a visibilidade de um pacote menos descoberto. Por exemplo, para `datastore.NewClient` pode referenciar o pacote de opção extra. ### Não exportar de **main** Um identificador pode ser [exportado](https://golang.org/ref/spec#Exported_identifiers) para permitir o acesso a ele de outro pacote. Os pacotes principais não são importáveis, portanto, exportar identificadores de pacotes principais é desnecessário. Não exporte identificadores de um pacote principal se você estiver construindo o pacote para um binário. Exceções a esta regra podem ser os principais pacotes incorporados um `.so`, `.a` ou **Go plugin**. Em tais casos, código Go pode ser usado a partir de outras linguagens através da [funcionalidade exportar CGO](https://golang.org/cmd/cgo/#hdr-C_references_to_Go) e identificadores de exportação são necessários. ## Nome do pacote O nome do pacote e caminho de importação são ambos identificadores significativos do seu pacote e representam tudo o que o seu pacote contém. Nomear seus pacotes canônicamente melhora não apenas sua qualidade de código, mas principalmente para os usuários do pacote que você esta criando/mantendo. ### Somente em minúsculas (lowercase) Os nomes dos pacotes devem ser minúsculos. Não use `snake_case` ou `camelCase` em nomes de pacote. O Go blog tem um [guia abrangente](https://blog.golang.org/package-names) sobre nomear pacotes com uma boa variedade de exemplos. ### Nomes curtos, mas representativos Os nomes dos pacotes devem ser **curtos**, mas devem ser **exclusivos** e **representativos**. Os usuários do pacote devem ser capazes de entender sua finalidade a partir do nome, sem necessidade de ler documentação (esse trabalho não é nada fácil, mas é possível). Evite nomes de pacotes demasiado amplos como "common" e "util". ```go import "pkgs.org/common" // DON'T!!! ``` Evite nomes duplicados em casos que o usuário precise importar o mesmo pacote. Se você não pode evitar um nome ruim, é muito provável que haja um problema com sua estrutura geral e organização de código, esse é um grande alerta para repensar do design da sua API. ### Claro caminho de importação Evite expor sua estrutura personalizada de repositório aos usuários. Alinhe bem com as convenções `GOPATH`. Evite ter `src/`, `pkg/` e etc, no caminho da importação. ```go github.com/user/repo/src/httputil // DON'T DO IT, AVOID SRC!! github.com/user/repo/gosrc/httputil // DON'T DO IT, AVOID GOSRC!! ``` ### Sem plural Em Go, os nomes dos pacotes não são plurais. Isso é surpreendente para os programadores que vieram de outras linguagens e estão retendo um velho hábito de pluralização de nomes. Não use nome do pacote `httputils`, mas `httputil`! ```go package httputils // DON'T DO IT, USE SINGULAR FORM!! ``` ### Renomear deve seguir as mesmas regras Se você estiver importando mais de um pacote com o mesmo nome, poderá renomear localmente os nomes dos pacotes. Os renomes devem seguir as mesmas regras mencionadas neste *blogpost*. Não há nenhuma regra sobre que pacote que você deve renomear. Se você está renomeando a biblioteca de pacotes padrão, é bom adicionar um prefixo Go para fazer o nome de auto documento que é "Go biblioteca padrão" pacote, por exemplo, `gourl`, `goioutil`. ```go import ( gourl "net/url" "myother.com/url" ) ``` ### URLs personalizada (vaidade) `go get` suporta a obtenção de pacotes por uma URL que seja diferente da URL do repositório do pacote. Estas URLs são chamadas de URLs personalizadas e exigem que você sirva uma página com meta tags específicas que as ferramentas Go reconhecem. Você pode servir um pacote com um domínio personalizado e um caminho usando URLs personalizadas. Por exemplo: ```bash $ go get cloud.google.com/go/datastore ``` verifica o código-fonte de `https://code.googlesource.com/gocloud` bastidores e colocá-lo em seu espaço de trabalho (**GOPATH**) `$GOPATH/src/cloud.google.com/go/datastore`. Dado `code.googlesource.com/gocloud` já está servindo este pacote, seria possível ir buscar o pacote a partir desse URL? A resposta é não, se você impor a URL personalizada. Para fazer isso, adicione uma instrução import ao pacote. A ferramenta Go rejeitará qualquer importação deste pacote de qualquer outro caminho e exibirá um erro amigável para o usuário. Se você não impor as suas URLs personalizadas, haverá duas cópias do seu pacote que não podem trabalhar em conjunto devido ao *namespace* diferente. ```go package datastore // import "cloud.google.com/go/datastore" ``` ## Documentação de pacote Documente sempre seu pacote. A documentação do pacote é um comentário de nível superior imediatamente anterior à cláusula `package`. Para pacotes *não-principais*, godoc sempre começa com "Package {PkgName}" e segue com uma descrição. Para pacotes principais, a documentação deve explicar o binário. ```go // Package ioutil implements some I/O utility functions. package ioutil // Command gops lists all the processes running on your system. package main // Sample helloworld demonstrates how to use x. package main ``` ### Use doc.go Às vezes, os docs do pacote podem ser longos, especialmente quando fornecem detalhes do uso e das diretrizes. Quando isso acontecer mova o pacote godoc para um arquivo `doc.go`. (consulte um exemplo de um [doc.go](https://githubcom/GoogleCloudPlatform/google-cloud-go/blob/master/datastore/doc.go).) --- # Open Source Contributions - April 2018 **URL**: https://avelino.run/foss/2018/04/ **Published**: 2018-04-01 **Word Count**: 649 words **Summary**: April 2018 saw 28 repositories contribute 59 total activities, including 7 pull requests and 20 reviews, enhancing collaboration and code quality. Explore the timeline of contributions for April 2018, showcasing significant activities across 28 repositories. This month featured 59 events, including pushes, pull requests, and reviews, highlighting a collaborative effort to improve projects and foster community engagement. ## 2018-04-29 - 🐛 Opened issue in [cncd/pipeline](https://github.com/cncd/pipeline): [lock gofn project (and merge project)](https://github.com/cncd/pipeline/issues/41) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [kubernetes backend support](https://github.com/gofn/gofn/issues/106) ## 2018-04-28 - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [F/cleanup](https://github.com/avelino/cover.run/pull/8#pullrequestreview-116135113) (Approved) - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [caching badge in redis, after fetching from img.shields.io](https://github.com/avelino/cover.run/pull/7#pullrequestreview-116135085) (Approved) - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [Performance tuning](https://github.com/avelino/cover.run/pull/9#pullrequestreview-116135072) (Approved) - 🐛 Opened issue in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [added RxGo on awesome-go packages list](https://github.com/ReactiveX/RxGo/issues/59) - 🐛 Opened issue in [avelino/cover.run](https://github.com/avelino/cover.run): [test environment (very very important)](https://github.com/avelino/cover.run/issues/11) ## 2018-04-25 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [remove 404 not found link.](https://github.com/avelino/awesome-go/pull/1898#pullrequestreview-115375321) (Approved) ## 2018-04-21 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added golang bulgaria](https://github.com/avelino/awesome-go/pull/1894#pullrequestreview-114176802) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Go Health Package](https://github.com/avelino/awesome-go/pull/1895#pullrequestreview-114176784) (Approved) ## 2018-04-20 - 💬 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Batch insert](https://github.com/prest/adapters/pull/41#pullrequestreview-114117267) (Commented) ## 2018-04-18 - 🐛 Opened issue in [microsoft/monaco-editor](https://github.com/microsoft/monaco-editor): [Lisp base dialect syntax highlighter](https://github.com/microsoft/monaco-editor/issues/829) - 🐛 Opened issue in [microsoft/monaco-editor](https://github.com/microsoft/monaco-editor): [Clojure syntax highlighter](https://github.com/microsoft/monaco-editor/issues/828) - 🐛 Opened issue in [saf-dmitry/taskpaper-mode](https://github.com/saf-dmitry/taskpaper-mode): [C-c C-d: put date time](https://github.com/saf-dmitry/taskpaper-mode/issues/5) ## 2018-04-17 - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [added a ui change for repo page. slightly cleaner](https://github.com/avelino/cover.run/pull/6#pullrequestreview-113034390) (Approved) - ✅ Reviewed PR in [avelino/cover.run](https://github.com/avelino/cover.run): [added ability to decide the style of the badge. Defaults to flat-square](https://github.com/avelino/cover.run/pull/5#pullrequestreview-113034301) (Approved) - 🐛 Opened issue in [eclipse-theia/theia](https://github.com/eclipse-theia/theia): [Clojure syntax highlighter](https://github.com/eclipse-theia/theia/issues/1717) ## 2018-04-16 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Move scanner out of the internal](https://github.com/prest/adapters/pull/40#pullrequestreview-112399836) (Approved) ## 2018-04-14 - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [extend: supplying the #43 issue for list processes](https://github.com/gofn/gofn/pull/105) ## 2018-04-13 - 🔍 Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Supplying the #43 issue for list processes](https://github.com/gofn/gofn/pull/104#pullrequestreview-111942799) (Changes requested) ## 2018-04-11 - 🐛 Opened issue in [fishworks/gofish](https://github.com/fishworks/gofish): [Transpile homebrew formule to fish food](https://github.com/fishworks/gofish/issues/41) ## 2018-04-10 - 🐛 Opened issue in [clojars/clojars-web](https://github.com/clojars/clojars-web): [organization group](https://github.com/clojars/clojars-web/issues/687) ## 2018-04-09 - 🔀 Opened PR in [zxh0/jvm.go](https://github.com/zxh0/jvm.go): [fixed typo on LICESE file name](https://github.com/zxh0/jvm.go/pull/52) - 🔀 Opened PR in [zxh0/jvm.go](https://github.com/zxh0/jvm.go): [added jvmgo (bin) on git ignore](https://github.com/zxh0/jvm.go/pull/51) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added link to Learn go with TDD](https://github.com/avelino/awesome-go/pull/1880#pullrequestreview-110478222) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add a new e-book: go 101](https://github.com/avelino/awesome-go/pull/1879#pullrequestreview-110477951) (Approved) - 🐛 Opened issue in [goodrain/rainbond](https://github.com/goodrain/rainbond): [Version of the site in English](https://github.com/goodrain/rainbond/issues/59) - 🐛 Opened issue in [goodrain/rainbond](https://github.com/goodrain/rainbond): [dep to manager dependence (vendor)](https://github.com/goodrain/rainbond/issues/58) - 🐛 Opened issue in [rShetty/awesome-podcasts](https://github.com/rShetty/awesome-podcasts): [Brazilian podcasts (pt-br content)](https://github.com/rShetty/awesome-podcasts/issues/103) - 🐛 Opened issue in [melpa/melpa](https://github.com/melpa/melpa): [Error (use-package): Failed to install magit: magit-20180401.314.tar](https://github.com/melpa/melpa/issues/5419) ## 2018-04-08 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding WebGo to web frameworks](https://github.com/avelino/awesome-go/pull/1872#pullrequestreview-110300613) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add paq utility](https://github.com/avelino/awesome-go/pull/1871#pullrequestreview-110299344) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Removed go-gml, goqt](https://github.com/avelino/awesome-go/pull/1873#pullrequestreview-110299315) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add another JWT library.](https://github.com/avelino/awesome-go/pull/1874#pullrequestreview-110299277) (Approved) - 🐛 Opened issue in [goodrain/rainbond](https://github.com/goodrain/rainbond): [package api design (Golang pattern)](https://github.com/goodrain/rainbond/issues/57) - 🐛 Opened issue in [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): [social meta tags](https://github.com/avelino/hugo-theme-sarah/issues/1) ## 2018-04-07 - 🔀 Opened PR in [gohugoio/hugoThemes](https://github.com/gohugoio/hugoThemes): [add sarah theme](https://github.com/gohugoio/hugoThemes/pull/349) ## 2018-04-06 - 🔀 Opened PR in [inconshreveable/slt](https://github.com/inconshreveable/slt): [inconshreveable/slt is software not package](https://github.com/inconshreveable/slt/pull/13) - 🔀 Opened PR in [inconshreveable/slt](https://github.com/inconshreveable/slt): [rename server to main](https://github.com/inconshreveable/slt/pull/12) - 🐛 Opened issue in [inconshreveable/slt](https://github.com/inconshreveable/slt): [rename server file to main](https://github.com/inconshreveable/slt/issues/11) - 🐛 Opened issue in [inconshreveable/slt](https://github.com/inconshreveable/slt): [dependency management](https://github.com/inconshreveable/slt/issues/10) ## 2018-04-05 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/1870#pullrequestreview-109610370) (Approved) ## 2018-04-03 - 🐛 Opened issue in [crgimenes/grupo-estudos-golang](https://github.com/crgimenes/grupo-estudos-golang): [Usar sistema de labels nas issues](https://github.com/crgimenes/grupo-estudos-golang/issues/54) - 🐛 Opened issue in [crgimenes/grupo-estudos-golang](https://github.com/crgimenes/grupo-estudos-golang): [Converte em uma estrutura Hugo ](https://github.com/crgimenes/grupo-estudos-golang/issues/53) - 🐛 Opened issue in [nuveo/log](https://github.com/nuveo/log): [raygun support, used adapter pattern](https://github.com/nuveo/log/issues/22) ## 2018-04-02 - 🔀 Opened PR in [rakyll/rakyll.github.io](https://github.com/rakyll/rakyll.github.io): [fixed typo on style-packages](https://github.com/rakyll/rakyll.github.io/pull/6) - ✅ Reviewed PR in [avelino/avelino.run](https://github.com/avelino/avelino.run): [Fixed some pt-br to improve reading and some typos](https://github.com/avelino/avelino.run/pull/1#pullrequestreview-108777240) (Approved) ## 2018-04-01 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [README.md: Add goimagehash](https://github.com/avelino/awesome-go/pull/1866#pullrequestreview-108515189) (Approved) - 🐛 Opened issue in [vic/rebecca-theme](https://github.com/vic/rebecca-theme): [iterm2 theme support](https://github.com/vic/rebecca-theme/issues/7) ## Commits - 🔨 Push to [avelino/cover.run](https://github.com/avelino/cover.run): 2 commit(s) - [See commits](https://github.com/avelino/cover.run/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 11 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 4 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [avelino/hugo-theme-sarah](https://github.com/avelino/hugo-theme-sarah): 22 commit(s) - [See commits](https://github.com/avelino/hugo-theme-sarah/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [gofn/gofn](https://github.com/gofn/gofn): 1 commit(s) - [See commits](https://github.com/gofn/gofn/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [avelino/estimaai.com](https://github.com/avelino/estimaai.com): 5 commit(s) - [See commits](https://github.com/avelino/estimaai.com/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [zxh0/jvm.go](https://github.com/zxh0/jvm.go): 2 commit(s) - [See commits](https://github.com/zxh0/jvm.go/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 2 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 12 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 2 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2018-04-01T00:00:00Z&until=2018-04-30T23:59:59Z) ## Private contributions - 🔒 25 private contribution(s) this month --- # Fazer o melhor que podemos na condição que tem - Monja Coen **URL**: https://avelino.run/quote/2018-03-27-fazer-o-melhor-que-podemos-na-condicao-que-tem/ **Published**: 2018-03-27 **Tags**: monja coen, budismo, quote **Word Count**: 216 words ![Monja Coen](/monja-coen.jpg#center) Esta fazendo o possível ou o melhor? Se *você* (ou **eu**) podendo fazer o meu melhor me contato com o possível cairemos em um lugar chamado **mediocridade** ## Medíocre Significa mediano, sofrível. É um adjetivo de dois gêneros que qualifica aquele ou aquilo que está na média entre dois termos de comparação , ou seja, que não é bom nem mau, que não é pequeno nem grande etc. Por exemplo: "Um livro medíocre". Lembra quando você chegava da escola com o boletim escrito: 8,0 em matemática, 5,5 em português, 4,0 em história… e você dizia: `deu pra passar`. `Deixa, eu toco a minha vida` – Isso é **mediocridade**. *Mediocridade* é falta de **capricho**. Capricho é você fazer o teu melhor na condição que você tem. {{< youtube loLrGMr3FNA >}} Não arrume desculpas para você mesmo(a), faça sempre o seu melhor. Eu (*Avelino*) tenho costume de fazer minha auto avaliação na minha meditação diaria e sempre faço uma reclecção se eu fiz o meu melhor pois sempre acho que poderia ser melhor o que foi feito, se você sempre tem esse sentimento fique tranquilo que nos seres humanos estamos sempre em um processo de evolução continua, o que fiz hoje irei fazer muito melhor amanhã. Conheça mais sobre a [**Monja Coen**](http://www.monjacoen.com.br/a-monja-coen) que é uma pessoa incrível com pensamos e alinhamento mental surpreendente. --- # Empreendendo em seu local de trabalho **URL**: https://avelino.run/quote/2018-03-19-quote-empreendendo-em-seu-local-de-trabalho/ **Published**: 2018-03-25 **Tags**: empreender, empreendedorismo, pensamento, quote **Word Count**: 184 words ![Mente empreendedora](/mente.jpg#center) Em 2014 palestrei em alguns evendo falando sobre **Empreender em seu local de trabalho**, muitas pessoas pensam que empreender é abrir uma empresa (ter CNPJ) e cuidar de questões burocraticas de ter uma empresa (contabilidade, fluxo de caixa e blá blá blá), mas na real o que é empreender? {{< speakerdeck 9951aee0382e0132d1604297f98471b0 >}} ### Porque esse blogpost, após 3 anos de palestra? [Trocando forma de pensar (mudando mindset) de empresário para 'empregado'](https://avelino.run/trocando-forma-de-pensar-mudando-mindset-de-empres%C3%A1rio-para-empregado/) ### Empreendedorismo **Estudo** voltado para desenvolvimento de competências e habilidades relacionadas à criação de projetos, processo de iniciativa de implementar novos negócios ou **mudanças** algo (por exemplo empresa) já existentes. É um termo muito usado no âmbito empresarial e muitas vezes está relacionado com a criação de empresas ou produtos novos, normalmente envolvendo inovações e riscos. Eu costumo dizer que é um modo de pensar e não o ato de criação de empresa. O empreendedorismo está muito relacionado com a questão de inovação, na qual há determinado objetivo de se criar algo dentro de um setor ou produzir algo novo. Diversos projetos *open source* nasce de uma necessidade, os criadores e/ou mantenedores teve/tem o modo **empreendedor** de pensar. --- # Open Source Contributions - March 2018 **URL**: https://avelino.run/foss/2018/03/ **Published**: 2018-03-01 **Word Count**: 739 words **Summary**: March 2018 saw 26 repositories with 69 total contributions, including 11 pull requests and 28 reviews, enhancing collaboration and code quality. In March 2018, a vibrant collaborative effort unfolded across 26 repositories, showcasing a total of 69 contributions. This timeline highlights significant events such as pull requests, code reviews, and push events that collectively contributed to the growth and enhancement of projects, reflecting an active and engaged developer community. ## 2018-03-31 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/buraksezer/consistent package](https://github.com/avelino/awesome-go/pull/1864#pullrequestreview-108492831) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add the iot project for Google IoT Core.](https://github.com/avelino/awesome-go/pull/1862#pullrequestreview-108492806) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added github.com/fatih/structs to serialization](https://github.com/avelino/awesome-go/pull/1865#pullrequestreview-108492764) (Approved) ## 2018-03-28 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [ALLOWED_HOSTS configuration](https://github.com/prest/prest/issues/293) ## 2018-03-27 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [fix join request with schema](https://github.com/prest/adapters/pull/39#pullrequestreview-107295154) (Approved) ## 2018-03-26 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [[wip] automatically deploy via travis ci](https://github.com/prest/doc-template/pull/18) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add hydra to the list oauth2 apps](https://github.com/avelino/awesome-go/pull/1860#pullrequestreview-106749367) (Changes requested) ## 2018-03-24 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Updated Naming](https://github.com/avelino/awesome-go/pull/1858#pullrequestreview-106705898) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Removed go-bqstreamer, no longer maintained](https://github.com/avelino/awesome-go/pull/1859#pullrequestreview-106705811) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added Community Curated Resources](https://github.com/avelino/awesome-go/pull/1853#pullrequestreview-106697994) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add official MongoDB Go driver](https://github.com/avelino/awesome-go/pull/1846#pullrequestreview-106697478) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added https://github.com/gobuffalo/packr](https://github.com/avelino/awesome-go/pull/1848#pullrequestreview-106697388) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add cfmt library](https://github.com/avelino/awesome-go/pull/1850#pullrequestreview-106697319) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [:sparkles: Add Pipe](https://github.com/avelino/awesome-go/pull/1851#pullrequestreview-106697189) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Vektra/Mockery](https://github.com/avelino/awesome-go/pull/1852#pullrequestreview-106697135) (Changes requested) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [49 feature request flatmap](https://github.com/ReactiveX/RxGo/pull/57#pullrequestreview-106697822) (Approved) - 🐛 Opened issue in [tesseract-ocr/langdata](https://github.com/tesseract-ocr/langdata): [Documentation of how to contribute](https://github.com/tesseract-ocr/langdata/issues/119) - 🐛 Opened issue in [tesseract-ocr/langdata](https://github.com/tesseract-ocr/langdata): [Portuguese (Brazil) source](https://github.com/tesseract-ocr/langdata/issues/118) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [readme in english](https://github.com/avelino/awesome-go/issues/1857) - 🐛 Opened issue in [gographics/imagick](https://github.com/gographics/imagick): [package api design (Golang pattern)](https://github.com/gographics/imagick/issues/158) ## 2018-03-23 - 🐛 Opened issue in [yyyar/gobetween](https://github.com/yyyar/gobetween): [why put the software inside the src folder?](https://github.com/yyyar/gobetween/issues/130) ## 2018-03-22 - 🔀 Opened PR in [levpay/infobip](https://github.com/levpay/infobip): [warning: file is not gofmted with -s (gofmt)](https://github.com/levpay/infobip/pull/5) - 🔀 Opened PR in [levpay/infobip](https://github.com/levpay/infobip): [added travis support](https://github.com/levpay/infobip/pull/2) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [add support to slice on scripts](https://github.com/prest/adapters/pull/38#pullrequestreview-106257151) (Approved) - ✅ Reviewed PR in [prest/template](https://github.com/prest/template): [Add support to slice in script](https://github.com/prest/template/pull/3#pullrequestreview-106228631) (Approved) - 🔍 Reviewed PR in [levpay/infobip](https://github.com/levpay/infobip): [single message feature](https://github.com/levpay/infobip/pull/1#pullrequestreview-106184919) (Changes requested) - 🐛 Opened issue in [levpay/infobip](https://github.com/levpay/infobip): [Send multiple textual sms](https://github.com/levpay/infobip/issues/3) ## 2018-03-21 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [fix scanner on mock adapter](https://github.com/prest/adapters/pull/37#pullrequestreview-105909894) (Approved) - ✅ Reviewed PR in [nuveo/boxos](https://github.com/nuveo/boxos): [Update Docker and Docker Compose.](https://github.com/nuveo/boxos/pull/5#pullrequestreview-105947495) (Approved) ## 2018-03-20 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Heroku click deploy](https://github.com/prest/prest/issues/288) ## 2018-03-18 - 🔀 Opened PR in [ankurdave/color-identifiers-mode](https://github.com/ankurdave/color-identifiers-mode): [append golang on languages list](https://github.com/ankurdave/color-identifiers-mode/pull/54) - ✅ Reviewed PR in [prest/middlewares](https://github.com/prest/middlewares): [Implement support for JWT algos](https://github.com/prest/middlewares/pull/14#pullrequestreview-104810322) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [Add JWT-algo configuration](https://github.com/prest/config/pull/20#pullrequestreview-104810288) (Approved) ## 2018-03-17 - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [azure functions support](https://github.com/gofn/gofn/issues/103) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [Support for other types of containers environment?](https://github.com/gofn/gofn/issues/102) ## 2018-03-12 - 🔀 Opened PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [fix example on readme](https://github.com/ReactiveX/RxGo/pull/56) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Mockadapter](https://github.com/prest/adapters/pull/36#pullrequestreview-103209229) (Approved) - ✅ Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [fix typo. iterface => interface?](https://github.com/ReactiveX/RxGo/pull/52#pullrequestreview-103141115) (Approved) - 🔍 Reviewed PR in [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): [Add support of dep tools](https://github.com/ReactiveX/RxGo/pull/53#pullrequestreview-103140894) (Changes requested) - ✅ Reviewed PR in [prest/cmd](https://github.com/prest/cmd): [sqlx stop support go 1.7 so prest stops too](https://github.com/prest/cmd/pull/10#pullrequestreview-103152833) (Approved) ## 2018-03-09 - 🔀 Opened PR in [ankurdave/color-identifiers-mode](https://github.com/ankurdave/color-identifiers-mode): [added golang support](https://github.com/ankurdave/color-identifiers-mode/pull/53) - 🐛 Opened issue in [ankurdave/color-identifiers-mode](https://github.com/ankurdave/color-identifiers-mode): [golang support](https://github.com/ankurdave/color-identifiers-mode/issues/52) - 🐛 Opened issue in [saf-dmitry/taskpaper-mode](https://github.com/saf-dmitry/taskpaper-mode): [custom tag done via taskpaper-tag-faces not working](https://github.com/saf-dmitry/taskpaper-mode/issues/4) ## 2018-03-08 - 🔍 Reviewed PR in [beanstalkd/go-beanstalk](https://github.com/beanstalkd/go-beanstalk): [Create beanstalk](https://github.com/beanstalkd/go-beanstalk/pull/14#pullrequestreview-102347463) (Changes requested) - 🐛 Opened issue in [beanstalkd/go-beanstalk](https://github.com/beanstalkd/go-beanstalk): [project is dead?](https://github.com/beanstalkd/go-beanstalk/issues/28) ## 2018-03-06 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: nil operator](https://github.com/rumlang/rum/issues/133) ## 2018-03-05 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/Jeffail/benthos](https://github.com/avelino/awesome-go/pull/1832#pullrequestreview-101260306) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add chasquid, an SMTP (email) server](https://github.com/avelino/awesome-go/pull/1831#pullrequestreview-101260001) (Approved) ## 2018-03-03 - 🔀 Opened PR in [fabiospampinato/vscode-todo-plus](https://github.com/fabiospampinato/vscode-todo-plus): [added taskpaper on keywords](https://github.com/fabiospampinato/vscode-todo-plus/pull/36) - 🔀 Opened PR in [melpa/melpa](https://github.com/melpa/melpa): [added taskpaper-mode](https://github.com/melpa/melpa/pull/5349) ## 2018-03-02 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [create partial issues list](https://github.com/prest/doc-template/pull/11) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Describe table endpoint](https://github.com/prest/prest/issues/281) ## 2018-03-01 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [case studies page](https://github.com/prest/doc-template/pull/10) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [Written documentation of how to disable JWT in custom handler](https://github.com/prest/doc-template/pull/9) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Command to generate PlantUML ER Diagram all tables](https://github.com/prest/prest/issues/280) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 8 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [fabiospampinato/vscode-todo-plus](https://github.com/fabiospampinato/vscode-todo-plus): 1 commit(s) - [See commits](https://github.com/fabiospampinato/vscode-todo-plus/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [gofn/dproxy](https://github.com/gofn/dproxy): 1 commit(s) - [See commits](https://github.com/gofn/dproxy/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 2 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [melpa/melpa](https://github.com/melpa/melpa): 1 commit(s) - [See commits](https://github.com/melpa/melpa/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [gofn/gofn](https://github.com/gofn/gofn): 1 commit(s) - [See commits](https://github.com/gofn/gofn/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [prest/go-driver](https://github.com/prest/go-driver): 1 commit(s) - [See commits](https://github.com/prest/go-driver/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [rumlang/rum](https://github.com/rumlang/rum): 1 commit(s) - [See commits](https://github.com/rumlang/rum/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [levpay/infobip](https://github.com/levpay/infobip): 5 commit(s) - [See commits](https://github.com/levpay/infobip/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [ankurdave/color-identifiers-mode](https://github.com/ankurdave/color-identifiers-mode): 2 commit(s) - [See commits](https://github.com/ankurdave/color-identifiers-mode/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 4 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [ReactiveX/RxGo](https://github.com/ReactiveX/RxGo): 2 commit(s) - [See commits](https://github.com/ReactiveX/RxGo/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 27 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 4 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2018-03-01T00:00:00Z&until=2018-03-31T23:59:59Z) ## Private contributions - 🔒 28 private contribution(s) this month --- # História do Lisp, abra os olhos para programação funcional **URL**: https://avelino.run/hist%C3%B3ria-do-lisp-abra-os-olhos-para-programa%C3%A7%C3%A3o-funcional/ **Published**: 2018-02-08 **Tags**: lisp, clisp, common lisp, programacao funcional, rumlang, rum **Word Count**: 1195 words ![Lisp a linguagem de programação orientada a parenteses](/princess-lisp.png#center) ### Como começou minha paixão por parênteses (ops Lisp)? Tenho uma formação na área de Matemática Aplicada (começa ai a loucura), Lisp foi uma das poucas linguagens de programação que me deparei dentro da academia (eu já programava em Perl profissionalmente e conhecia Python), quando vi aqueles parênteses de cara pensei *isso não é para mim* (isso é uma loucura de Matemática/Acadêmico que nunca saiu para o mercado de trabalho). Com o passar das aulas eu comecei achar confortável os parênteses (seres humanos acostuma muito rápido com tudo) e comecei achar estranho a forma de pensar para escrever a lógica do software (por exemplo `(+ 1 2)`). Lisp usa [Notação polonesa](https://pt.wikipedia.org/wiki/Nota%C3%A7%C3%A3o_polonesa_inversa) como forma de expressão, isso foi complicado acostumar, no dia a dia usava uma linguagem de programação *"normal"* e dentro da academia [funcional](https://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_funcional) (sem saber que era funcional). Com o tempo comecei pegar gosto pela forma de pensar (funcionalmente) e acabei entrando para um projeto (no mercado, não académico) que usava [Common Lisp](https://clisp.sourceforge.io/) na sua implementação [SBCL](http://www.sbcl.org/) (Steel Bank Common Lisp, que é mantido até hoje). Nesse momento eu virei super fã da linguagem e com a forma de lidar com software (de verdade) em produção. A empresa trabalhava com dados estatístico do mercado de Pesquisa Cliníca e LISP foi tomado como linguagem por matemáticos, isso facilitou muito a comunicação entre o time de engenharia e acadêmicos. ### Como tudo começou? É um conjunto de linguagem de programação especificada pelo **John McCarthy** em **1955** saindo sua primeira versão em **1958** (durante um projeto de pesquisa em inteligência artificial) influenciado pelo seu aluno [Alonzo Church](https://en.wikipedia.org/wiki/Alonzo_Church). A motivação de **McCarthy** surgiu da idéia de desenvolver uma linguagem algébrica para processamento de listas para trabalho em IA (inteligência artificial). O seu nome vem de **LISt Processing** (a lista é a estrutura de dados fundamental desta linguagem). Tanto os dados como o programa são representados como listas, o que permite que a linguagem manipule o código fonte como qualquer outro tipo de dados. Nascendo assim o **Lisp 1**, a versão que realmente foi distribuída por **McCarthy** e outros do **MIT** (Massachussets Institute of Tecnology) foi **Lisp 1.5** ([manual de programadores](http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf)), assim chamada porque continha várias melhorias no interpretador **Lisp 1** original, mas não foi uma grande reestruturação como planejado que fosse ser o *Lisp 2*. ### Linha do tempo de linguagens que segue o dialeto Lisp Vou começar apartir do Lisp 1.5 pois foi o primeiro a ser distribuido. - **Lisp 1.5** *(1955 - 1965)/Dialeto* - Primeira implementação distribuída por **McCarthy** e outros do **MIT** - **Maclisp** *(1965 - 1985)/Dialeto* - Desenvolvido pelo MIT [Project MAC](https://en.wikipedia.org/wiki/MIT_Computer_Science_and_Artificial_Intelligence_Laboratory#Project_MAC) (não relacionado *Apple*, nem ligado com **McCarthy**) - **Interlisp** *(1970 - 1990)/Dialeto* - Desenvolvido pela [BBN Tecnologia](https://en.wikipedia.org/wiki/BBN_Technologies)para PDP-10 rodando no sistema operacional [Tenex](https://en.wikipedia.org/wiki/TOPS-20), logo após adotado pela máquina *Xerox Lisp* o **InterLisp-D** - **ZetaLisp** *(1975 - 1995)/Dialeto* - denominada **Lisp Machine** - usado nas **máquinas Lisp**, descendente direto de **Maclisp**. Tendo como grande influência o Common Lisp - **Scheme** *(1975 - mantido até hoje)/Dialeto* - Diferente de Common Lisp, linguagem que usa dialeto Lisp - **NIL** *(1975 - 1980)/Dialeto* - Sucessor direto do Maclisp, com muitas influências de Scheme. Esta versão do Common Lisp estava disponível para plataformas de grande alcance e foi aceita por muitos como um padrão de fato até a publicação do ANSI Common Lisp (ANSI x3.226-1994). - **Common Lisp** *(1980 - mantido até hoje)/Dialeto* - aka **Common Lisp the Language** (*a linguagem*) – As tentativas e divergência entre *ZetaLisp, Spice Lisp, nil, e S-1 Lisp* para criar um dialeto sucessora para *Maclisp*. Common Lisp estava disponível para plataformas de grande alcance e foi aceita por muitos como **padrão** até a publicação do ANSI Common Lisp (ANSI X 3.226-1994) - **CCL** *(1984 - mantido até hoje)/Implementação* - baseado no dialeto Common Lisp, antiga *MCL* - **T** *(1985 - mantido até hoje)/Dialeto* - Derivado de Scheme escrito por *Jonathan A. Rees, Kent M. Pitman e Norman*, Adams da *Yale University* com experiencia de design de linguagem e implementação. Em 1987 foi publicado o livro **The T Programming Language: A Dialect of LISP** - **Emacs Lisp** *(1985 - mantido até hoje)/Dialeto/Implementação* - Usado como linguagem de script (configuração) do editor Emacs (mantido pelo projeto GNU) - **AutoLISP** *(1985 - mantido até hoje)/Dialeto/Implementação* - feito para AutoCAD, rodando nos produtos *AutoCAD Map 3D, AutoCAD Architecture e AutoCAD Mechanical* - **OpenLisp** *(1985 - mantido até hoje)/Dialeto* - desenvolvido por *Christian Jullie* escrito em **C** e **Lisp** que deu origem a implementação **ISLISP** - **PicoLisp** *(1985 - mantido até hoje)/Dialeto* - Open Sourcepara Linux e outros sistemas compatíveis com POSIX - **EuLisp** *(1990 - 2015)/Dialeto* - Escopo estático e dinâmico, introduzida para Indústria e Acamia Europeia - **ISLISP** *(1990 - mantido até hoje)/Dialeto* - feito para International Standard sobre licença de Dominio Público - **newLISP** *(1990 - mantido até hoje)/Dialeto* - Linguagem Open Source escrita por Lutz Mueller, ditribuída pela licença GPL (GNU General Public License) com fortes influencias de *Common Lisp* e *Scheme* - **Racket** *(1990 - mantido até hoje)/Dialeto* - Multi paradigma que veio da familía Scheme, um de seus objetivos de projeto é servir como uma plataforma para a criação de linguagens, design e implementação. Sua runtime usa [JIT](https://en.wikipedia.org/wiki/Just-in-time_compilation) - **GNU Guile** *(1990 - mantido até hoje)/Implementação* - Usado para extensão de sistema para o Projeto GNU, baseado em Scheme - **SBCL** *(1999 - mantido até hoje)/Implementação* - baseado no dialeto Common Lisp com recurso de alta performance no compilador, suporte a unicode e threading. Nasceu como *fork* do **Carnegie Mellon University Common Lisp** por [Andrew Carnegie](https://en.wikipedia.org/wiki/Andrew_Carnegie) e [Andrew Mellon](https://en.wikipedia.org/wiki/Andrew_Mellon) - **Visual LISP** *(2000 - mantido até hoje)/Dialeto/Implementação* - Antigo AutoLisp após ser comprado pela Autodesk - **Clojure** *(2005 - mantido até hoje)/Dialeto/Implementação* - começou sendo baseado Common Lisp rodando na JVM (Java Virtual Machine), trazendo retro compatibilidade com todas linguagens que roda na JVM, é possível importar classes Java por exemplo - **Arc** *(2005 - mantido até hoje)/Dialeto/Implementação* - desenvolvido por [Paul Graham](https://en.wikipedia.org/wiki/Paul_Graham_(computer_programmer)) e [Robert Morris](https://en.wikipedia.org/wiki/Robert_Tappan_Morris) escrito usando **Racket** - **LFE** *(2005 - mantido até hoje)/Dialeto/Implementação* - Lisp Flavored Erlang, implementado em **Erlang** - **ACL2** *(2005 - mantido até hoje)/Dialeto/Implementação* - Criado por Matt Kaufmann e J Strother Moore dentro da University of Texas at Austin - **Hy** *(2013 - mantido até hoje)/Dialeto/Implementação* - apelido para **Hylang**, implementado em **Python**. Nasceu dentro da PyCon 2013 escrito por **Paul Tagliamonte** - **Rum** *(2017 - mantido até hoje)/Dialeto/Implementação* - implementado em **Go**, projeto extremamente novo, veja o [github](https://github.com/rumlang/rum/) Veja a [timeline visual](https://cdn.knightlab.com/libs/timeline3/latest/embed/index.html?source=1YM_sjX38YxaDpbNZo9Tm_c09VK1VqZAc2W1ABzfIKRE&font=Default&lang=pt&initial_zoom=2&height=650) Não para por aqui, existe muitas outras derivações... É isso mesmo, Lisp é uma linguagem de programação que tem vários dialetos e implementações, com a **ANSI Common Lisp** itilizada como o dialeto mais utilizado. Existe outra linguagem (mais usada que Lisp) o SQL ANSI ([American National Standards Institute](https://pt.wikipedia.org/wiki/American_National_Standards_Institute)): - PostgreSQL - MySQL - Oracle - Microsoft SQL - e outros Todos tem como dialeto o **SQL ANSI** mas evoluiu a partir do *default*. ### Por onde começar estudar Lisp? Vamos supor que você gostou da loucura que é as diversas implementações e você quer estudar essa linguagem, por onde você começa? Qual interpretador usar? Eu particularmente gosto do [SBCL](http://www.sbcl.org/) (particularmente é o que mais tenho usado para desenvolvimento), em produção uso [CCL](https://ccl.clozure.com/), se você trabalha com alguma tecnologia que roda em JVM vai para [Clojure](https://clojure.org/). Segue alguns links: - [How I got started with Common Lisp in 2017](https://anticrisis.github.io/2017/09/04/how-i-got-started-with-common-lisp-2017.html) - [Awesome Lisp](https://github.com/CodyReichert/awesome-cl) - [CLiki](https://cliki.net/) - [lisp-lang.org](http://lisp-lang.org/) - [The Evolution of Lisp](https://www.dreamsongs.com/Files/HOPL2-Uncut.pdf) --- # Open Source Contributions - February 2018 **URL**: https://avelino.run/foss/2018/02/ **Published**: 2018-02-01 **Word Count**: 680 words **Summary**: February 2018 saw 21 repositories with 67 contributions, including 9 pull requests and 18 reviews, highlighting significant collaboration and progress. In February 2018, the development community made notable strides with a total of 21 repositories contributing to 67 events. This timeline showcases the impactful contributions, including 9 open pull requests and 18 reviews, reflecting the collaborative spirit and ongoing development efforts within the community. ## 2018-02-28 - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [Theme learn](https://github.com/prest/doc-template/pull/8) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [Framework more detail](https://github.com/prest/doc-template/pull/7) - 🔀 Opened PR in [prest/doc-template](https://github.com/prest/doc-template): [migrate to theme hugo-theme-learn](https://github.com/prest/doc-template/pull/6) - ✅ Reviewed PR in [golang/lint](https://github.com/golang/lint): [lint: swap IfStmt tests to not skip every other IfStmt in a chain](https://github.com/golang/lint/pull/383#pullrequestreview-100095139) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [BSD supported (auto build)](https://github.com/prest/prest/issues/279) ## 2018-02-26 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [middleware: whitelist endpoint](https://github.com/prest/prest/issues/277) - 🐛 Opened issue in [zyedidia/micro](https://github.com/zyedidia/micro): [bash commands CtrlE](https://github.com/zyedidia/micro/issues/1053) ## 2018-02-23 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [TextRank package - Update README.md](https://github.com/avelino/awesome-go/pull/1821#pullrequestreview-99020343) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add php-parser](https://github.com/avelino/awesome-go/pull/1814#pullrequestreview-98896133) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add https://github.com/xujiajun/gorouter library](https://github.com/avelino/awesome-go/pull/1820#pullrequestreview-98895287) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add GolangCI](https://github.com/avelino/awesome-go/pull/1817#pullrequestreview-98894773) (Approved) ## 2018-02-22 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: panic: strconv.ParseFloat: parsing "3]": invalid syntax](https://github.com/rumlang/rum/issues/129) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [fixtures (initial data for table)](https://github.com/prest/prest/issues/274) ## 2018-02-21 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: list](https://github.com/rumlang/rum/issues/128) ## 2018-02-20 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [pREST documentation theme](https://github.com/prest/prest/issues/272) ## 2018-02-16 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Cameradar library](https://github.com/avelino/awesome-go/pull/1792#pullrequestreview-97102351) (Approved) ## 2018-02-14 - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added kcli to devops tools](https://github.com/avelino/awesome-go/pull/1788#pullrequestreview-96496561) (Commented) ## 2018-02-13 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: zip](https://github.com/rumlang/rum/issues/127) ## 2018-02-12 - 🔀 Opened PR in [commonlispbr/commonlispbr.github.io](https://github.com/commonlispbr/commonlispbr.github.io): [added history of Lisp (my blogpost)](https://github.com/commonlispbr/commonlispbr.github.io/pull/16) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-deep](https://github.com/avelino/awesome-go/pull/1804#pullrequestreview-95922247) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added jackal XMPP server to the README](https://github.com/avelino/awesome-go/pull/1795#pullrequestreview-95775009) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add commonregex library](https://github.com/avelino/awesome-go/pull/1796#pullrequestreview-95774700) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gocmd](https://github.com/avelino/awesome-go/pull/1802#pullrequestreview-95774537) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added term-quiz to the README](https://github.com/avelino/awesome-go/pull/1793#pullrequestreview-95774365) (Changes requested) - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [main: change readfile to newscanner](https://github.com/rumlang/rum/pull/126#pullrequestreview-95765037) (Approved) - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [compare strings](https://github.com/rumlang/rum/pull/124#pullrequestreview-95678356) (Approved) - ❌ Reviewed PR in [commonlispbr/commonlispbr.github.io](https://github.com/commonlispbr/commonlispbr.github.io): [Toc fix](https://github.com/commonlispbr/commonlispbr.github.io/pull/17#pullrequestreview-95805739) (Dismissed) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [Create jupyter kernel support](https://github.com/rumlang/rum/issues/125) ## 2018-02-11 - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [update examples and syntax proposal](https://github.com/rumlang/rum/pull/122#pullrequestreview-95653595) (Approved) ## 2018-02-10 - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [Multiple lines on REPL](https://github.com/rumlang/rum/pull/121#pullrequestreview-95635016) (Approved) - ✅ Reviewed PR in [rumlang/playground](https://github.com/rumlang/playground): [fix share not loading](https://github.com/rumlang/playground/pull/7#pullrequestreview-95619698) (Approved) ## 2018-02-09 - 🔀 Opened PR in [rumlang/playground](https://github.com/rumlang/playground): [Docker environment](https://github.com/rumlang/playground/pull/5) - 🔀 Opened PR in [rumlang/playground](https://github.com/rumlang/playground): [set dynamic uri](https://github.com/rumlang/playground/pull/4) - 🔀 Opened PR in [trumae/valente](https://github.com/trumae/valente): [send string when they count line break](https://github.com/trumae/valente/pull/20) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: input field syntax-highlight (code editor)](https://github.com/rumlang/rum/issues/119) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: share does not work with line break ](https://github.com/rumlang/rum/issues/118) ## 2018-02-08 - 🔀 Opened PR in [rumlang/playground](https://github.com/rumlang/playground): [used dep to generate vendor](https://github.com/rumlang/playground/pull/2) - 🔀 Opened PR in [rumlang/playground](https://github.com/rumlang/playground): [Change project name](https://github.com/rumlang/playground/pull/1) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: Panic test](https://github.com/rumlang/rum/issues/117) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: error when it contains more than one operation ](https://github.com/rumlang/rum/issues/116) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: print send to stdout (server log)](https://github.com/rumlang/rum/issues/115) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: docker environment](https://github.com/rumlang/rum/issues/114) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: added vendor](https://github.com/rumlang/rum/issues/113) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: share code](https://github.com/rumlang/rum/issues/112) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: rename projeto rumplay to playground](https://github.com/rumlang/rum/issues/111) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [playground: uuid change signature](https://github.com/rumlang/rum/issues/110) ## 2018-02-06 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: reduce](https://github.com/rumlang/rum/issues/108) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: filter](https://github.com/rumlang/rum/issues/107) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [list](https://github.com/rumlang/rum/issues/106) ## 2018-02-05 - 🐛 Opened issue in [roswell/roswell](https://github.com/roswell/roswell): [curl error install on debian](https://github.com/roswell/roswell/issues/292) ## 2018-02-04 - 🐛 Opened issue in [valeriansaliou/vigil](https://github.com/valeriansaliou/vigil): [Golang reporter package](https://github.com/valeriansaliou/vigil/issues/3) ## Commits - 🔨 Push to [avelino/cover.run](https://github.com/avelino/cover.run): 10 commit(s) - [See commits](https://github.com/avelino/cover.run/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [rumlang/playground](https://github.com/rumlang/playground): 8 commit(s) - [See commits](https://github.com/rumlang/playground/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [avelino/dotfiles](https://github.com/avelino/dotfiles): 5 commit(s) - [See commits](https://github.com/avelino/dotfiles/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [rumlang/rumlang.github.io](https://github.com/rumlang/rumlang.github.io): 15 commit(s) - [See commits](https://github.com/rumlang/rumlang.github.io/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [rumlang/vscode-rum](https://github.com/rumlang/vscode-rum): 3 commit(s) - [See commits](https://github.com/rumlang/vscode-rum/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [rumlang/rum-mode](https://github.com/rumlang/rum-mode): 1 commit(s) - [See commits](https://github.com/rumlang/rum-mode/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [commonlispbr/commonlispbr.github.io](https://github.com/commonlispbr/commonlispbr.github.io): 1 commit(s) - [See commits](https://github.com/commonlispbr/commonlispbr.github.io/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [golang/lint](https://github.com/golang/lint): 1 commit(s) - [See commits](https://github.com/golang/lint/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [melpa/melpa](https://github.com/melpa/melpa): 1 commit(s) - [See commits](https://github.com/melpa/melpa/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [gofn/gofn](https://github.com/gofn/gofn): 1 commit(s) - [See commits](https://github.com/gofn/gofn/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [rumlang/rum](https://github.com/rumlang/rum): 2 commit(s) - [See commits](https://github.com/rumlang/rum/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 5 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [gofn/cli](https://github.com/gofn/cli): 1 commit(s) - [See commits](https://github.com/gofn/cli/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 4 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 5 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2018-02-01T00:00:00Z&until=2018-02-28T23:59:59Z) ## Private contributions - 🔒 9 private contribution(s) this month --- # Open Source Contributions - January 2018 **URL**: https://avelino.run/foss/2018/01/ **Published**: 2018-01-01 **Word Count**: 340 words **Summary**: January 2018 saw 12 repositories contribute 31 total actions, including 1 pull request and 11 reviews, showcasing active community engagement and development progress. Welcome to the January 2018 timeline, where we highlight significant contributions across 12 repositories. This month featured a total of 31 actions, including new issues and pull request reviews, reflecting ongoing development and collaboration within the community. ## 2018-01-31 - 💬 Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [import changed + cvs lib](https://github.com/rumlang/rum/pull/103#pullrequestreview-92967553) (Commented) ## 2018-01-26 - ✅ Reviewed PR in [CodyReichert/qi](https://github.com/CodyReichert/qi): [(minor) use format's pluralize directive ("dependenc[y/ies]")](https://github.com/CodyReichert/qi/pull/54#pullrequestreview-91994075) (Approved) ## 2018-01-24 - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [form coerce](https://github.com/rumlang/rum/pull/102#pullrequestreview-91042211) (Approved) ## 2018-01-19 - 🐛 Opened issue in [nuveo/passchecker](https://github.com/nuveo/passchecker): [Js unit test](https://github.com/nuveo/passchecker/issues/6) ## 2018-01-17 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rabbus library](https://github.com/avelino/awesome-go/pull/1764#pullrequestreview-89304506) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Flagr](https://github.com/avelino/awesome-go/pull/1765#pullrequestreview-89304248) (Changes requested) ## 2018-01-13 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [stdlib import packages](https://github.com/rumlang/rum/issues/100) ## 2018-01-09 - 🔀 Opened PR in [structy/structbase](https://github.com/structy/structbase): [audits.uuid not PK, used unique together](https://github.com/structy/structbase/pull/3) - 💬 Reviewed PR in [prest/middlewares](https://github.com/prest/middlewares): [Add a new middleware called TransactionControl](https://github.com/prest/middlewares/pull/12#pullrequestreview-87492358) (Commented) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [pgbouncer support](https://github.com/prest/prest/issues/267) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [mult postgres support](https://github.com/prest/prest/issues/266) - 🐛 Opened issue in [structy/structbase](https://github.com/structy/structbase): [pgbench performance test on SQL Struct](https://github.com/structy/structbase/issues/4) - 🐛 Opened issue in [structy/structbase](https://github.com/structy/structbase): [PostgreSQL said: duplicate key value violates unique constraint "audits_pkey"](https://github.com/structy/structbase/issues/2) - 🐛 Opened issue in [puma/puma-dev](https://github.com/puma/puma-dev): [migrate to dep (Go dependency management tool)](https://github.com/puma/puma-dev/issues/149) ## 2018-01-08 - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [immutable implemented](https://github.com/rumlang/rum/pull/97#pullrequestreview-87355234) (Approved) - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [Invoke](https://github.com/rumlang/rum/pull/94#pullrequestreview-87172218) (Approved) - 🔍 Reviewed PR in [structy/structbase](https://github.com/structy/structbase): [Minor cleanup and correct usage of UUID datatype and functions](https://github.com/structy/structbase/pull/1#pullrequestreview-87341602) (Changes requested) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [stdlib outside the runtime](https://github.com/rumlang/rum/issues/96) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package debug](https://github.com/rumlang/rum/issues/95) ## 2018-01-07 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [migrate to angular 5](https://github.com/mining/mining/issues/282) ## 2018-01-05 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [Error handling](https://github.com/rumlang/rum/issues/92) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [doc string](https://github.com/rumlang/rum/issues/91) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [functions by scope](https://github.com/rumlang/rum/issues/90) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: macro](https://github.com/rumlang/rum/issues/89) ## 2018-01-02 - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [Adapters](https://github.com/rumlang/rum/pull/86#pullrequestreview-86160430) (Approved) - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [using simple go functions](https://github.com/rumlang/rum/pull/85#pullrequestreview-86073946) (Approved) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: open file](https://github.com/rumlang/rum/issues/87) ## Commits - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 6 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2018-01-01T00:00:00Z&until=2018-01-31T23:59:59Z) - 🔨 Push to [avelino/aur](https://github.com/avelino/aur): 6 commit(s) - [See commits](https://github.com/avelino/aur/commits?author=avelino&since=2018-01-01T00:00:00Z&until=2018-01-31T23:59:59Z) - 🔨 Push to [structy/structbase](https://github.com/structy/structbase): 4 commit(s) - [See commits](https://github.com/structy/structbase/commits?author=avelino&since=2018-01-01T00:00:00Z&until=2018-01-31T23:59:59Z) - 🔨 Push to [rumlang/rum-mode](https://github.com/rumlang/rum-mode): 2 commit(s) - [See commits](https://github.com/rumlang/rum-mode/commits?author=avelino&since=2018-01-01T00:00:00Z&until=2018-01-31T23:59:59Z) ## Private contributions - 🔒 26 private contribution(s) this month --- # Open Source Contributions - December 2017 **URL**: https://avelino.run/foss/2017/12/ **Published**: 2017-12-01 **Word Count**: 630 words **Summary**: December 2017 saw 21 repositories active with 63 contributions, including 9 pull requests and 28 issues, showcasing a vibrant development community. Explore the contributions made in December 2017, highlighting a robust activity with 21 repositories participating. This timeline captures the key events, including pull requests, reviews, and issue discussions, reflecting the collaborative spirit of the community. ## 2017-12-26 - 🐛 Opened issue in [nuveo/passchecker](https://github.com/nuveo/passchecker): [split repo: passchecker.js](https://github.com/nuveo/passchecker/issues/4) - 🐛 Opened issue in [nuveo/passchecker](https://github.com/nuveo/passchecker): [travis-ci](https://github.com/nuveo/passchecker/issues/3) - 🐛 Opened issue in [nuveo/passchecker](https://github.com/nuveo/passchecker): [writter readme example](https://github.com/nuveo/passchecker/issues/2) ## 2017-12-25 - 🔀 Opened PR in [rumlang/rum-mode](https://github.com/rumlang/rum-mode): [used regexp-opt to color keyworkds](https://github.com/rumlang/rum-mode/pull/1) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added endly declarative end to end testing](https://github.com/avelino/awesome-go/pull/1728#pullrequestreview-85450332) (Approved) ## 2017-12-24 - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [describe in the readme the changelog option](https://github.com/avelino/aur/pull/12) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [added changelog option](https://github.com/avelino/aur/pull/10) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [vscode plugin](https://github.com/rumlang/rum/issues/84) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [vim plugin](https://github.com/rumlang/rum/issues/83) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: load rum file](https://github.com/rumlang/rum/issues/82) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [import golang packages](https://github.com/rumlang/rum/issues/81) - 🐛 Opened issue in [avelino/aur](https://github.com/avelino/aur): [Write Tests](https://github.com/avelino/aur/issues/11) ## 2017-12-21 - 🐛 Opened issue in [Homebrew/homebrew-cask](https://github.com/Homebrew/homebrew-cask): [Error: Download failed on Cask 'minikube' ](https://github.com/Homebrew/homebrew-cask/issues/42183) ## 2017-12-20 - ✅ Reviewed PR in [prest/cmd](https://github.com/prest/cmd): [escape url](https://github.com/prest/cmd/pull/5#pullrequestreview-84783392) (Approved) ## 2017-12-18 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Heroku deploy button (easily deploy)](https://github.com/prest/prest/issues/258) - 🐛 Opened issue in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [Error: Download failed on Cask 'minikube'](https://github.com/Homebrew/homebrew-core/issues/21861) ## 2017-12-16 - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [unifies and enhances the addition operator](https://github.com/rumlang/rum/pull/79#pullrequestreview-83976712) (Approved) ## 2017-12-13 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/marusama/semaphore](https://github.com/avelino/awesome-go/pull/1723#pullrequestreview-83099841) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add retry-go library](https://github.com/avelino/awesome-go/pull/1721#pullrequestreview-83040664) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/Xamber/Varis](https://github.com/avelino/awesome-go/pull/1720#pullrequestreview-83040420) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added banjo to web frameworks list](https://github.com/avelino/awesome-go/pull/1719#pullrequestreview-83040133) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add parallel-fn library](https://github.com/avelino/awesome-go/pull/1722#pullrequestreview-83039475) (Changes requested) - 🔍 Reviewed PR in [prest/config](https://github.com/prest/config): [fix file mandatory](https://github.com/prest/config/pull/16#pullrequestreview-83354296) (Changes requested) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Multi stage build](https://github.com/prest/prest/pull/255#pullrequestreview-83093060) (Approved) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package math/rand](https://github.com/rumlang/rum/issues/78) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [Used gofn/snapshot.service on iaas (docker public)](https://github.com/gofn/gofn/issues/96) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [gofn CLI](https://github.com/gofn/gofn/issues/95) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Packages with own versioning](https://github.com/prest/prest/issues/256) ## 2017-12-12 - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [Move project gofn to organization gofn](https://github.com/gofn/gofn/issues/94) ## 2017-12-11 - 🔀 Opened PR in [melpa/melpa](https://github.com/melpa/melpa): [added rum-mode](https://github.com/melpa/melpa/pull/5188) - 🔍 Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [implement sprintf](https://github.com/rumlang/rum/pull/74#pullrequestreview-82447626) (Changes requested) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [emacs mode](https://github.com/rumlang/rum/issues/77) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [Unifying operators +, +int64, +float64 ...](https://github.com/rumlang/rum/issues/76) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package time](https://github.com/rumlang/rum/issues/75) - 🐛 Opened issue in [golang/go](https://github.com/golang/go): [access: golang/lint](https://github.com/golang/go/issues/23089) ## 2017-12-06 - 🔀 Opened PR in [rumlang/rum](https://github.com/rumlang/rum): [parser: named return on stateIdentifier](https://github.com/rumlang/rum/pull/68) ## 2017-12-05 - 🔀 Opened PR in [rsc/gocachelogstat](https://github.com/rsc/gocachelogstat): [added gocachelogstat bin on ignored main folder](https://github.com/rsc/gocachelogstat/pull/2) - 🔀 Opened PR in [rsc/gocachelogstat](https://github.com/rsc/gocachelogstat): [used log on stdout print](https://github.com/rsc/gocachelogstat/pull/1) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add journald](https://github.com/avelino/awesome-go/pull/1714#pullrequestreview-81114283) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add antch](https://github.com/avelino/awesome-go/pull/1713#pullrequestreview-81113871) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [updated realize description](https://github.com/avelino/awesome-go/pull/1712#pullrequestreview-81041873) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Jaeger](https://github.com/avelino/awesome-go/pull/1711#pullrequestreview-81041222) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add repeat](https://github.com/avelino/awesome-go/pull/1708#pullrequestreview-81041005) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Gogland -> Goland + Add goproxy](https://github.com/avelino/awesome-go/pull/1709#pullrequestreview-81040711) (Changes requested) - ✅ Reviewed PR in [24pullrequests/24pullrequests](https://github.com/24pullrequests/24pullrequests): [Fix redirect after project claim](https://github.com/24pullrequests/24pullrequests/pull/2123#pullrequestreview-81045991) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Fix typo](https://github.com/editor-bootstrap/vim-bootstrap/pull/287#pullrequestreview-81032787) (Approved) - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [Add support for .Net language](https://github.com/metrue/fx/issues/88) - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [Add support for Perl language](https://github.com/metrue/fx/issues/87) - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [Add support for Scala language](https://github.com/metrue/fx/issues/86) - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [Add support for Lua language](https://github.com/metrue/fx/issues/85) - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [Add support for Lisp language](https://github.com/metrue/fx/issues/84) - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [Add support for Rust language](https://github.com/metrue/fx/issues/83) ## 2017-12-04 - 💬 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Fix SSL mode](https://github.com/prest/adapters/pull/29#pullrequestreview-80933840) (Commented) ## 2017-12-01 - 🔀 Opened PR in [rumlang/rum](https://github.com/rumlang/rum): [rename rum.go to main.go](https://github.com/rumlang/rum/pull/63) - 🔀 Opened PR in [jehiah/go-strftime](https://github.com/jehiah/go-strftime): [append example on readme](https://github.com/jehiah/go-strftime/pull/6) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: string join](https://github.com/rumlang/rum/issues/64) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: map](https://github.com/rumlang/rum/issues/62) ## Commits - 🔨 Push to [rumlang/rum-mode](https://github.com/rumlang/rum-mode): 7 commit(s) - [See commits](https://github.com/rumlang/rum-mode/commits?author=avelino&since=2017-12-01T00:00:00Z&until=2017-12-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 5 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2017-12-01T00:00:00Z&until=2017-12-31T23:59:59Z) - 🔨 Push to [avelino/aur](https://github.com/avelino/aur): 4 commit(s) - [See commits](https://github.com/avelino/aur/commits?author=avelino&since=2017-12-01T00:00:00Z&until=2017-12-31T23:59:59Z) - 🔨 Push to [rumlang/rum](https://github.com/rumlang/rum): 3 commit(s) - [See commits](https://github.com/rumlang/rum/commits?author=avelino&since=2017-12-01T00:00:00Z&until=2017-12-31T23:59:59Z) - 🔨 Push to [gofn/cli](https://github.com/gofn/cli): 1 commit(s) - [See commits](https://github.com/gofn/cli/commits?author=avelino&since=2017-12-01T00:00:00Z&until=2017-12-31T23:59:59Z) - 🔨 Push to [jehiah/go-strftime](https://github.com/jehiah/go-strftime): 1 commit(s) - [See commits](https://github.com/jehiah/go-strftime/commits?author=avelino&since=2017-12-01T00:00:00Z&until=2017-12-31T23:59:59Z) ## Private contributions - 🔒 27 private contribution(s) this month --- # Open Source Contributions - November 2017 **URL**: https://avelino.run/foss/2017/11/ **Published**: 2017-11-01 **Word Count**: 760 words **Summary**: November 2017 saw 17 repositories contribute 76 activities, including 14 pull requests and 35 issues, enhancing collaboration in the community. Explore the significant contributions made in November 2017, where 17 repositories engaged in 76 activities, including 14 pull requests and 35 issues. This timeline highlights the collaborative efforts and advancements made within the community during the month. ## 2017-11-30 - 🔀 Opened PR in [golang/lint](https://github.com/golang/lint): [golint: group declaration of variables in import.go](https://github.com/golang/lint/pull/359) - 🔀 Opened PR in [campoy/golang-driver](https://github.com/campoy/golang-driver): [Ignores binary generated](https://github.com/campoy/golang-driver/pull/1) - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [Example comment correction](https://github.com/rumlang/rum/pull/61#pullrequestreview-80337106) (Approved) ## 2017-11-29 - ✅ Reviewed PR in [golang/lint](https://github.com/golang/lint): [Specify exact license in header of Emacs lisp library](https://github.com/golang/lint/pull/353#pullrequestreview-79707058) (Approved) - ✅ Reviewed PR in [golang/lint](https://github.com/golang/lint): [lint: fix if/else if/else if/else return handling](https://github.com/golang/lint/pull/355#pullrequestreview-79706461) (Approved) ## 2017-11-28 - 💬 Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [for while implementation](https://github.com/rumlang/rum/pull/59#pullrequestreview-79376777) (Commented) ## 2017-11-26 - 💬 Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [remove ' to array create](https://github.com/rumlang/rum/pull/56#pullrequestreview-79031480) (Commented) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [ float array with point (.)](https://github.com/rumlang/rum/issues/57) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [remove ' to array create](https://github.com/rumlang/rum/issues/55) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [project name gin exist :(](https://github.com/rumlang/rum/issues/50) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [float array with comma (,)](https://github.com/rumlang/rum/issues/49) ## 2017-11-25 - 🔀 Opened PR in [rumlang/rum](https://github.com/rumlang/rum): [runtime: migrate var to let declaration](https://github.com/rumlang/rum/pull/48) ## 2017-11-24 - 🔍 Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [for range implementation](https://github.com/rumlang/rum/pull/47#pullrequestreview-78988977) (Changes requested) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [ C libraries support](https://github.com/rumlang/rum/issues/45) ## 2017-11-21 - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [Create packages engine writter](https://github.com/rumlang/rum/issues/32) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package testing](https://github.com/rumlang/rum/issues/31) - 🐛 Opened issue in [zehfernandes/pliim](https://github.com/zehfernandes/pliim): [homebrew (and cask) distribute](https://github.com/zehfernandes/pliim/issues/3) ## 2017-11-20 - 🔀 Opened PR in [rumlang/rum](https://github.com/rumlang/rum): [implement def (function)](https://github.com/rumlang/rum/pull/24) - 🔀 Opened PR in [rumlang/rum](https://github.com/rumlang/rum): [revicer name on package](https://github.com/rumlang/rum/pull/15) - ✅ Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [add math/factorial examples](https://github.com/rumlang/rum/pull/2#pullrequestreview-77680178) (Approved) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [create function structure (reserved word)](https://github.com/rumlang/rum/issues/23) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [ package encoding/csv](https://github.com/rumlang/rum/issues/22) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package encoding/base64](https://github.com/rumlang/rum/issues/21) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: else with condition (aka else if) on if](https://github.com/rumlang/rum/issues/20) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: else on if](https://github.com/rumlang/rum/issues/19) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [runtime: for (loop)](https://github.com/rumlang/rum/issues/18) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package net/http](https://github.com/rumlang/rum/issues/17) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [change ioutil.ReadFile to bufio.NewScanner](https://github.com/rumlang/rum/issues/16) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [set name on package](https://github.com/rumlang/rum/issues/14) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [context isolate on sub package](https://github.com/rumlang/rum/issues/13) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [interative: console auto complete ](https://github.com/rumlang/rum/issues/12) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package debug](https://github.com/rumlang/rum/issues/11) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [data struct](https://github.com/rumlang/rum/issues/10) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package encoding/json](https://github.com/rumlang/rum/issues/9) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package crypto/rand](https://github.com/rumlang/rum/issues/8) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package sort](https://github.com/rumlang/rum/issues/7) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [package time](https://github.com/rumlang/rum/issues/6) - 🐛 Opened issue in [rumlang/rum](https://github.com/rumlang/rum): [interative: input () empty](https://github.com/rumlang/rum/issues/5) ## 2017-11-19 - 🔍 Reviewed PR in [rumlang/rum](https://github.com/rumlang/rum): [suggestion for loop syntax](https://github.com/rumlang/rum/pull/1#pullrequestreview-77655561) (Changes requested) ## 2017-11-17 - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [replace glide to dep](https://github.com/metrue/fx/issues/37) ## 2017-11-16 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Create CODE_OF_CONDUCT.md](https://github.com/avelino/awesome-go/pull/1686) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Update README with openSUSE install instructions](https://github.com/editor-bootstrap/vim-bootstrap/pull/286#pullrequestreview-77001091) (Approved) - 🐛 Opened issue in [avelino/cover.run](https://github.com/avelino/cover.run): [Queued processing](https://github.com/avelino/cover.run/issues/2) - 🐛 Opened issue in [avelino/cover.run](https://github.com/avelino/cover.run): [support multi Golang version](https://github.com/avelino/cover.run/issues/1) ## 2017-11-15 - 🐛 Opened issue in [Xyaneon/grive-daemon](https://github.com/Xyaneon/grive-daemon): [archlinux (aur) package](https://github.com/Xyaneon/grive-daemon/issues/14) ## 2017-11-14 - 🔀 Opened PR in [metrue/fx](https://github.com/metrue/fx): [removed build folder](https://github.com/metrue/fx/pull/20) - 🔀 Opened PR in [metrue/fx](https://github.com/metrue/fx): [moved main file to package name](https://github.com/metrue/fx/pull/19) - 🔀 Opened PR in [metrue/fx](https://github.com/metrue/fx): [clear utils swp file](https://github.com/metrue/fx/pull/16) - 🔀 Opened PR in [metrue/fx](https://github.com/metrue/fx): [fx/main: used full path import](https://github.com/metrue/fx/pull/15) - 🐛 Opened issue in [metrue/fx](https://github.com/metrue/fx): [See the gofn project](https://github.com/metrue/fx/issues/17) ## 2017-11-12 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [govendor -> dep](https://github.com/editor-bootstrap/vim-bootstrap/pull/285#pullrequestreview-75948282) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Updated third party packages](https://github.com/editor-bootstrap/vim-bootstrap/pull/282#pullrequestreview-75945563) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Use go-bindata to embed static files into binary](https://github.com/editor-bootstrap/vim-bootstrap/pull/281#pullrequestreview-75945551) (Approved) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Website theme 2.0](https://github.com/editor-bootstrap/vim-bootstrap/issues/284) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Release process generate (bin distributed)](https://github.com/editor-bootstrap/vim-bootstrap/issues/283) ## 2017-11-11 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [set awesome-go chat channel](https://github.com/avelino/awesome-go/pull/1679) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add 'tui-go' to advanced console UIs](https://github.com/avelino/awesome-go/pull/1677#pullrequestreview-75927756) (Approved) ## 2017-11-10 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Usage case session](https://github.com/prest/prest/issues/245) ## 2017-11-06 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [chat channel, gitter or gopher slack](https://github.com/avelino/awesome-go/issues/1666) ## 2017-11-03 - 🔀 Opened PR in [nuveo/log](https://github.com/nuveo/log): [added Travis Build Status on readme](https://github.com/nuveo/log/pull/18) - 🔀 Opened PR in [nuveo/log](https://github.com/nuveo/log): [group create type](https://github.com/nuveo/log/pull/17) ## 2017-11-02 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add in rwdb](https://github.com/avelino/awesome-go/pull/1659#pullrequestreview-73925839) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-prompt](https://github.com/avelino/awesome-go/pull/1640#pullrequestreview-73924565) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add https://github.com/hyperboloide/lk library](https://github.com/avelino/awesome-go/pull/1647#pullrequestreview-73923482) (Approved) - ✅ Reviewed PR in [prest/cmd](https://github.com/prest/cmd): [gae support as a framework](https://github.com/prest/cmd/pull/4#pullrequestreview-73912491) (Approved) ## 2017-11-01 - 🔀 Opened PR in [anaibol/awesome-serverless](https://github.com/anaibol/awesome-serverless): [added gofn (golang package)](https://github.com/anaibol/awesome-serverless/pull/85) ## Commits - 🔨 Push to [campoy/golang-driver](https://github.com/campoy/golang-driver): 1 commit(s) - [See commits](https://github.com/campoy/golang-driver/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [avelino/aur](https://github.com/avelino/aur): 9 commit(s) - [See commits](https://github.com/avelino/aur/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [rumlang/rum](https://github.com/rumlang/rum): 24 commit(s) - [See commits](https://github.com/rumlang/rum/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 2 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [structy/log](https://github.com/structy/log): 2 commit(s) - [See commits](https://github.com/structy/log/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [metrue/fx](https://github.com/metrue/fx): 3 commit(s) - [See commits](https://github.com/metrue/fx/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [nuveo/log](https://github.com/nuveo/log): 2 commit(s) - [See commits](https://github.com/nuveo/log/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [rumlang/jack](https://github.com/rumlang/jack): 2 commit(s) - [See commits](https://github.com/rumlang/jack/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [anaibol/awesome-serverless](https://github.com/anaibol/awesome-serverless): 1 commit(s) - [See commits](https://github.com/anaibol/awesome-serverless/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 1 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2017-11-01T00:00:00Z&until=2017-11-30T23:59:59Z) ## Private contributions - 🔒 35 private contribution(s) this month --- # rum language **URL**: https://avelino.run/projects/rumlang/ **Published**: 2017-10-10 **Tags**: rumlang, lisp dialete, lisp, scheme, clojure, golang, open source **Word Count**: 172 words [rum](https://github.com/rumlang/rum) Functional language, easily extensible and possible (Lua features with LISP dialect and functional) to be embarked on software Go! The project started inside a hotel room with two people (me and **[Cesar](https://github.com/crgimenes)**) the day before the 2017 GopherCon Brazil, where there were two developers talking about compilers and lisp dialect. ## History Idealized in **GopherCon Brasil 2017** (reason of the language being written in Go), had the purpose of being virtual machine of CLISP (development for fun and the founder team enjoys functional programming), after seeing that there was already some parser of CLISP written in Go we had a initiative to make a language with syntax like CLISP but with some own paradigms (such as asynchronous processing using goroutine underneath, thus joining what we have best in the Go). ## Why Rum? As the language was born in Canasvieiras (Florianópolis - Brazil) neighborhood in the seaside frequented by tourists having the pirate boat as a tourist attraction, we decided to give the name of the typical beverage of pirates for the language. ![rum language](https://avatars.githubusercontent.com/u/33993589) --- # Open Source Contributions - October 2017 **URL**: https://avelino.run/foss/2017/10/ **Published**: 2017-10-01 **Word Count**: 497 words **Summary**: October 2017 saw 16 repositories with 41 contributions, including 25 pull request reviews and 8 new issues, driving significant community engagement and development. Welcome to the October 2017 contributions timeline. This month was marked by active collaboration across 16 repositories, resulting in 41 contributions. Notably, contributors engaged in 25 pull request reviews and opened 8 new issues, showcasing a vibrant development environment. Dive in to explore the detailed contributions and milestones achieved throughout this month. ## 2017-10-31 - ✅ Reviewed PR in [nuveo/log](https://github.com/nuveo/log): [support for time formatting](https://github.com/nuveo/log/pull/15#pullrequestreview-73292141) (Approved) ## 2017-10-30 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [SQLite support](https://github.com/prest/prest/issues/240) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [MySQL support](https://github.com/prest/prest/issues/239) ## 2017-10-29 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Update godoc file](https://github.com/prest/prest/pull/238#pullrequestreview-72711632) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Multi database support documentation ](https://github.com/prest/prest/issues/237) - 🐛 Opened issue in [nuveo/boxos](https://github.com/nuveo/boxos): [Debian 9 support](https://github.com/nuveo/boxos/issues/2) ## 2017-10-28 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Meetup List](https://github.com/avelino/awesome-go/pull/1653) ## 2017-10-27 - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [add ssl configurations](https://github.com/prest/config/pull/13#pullrequestreview-72471740) (Approved) ## 2017-10-15 - 🐛 Opened issue in [sebastianwebber/pgconfig](https://github.com/sebastianwebber/pgconfig): [PostgreSQL 10 support](https://github.com/sebastianwebber/pgconfig/issues/13) ## 2017-10-14 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [fix error trying to kill a process that is not running](https://github.com/gofn/gofn/pull/90#pullrequestreview-69394824) (Approved) ## 2017-10-13 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-sockaddr network library.](https://github.com/avelino/awesome-go/pull/1624#pullrequestreview-69281525) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add govalidator package](https://github.com/avelino/awesome-go/pull/1622#pullrequestreview-69280672) (Changes requested) ## 2017-10-12 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add petrovich](https://github.com/avelino/awesome-go/pull/1621#pullrequestreview-68987036) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add govatar library](https://github.com/avelino/awesome-go/pull/1620#pullrequestreview-68986464) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add "Go Generate Tools"](https://github.com/avelino/awesome-go/pull/1606#pullrequestreview-68985193) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add stats and metrics](https://github.com/avelino/awesome-go/pull/1605#pullrequestreview-68984739) (Approved) - ✅ Reviewed PR in [nuveo/log](https://github.com/nuveo/log): [limit size of log lines](https://github.com/nuveo/log/pull/14#pullrequestreview-68971861) (Approved) ## 2017-10-09 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [add support for Go 1.9](https://github.com/prest/prest/pull/229#pullrequestreview-67875138) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [restructuring for use of more than one database adapter / config](https://github.com/prest/config/pull/7#pullrequestreview-67875206) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [add Go 1.9 in travis platforms](https://github.com/prest/config/pull/10#pullrequestreview-67875166) (Approved) - ✅ Reviewed PR in [prest/template](https://github.com/prest/template): [add Go 1.9 in travis platforms](https://github.com/prest/template/pull/2#pullrequestreview-67875152) (Approved) ## 2017-10-06 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Support Distinct function in query](https://github.com/prest/adapters/pull/21#pullrequestreview-67603577) (Approved) - ✅ Reviewed PR in [prest/controllers](https://github.com/prest/controllers): [Support Distinct function in query](https://github.com/prest/controllers/pull/9#pullrequestreview-67604137) (Approved) ## 2017-10-04 - 🔍 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Support Distinct function in query](https://github.com/prest/adapters/pull/20#pullrequestreview-66956456) (Changes requested) - 🐛 Opened issue in [fnproject/fn](https://github.com/fnproject/fn): [lock gofn project](https://github.com/fnproject/fn/issues/388) ## 2017-10-03 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Fix SQL file to load database structure](https://github.com/prest/prest/pull/227#pullrequestreview-66817353) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [Use SQL file to load database structure](https://github.com/prest/config/pull/9#pullrequestreview-66817614) (Approved) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Use SQL file to load database structure](https://github.com/prest/adapters/pull/19#pullrequestreview-66817793) (Approved) - ✅ Reviewed PR in [prest/template](https://github.com/prest/template): [Use SQL file to load database structure](https://github.com/prest/template/pull/1#pullrequestreview-66817723) (Approved) - ✅ Reviewed PR in [prest/controllers](https://github.com/prest/controllers): [Use SQL file to load database structure](https://github.com/prest/controllers/pull/8#pullrequestreview-66817510) (Approved) - 💬 Reviewed PR in [prest/middlewares](https://github.com/prest/middlewares): [fix cors implementation](https://github.com/prest/middlewares/pull/9#pullrequestreview-66925587) (Commented) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Unify .sql file for tests](https://github.com/prest/prest/issues/228) ## 2017-10-02 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [Use SQL file to load database structure](https://github.com/prest/prest/pull/225#pullrequestreview-66561610) (Changes requested) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Remove documentation of README file, addend Document link](https://github.com/prest/prest/issues/226) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 13 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2017-10-01T00:00:00Z&until=2017-10-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 6 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2017-10-01T00:00:00Z&until=2017-10-31T23:59:59Z) - 🔨 Push to [avelino/dhub](https://github.com/avelino/dhub): 3 commit(s) - [See commits](https://github.com/avelino/dhub/commits?author=avelino&since=2017-10-01T00:00:00Z&until=2017-10-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 2 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2017-10-01T00:00:00Z&until=2017-10-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2017-10-01T00:00:00Z&until=2017-10-31T23:59:59Z) - 🔨 Push to [nuveo/boxos](https://github.com/nuveo/boxos): 1 commit(s) - [See commits](https://github.com/nuveo/boxos/commits?author=avelino&since=2017-10-01T00:00:00Z&until=2017-10-31T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2017-10-01T00:00:00Z&until=2017-10-31T23:59:59Z) ## Private contributions - 🔒 78 private contribution(s) this month --- # Open Source Contributions - September 2017 **URL**: https://avelino.run/foss/2017/09/ **Published**: 2017-09-01 **Word Count**: 460 words **Summary**: September 2017 saw 23 repositories contributing 43 total actions, including 4 pull requests and 16 issues, showcasing collaborative growth and innovation. Explore the timeline of contributions for September 2017, highlighting key activities across 23 repositories. This month featured a diverse range of pushes, pull requests, and issue discussions, reflecting the dynamic collaboration within the community. ## 2017-09-30 - ✅ Reviewed PR in [prest/angular-prest](https://github.com/prest/angular-prest): [config e params](https://github.com/prest/angular-prest/pull/1#pullrequestreview-66300288) (Approved) ## 2017-09-29 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [restructuring for use of more than one database adapter / adapter](https://github.com/prest/adapters/pull/15#pullrequestreview-66036593) (Approved) ## 2017-09-28 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [this commit resolve #222](https://github.com/prest/adapters/pull/17#pullrequestreview-66016591) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Documentation about issue #222](https://github.com/prest/prest/pull/223#pullrequestreview-66016682) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Change shortcut for GoDeclsDir](https://github.com/editor-bootstrap/vim-bootstrap/pull/271#pullrequestreview-65870235) (Approved) - 🐛 Opened issue in [nuveo/storing](https://github.com/nuveo/storing): [Google Cloud Storage](https://github.com/nuveo/storing/issues/6) - 🐛 Opened issue in [nuveo/storing](https://github.com/nuveo/storing): [azure support](https://github.com/nuveo/storing/issues/5) - 🐛 Opened issue in [nuveo/storing](https://github.com/nuveo/storing): [digital ocean spaces support](https://github.com/nuveo/storing/issues/4) - 🐛 Opened issue in [mholt/curl-to-go](https://github.com/mholt/curl-to-go): [--form POST](https://github.com/mholt/curl-to-go/issues/22) ## 2017-09-27 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add turtle](https://github.com/avelino/awesome-go/pull/1598#pullrequestreview-65589429) (Approved) - ✅ Reviewed PR in [nuveo/storing](https://github.com/nuveo/storing): [Options to use own Bucket and ACL configurations](https://github.com/nuveo/storing/pull/3#pullrequestreview-65690455) (Approved) ## 2017-09-26 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add webview library](https://github.com/avelino/awesome-go/pull/1594#pullrequestreview-65087643) (Changes requested) ## 2017-09-22 - 🔍 Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [bug fix destroying container](https://github.com/gofn/gofn/pull/86#pullrequestreview-64682222) (Changes requested) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [IronWorker support](https://github.com/gofn/gofn/issues/88) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [aws lambda support](https://github.com/gofn/gofn/issues/87) ## 2017-09-20 - ✅ Reviewed PR in [prest/bgworker](https://github.com/prest/bgworker): [Move background worker main loop from C to Go code](https://github.com/prest/bgworker/pull/3#pullrequestreview-63934413) (Approved) ## 2017-09-18 - 💬 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [fixing the IN operator syntax and adding ANY, SOME, ALL operators to where clause](https://github.com/prest/adapters/pull/13#pullrequestreview-63326563) (Commented) - ✅ Reviewed PR in [prest/bgworker](https://github.com/prest/bgworker): [Improve build script and supported PostgreSQL versions](https://github.com/prest/bgworker/pull/2#pullrequestreview-63491165) (Approved) ## 2017-09-09 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add dgraph-io/badger](https://github.com/avelino/awesome-go/pull/1561#pullrequestreview-61654279) (Approved) - 🐛 Opened issue in [Homebrew/brew](https://github.com/Homebrew/brew): [Error: SHA256 mismatch snowboard-1.0.0.tar.gz](https://github.com/Homebrew/brew/issues/3140) - 🐛 Opened issue in [nuveo/docker-opencv](https://github.com/nuveo/docker-opencv): [support python:2-slim support (debian)](https://github.com/nuveo/docker-opencv/issues/2) - 🐛 Opened issue in [nuveo/docker-opencv](https://github.com/nuveo/docker-opencv): [support python:3-slim support (debian)](https://github.com/nuveo/docker-opencv/issues/1) - 🐛 Opened issue in [bukalapak/homebrew-packages](https://github.com/bukalapak/homebrew-packages): [Error: SHA256 mismatch snowboard-1.0.0.tar.gz ](https://github.com/bukalapak/homebrew-packages/issues/1) ## 2017-09-08 - 🐛 Opened issue in [joaotavora/yasnippet](https://github.com/joaotavora/yasnippet): [multi keys](https://github.com/joaotavora/yasnippet/issues/853) - 🐛 Opened issue in [AndreaCrotti/yasnippet-snippets](https://github.com/AndreaCrotti/yasnippet-snippets): [multi key](https://github.com/AndreaCrotti/yasnippet-snippets/issues/214) ## 2017-09-07 - 🔀 Opened PR in [AndreaCrotti/yasnippet-snippets](https://github.com/AndreaCrotti/yasnippet-snippets): [create python snippet bang #!](https://github.com/AndreaCrotti/yasnippet-snippets/pull/213) - 🐛 Opened issue in [raphamorim/go-rainbow](https://github.com/raphamorim/go-rainbow): [added package on awesome-go](https://github.com/raphamorim/go-rainbow/issues/13) ## 2017-09-06 - 🐛 Opened issue in [Homebrew/brew](https://github.com/Homebrew/brew): [macOS 10.13 Upgrading gtk+3](https://github.com/Homebrew/brew/issues/3132) - 🐛 Opened issue in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [macOS 10.13 Upgrading gtk+3](https://github.com/Homebrew/homebrew-core/issues/17723) ## 2017-09-05 - 🐛 Opened issue in [qax-os/excelize](https://github.com/qax-os/excelize): [not reader file xlsx](https://github.com/qax-os/excelize/issues/112) ## 2017-09-04 - 🔀 Opened PR in [nuveo/docconv](https://github.com/nuveo/docconv): [Fixed white rows](https://github.com/nuveo/docconv/pull/12) - 🔀 Opened PR in [nuveo/docconv](https://github.com/nuveo/docconv): [used xuri/excelize on ConvertXLSX](https://github.com/nuveo/docconv/pull/11) - 🔀 Opened PR in [sajari/docconv](https://github.com/sajari/docconv): [Fixed white rows](https://github.com/sajari/docconv/pull/36) ## Commits - 🔨 Push to [prest/bgworker](https://github.com/prest/bgworker): 7 commit(s) - [See commits](https://github.com/prest/bgworker/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [prest/angular-prest](https://github.com/prest/angular-prest): 2 commit(s) - [See commits](https://github.com/prest/angular-prest/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [nuveo/docker-opencv](https://github.com/nuveo/docker-opencv): 14 commit(s) - [See commits](https://github.com/nuveo/docker-opencv/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [AndreaCrotti/yasnippet-snippets](https://github.com/AndreaCrotti/yasnippet-snippets): 1 commit(s) - [See commits](https://github.com/AndreaCrotti/yasnippet-snippets/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [nuveo/storing](https://github.com/nuveo/storing): 2 commit(s) - [See commits](https://github.com/nuveo/storing/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [nuveo/boxos](https://github.com/nuveo/boxos): 2 commit(s) - [See commits](https://github.com/nuveo/boxos/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 4 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [golang/go](https://github.com/golang/go): 1 commit(s) - [See commits](https://github.com/golang/go/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 8 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) - 🔨 Push to [prest/doc-template](https://github.com/prest/doc-template): 1 commit(s) - [See commits](https://github.com/prest/doc-template/commits?author=avelino&since=2017-09-01T00:00:00Z&until=2017-09-30T23:59:59Z) ## Private contributions - 🔒 135 private contribution(s) this month --- # Open Source Contributions - August 2017 **URL**: https://avelino.run/foss/2017/08/ **Published**: 2017-08-01 **Word Count**: 440 words **Summary**: August 2017 saw 18 repos with 25 PR reviews and 9 issues. Contributions included significant code pushes and impactful reviews, enhancing project quality. In August 2017, the development community made notable strides with 18 repositories contributing to a total of 37 activities. This timeline showcases key events, including code pushes, issue openings, and pull request reviews, reflecting the collaborative efforts that enriched the projects throughout the month. ## 2017-08-31 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add test to find out malformed separators.](https://github.com/avelino/awesome-go/pull/1564#pullrequestreview-59752370) (Approved) ## 2017-08-25 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Adds setters and getters to ssh keys path](https://github.com/gofn/gofn/pull/85#pullrequestreview-58748539) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [update dependencies](https://github.com/prest/prest/pull/211#pullrequestreview-58764999) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Update usage of pREST as package](https://github.com/prest/prest/pull/210#pullrequestreview-58673209) (Approved) - 🐛 Opened issue in [jwendell/fnkube](https://github.com/jwendell/fnkube): [merge project on gofn](https://github.com/jwendell/fnkube/issues/3) ## 2017-08-24 - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [ssh key path](https://github.com/gofn/gofn/issues/84) ## 2017-08-23 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [ssh fake server](https://github.com/gofn/gofn/pull/81#pullrequestreview-57944851) (Approved) ## 2017-08-22 - ✅ Reviewed PR in [prest/controllers](https://github.com/prest/controllers): [Fix middlewares package import](https://github.com/prest/controllers/pull/5#pullrequestreview-57651326) (Approved) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [terraform orchestration support](https://github.com/gofn/gofn/issues/83) ## 2017-08-21 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [readme file fixes](https://github.com/gofn/gofn/pull/82#pullrequestreview-57586045) (Approved) - ✅ Reviewed PR in [prest/middlewares](https://github.com/prest/middlewares): [Status badges](https://github.com/prest/middlewares/pull/5#pullrequestreview-57608317) (Approved) ## 2017-08-20 - 🐛 Opened issue in [edubart/otclient](https://github.com/edubart/otclient): [pre-build on homebrew cask](https://github.com/edubart/otclient/issues/863) ## 2017-08-19 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added go-enum](https://github.com/avelino/awesome-go/pull/1545#pullrequestreview-57343847) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add goworld - another game server engine](https://github.com/avelino/awesome-go/pull/1525#pullrequestreview-57343827) (Approved) ## 2017-08-18 - 🐛 Opened issue in [raphamorim/clapton](https://github.com/raphamorim/clapton): [install via homebrew](https://github.com/raphamorim/clapton/issues/16) ## 2017-08-14 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [bug fix system close before machine shutdown and delete](https://github.com/gofn/gofn/pull/77#pullrequestreview-56208509) (Approved) ## 2017-08-13 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Quicklist is now default](https://github.com/editor-bootstrap/vim-bootstrap/pull/266#pullrequestreview-55966231) (Approved) - 🐛 Opened issue in [GitHawkApp/GitHawk](https://github.com/GitHawkApp/GitHawk): [Notification show user](https://github.com/GitHawkApp/GitHawk/issues/242) - 🐛 Opened issue in [GitHawkApp/GitHawk](https://github.com/GitHawkApp/GitHawk): [My profile show ](https://github.com/GitHawkApp/GitHawk/issues/241) ## 2017-08-12 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add package: oak](https://github.com/avelino/awesome-go/pull/1534#pullrequestreview-55936846) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add package](https://github.com/avelino/awesome-go/pull/1533#pullrequestreview-55936808) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add package: cupaloy](https://github.com/avelino/awesome-go/pull/1537#pullrequestreview-55935826) (Approved) ## 2017-08-10 - 💬 Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [do not prepare all request](https://github.com/prest/adapters/pull/11#pullrequestreview-55670971) (Commented) ## 2017-08-09 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added trivago/gollum to messaging category](https://github.com/avelino/awesome-go/pull/1522#pullrequestreview-55128188) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add patreon-go (Patreon API client)](https://github.com/avelino/awesome-go/pull/1532#pullrequestreview-55128030) (Approved) ## 2017-08-06 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add avgRating](https://github.com/avelino/awesome-go/pull/1520#pullrequestreview-54537438) (Approved) ## 2017-08-04 - ✅ Reviewed PR in [crgimenes/grupo-estudos-golang](https://github.com/crgimenes/grupo-estudos-golang): [alteração no horário dos hangouts](https://github.com/crgimenes/grupo-estudos-golang/pull/44#pullrequestreview-54414210) (Approved) ## 2017-08-03 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Shixzie/nlp to Natural Language Processing](https://github.com/avelino/awesome-go/pull/1518#pullrequestreview-54174255) (Changes requested) - 💬 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add OpenPeeDeeP/xdg package to the list](https://github.com/avelino/awesome-go/pull/1515#pullrequestreview-53988997) (Commented) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding mssqlx (production library at iparking.vn)](https://github.com/avelino/awesome-go/pull/1513#pullrequestreview-53988931) (Approved) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [use nuveo/log](https://github.com/prest/adapters/pull/5#pullrequestreview-54153831) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [use nuveo/log](https://github.com/prest/config/pull/3#pullrequestreview-54149281) (Approved) - 🐛 Opened issue in [googleapis/google-cloud-go](https://github.com/googleapis/google-cloud-go): [vision: Error happens when a program imports grpc more than twice](https://github.com/googleapis/google-cloud-go/issues/716) ## 2017-08-02 - 🐛 Opened issue in [golang/dep](https://github.com/golang/dep): [dep ensure local packages](https://github.com/golang/dep/issues/935) ## Commits - 🔨 Push to [avelino/seed](https://github.com/avelino/seed): 31 commit(s) - [See commits](https://github.com/avelino/seed/commits?author=avelino&since=2017-08-01T00:00:00Z&until=2017-08-31T23:59:59Z) - 🔨 Push to [gofn/snapshot.service](https://github.com/gofn/snapshot.service): 11 commit(s) - [See commits](https://github.com/gofn/snapshot.service/commits?author=avelino&since=2017-08-01T00:00:00Z&until=2017-08-31T23:59:59Z) - 🔨 Push to [nuveo/boxos](https://github.com/nuveo/boxos): 2 commit(s) - [See commits](https://github.com/nuveo/boxos/commits?author=avelino&since=2017-08-01T00:00:00Z&until=2017-08-31T23:59:59Z) ## Private contributions - 🔒 222 private contribution(s) this month --- # Open Source Contributions - July 2017 **URL**: https://avelino.run/foss/2017/07/ **Published**: 2017-07-01 **Word Count**: 674 words **Summary**: July 2017 saw 22 repositories contribute 64 events, including 6 pull requests and 35 reviews, highlighting a month of vibrant collaboration and growth. This timeline captures the key contributions and events from July 2017, showcasing the dynamic activity across 22 repositories. With 64 total contributions, including push events, pull requests, and reviews, this month reflects a significant collaborative effort in the community. ## 2017-07-29 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/utahta/go-cronowriter](https://github.com/avelino/awesome-go/pull/1508#pullrequestreview-53077637) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Broken anchor links](https://github.com/avelino/awesome-go/pull/1505#pullrequestreview-53077607) (Approved) ## 2017-07-28 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Improvements/refactor packages](https://github.com/prest/prest/pull/195#pullrequestreview-53001768) (Approved) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Fix problem with fields permissions](https://github.com/prest/adapters/pull/4#pullrequestreview-52903487) (Approved) - ✅ Reviewed PR in [prest/controllers](https://github.com/prest/controllers): [now fields permission return a slice and an error](https://github.com/prest/controllers/pull/3#pullrequestreview-52903202) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Context](https://github.com/gofn/gofn/pull/70#pullrequestreview-53049992) (Approved) ## 2017-07-27 - 🔀 Opened PR in [prest/adapters](https://github.com/prest/adapters): [set debug on show all query exec](https://github.com/prest/adapters/pull/3) - ✅ Reviewed PR in [prest/controllers](https://github.com/prest/controllers): [scanner implementation](https://github.com/prest/controllers/pull/2#pullrequestreview-52555873) (Approved) - 🐛 Opened issue in [nuveo/log](https://github.com/nuveo/log): [sentry support, used adapter pattern](https://github.com/nuveo/log/issues/5) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Used SQL file on fixture (data base load data)](https://github.com/prest/prest/issues/199) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [group by not working, permission crash](https://github.com/prest/prest/issues/198) ## 2017-07-26 - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Scanner](https://github.com/prest/adapters/pull/2#pullrequestreview-52474044) (Approved) - ✅ Reviewed PR in [prest/adapters](https://github.com/prest/adapters): [Improvements/refactor adapters](https://github.com/prest/adapters/pull/1#pullrequestreview-52390812) (Approved) - ✅ Reviewed PR in [prest/controllers](https://github.com/prest/controllers): [Refactor controllers package](https://github.com/prest/controllers/pull/1#pullrequestreview-52390591) (Approved) - ✅ Reviewed PR in [nuveo/log](https://github.com/nuveo/log): [Feature/1 - Add usage examples](https://github.com/nuveo/log/pull/2#pullrequestreview-52427126) (Approved) - ✅ Reviewed PR in [prest/middlewares](https://github.com/prest/middlewares): [Refactor middlewares package](https://github.com/prest/middlewares/pull/1#pullrequestreview-52391411) (Approved) - ✅ Reviewed PR in [prest/config](https://github.com/prest/config): [Refactor config/middlewares package](https://github.com/prest/config/pull/1#pullrequestreview-52391307) (Approved) - ✅ Reviewed PR in [prest/cmd](https://github.com/prest/cmd): [Refactor cmd package](https://github.com/prest/cmd/pull/1#pullrequestreview-52391195) (Approved) - 🐛 Opened issue in [nuveo/log](https://github.com/nuveo/log): [rename package](https://github.com/nuveo/log/issues/3) ## 2017-07-23 - 🔀 Opened PR in [pythonbrasil/pyBusinesses-BR](https://github.com/pythonbrasil/pyBusinesses-BR): [Adicionando a empresa @nuveo](https://github.com/pythonbrasil/pyBusinesses-BR/pull/98) ## 2017-07-20 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/osteele/liquid to Template Engines](https://github.com/avelino/awesome-go/pull/1503#pullrequestreview-51082562) (Approved) ## 2017-07-19 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [pRest is not a database, but a tool](https://github.com/avelino/awesome-go/pull/1502#pullrequestreview-50923038) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [update docker and travis stuff](https://github.com/prest/prest/pull/184#pullrequestreview-50941496) (Approved) ## 2017-07-16 - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix cors](https://github.com/prest/prest/pull/183#pullrequestreview-50216126) (Commented) ## 2017-07-15 - 🔀 Opened PR in [dut-lang/dut](https://github.com/dut-lang/dut): [Include](https://github.com/dut-lang/dut/pull/10) - 🔀 Opened PR in [dut-lang/dut](https://github.com/dut-lang/dut): [upgrade sq libs](https://github.com/dut-lang/dut/pull/9) - 🔀 Opened PR in [albertodemichelis/squirrel](https://github.com/albertodemichelis/squirrel): [update Copyright year 2016 to 2017](https://github.com/albertodemichelis/squirrel/pull/99) - 🔀 Opened PR in [melpa/melpa](https://github.com/melpa/melpa): [added dut-mode](https://github.com/melpa/melpa/pull/4852) ## 2017-07-14 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Go client for the Zooz API](https://github.com/avelino/awesome-go/pull/1497#pullrequestreview-50150607) (Approved) ## 2017-07-13 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added v](https://github.com/avelino/awesome-go/pull/1474#pullrequestreview-49874620) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added moby project](https://github.com/avelino/awesome-go/pull/1483#pullrequestreview-49872584) (Approved) ## 2017-07-12 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [bugfix: performance issues](https://github.com/editor-bootstrap/vim-bootstrap/pull/263#pullrequestreview-49377246) (Approved) ## 2017-07-10 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Go improvements based on a post](https://github.com/editor-bootstrap/vim-bootstrap/pull/262#pullrequestreview-48863918) (Approved) ## 2017-07-09 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/artonge/go-gtfs](https://github.com/avelino/awesome-go/pull/1493#pullrequestreview-48775566) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added Kallax on ORM](https://github.com/avelino/awesome-go/pull/1494#pullrequestreview-48775497) (Changes requested) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add goxlsxwriter](https://github.com/avelino/awesome-go/pull/1492#pullrequestreview-48775484) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add astitodo](https://github.com/avelino/awesome-go/pull/1490#pullrequestreview-48775353) (Approved) - 🐛 Opened issue in [crgimenes/grupo-estudos-golang](https://github.com/crgimenes/grupo-estudos-golang): [Suporte a multi línguas ](https://github.com/crgimenes/grupo-estudos-golang/issues/42) ## 2017-07-08 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add astisub](https://github.com/avelino/awesome-go/pull/1489#pullrequestreview-48755693) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding aah web framework under Web Framework section](https://github.com/avelino/awesome-go/pull/1488#pullrequestreview-48755674) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add project intrinsic, Use x86 SIMD without writing any assembly code](https://github.com/avelino/awesome-go/pull/1470#pullrequestreview-48755563) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add goq - html unmarshaling with jquery struct tags](https://github.com/avelino/awesome-go/pull/1487#pullrequestreview-48744366) (Approved) ## 2017-07-05 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update chi url](https://github.com/avelino/awesome-go/pull/1479#pullrequestreview-47968752) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add a new website. ](https://github.com/avelino/awesome-go/pull/1480#pullrequestreview-47968590) (Changes requested) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Update example in README to use go best practices](https://github.com/gofn/gofn/pull/65#pullrequestreview-48192179) (Approved) ## 2017-07-03 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add support to HAVING clause](https://github.com/prest/prest/pull/177#pullrequestreview-47713625) (Approved) ## Commits - 🔨 Push to [prest/template](https://github.com/prest/template): 2 commit(s) - [See commits](https://github.com/prest/template/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/controllers](https://github.com/prest/controllers): 2 commit(s) - [See commits](https://github.com/prest/controllers/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/config](https://github.com/prest/config): 4 commit(s) - [See commits](https://github.com/prest/config/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/adapters](https://github.com/prest/adapters): 6 commit(s) - [See commits](https://github.com/prest/adapters/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [pythonbrasil/pyBusinesses-BR](https://github.com/pythonbrasil/pyBusinesses-BR): 1 commit(s) - [See commits](https://github.com/pythonbrasil/pyBusinesses-BR/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/statements](https://github.com/prest/statements): 2 commit(s) - [See commits](https://github.com/prest/statements/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [dut-lang/dut](https://github.com/dut-lang/dut): 10 commit(s) - [See commits](https://github.com/dut-lang/dut/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [melpa/melpa](https://github.com/melpa/melpa): 1 commit(s) - [See commits](https://github.com/melpa/melpa/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [structy/log](https://github.com/structy/log): 1 commit(s) - [See commits](https://github.com/structy/log/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/cmd](https://github.com/prest/cmd): 2 commit(s) - [See commits](https://github.com/prest/cmd/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [nuveo/log](https://github.com/nuveo/log): 1 commit(s) - [See commits](https://github.com/nuveo/log/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/helpers](https://github.com/prest/helpers): 2 commit(s) - [See commits](https://github.com/prest/helpers/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 21 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [albertodemichelis/squirrel](https://github.com/albertodemichelis/squirrel): 1 commit(s) - [See commits](https://github.com/albertodemichelis/squirrel/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [dut-lang/dut-mode](https://github.com/dut-lang/dut-mode): 5 commit(s) - [See commits](https://github.com/dut-lang/dut-mode/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [avelino/seed](https://github.com/avelino/seed): 4 commit(s) - [See commits](https://github.com/avelino/seed/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [prest/middlewares](https://github.com/prest/middlewares): 2 commit(s) - [See commits](https://github.com/prest/middlewares/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 1 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2017-07-01T00:00:00Z&until=2017-07-31T23:59:59Z) ## Private contributions - 🔒 192 private contribution(s) this month --- # Open Source Contributions - June 2017 **URL**: https://avelino.run/foss/2017/06/ **Published**: 2017-06-01 **Word Count**: 377 words **Summary**: June 2017 saw 12 repositories contribute 33 events, including 3 pull requests and 20 reviews, showcasing vibrant community engagement and development activity. Explore the contributions made in June 2017 across various repositories. This timeline highlights significant events, including push activities, pull requests, and issue tracking, reflecting the ongoing development and collaboration within the community. ## 2017-06-30 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add a fast logger for GO, blog4go](https://github.com/avelino/awesome-go/pull/1030#pullrequestreview-47302639) (Changes requested) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add Group by clause support](https://github.com/prest/prest/pull/176#pullrequestreview-47480269) (Approved) ## 2017-06-27 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [bug fix query return from empty table, issue #173](https://github.com/prest/prest/pull/174#pullrequestreview-46664703) (Approved) ## 2017-06-26 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Create CODE_OF_CONDUCT.md](https://github.com/prest/prest/pull/172) - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [go is package not CLI, removed vendor folder](https://github.com/gofn/gofn/pull/64) ## 2017-06-22 - 🐛 Opened issue in [niemeyer/gopkg](https://github.com/niemeyer/gopkg): [beta version 0.1 and 0.2](https://github.com/niemeyer/gopkg/issues/57) - 🐛 Opened issue in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [ido support](https://github.com/editor-bootstrap/emacs-bootstrap/issues/28) ## 2017-06-19 - 🔍 Reviewed PR in [nuveo/IWantToWorkAtNuveo](https://github.com/nuveo/IWantToWorkAtNuveo): [Fix framework name](https://github.com/nuveo/IWantToWorkAtNuveo/pull/2#pullrequestreview-44733970) (Changes requested) ## 2017-06-17 - ✅ Reviewed PR in [bbangert/beaker](https://github.com/bbangert/beaker): [Builtin managers and synchronizers](https://github.com/bbangert/beaker/pull/133#pullrequestreview-44709138) (Approved) ## 2017-06-16 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add githubql package.](https://github.com/avelino/awesome-go/pull/1435#pullrequestreview-44650766) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add a deadline for new PR on CONTRIBUTION](https://github.com/avelino/awesome-go/pull/1459#pullrequestreview-44640924) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gowww/router](https://github.com/avelino/awesome-go/pull/1452#pullrequestreview-44580667) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added library for manipulating POSIX ACLs](https://github.com/avelino/awesome-go/pull/1451#pullrequestreview-44580293) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added github.com/shomali11/util](https://github.com/avelino/awesome-go/pull/1450#pullrequestreview-44579754) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-cleanarch](https://github.com/avelino/awesome-go/pull/1449#pullrequestreview-44579383) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added goid](https://github.com/avelino/awesome-go/pull/1443#pullrequestreview-44579029) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add jsonenums entry to Utilities](https://github.com/avelino/awesome-go/pull/1442#pullrequestreview-44578632) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add gorouter package](https://github.com/avelino/awesome-go/pull/1439#pullrequestreview-44578298) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add ebook](https://github.com/avelino/awesome-go/pull/1447#pullrequestreview-44577758) (Approved) ## 2017-06-12 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [remove data wrapper from body and Standardize functions](https://github.com/prest/prest/pull/166#pullrequestreview-43400184) (Approved) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added meetup topic](https://github.com/avelino/awesome-go/issues/1454) ## 2017-06-06 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Migrate via gopkg](https://github.com/prest/prest/pull/165) ## 2017-06-03 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rubyist/circuitbreaker](https://github.com/avelino/awesome-go/pull/1444#pullrequestreview-41928246) (Approved) ## 2017-06-02 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add array support](https://github.com/prest/prest/pull/156#pullrequestreview-41895885) (Approved) - ✅ Reviewed PR in [nuveo/docconv](https://github.com/nuveo/docconv): [Convert csv data to XLSX](https://github.com/nuveo/docconv/pull/10#pullrequestreview-41668613) (Approved) ## 2017-06-01 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [prevent more than load when use pREST as a module](https://github.com/prest/prest/pull/155#pullrequestreview-41589484) (Approved) ## Commits - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 5 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2017-06-01T00:00:00Z&until=2017-06-30T23:59:59Z) - 🔨 Push to [prest/prest](https://github.com/prest/prest): 3 commit(s) - [See commits](https://github.com/prest/prest/commits?author=avelino&since=2017-06-01T00:00:00Z&until=2017-06-30T23:59:59Z) - 🔨 Push to [gofn/gofn](https://github.com/gofn/gofn): 1 commit(s) - [See commits](https://github.com/gofn/gofn/commits?author=avelino&since=2017-06-01T00:00:00Z&until=2017-06-30T23:59:59Z) - 🔨 Push to [nuveo/speech-to-text](https://github.com/nuveo/speech-to-text): 1 commit(s) - [See commits](https://github.com/nuveo/speech-to-text/commits?author=avelino&since=2017-06-01T00:00:00Z&until=2017-06-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2017-06-01T00:00:00Z&until=2017-06-30T23:59:59Z) - 🔨 Push to [prest/cmd](https://github.com/prest/cmd): 1 commit(s) - [See commits](https://github.com/prest/cmd/commits?author=avelino&since=2017-06-01T00:00:00Z&until=2017-06-30T23:59:59Z) - 🔨 Push to [nuveo/boxos](https://github.com/nuveo/boxos): 1 commit(s) - [See commits](https://github.com/nuveo/boxos/commits?author=avelino&since=2017-06-01T00:00:00Z&until=2017-06-30T23:59:59Z) ## Private contributions - 🔒 131 private contribution(s) this month --- # Conheça seu ambiente de trabalho **URL**: https://avelino.run/conhe%C3%A7a-seu-ambiente-de-trabalho/ **Published**: 2017-05-03 **Tags**: environment, performance, trabalho, remote working, golang **Word Count**: 965 words Aprender novas tecnologias (nesse caso linguagens de programação) não é um trabalho fácil, vai muito além de conhecer syntax da linguagem. Exige alguns desafios como entender porque a linguagem foi criada (existe), entender o eco sistema, como fazer deploy, como gerenciar ambiente de produção e etc. ![Mantenha seu ambiente de trabalho organizado e com tudo a seu alcance](https://miro.medium.com/max/1920/1*vK2aejO19rAW5x3D7-CQhw.png) Pensando nessa introdução vou falar um pouco sobre conhecer o **seu** ambiente de trabalho antes de conhecer novas tecnologias (linguagens), é muito comum ver desenvolvedores querer usar sempre o que existe de mais novo no mercado (linguagem, framework, plugin, editor e etc) sem pensar no time de desenvolvimento envolvido, mas sera que isso realmente é a melhor coisa a se fazer para empresa que você trabalha? O nível de complexidade são diferente para pessoas, é extremamente comum ver um desenvolvedor (geralmente auto de data) aprender novas tecnologias muito rápido, mas nem todos são assim. Um dos trabalhos de ser CTO é saber dosar a dose do remédio para que todos os desenvolvedores esteja sempre na mesma página, isso envolve dizer alguns não momentâneos (não é fácil esse papel, mas é extremamente necessário). ## Conhecer seu editor É primordial você conhecer o editor que você trabalha, não adianta você querer usar o editor que esta em hype para a tecnologia X, use o que você realmente sabe usar. Principalmente na área de desenvolvimento de software muitos desenvolvedores fala de Emacs e Vim, você realmente precisa usar esses editores? Minha opinião é que você conheça, pois é importante conhece como outros desenvolvedores trabalha, mas leve isso como um novo caso de estudo não leve em paralelo com o estudo sobre a tecnologia que esta aprendendo, tenha foco no que você quer aprender, tempos tempo para aprender muita coisa na vida, basta ter paciência, perseverança e foco nos objetivos. Pontos importantes para você conhecer do seu editor: - Teclas de atalhos: com o passar do tempo você percebe que seu dia começa ficar mais produtivo quando começa largar a dependência do mouse; - Uso de busca em código (não se prenda dentro do editor, conheça como fazer usando bash também); - Trabalhar com mais de um projeto na mesma janela do Editor (Hoje é extremamente comum dividir o que é frontend e backend, trabalhar com micros serviço e etc, com esse cenário sera necessário você se adaptar em trabalhar com mais de um projeto aberto pois você precisa implementar e/ou corrigir código em mais de um projeto), as maioria dos editores de hoje em dia lhe da suporte a isso, fique tranquilo; - Conhecer configuração do seu editor, como colocar um plugin novo, como configurar uma linguagem nova e etc. > Usei durante muitos anos TextMate até me dedicar a aprender VIM (sim, parei de estudar durante 6 mês outras tecnologias e me voltei para o estudo do VIM), isso me fez aprender muito mas é uma escolha, o que você quer aprender? X ou Y? Depois de anos usando VIM resolvi aprender usar Emacs e já estou a 2 anos usando ele como editor principal, ou seja, mudamos de opniões e temos disponibilidade de conhecer coisas novas. ## Formas de debugar seu software Saber uma linguagem de programação nova não basta saber a syntax e sim quais ferramentas ela lhe traz para debugar o software que esta desenvolvendo, seja **print, breakpoint, gdb, pdb** ou qual quer outra forma. Como desenvolvedor é extremamente importante software ser capaz de achar bugs dentro do software que você esta desenvolvendo ou dando manutenção (desenvolvido por outro desenvolvedor), se você não estudar a fundo como debugar software na sua linguagem você tera alguns problemas para achar o bug que seu software pode ter. ## Logs, ambiente de produção precisa ser rastreável Antes de falar de logs você precisa ter em mente as principais diferença de **log e print**. Conhecer uma linguagem de programação nova é necessário saber como ela se comporta em produção (falando mais uma vez, não é só saber syntax), logar eventos do seu software é extremamente importante, colocar cor para identificar evento é muito importante para você não perder horas tendo que analisar um log, ou até mesmo jogar os logs coletados fora pois esta impossível de se fazer analise (infelizmente já vi mais de uma vez isso acontecendo). ## Pratique (treine) Todos atleta de alta performance precisa praticar (exaustivamente) para ficar bom o suficiente para assim competir. Em desenvolvimento de software não é diferente, você precisa praticar para conseguir desenvolver software sem ficar pensando **"qual a teclada de atalho no meu editor mesmo?", "qual o nome daquele pacote que faz XYZ mesmo?"** e etc. Se você tiver que ficar pensando nessas coisas como seu cérebro tem espaço pra saber qual o problema que você tem que resolver, pensar na melhor maneira da sua arquitetura? Não tem como pensar nessas coisas pois seu cérebro está concentrado em entender seu eco sistema e não resolver o problema, por isso devemos ter o eco sistema em nossa mente para ai sim depois pensar na solução do problema. Quanto melhor você conhecer suas ferramentas melhor você será como desenvolvedor. Uma forma que eu faço para praticar é contribuir com projetos open source, desenvolver não é apenas escrever código e contribuição open source envolve mais relacionamento humana (remoto que é mais difícil ainda) do que código. > Se você não é bom em falar com pessoal é importante aprender by [JavaMan](https://twitter.com/avelinorun/status/863441690337701888) ## Considerações finais Entenda seu ambiente de trabalho, você precisa dominar seu eco sistema para performar mais no seu dia a dia, deixe ele tão simples para o seu cérebro para você não precisar pensar mais nele. Trabalhe com uma tecnologia que lhe deixe feliz e faça com ela o que você realmente precisa fazer, não se engane buscando desculpas dentro de si mesmo para lhe justificar o que esta fazendo (aprendendo X ou Y). Mantenha seu foco em estudos que lhe traz evolução profissional e/ou pessoal. --- # Open Source Contributions - May 2017 **URL**: https://avelino.run/foss/2017/05/ **Published**: 2017-05-01 **Word Count**: 675 words **Summary**: May 2017 saw 19 repositories with 8 pull requests, 43 reviews, and 7 issues, highlighting a month of robust community engagement and development activity. Explore the key contributions and milestones from May 2017, where the community actively engaged in 19 repositories, opening 8 pull requests and conducting 43 reviews. This timeline encapsulates the collaborative spirit and innovation that defined the month. ## 2017-05-31 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [a mock of database connection](https://github.com/prest/prest/pull/154#pullrequestreview-41124627) (Approved) ## 2017-05-29 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Clean up whitespace, full stop header consistency](https://github.com/avelino/awesome-go/pull/1437#pullrequestreview-40799828) (Approved) ## 2017-05-28 - 🔍 Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add tempate for Elm](https://github.com/editor-bootstrap/vim-bootstrap/pull/259#pullrequestreview-40675763) (Changes requested) ## 2017-05-27 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add shabbyrobe/xmlwriter, create XML section](https://github.com/avelino/awesome-go/pull/1426#pullrequestreview-40658027) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-ataman](https://github.com/avelino/awesome-go/pull/1434#pullrequestreview-40657917) (Approved) ## 2017-05-26 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add elasticsql](https://github.com/avelino/awesome-go/pull/1427#pullrequestreview-40507118) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding gowd](https://github.com/avelino/awesome-go/pull/1430#pullrequestreview-40506961) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Adding go-unsplash for unsplash.com API](https://github.com/avelino/awesome-go/pull/1433#pullrequestreview-40506568) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Gogland & deprecate the idea plug-in](https://github.com/avelino/awesome-go/pull/1431#pullrequestreview-40506264) (Approved) ## 2017-05-24 - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [implement funcs to help scripts](https://github.com/prest/prest/pull/152#pullrequestreview-40097281) (Changes requested) ## 2017-05-23 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix bug in insert json](https://github.com/prest/prest/pull/150#pullrequestreview-39842108) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [introduce debug mode](https://github.com/prest/prest/pull/148#pullrequestreview-39625709) (Approved) ## 2017-05-22 - 🐛 Opened issue in [luanfonceca/speakerfight](https://github.com/luanfonceca/speakerfight): [Filter by active event](https://github.com/luanfonceca/speakerfight/issues/209) ## 2017-05-21 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added [slacker] A framework to create Slack bots](https://github.com/avelino/awesome-go/pull/1425#pullrequestreview-39347753) (Approved) - 🐛 Opened issue in [beerpay/beerpay.io](https://github.com/beerpay/beerpay.io): [accept paypal](https://github.com/beerpay/beerpay.io/issues/28) - 🐛 Opened issue in [cloe-lang/cloe](https://github.com/cloe-lang/cloe): [inspired in lisp?](https://github.com/cloe-lang/cloe/issues/35) ## 2017-05-19 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add github.com/yourbasic/bit](https://github.com/avelino/awesome-go/pull/1421#pullrequestreview-39216318) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [file no more mandatory](https://github.com/prest/prest/pull/144#pullrequestreview-39104182) (Approved) ## 2017-05-18 - 🔀 Opened PR in [nuveo/boilr](https://github.com/nuveo/boilr): [Private repos](https://github.com/nuveo/boilr/pull/1) - 🐛 Opened issue in [golang/go](https://github.com/golang/go): [vendor folder ignore on run](https://github.com/golang/go/issues/20406) ## 2017-05-17 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-rquad - efficient region quadtrees](https://github.com/avelino/awesome-go/pull/1420#pullrequestreview-38760486) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add zerolog](https://github.com/avelino/awesome-go/pull/1419#pullrequestreview-38760204) (Approved) - 🐛 Opened issue in [kardianos/govendor](https://github.com/kardianos/govendor): [Error: Different Canonical Packages for, not check on vendor folder](https://github.com/kardianos/govendor/issues/318) ## 2017-05-16 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Bugfix: matchit not found in neovim. Fix #257](https://github.com/editor-bootstrap/vim-bootstrap/pull/258#pullrequestreview-38269007) (Approved) ## 2017-05-13 - 🔀 Opened PR in [bottlepy/bottle-mongo](https://github.com/bottlepy/bottle-mongo): [Travis py versions](https://github.com/bottlepy/bottle-mongo/pull/8) - 🔀 Opened PR in [bottlepy/bottle-mongo](https://github.com/bottlepy/bottle-mongo): [Revert "Fix deprecation of inspect.inspect.getargspec()"](https://github.com/bottlepy/bottle-mongo/pull/7) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add dbcleaner](https://github.com/avelino/awesome-go/pull/1418#pullrequestreview-37982429) (Approved) - 🔍 Reviewed PR in [bottlepy/bottle-mongo](https://github.com/bottlepy/bottle-mongo): [Rename context to route accourding to Plugin API v2](https://github.com/bottlepy/bottle-mongo/pull/6#pullrequestreview-37982610) (Changes requested) ## 2017-05-12 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [checker exist curl](https://github.com/editor-bootstrap/vim-bootstrap/pull/256) ## 2017-05-11 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ofxgo](https://github.com/avelino/awesome-go/pull/1416#pullrequestreview-37662905) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add xpath package](https://github.com/avelino/awesome-go/pull/1415#pullrequestreview-37662662) (Approved) - ✅ Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [unit test mocking documentation](https://github.com/bottlepy/bottle/pull/970#pullrequestreview-37472244) (Approved) ## 2017-05-10 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Prevents multiple startup when the pREST is used as a package.](https://github.com/prest/prest/pull/139#pullrequestreview-37452195) (Approved) ## 2017-05-09 - 🔀 Opened PR in [melpa/melpa](https://github.com/melpa/melpa): [added caleb theme](https://github.com/melpa/melpa/pull/4748) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add matchit, right way](https://github.com/editor-bootstrap/vim-bootstrap/pull/254#pullrequestreview-36936369) (Approved) - 🐛 Opened issue in [editor-bootstrap/emacs-bootstrap](https://github.com/editor-bootstrap/emacs-bootstrap): [caleb theme](https://github.com/editor-bootstrap/emacs-bootstrap/issues/26) - 🐛 Opened issue in [avelino/caleb-theme](https://github.com/avelino/caleb-theme): [pictures](https://github.com/avelino/caleb-theme/issues/1) ## 2017-05-08 - 🔀 Opened PR in [dracula/emacs](https://github.com/dracula/emacs): [fixed working xterm (256 colors)](https://github.com/dracula/emacs/pull/26) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Update README.md](https://github.com/avelino/awesome-go/pull/1414#pullrequestreview-36902490) (Approved) ## 2017-05-07 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add joshbetz/config](https://github.com/avelino/awesome-go/pull/1409#pullrequestreview-36672960) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add authorizecim - Authorize.net credit card processing API](https://github.com/avelino/awesome-go/pull/1327#pullrequestreview-36672849) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added onecache, a caching library](https://github.com/avelino/awesome-go/pull/1408#pullrequestreview-36670541) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add UNIS, the modern architecture pattern for string utilities](https://github.com/avelino/awesome-go/pull/1410#pullrequestreview-36670524) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add complete](https://github.com/avelino/awesome-go/pull/1411#pullrequestreview-36670510) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add rabbus eventbus](https://github.com/avelino/awesome-go/pull/1412#pullrequestreview-36670490) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added loginsrv - JWT login microservice](https://github.com/avelino/awesome-go/pull/1413#pullrequestreview-36670457) (Approved) ## 2017-05-06 - 🔀 Opened PR in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [pREST upgrade version to 0.1.7](https://github.com/Homebrew/homebrew-core/pull/13292) ## 2017-05-05 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add wuzz](https://github.com/avelino/awesome-go/pull/1375#pullrequestreview-36571065) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add hub](https://github.com/avelino/awesome-go/pull/1381#pullrequestreview-36569518) (Approved) - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add ladon](https://github.com/avelino/awesome-go/pull/1382#pullrequestreview-36568957) (Changes requested) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add JayDiff](https://github.com/avelino/awesome-go/pull/1401#pullrequestreview-36568445) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-astilectron](https://github.com/avelino/awesome-go/pull/1403#pullrequestreview-36567948) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added github.com/adam-hanna/sessions](https://github.com/avelino/awesome-go/pull/1404#pullrequestreview-36567620) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Improve error return](https://github.com/prest/prest/pull/137#pullrequestreview-36627192) (Approved) ## 2017-05-04 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix config propagate for all commands](https://github.com/prest/prest/pull/136#pullrequestreview-36392866) (Approved) - ✅ Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Update stpl.rst](https://github.com/bottlepy/bottle/pull/967#pullrequestreview-36181597) (Approved) ## 2017-05-01 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [recommendation new coverage runner cover.run](https://github.com/avelino/awesome-go/pull/1400) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Add 'requirements.txt.vim' in Python's vim-template](https://github.com/editor-bootstrap/vim-bootstrap/pull/253#pullrequestreview-35581592) (Approved) ## Commits - 🔨 Push to [avelino/cover.run](https://github.com/avelino/cover.run): 5 commit(s) - [See commits](https://github.com/avelino/cover.run/commits?author=avelino&since=2017-05-01T00:00:00Z&until=2017-05-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 3 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2017-05-01T00:00:00Z&until=2017-05-31T23:59:59Z) - 🔨 Push to [avelino/seed](https://github.com/avelino/seed): 3 commit(s) - [See commits](https://github.com/avelino/seed/commits?author=avelino&since=2017-05-01T00:00:00Z&until=2017-05-31T23:59:59Z) ## Private contributions - 🔒 195 private contribution(s) this month --- # cover.run **URL**: https://avelino.run/projects/coverrun/ **Published**: 2017-04-28 **Tags**: cover, code coverage, testing, golang, open source **Word Count**: 5 words **/!\DEPRECIATED/!\** Code coverage ![cover.run](/img/coverrun.png) [github project](https://github.com/avelino/cover.run) --- # Open Source Contributions - April 2017 **URL**: https://avelino.run/foss/2017/04/ **Published**: 2017-04-01 **Word Count**: 127 words **Summary**: April 2017 saw key contributions across four repositories with seven pull request reviews, highlighting collaborative efforts and code enhancements. Explore the timeline of contributions for April 2017, showcasing significant pull request reviews and collaborative enhancements across various repositories, emphasizing the ongoing commitment to quality and improvement. ## 2017-04-28 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Added enviroment variables on container options](https://github.com/gofn/gofn/pull/63#pullrequestreview-35464212) (Approved) ## 2017-04-27 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [working on gfm compat (helps #1224)](https://github.com/avelino/awesome-go/pull/1342#pullrequestreview-35115429) (Approved) ## 2017-04-26 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Remove prepare from queries scripts](https://github.com/prest/prest/pull/134#pullrequestreview-34916784) (Approved) ## 2017-04-23 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Added version(commit hash) on vimrc](https://github.com/editor-bootstrap/vim-bootstrap/pull/252#pullrequestreview-34171033) (Approved) ## 2017-04-12 - 🔍 Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Refactor to aggregate attributes in a unique containerOpts](https://github.com/gofn/gofn/pull/61#pullrequestreview-32362322) (Changes requested) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [add option to pass command to container](https://github.com/gofn/gofn/pull/60#pullrequestreview-32281398) (Approved) ## 2017-04-07 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Refactoring to prevent multiple configuration loads](https://github.com/prest/prest/pull/131#pullrequestreview-31634782) (Approved) ## Private contributions - 🔒 1 private contribution(s) this month --- # Qual o glamour em ser CEO? **URL**: https://avelino.run/qual-o-glamour-em-ser-ceo/ **Published**: 2017-03-04 **Tags**: startup, startups, ceo, glamour **Word Count**: 641 words ![The Wolf of Wall Street (2013)](/o-ceo.jpeg) Antes de entrar no assunto do titulo vou contextualizar o porque estou escrevendo esse blogpost. Eu (Avelino) a anos acompanho minha rede de contato no LinkedIn e via que muitas pessoas estava como (ou se tornou à pouco tempo) CEO (Chief Executive Officer, que significa Diretor Executivo) de empresa, isso me surgiu curiosidade em saber qual empresa essas pessoas tinham se tornado CEO, para minha surpresa a maioria tinha se tornado CEO de uma empresa e continuava trabalhando em outra empresa, muitas sendo assalariado. Com isso surgiu algumas dúvidas dentro da minha cabeça: - "Como ser Diretor Executivo de uma empresa e ocupar um cargo em outra empresa?" - “Como ter tempo para ser Diretor Executivo e ocupar um cargo em outra empresa?" - "Como fazer relacionamento com sociedade, acionistas, sócios, funcionários, clientes, governo e etc?" Analisando esse comportamento eu acho que seria interessante compartilhar meu pensamento sobre o falso glamour de empreender e ser CEO. ## O que é CEO e qual seu papel? CEO é a sigla para Chief Executive Officer, que significa Diretor Executivo. É o cargo de mais alto nível a ser ocupado em uma companhia, o responsável pelo gerenciamento de toda a organização. O seu papel é, além de aplicar as decisões na prática ser aquele que lidera as discussões, promove novas maneiras de pensar e que é o comunicador por excelência de uma organização. É também sua função trabalhar a relação com a imprensa e com tudo que envolva a companhia, mas que aconteça fora dela. O CEO, no entanto, não tem "passe livre" ([você acha que vai colocar o seu salário de R$ 70.00,00 por ser CEO?](https://qz.com/383096/after-reading-an-article-on-happiness-a-company-founder-is-paying-a-new-minimum-wage-70000-a-year/)) para fazer o que quiser. Ele executa as decisões, mas responde diretamente ao conjunto de diretores da empresa. Na maior parte das companhias, existe um diretor que supervisiona o trabalho do CEO (pensando em grandes companhia), a quem o executivo normalmente se dirige preferencialmente. ## Glamour Glamour tem sua origem na palavra "Grammar", e significa uma qualidade extraordinária em um determinado indivíduo, fazendo com que ele pareça muito atraente. ![sonho não é realidade](/sonho-nao-e-realidade.jpeg) Trazendo o termo "Glamour" para dentro do contexto do blogpost, estamos falando de uma pessoa que tem qualidade extraordinária de se relacionar com sociedade, acionistas, sócios, funcionários, clientes, governo e etc, qual quer pessoa é apta a ter esse perfil? Respondendo esse questionamento eu diria que "Sim, mas precisa de experiência e isso só vem com o tempo". ## Meu caso em particular Para quem não me conhece sou CTO (e fundador) da [Nuveo](https://www.linkedin.com/company/nuveo/) (nuvem inteligente que revolucionará a forma como as pessoas guardam, utilizam e encontram informações) fundada em 2015. Após passar por uma crise em uma das empresas que eu tinha resolvi tirar algumas semana para pensar como sair do buraco que estava, depois de alguns dias pensando como resolver os problemas financeiros (mas nunca pensando a curto prazo e sim a logo prazo) cheguei na ideia base da Nuveo. Eu sei que não tenho (e não quero ter) perfil para ser CEO de uma companhia, dado esse cenário liguei para o atual CEO da Nuveo ([José Flavio Pereira](https://www.linkedin.com/in/joseflaviopereira/)) comentando a ideia e como imaginaria monetizar (lógico que essa ideia mudou depois de alguns meses pois percebemos que não era possível tracionar no mercado e muito menos escalar), Flavio me pediu alguns minutos para pensar e iria me retornar a ligação. Aproximadamente 30 minutos depois, ele me retorna com duas pessoas querendo investir na empresa (que nem tinha nascido), ou seja, eu tinha achado o CEO da Nuveo (bastava ele aceitar), logicamente ele aceitou e segue na empreitada até hoje. ## Responda para você mesmo ![Simples pergunta](/simple-question.jpeg) - O que adiantaria assumir o cargo de CEO sendo que não tenho perfil? - Ou você quer viver de aparencia em ser chamado de CEO? - O que lhe motiva continuar empreendendo? - Quantas vezes você já pensou em desistir? **Empreender é viver no risco, precisamos minimizar ao máximo nosso risco.** --- # Open Source Contributions - March 2017 **URL**: https://avelino.run/foss/2017/03/ **Published**: 2017-03-01 **Word Count**: 386 words **Summary**: March 2017 saw 12 repositories contribute to open-source with 8 pull requests and 11 issues, enhancing collaboration and innovation in the community. Explore the significant contributions made in March 2017, where 12 repositories engaged with 8 pull requests and 11 issues. This timeline highlights key events, showcasing the collaborative efforts that drive open-source development forward. ## 2017-03-30 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Xml renderer support](https://github.com/prest/prest/pull/129#pullrequestreview-29992638) (Approved) ## 2017-03-29 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [caught logs when execution failed](https://github.com/gofn/gofn/pull/59#pullrequestreview-29609831) (Approved) ## 2017-03-26 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add nsq-event-bus](https://github.com/avelino/awesome-go/pull/1333#pullrequestreview-29074202) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Replace ctrlp with fzf](https://github.com/editor-bootstrap/vim-bootstrap/pull/248#pullrequestreview-29062263) (Approved) ## 2017-03-24 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Fix #56: Container exited with status code 1, but don't show errors.](https://github.com/gofn/gofn/pull/57#pullrequestreview-28924980) (Approved) ## 2017-03-18 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [connection timeout configuration](https://github.com/prest/prest/pull/127#pullrequestreview-27710854) (Approved) ## 2017-03-15 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Updating Orchestrator's new repo location](https://github.com/avelino/awesome-go/pull/1320#pullrequestreview-27148095) (Approved) ## 2017-03-14 - 🐛 Opened issue in [devspace/devspace-user-requests](https://github.com/devspace/devspace-user-requests): [Friends commits on time line](https://github.com/devspace/devspace-user-requests/issues/105) ## 2017-03-12 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add go-unarr](https://github.com/avelino/awesome-go/pull/1315#pullrequestreview-26456967) (Approved) ## 2017-03-11 - 🔀 Opened PR in [bcicen/ctop](https://github.com/bcicen/ctop): [used govendor as package manager](https://github.com/bcicen/ctop/pull/34) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Added version command line](https://github.com/prest/prest/pull/125) - 🐛 Opened issue in [bcicen/ctop](https://github.com/bcicen/ctop): [dependence manager (govendor)](https://github.com/bcicen/ctop/issues/33) ## 2017-03-10 - 🔀 Opened PR in [bcicen/ctop](https://github.com/bcicen/ctop): [homebrew formula inital](https://github.com/bcicen/ctop/pull/27) - 🔀 Opened PR in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [initial prest formula](https://github.com/Homebrew/homebrew-core/pull/10847) - 🔀 Opened PR in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [initial ctop formula](https://github.com/Homebrew/homebrew-core/pull/10846) - 🐛 Opened issue in [go-gitea/gitea](https://github.com/go-gitea/gitea): [1.1.0 index error panic: runtime error: slice bounds out of range](https://github.com/go-gitea/gitea/issues/1186) - 🐛 Opened issue in [zenorocha/alfred-workflows](https://github.com/zenorocha/alfred-workflows): [alfred homebrew](https://github.com/zenorocha/alfred-workflows/issues/88) - 🐛 Opened issue in [fniephaus/alfred-homebrew](https://github.com/fniephaus/alfred-homebrew): [How to install?](https://github.com/fniephaus/alfred-homebrew/issues/20) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [homebrew formula](https://github.com/prest/prest/issues/124) ## 2017-03-09 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add https://github.com/streadway/amqp](https://github.com/avelino/awesome-go/pull/1313#pullrequestreview-26033707) (Changes requested) - 🐛 Opened issue in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Upgrade 1.0 (docker image) to 1.1.0 (docker image)](https://github.com/go-gitea/gitea/issues/1166) - 🐛 Opened issue in [go-gitea/gitea](https://github.com/go-gitea/gitea): [release v1.1.0 on docker hub](https://github.com/go-gitea/gitea/issues/1165) - 🐛 Opened issue in [bcicen/ctop](https://github.com/bcicen/ctop): [homebrew formula](https://github.com/bcicen/ctop/issues/5) ## 2017-03-08 - 🔀 Opened PR in [nuveo/docconv](https://github.com/nuveo/docconv): [update vendor (add gosseract)](https://github.com/nuveo/docconv/pull/8) - 🔀 Opened PR in [nuveo/docconv](https://github.com/nuveo/docconv): [update readme, replace @sajari to @nuveo](https://github.com/nuveo/docconv/pull/7) - 🔀 Opened PR in [nuveo/docconv](https://github.com/nuveo/docconv): [pdf: just dump raw meta](https://github.com/nuveo/docconv/pull/6) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add flag library.](https://github.com/avelino/awesome-go/pull/1312#pullrequestreview-25830881) (Approved) ## 2017-03-07 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix issue #122, removing access control from base stack](https://github.com/prest/prest/pull/123#pullrequestreview-25531915) (Approved) - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [changing the vimrc to accept my own shell emulator](https://github.com/editor-bootstrap/vim-bootstrap/pull/243#pullrequestreview-25532919) (Approved) - ✅ Reviewed PR in [nuveo/docconv](https://github.com/nuveo/docconv): [Update to use last XLS API ](https://github.com/nuveo/docconv/pull/5#pullrequestreview-25647022) (Approved) - 🐛 Opened issue in [nuveo/docconv](https://github.com/nuveo/docconv): [pdf: just dump raw meta](https://github.com/nuveo/docconv/issues/4) ## 2017-03-04 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [possibility to reorder middlewares](https://github.com/prest/prest/pull/120#pullrequestreview-25105268) (Approved) ## 2017-03-03 - 🐛 Opened issue in [xo/usql](https://github.com/xo/usql): [Dependency Manager](https://github.com/xo/usql/issues/5) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - February 2017 **URL**: https://avelino.run/foss/2017/02/ **Published**: 2017-02-01 **Word Count**: 379 words **Summary**: February 2017 saw significant contributions with 7 repositories, 5 pull requests, and 22 reviews, showcasing active community engagement and development. In February 2017, the open-source community demonstrated robust activity across various repositories. This timeline highlights key contributions, including 5 new pull requests and 22 reviews, reflecting the collaborative spirit and ongoing enhancements within the projects. Explore the details of each contribution and the impact on the respective repositories. ## 2017-02-28 - ✅ Reviewed PR in [gesior/Gesior2012](https://github.com/gesior/Gesior2012): [Tfs 1.0](https://github.com/gesior/Gesior2012/pull/25#pullrequestreview-24132798) (Approved) ## 2017-02-27 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix some warnings](https://github.com/prest/prest/pull/116#pullrequestreview-23901467) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [enable add custom middleware](https://github.com/prest/prest/pull/117#pullrequestreview-23901396) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [add 1.8 and tip](https://github.com/prest/prest/pull/118#pullrequestreview-23901362) (Approved) ## 2017-02-25 - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add raylib-go](https://github.com/avelino/awesome-go/pull/1302#pullrequestreview-23858508) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add argv library.](https://github.com/avelino/awesome-go/pull/1303#pullrequestreview-23858498) (Approved) ## 2017-02-24 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [show error if have error in config file](https://github.com/prest/prest/pull/115#pullrequestreview-23829000) (Approved) ## 2017-02-23 - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [FnRun receive stdin](https://github.com/gofn/gofn/pull/52) - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [run tests on go version: 1.6, 1.7, 1.8 and tip](https://github.com/gofn/gofn/pull/50) - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [Optional use prefix "gofn/" the image name](https://github.com/gofn/gofn/pull/49) - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Leave explicit the maxima version supported the CherryPy (<= 9.0.0)](https://github.com/bottlepy/bottle/pull/947) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix schemas count](https://github.com/prest/prest/pull/111#pullrequestreview-23470944) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add Air](https://github.com/avelino/awesome-go/pull/1298#pullrequestreview-23481069) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Add https://github.com/codesenberg/bombardier](https://github.com/avelino/awesome-go/pull/1300#pullrequestreview-23480872) (Approved) - ✅ Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [add hero template engine](https://github.com/avelino/awesome-go/pull/1299#pullrequestreview-23480744) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [disable endpoint cache](https://github.com/prest/prest/issues/113) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Possibility of generating cache](https://github.com/prest/prest/issues/112) ## 2017-02-22 - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [receive keyid iaas](https://github.com/gofn/gofn/pull/48) ## 2017-02-16 - ✅ Reviewed PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Center screen when finding with "n/N".](https://github.com/editor-bootstrap/vim-bootstrap/pull/242#pullrequestreview-22281389) (Approved) ## 2017-02-14 - 🔍 Reviewed PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Added Scribble](https://github.com/avelino/awesome-go/pull/1287#pullrequestreview-21653624) (Changes requested) - 🐛 Opened issue in [vdaubry/github-awards](https://github.com/vdaubry/github-awards): [filter by user or organization](https://github.com/vdaubry/github-awards/issues/141) ## 2017-02-13 - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [Used snapshot name on IaaS](https://github.com/gofn/gofn/issues/46) ## 2017-02-08 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Support to xml is an open issue(#4) fix #102](https://github.com/prest/prest/pull/103#pullrequestreview-20666167) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Fix docker compose environment variable](https://github.com/prest/prest/pull/99#pullrequestreview-20666129) (Approved) ## 2017-02-07 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [enable to mock database](https://github.com/prest/prest/pull/98#pullrequestreview-20571852) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [update vendor](https://github.com/prest/prest/pull/97#pullrequestreview-20523094) (Approved) - 🔍 Reviewed PR in [prest/prest](https://github.com/prest/prest): [[WIP] fix bugs in where #95](https://github.com/prest/prest/pull/96#pullrequestreview-20408470) (Changes requested) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Refactor methods](https://github.com/gofn/gofn/pull/44#pullrequestreview-20553845) (Approved) ## 2017-02-03 - ✅ Reviewed PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [It's 2017....](https://github.com/bottlepy/bottle/pull/936#pullrequestreview-20006425) (Approved) ## 2017-02-02 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Expose stderr](https://github.com/gofn/gofn/pull/41#pullrequestreview-19803023) (Approved) ## 2017-02-01 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Improvements testing package](https://github.com/prest/prest/pull/93#pullrequestreview-19638245) (Approved) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2017 **URL**: https://avelino.run/foss/2017/01/ **Published**: 2017-01-01 **Word Count**: 608 words **Summary**: January 2017 saw significant contributions with 9 repositories, 6 pull requests opened, and 34 reviews, enhancing project collaboration and code quality. Explore the timeline of contributions for January 2017, where developers made notable strides in collaboration across 9 repositories. This month featured 6 new pull requests and an impressive 34 reviews, reflecting a commitment to enhancing code quality and project development. ## 2017-01-31 - 💬 Reviewed PR in [tsuru/tsuru](https://github.com/tsuru/tsuru): [Add compose environment](https://github.com/tsuru/tsuru/pull/1536#pullrequestreview-19223789) (Commented) ## 2017-01-30 - ✅ Reviewed PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Track labels changed on issue view & resolved #542](https://github.com/go-gitea/gitea/pull/788#pullrequestreview-19009671) (Approved) ## 2017-01-28 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Make release](https://github.com/prest/prest/pull/92) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Remove panic() functions](https://github.com/gofn/gofn/pull/38#pullrequestreview-18974160) (Approved) - 🐛 Opened issue in [karalabe/xgo](https://github.com/karalabe/xgo): [Support go 1.8](https://github.com/karalabe/xgo/issues/71) ## 2017-01-27 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Null and not null operators](https://github.com/prest/prest/pull/90#pullrequestreview-18951137) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add me MAINTAINERS](https://github.com/prest/prest/pull/89#pullrequestreview-18950940) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [BUGFIX where with jsonb bug](https://github.com/prest/prest/pull/87#pullrequestreview-18850873) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Write in process stdin](https://github.com/gofn/gofn/pull/35#pullrequestreview-18929546) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Support to digital ocean](https://github.com/gofn/gofn/pull/32#pullrequestreview-18877538) (Approved) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [open docker tcp port via environment variable](https://github.com/gofn/gofn/issues/37) ## 2017-01-26 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Initial contributing guide](https://github.com/prest/prest/pull/84) - ✅ Reviewed PR in [tsuru/tsuru](https://github.com/tsuru/tsuru): [add quickstart section for README.md](https://github.com/tsuru/tsuru/pull/1534#pullrequestreview-18618239) (Approved) ## 2017-01-25 - 🔀 Opened PR in [tsuru/tsuru](https://github.com/tsuru/tsuru): [update Copyright year 2016 to 2017](https://github.com/tsuru/tsuru/pull/1533) - 🔀 Opened PR in [go-gitea/docs](https://github.com/go-gitea/docs): [var show footer template load time en](https://github.com/go-gitea/docs/pull/87) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add others comparisons in WHERE](https://github.com/prest/prest/pull/83#pullrequestreview-18531390) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Remove _VIEW endpoint](https://github.com/prest/prest/pull/82#pullrequestreview-18487338) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add process queries](https://github.com/prest/prest/pull/78#pullrequestreview-18467630) (Approved) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [defer close body](https://github.com/prest/prest/pull/81#pullrequestreview-18308528) (Approved) - ✅ Reviewed PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Add units concept for modulable functions of a repository](https://github.com/go-gitea/gitea/pull/742#pullrequestreview-18466120) (Approved) ## 2017-01-24 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [[WIP] Change Access Control verification](https://github.com/prest/prest/pull/80#pullrequestreview-18205203) (Approved) - 🐛 Opened issue in [go-gitea/gitea](https://github.com/go-gitea/gitea): [search by keyword in issue](https://github.com/go-gitea/gitea/issues/743) ## 2017-01-21 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix Invalid insert query if table not has column id](https://github.com/prest/prest/pull/77#pullrequestreview-17809706) (Approved) ## 2017-01-20 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [rewrite tests using native go package](https://github.com/prest/prest/issues/75) ## 2017-01-16 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Increase test cover](https://github.com/prest/prest/pull/69#pullrequestreview-16846064) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Executing sql query (like/alternative database views)](https://github.com/prest/prest/issues/70) ## 2017-01-13 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [FEATURE: Add Process View](https://github.com/prest/prest/pull/67#pullrequestreview-16562498) (Approved) ## 2017-01-12 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Access permissions](https://github.com/prest/prest/pull/66#pullrequestreview-16321275) (Approved) ## 2017-01-11 - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [initial logo](https://github.com/gofn/gofn/pull/26) - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [fix some lint issues:](https://github.com/prest/prest/pull/65#pullrequestreview-16144707) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Added Makefile to make easier run lint and tests](https://github.com/gofn/gofn/pull/28#pullrequestreview-16194602) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [fix #24 - Group options in a structure](https://github.com/gofn/gofn/pull/27#pullrequestreview-16186973) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Added support to build using remote git uri](https://github.com/gofn/gofn/pull/22#pullrequestreview-16059133) (Approved) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [logo the project](https://github.com/gofn/gofn/issues/25) ## 2017-01-10 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [[WIP] - Add COUNT fields operation](https://github.com/prest/prest/pull/63#pullrequestreview-15995964) (Approved) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [Support git build](https://github.com/gofn/gofn/issues/20) ## 2017-01-09 - 🔍 Reviewed PR in [nuveo/docconv](https://github.com/nuveo/docconv): [add xlsx support](https://github.com/nuveo/docconv/pull/3#pullrequestreview-15715484) (Changes requested) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [added on awesome-go](https://github.com/gofn/gofn/issues/19) ## 2017-01-07 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [[WIP] Tests](https://github.com/gofn/gofn/pull/18#pullrequestreview-15610557) (Approved) ## 2017-01-06 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Select by fields](https://github.com/prest/prest/pull/62#pullrequestreview-15576085) (Approved) ## 2017-01-05 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Add transactions in SQL operations](https://github.com/prest/prest/pull/61#pullrequestreview-15351656) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Volumes](https://github.com/gofn/gofn/pull/17#pullrequestreview-15294627) (Approved) ## 2017-01-03 - 🔀 Opened PR in [cassiobotaro/60-days-of-go](https://github.com/cassiobotaro/60-days-of-go): [Implemented using of goroutine day 2 (fizzbuzz)](https://github.com/cassiobotaro/60-days-of-go/pull/1) - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [add ability to use COUNT function in queries](https://github.com/prest/prest/pull/60#pullrequestreview-15025118) (Commented) - 💬 Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Alpine is lighter and python 2 is past](https://github.com/gofn/gofn/pull/15#pullrequestreview-14992828) (Commented) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [fix #13 - Treats NotFound as ignored error](https://github.com/gofn/gofn/pull/14#pullrequestreview-14991412) (Approved) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [test coverage](https://github.com/gofn/gofn/issues/16) ## 2017-01-02 - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [From poc to package](https://github.com/gofn/gofn/pull/11#pullrequestreview-14872950) (Approved) - ✅ Reviewed PR in [gofn/gofn](https://github.com/gofn/gofn): [Add simple command line parameters](https://github.com/gofn/gofn/pull/10#pullrequestreview-14850745) (Approved) - 🐛 Opened issue in [libgit2/git2go](https://github.com/libgit2/git2go): [Support libgit2 v0.25](https://github.com/libgit2/git2go/issues/359) ## Commits - 🔨 Push to [cassiobotaro/60-days-of-go](https://github.com/cassiobotaro/60-days-of-go): 3 commit(s) - [See commits](https://github.com/cassiobotaro/60-days-of-go/commits?author=avelino&since=2017-01-01T00:00:00Z&until=2017-01-31T23:59:59Z) - 🔨 Push to [go-gitea/docs](https://github.com/go-gitea/docs): 1 commit(s) - [See commits](https://github.com/go-gitea/docs/commits?author=avelino&since=2017-01-01T00:00:00Z&until=2017-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # gofn **URL**: https://avelino.run/projects/gofn/ **Published**: 2016-12-25 **Tags**: serverless, function server, golang, open source **Word Count**: 9 words Function process via docker provider (serverless minimalist) ![gofn - serverless minimalist](https://raw.githubusercontent.com/gofn/gofn/master/docs/assets/logo.png) [github project](https://github.com/gofn/gofn) --- # Open Source Contributions - December 2016 **URL**: https://avelino.run/foss/2016/12/ **Published**: 2016-12-01 **Word Count**: 565 words **Summary**: December 2016 saw 8 repositories contributing 55 events, including 33 pull requests and 17 issues, showcasing active development and collaboration. In December 2016, the development community made significant strides across 8 repositories, contributing a total of 55 events. This timeline highlights key contributions, including 33 pull requests and 17 issues, reflecting the collaborative spirit and ongoing improvements within the projects. ## 2016-12-29 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [ORDER BY](https://github.com/prest/prest/pull/59#pullrequestreview-14622112) (Approved) ## 2016-12-28 - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [Support docker volume](https://github.com/gofn/gofn/issues/8) - 🐛 Opened issue in [gofn/gofn](https://github.com/gofn/gofn): [Digital Ocean support](https://github.com/gofn/gofn/issues/7) ## 2016-12-27 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Migration](https://github.com/prest/prest/pull/57#pullrequestreview-14423583) (Approved) ## 2016-12-23 - 🔀 Opened PR in [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): [added @nuveo](https://github.com/lerrua/remote-jobs-brazil/pull/86) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Mock postgresql data base](https://github.com/prest/prest/issues/55) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Migrations - manage data structure within the database ](https://github.com/prest/prest/issues/53) ## 2016-12-20 - ✅ Reviewed PR in [prest/prest](https://github.com/prest/prest): [Conf file](https://github.com/prest/prest/pull/47#pullrequestreview-13676994) (Approved) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Process view](https://github.com/prest/prest/issues/51) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Select fields (I don't need all the fields)](https://github.com/prest/prest/issues/50) ## 2016-12-12 - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [move DataOut to provision package](https://github.com/gofn/gofn/pull/4) - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [Build image](https://github.com/gofn/gofn/pull/3) - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [start the provider architecture](https://github.com/gofn/gofn/pull/2) ## 2016-12-11 - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [added aur (repository) url](https://github.com/avelino/aur/pull/9) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [create aur package manager helper](https://github.com/avelino/aur/pull/8) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [Pkgbuild](https://github.com/avelino/aur/pull/7) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [Fixed install](https://github.com/avelino/aur/pull/6) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [added pacman support](https://github.com/avelino/aur/pull/5) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [writting documentation used](https://github.com/avelino/aur/pull/4) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [update descrition project](https://github.com/avelino/aur/pull/3) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [install via cURL](https://github.com/avelino/aur/pull/2) - 🔀 Opened PR in [avelino/aur](https://github.com/avelino/aur): [initial version aur package](https://github.com/avelino/aur/pull/1) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Revert "create table on docker to run test more easy"](https://github.com/prest/prest/pull/39) - 🔀 Opened PR in [gofn/gofn](https://github.com/gofn/gofn): [beginning of the idea](https://github.com/gofn/gofn/pull/1) ## 2016-12-07 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Remove tip version](https://github.com/prest/prest/pull/29) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Fixed travisci](https://github.com/prest/prest/pull/28) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [remove clean space and set PREST_* vars](https://github.com/prest/prest/pull/27) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Postgres support hosting](https://github.com/prest/prest/pull/26) - 💬 Reviewed PR in [prest/prest](https://github.com/prest/prest): [dockerize prest](https://github.com/prest/prest/pull/24#pullrequestreview-11813812) (Commented) ## 2016-12-06 - 🔀 Opened PR in [nuveo/nuance](https://github.com/nuveo/nuance): [added readme sample used docker](https://github.com/nuveo/nuance/pull/6) - 🔀 Opened PR in [nuveo/nuance](https://github.com/nuveo/nuance): [initial docker environment](https://github.com/nuveo/nuance/pull/5) - 🔀 Opened PR in [nuveo/nuance](https://github.com/nuveo/nuance): [added vendor on omnipage](https://github.com/nuveo/nuance/pull/4) - 🔀 Opened PR in [nuveo/nuance](https://github.com/nuveo/nuance): [Omnipage vendor](https://github.com/nuveo/nuance/pull/3) - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [update negroni path](https://github.com/avelino/awesome-go/pull/1208) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Providing initial data for models](https://github.com/prest/prest/issues/23) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [pool database connection](https://github.com/prest/prest/issues/22) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [migrate glide to govendor](https://github.com/editor-bootstrap/vim-bootstrap/issues/226) ## 2016-12-05 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [JSONb filter support](https://github.com/prest/prest/issues/20) ## 2016-12-04 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [RPC support](https://github.com/prest/prest/issues/18) ## 2016-12-02 - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [Readme example used](https://github.com/prest/prest/pull/15) - 🔀 Opened PR in [prest/prest](https://github.com/prest/prest): [added Install/Run on README](https://github.com/prest/prest/pull/11) - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [UI config to toggle whether user email shows up in Explore Users](https://github.com/go-gitea/gitea/pull/336) - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Fixed project name on setting module key APP_NAME](https://github.com/go-gitea/gitea/pull/335) - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Fixed project name on scripts](https://github.com/go-gitea/gitea/pull/334) - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Fixed project name on base template head](https://github.com/go-gitea/gitea/pull/333) - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Fixed project name on repo template mail](https://github.com/go-gitea/gitea/pull/332) - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Fixed project name on repo template hook settings](https://github.com/go-gitea/gitea/pull/331) - 🔀 Opened PR in [nuveo/nuance](https://github.com/nuveo/nuance): [Omnipage update sample](https://github.com/nuveo/nuance/pull/2) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Send prest (repo) to awesome-go](https://github.com/prest/prest/issues/14) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Not run test on gocover](https://github.com/prest/prest/issues/13) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [TOML config file](https://github.com/prest/prest/issues/12) - 🐛 Opened issue in [go-gitea/gitea](https://github.com/go-gitea/gitea): [Send gitea (repo) to awesome-go](https://github.com/go-gitea/gitea/issues/337) ## 2016-12-01 - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Auth via JWT](https://github.com/prest/prest/issues/5) - 🐛 Opened issue in [prest/prest](https://github.com/prest/prest): [Renderer type, xml support](https://github.com/prest/prest/issues/4) ## Commits - 🔨 Push to [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): 1 commit(s) - [See commits](https://github.com/lerrua/remote-jobs-brazil/commits?author=avelino&since=2016-12-01T00:00:00Z&until=2016-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # O que é responsabilidade? **URL**: https://avelino.run/quote/o-que-%C3%A9-responsabilidade/ **Published**: 2016-11-01 **Tags**: errar é humano, erro, autonomia, responsabilidade **Word Count**: 51 words ![Responsabilidade pela sua vida](/blog/responsabilidade-pela-vida-640x360-2019-11-01.png "Responsabilidade pela sua vida") Responder por suas ações e consequências dos seus atos! Se você não pode responder pela ação que você toma volte pensar no que você anda fazendo. Errar é humano, passar a mão na cabeça de quem erra e lidar como nada tivesse acontecido, é justificar o erro como um acerto. [https://www.facebook.com/avelino.profile/posts/10154545252728726](https://www.facebook.com/avelino.profile/posts/10154545252728726 "https://www.facebook.com/avelino.profile/posts/10154545252728726") --- # Open Source Contributions - November 2016 **URL**: https://avelino.run/foss/2016/11/ **Published**: 2016-11-01 **Word Count**: 246 words **Summary**: November 2016 saw 8 repositories contribute 10 pull requests and 5 issues, marking a month of significant collaboration and development. In November 2016, the open-source community experienced notable activity across various repositories. With 10 pull requests and 5 issues logged, this month highlighted the ongoing collaborative efforts and improvements being made. Below is a timeline detailing the key contributions and events that shaped this period. ## 2016-11-23 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap-updater](https://github.com/editor-bootstrap/vim-bootstrap-updater): [set default encoding to utf8](https://github.com/editor-bootstrap/vim-bootstrap-updater/pull/10) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap-updater](https://github.com/editor-bootstrap/vim-bootstrap-updater): [used HEADERS on get_available_langs](https://github.com/editor-bootstrap/vim-bootstrap-updater/pull/9) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap-updater](https://github.com/editor-bootstrap/vim-bootstrap-updater): [set headers on generate vimrc request](https://github.com/editor-bootstrap/vim-bootstrap-updater/pull/8) - 🔀 Opened PR in [remy/mit-license](https://github.com/remy/mit-license): [Add @avelino license page](https://github.com/remy/mit-license/pull/956) ## 2016-11-13 - 🔀 Opened PR in [tsuru/now](https://github.com/tsuru/now): [added option -pi (or --private-ip)](https://github.com/tsuru/now/pull/51) ## 2016-11-08 - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [replace Gogs to Gitea on locale files](https://github.com/go-gitea/gitea/pull/113) - 🔀 Opened PR in [go-gitea/gitea](https://github.com/go-gitea/gitea): [update copyright gitea license](https://github.com/go-gitea/gitea/pull/112) ## 2016-11-06 - 🔀 Opened PR in [gopherconbr/2016-talks](https://github.com/gopherconbr/2016-talks): [avelino's talk](https://github.com/gopherconbr/2016-talks/pull/3) ## 2016-11-05 - 🔀 Opened PR in [tsuru/tsuru](https://github.com/tsuru/tsuru): [writting basic configuration experimental installer for DigitalOcean](https://github.com/tsuru/tsuru/pull/1486) - 🐛 Opened issue in [tsuru/tsuru](https://github.com/tsuru/tsuru): ["No such file or directory" to copy the certificate on tsuru experimental installer](https://github.com/tsuru/tsuru/issues/1488) - 🐛 Opened issue in [tsuru/tsuru](https://github.com/tsuru/tsuru): [ssh timeout on experimental installer with digitalocean drive](https://github.com/tsuru/tsuru/issues/1487) ## 2016-11-04 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Auto update If send PR](https://github.com/editor-bootstrap/vim-bootstrap/issues/215) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [write test of Go software ](https://github.com/editor-bootstrap/vim-bootstrap/issues/214) ## 2016-11-03 - 🐛 Opened issue in [vieux/gocover.io](https://github.com/vieux/gocover.io): [replace martini (the martini framework is no longer maintained)](https://github.com/vieux/gocover.io/issues/25) ## 2016-11-01 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Golang](https://github.com/editor-bootstrap/vim-bootstrap/pull/210) ## Commits - 🔨 Push to [remy/mit-license](https://github.com/remy/mit-license): 1 commit(s) - [See commits](https://github.com/remy/mit-license/commits?author=avelino&since=2016-11-01T00:00:00Z&until=2016-11-30T23:59:59Z) - 🔨 Push to [tsuru/now](https://github.com/tsuru/now): 1 commit(s) - [See commits](https://github.com/tsuru/now/commits?author=avelino&since=2016-11-01T00:00:00Z&until=2016-11-30T23:59:59Z) - 🔨 Push to [gopherconbr/2016-talks](https://github.com/gopherconbr/2016-talks): 1 commit(s) - [See commits](https://github.com/gopherconbr/2016-talks/commits?author=avelino&since=2016-11-01T00:00:00Z&until=2016-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - October 2016 **URL**: https://avelino.run/foss/2016/10/ **Published**: 2016-10-01 **Word Count**: 91 words **Summary**: Explore October 2016's contributions with 4 repositories, including a notable pull request and 3 issues addressing key improvements. October 2016 marked an active month in contributions, showcasing significant developments across four repositories. This timeline highlights the major activities, including a notable pull request and various issues raised, emphasizing the collaborative efforts to enhance these projects. ## 2016-10-14 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Convert vim-bootstrap package to Go](https://github.com/editor-bootstrap/vim-bootstrap/issues/208) - 🐛 Opened issue in [asaskevich/govalidator](https://github.com/asaskevich/govalidator): ["valid" need to be first parameter?](https://github.com/asaskevich/govalidator/issues/159) ## 2016-10-11 - 🐛 Opened issue in [gogs/gogs](https://github.com/gogs/gogs): [Error remover user of organization ](https://github.com/gogs/gogs/issues/3752) ## 2016-10-10 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Markdown to html, generate page to awesome-go.com](https://github.com/avelino/awesome-go/pull/1127) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2016 **URL**: https://avelino.run/foss/2016/09/ **Published**: 2016-09-01 **Word Count**: 74 words **Summary**: September 2016 saw 3 key contributions across 3 repositories, enhancing Homebrew and freeCodeCamp projects with new features and documentation. In September 2016, a total of 3 contributions were made across 3 repositories, focusing on enhancing user experience and documentation. This timeline highlights significant issues opened, showcasing community engagement and continuous improvement in projects like Homebrew and freeCodeCamp. ## 2016-09-08 - 🐛 Opened issue in [Homebrew/homebrew-cask](https://github.com/Homebrew/homebrew-cask): [Added mpv](https://github.com/Homebrew/homebrew-cask/issues/24349) ## 2016-09-06 - 🐛 Opened issue in [Homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core): [install tmux on 10.12](https://github.com/Homebrew/homebrew-core/issues/4568) ## 2016-09-03 - 🐛 Opened issue in [freeCodeCamp/devdocs](https://github.com/freeCodeCamp/devdocs): [Added Go Language Doc](https://github.com/freeCodeCamp/devdocs/issues/478) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - August 2016 **URL**: https://avelino.run/foss/2016/08/ **Published**: 2016-08-01 **Word Count**: 145 words **Summary**: August 2016 saw 4 repositories, 4 pull requests, and 4 issues, marking a productive month with significant contributions and enhancements. In August 2016, contributors engaged actively across multiple repositories, resulting in notable advancements such as new features and issue tracking. This timeline highlights key events, including pull requests and issues opened, showcasing the collaborative efforts that propelled project development forward. ## 2016-08-16 - 🐛 Opened issue in [github-linguist/linguist](https://github.com/github-linguist/linguist): [Added Dut Lang](https://github.com/github-linguist/linguist/issues/3155) ## 2016-08-13 - 🔀 Opened PR in [dut-lang/dut](https://github.com/dut-lang/dut): [added travis support](https://github.com/dut-lang/dut/pull/3) - 🔀 Opened PR in [dut-lang/dut](https://github.com/dut-lang/dut): [create gitignore file](https://github.com/dut-lang/dut/pull/2) - 🔀 Opened PR in [dut-lang/dut](https://github.com/dut-lang/dut): [Fixed warning from gcc on squirrel build](https://github.com/dut-lang/dut/pull/1) - 🔀 Opened PR in [albertodemichelis/squirrel](https://github.com/albertodemichelis/squirrel): [Fixed code style, remove the warning from gcc](https://github.com/albertodemichelis/squirrel/pull/70) - 🐛 Opened issue in [dut-lang/dut](https://github.com/dut-lang/dut): [Automatically identify the compiler Installer (GCC or CLANG)](https://github.com/dut-lang/dut/issues/4) - 🐛 Opened issue in [albertodemichelis/squirrel](https://github.com/albertodemichelis/squirrel): [warning: this ‘if’ clause does not guard on sqapi.cpp](https://github.com/albertodemichelis/squirrel/issues/69) ## 2016-08-07 - 🐛 Opened issue in [cobrateam/splinter](https://github.com/cobrateam/splinter): [support screenshot of element](https://github.com/cobrateam/splinter/issues/500) ## Commits - 🔨 Push to [albertodemichelis/squirrel](https://github.com/albertodemichelis/squirrel): 3 commit(s) - [See commits](https://github.com/albertodemichelis/squirrel/commits?author=avelino&since=2016-08-01T00:00:00Z&until=2016-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # prestd - PostgreSQL and REST, low-code **URL**: https://avelino.run/projects/prestd/ **Published**: 2016-07-17 **Tags**: postgres, rest, restful, api, golang, open source **Word Count**: 46 words [prestd](https://github.com/prest/prest) PostgreSQL ➕ REST, low-code, simplify and accelerate development, ⚡ instant, realtime, high-performance on any Postgres application, existing or new. ![prestd - PostgreSQL ➕ REST, low-code](https://avatars.githubusercontent.com/u/30427128) ## Problem There is PostgREST written in Haskell, but keeping Haskell software in production is not an easy job. With this need pREST was born. [read more...](https://github.com/prest/prest/issues/41). --- # Open Source Contributions - July 2016 **URL**: https://avelino.run/foss/2016/07/ **Published**: 2016-07-01 **Word Count**: 124 words **Summary**: Explore July 2016's contributions with 5 repositories, 1 pull request, and 5 issues, showcasing community engagement and project development. July 2016 marked a significant month for contributions across multiple repositories, highlighting community efforts in project development. The timeline below details key activities, including a pull request aimed at improving documentation and several issues opened to enhance package management for vim-bootstrap and testing for bottle-beaker, reflecting active collaboration and ongoing improvements. ## 2016-07-20 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Create fedora package vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap/issues/199) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Create debian/ubuntu package vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap/issues/198) ## 2016-07-15 - 🔀 Opened PR in [Kozea/flipflop](https://github.com/Kozea/flipflop): [move README file to reStructuredText](https://github.com/Kozea/flipflop/pull/8) ## 2016-07-13 - 🐛 Opened issue in [bottlepy/bottle-beaker](https://github.com/bottlepy/bottle-beaker): [Write test](https://github.com/bottlepy/bottle-beaker/issues/2) - 🐛 Opened issue in [bbangert/beaker](https://github.com/bbangert/beaker): [Beaker's mongodb extension](https://github.com/bbangert/beaker/issues/107) ## 2016-07-05 - 🐛 Opened issue in [Cayan/docker-opentibia](https://github.com/Cayan/docker-opentibia): [You think about finish? ](https://github.com/Cayan/docker-opentibia/issues/1) ## Commits - 🔨 Push to [Kozea/flipflop](https://github.com/Kozea/flipflop): 2 commit(s) - [See commits](https://github.com/Kozea/flipflop/commits?author=avelino&since=2016-07-01T00:00:00Z&until=2016-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - June 2016 **URL**: https://avelino.run/foss/2016/06/ **Published**: 2016-06-01 **Word Count**: 75 words **Summary**: June 2016 saw significant contributions with 2 repos engaged, including a new pull request and an issue opened, highlighting ongoing development efforts. Welcome to the June 2016 contributions timeline. This month featured notable activities across two repositories, including a pull request aimed at enhancing Python compatibility and an issue addressing SMTP configurations for email aliases. Explore the details of these contributions below. ## 2016-06-29 - 🐛 Opened issue in [nylas/nylas-mail](https://github.com/nylas/nylas-mail): [smtp per alias](https://github.com/nylas/nylas-mail/issues/2533) ## 2016-06-26 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap-updater](https://github.com/editor-bootstrap/vim-bootstrap-updater): [Some linux distributions come with Python 3 native (not coming more P…](https://github.com/editor-bootstrap/vim-bootstrap-updater/pull/7) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - May 2016 **URL**: https://avelino.run/foss/2016/05/ **Published**: 2016-05-01 **Word Count**: 37 words **Summary**: May 2016 saw a period of minimal contributions with no new repositories, pull requests, or issues, marking a quiet month in project activity. Explore the timeline of May 2016, a month characterized by a lack of contributions, with no new repositories, pull requests, or issues recorded, reflecting a pause in project activity. ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - April 2016 **URL**: https://avelino.run/foss/2016/04/ **Published**: 2016-04-01 **Word Count**: 49 words **Summary**: April 2016 saw significant contributions with 1 issue opened, marking an impactful month for the project. This timeline highlights the key contributions made in April 2016, showcasing the opening of an important issue related to merging the project in vim-bootstrap. Explore the details of this month's activities. ## 2016-04-30 - 🐛 Opened issue in [c4rlo/vimhelp](https://github.com/c4rlo/vimhelp): [merge project in vim-bootstrap](https://github.com/c4rlo/vimhelp/issues/8) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - March 2016 **URL**: https://avelino.run/foss/2016/03/ **Published**: 2016-03-01 **Word Count**: 76 words **Summary**: March 2016 saw 2 active repositories with 2 pull requests opened, highlighting significant contributions to vim-bootstrap and pythonbrasil projects. In March 2016, the development community made notable strides with two active repositories contributing a total of two pull requests. This timeline showcases key contributions, including updates to the vim-bootstrap and pythonbrasil projects, reflecting the ongoing commitment to collaborative improvement in open-source software. ## 2016-03-14 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [set avelino fork repo official vim-bootstrap-updater package](https://github.com/editor-bootstrap/vim-bootstrap/pull/182) ## 2016-03-02 - 🔀 Opened PR in [pythonbrasil/wiki](https://github.com/pythonbrasil/wiki): [adicionado o logo da empresa filmow](https://github.com/pythonbrasil/wiki/pull/58) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - February 2016 **URL**: https://avelino.run/foss/2016/02/ **Published**: 2016-02-01 **Word Count**: 69 words **Summary**: February 2016 saw two active repositories with significant contributions, including two pull requests and a key push event, enhancing project collaboration. Explore the timeline of contributions for February 2016, showcasing the collaborative efforts across two repositories. This month highlights key activities including pull requests and a push event, reflecting the vibrant engagement within the community. ## 2016-02-22 - 🔀 Opened PR in [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): [ network of site sold](https://github.com/lerrua/remote-jobs-brazil/pull/66) ## 2016-02-16 - 🔀 Opened PR in [yask123/AwesomeTwitterAccounts](https://github.com/yask123/AwesomeTwitterAccounts): [added @avelino0](https://github.com/yask123/AwesomeTwitterAccounts/pull/4) ## Commits - 🔨 Push to [lerrua/remote-jobs-brazil](https://github.com/lerrua/remote-jobs-brazil): 1 commit(s) - [See commits](https://github.com/lerrua/remote-jobs-brazil/commits?author=avelino&since=2016-02-01T00:00:00Z&until=2016-02-29T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2016 **URL**: https://avelino.run/foss/2016/01/ **Published**: 2016-01-01 **Word Count**: 89 words **Summary**: January 2016 saw 4 repositories contribute with 2 pull requests and 2 issues opened, marking an active start to the year. Welcome to the January 2016 contribution timeline, where we highlight key activities across four repositories. This month featured two pull requests addressing critical updates and two issues raised for further improvements, showcasing the community's commitment to collaboration and development. ## 2016-01-21 - 🐛 Opened issue in [daylerees/colour-schemes](https://github.com/daylerees/colour-schemes): [emacs support](https://github.com/daylerees/colour-schemes/issues/191) ## 2016-01-17 - 🐛 Opened issue in [tsuru/now](https://github.com/tsuru/now): [E: Unable to locate package linux-image-extra-3.16.0-4-amd64 (debian 8.2)](https://github.com/tsuru/now/issues/39) ## 2016-01-15 - 🔀 Opened PR in [tsuru/tsuru](https://github.com/tsuru/tsuru): [fix license year in all go file](https://github.com/tsuru/tsuru/pull/1337) - 🔀 Opened PR in [dear-github/dear-github](https://github.com/dear-github/dear-github): [add me](https://github.com/dear-github/dear-github/pull/73) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - December 2015 **URL**: https://avelino.run/foss/2015/12/ **Published**: 2015-12-01 **Word Count**: 172 words **Summary**: December 2015 saw 6 repositories contribute 13 events, including 6 pull requests and 5 issues, showcasing significant developer engagement. Explore the timeline of contributions for December 2015, highlighting key activities across 6 repositories. This month featured a total of 13 events, including 6 pull requests and 5 issues, reflecting a vibrant development community and ongoing project enhancements. ## 2015-12-28 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [create docker environment for vim-bootstrap.com](https://github.com/editor-bootstrap/vim-bootstrap/issues/167) ## 2015-12-21 - 🔀 Opened PR in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [used get_main_image_http on `og:image`](https://github.com/quokkaproject/quokka/pull/329) - 🔀 Opened PR in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [New http main image](https://github.com/quokkaproject/quokka/pull/328) ## 2015-12-20 - 🐛 Opened issue in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [AttributeError: is_homepage](https://github.com/quokkaproject/quokka/issues/327) ## 2015-12-16 - 🔀 Opened PR in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [Fix #324 basic sitemap (initial bootstrap)](https://github.com/quokkaproject/quokka/pull/325) ## 2015-12-13 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [remove py25 on tox file](https://github.com/bottlepy/bottle/pull/812) ## 2015-12-12 - 🐛 Opened issue in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [/sitemap.xml (404) Not found ](https://github.com/quokkaproject/quokka/issues/324) - 🐛 Opened issue in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [default settings](https://github.com/quokkaproject/quokka/issues/323) ## 2015-12-09 - 🔀 Opened PR in [go-martini/martini](https://github.com/go-martini/martini): [update pt-br readme, added note "no longer maintained"](https://github.com/go-martini/martini/pull/388) - 🐛 Opened issue in [avelino/bottle-admin](https://github.com/avelino/bottle-admin): [nosql support](https://github.com/avelino/bottle-admin/issues/11) ## 2015-12-05 - 🔀 Opened PR in [FedericoCeratto/bottle-cork](https://github.com/FedericoCeratto/bottle-cork): [Fixed irc bottle channel](https://github.com/FedericoCeratto/bottle-cork/pull/99) ## Commits - 🔨 Push to [go-martini/martini](https://github.com/go-martini/martini): 1 commit(s) - [See commits](https://github.com/go-martini/martini/commits?author=avelino&since=2015-12-01T00:00:00Z&until=2015-12-31T23:59:59Z) - 🔨 Push to [FedericoCeratto/bottle-cork](https://github.com/FedericoCeratto/bottle-cork): 1 commit(s) - [See commits](https://github.com/FedericoCeratto/bottle-cork/commits?author=avelino&since=2015-12-01T00:00:00Z&until=2015-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2015 **URL**: https://avelino.run/foss/2015/11/ **Published**: 2015-11-01 **Word Count**: 100 words **Summary**: November 2015 saw 5 contributions across 5 repositories, including a new pull request and 4 issues, highlighting community engagement and project development. In November 2015, the community made notable strides with a total of 5 contributions across 5 repositories. This timeline showcases the significant activities, including a new pull request and several issues opened, reflecting ongoing collaboration and innovation within the projects. ## 2015-11-29 - 🐛 Opened issue in [djmaze/mailinabox-docker](https://github.com/djmaze/mailinabox-docker): [image mailinabox-docker-base not exist](https://github.com/djmaze/mailinabox-docker/issues/4) ## 2015-11-17 - 🔀 Opened PR in [pythonbrasil/pyBusinesses-BR](https://github.com/pythonbrasil/pyBusinesses-BR): [added filmow.com](https://github.com/pythonbrasil/pyBusinesses-BR/pull/4) ## 2015-11-11 - 🐛 Opened issue in [avelino/cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle): [Create "It worked!" page](https://github.com/avelino/cookiecutter-bottle/issues/7) ## 2015-11-06 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [emacs conf generate power by evil mode](https://github.com/editor-bootstrap/vim-bootstrap/issues/162) ## 2015-11-03 - 🐛 Opened issue in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [Opps CMS import to Quokka](https://github.com/quokkaproject/quokka/issues/316) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - October 2015 **URL**: https://avelino.run/foss/2015/10/ **Published**: 2015-10-01 **Word Count**: 67 words **Summary**: October 2015 saw significant contributions with 3 issues opened across 3 repositories, highlighting ongoing development and collaboration in the open-source community. In October 2015, the open-source community demonstrated active engagement with a total of 3 issues opened across 3 repositories. This timeline captures key contributions and discussions that shaped the month. ## 2015-10-23 - 🐛 Opened issue in [eduardonunesp/sslb](https://github.com/eduardonunesp/sslb): [send PR to awesome-go](https://github.com/eduardonunesp/sslb/issues/2) ## 2015-10-21 - 🐛 Opened issue in [nuveo/speech-to-text](https://github.com/nuveo/speech-to-text): [write the test (mock)](https://github.com/nuveo/speech-to-text/issues/1) ## 2015-10-01 - 🐛 Opened issue in [abbyy/ocrsdk.com](https://github.com/abbyy/ocrsdk.com): [Go language support](https://github.com/abbyy/ocrsdk.com/issues/33) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2015 **URL**: https://avelino.run/foss/2015/09/ **Published**: 2015-09-01 **Word Count**: 107 words **Summary**: September 2015 saw significant contributions with 3 repositories, 1 pull request, and 4 issues, enhancing project collaboration and functionality. Explore the timeline of contributions made in September 2015, highlighting key activities across three repositories. This month featured a notable pull request and several issues aimed at improving functionality and user experience. ## 2015-09-28 - 🐛 Opened issue in [sajari/docconv](https://github.com/sajari/docconv): [read pdf image via tesseract](https://github.com/sajari/docconv/issues/18) ## 2015-09-23 - 🔀 Opened PR in [sajari/docconv](https://github.com/sajari/docconv): [images support via gosseract](https://github.com/sajari/docconv/pull/16) ## 2015-09-22 - 🐛 Opened issue in [sajari/docconv](https://github.com/sajari/docconv): [support in images file](https://github.com/sajari/docconv/issues/14) ## 2015-09-15 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Error when the terminal is compatible with xterm](https://github.com/editor-bootstrap/vim-bootstrap/issues/150) ## 2015-09-05 - 🐛 Opened issue in [sajari/docconv](https://github.com/sajari/docconv): [go-charset/charset not more hosting in google code](https://github.com/sajari/docconv/issues/13) ## Commits - 🔨 Push to [filmow/docker-django-pt-br](https://github.com/filmow/docker-django-pt-br): 8 commit(s) - [See commits](https://github.com/filmow/docker-django-pt-br/commits?author=avelino&since=2015-09-01T00:00:00Z&until=2015-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - August 2015 **URL**: https://avelino.run/foss/2015/08/ **Published**: 2015-08-01 **Word Count**: 79 words **Summary**: August 2015 saw significant activity with 3 repositories receiving 4 contributions, including 1 new pull request and multiple commits enhancing project features. In August 2015, our contributors made notable strides across three repositories, showcasing a total of four contributions. This timeline highlights key events including push activities and a new pull request, reflecting the ongoing commitment to enhancing our projects. ## 2015-08-06 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [create query_field](https://github.com/mining/mining/pull/255) ## Commits - 🔨 Push to [filmow/django-piston-xauth](https://github.com/filmow/django-piston-xauth): 3 commit(s) - [See commits](https://github.com/filmow/django-piston-xauth/commits?author=avelino&since=2015-08-01T00:00:00Z&until=2015-08-31T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 3 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2015-08-01T00:00:00Z&until=2015-08-31T23:59:59Z) - 🔨 Push to [avelino/slides](https://github.com/avelino/slides): 2 commit(s) - [See commits](https://github.com/avelino/slides/commits?author=avelino&since=2015-08-01T00:00:00Z&until=2015-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - July 2015 **URL**: https://avelino.run/foss/2015/07/ **Published**: 2015-07-01 **Word Count**: 95 words **Summary**: July 2015 showcased significant contributions with 4 repositories, 2 pull requests, and 1 issue, driving collaboration and innovation in the coding community. This timeline highlights the key contributions made in July 2015, including important push events and pull requests across four repositories. It reflects the collaborative spirit and ongoing development efforts that mark this month. ## 2015-07-29 - 🐛 Opened issue in [veggiemonk/awesome-docker](https://github.com/veggiemonk/awesome-docker): [tsuru](https://github.com/veggiemonk/awesome-docker/issues/48) ## 2015-07-22 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [create templatetag sh_exist](https://github.com/editor-bootstrap/vim-bootstrap/pull/144) ## 2015-07-03 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [start aggregate action on data rest api](https://github.com/mining/mining/pull/254) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2015-07-01T00:00:00Z&until=2015-07-31T23:59:59Z) - 🔨 Push to [avelino/slides](https://github.com/avelino/slides): 1 commit(s) - [See commits](https://github.com/avelino/slides/commits?author=avelino&since=2015-07-01T00:00:00Z&until=2015-07-31T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 1 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2015-07-01T00:00:00Z&until=2015-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Eu nunca mais vou empreender **URL**: https://avelino.run/eu-nunca-mais-vou-empreender/ **Published**: 2015-06-15 **Tags**: empreender, empreendimento, nunca-mais, ideias, autoconhecimento, auto-evolucao **Word Count**: 710 words ![Empreender é viver novas experiências todos os dias](/empreender.jpg#center) Para quem não me conhece eu tive uma startup durante um tempo e ela foi comprada por uma empresa de fora do Brasil. Logo após a venda da startup eu prometi para mim mesmo que nunca mais empreenderia, sim isso foi um comentário que fiz em um dos meus momentos de reflexão e nunca comentei com ninguém até então. ## Porque eu prometi isso para mim? Empreender não é um processo simples, não existe mar de rosas no caminho do empreendedor e como tudo temos altas e baixas (e por sinal mais baixa do que alta). Eu fui sócio do [Christiano Anderson](https://twitter.com/dump) durante um tempo e ele foi e ainda é uma inspiração para mim como desenvolvedor e empreendedor, passava horas e horas tomando cerveja com ele entendendo algumas tomadas de decisão na vida dele e isso me fez ter ele como uma referência (e por sinal uma ótima referência). Voltando ao motivo, antes de vender à startup meu filho tinha nascido e empreender com uma criança recém-nascida foi um processo complicado, esposa precisando de atenção (mais do que o comum) e eu tendo que desenvolver solução para melhor atender os clientes, nessa fase logicamente que foi uma fase de baixa (poucos clientes). Como em muitos casos não tínhamos planejado ter filho, mas que venha com saúde. ## Á volta para o mercado de trabalho! Quando voltei para o mercado de trabalho queria ter estabilidade dentro da empresa e com isso aceitei algumas condições de trabalho não muito favorável (mas condições que muitas pessoas que mora em São Paulo – Capital aceita), eu andava media de 42 km para ate o escritório, sim 84 km por dia dentro de uma máquina de 4 rodas (chamada carro) e fazia papel de gerente de projeto (para quem não sabe eu tinha certificado PMP, que venceu em 2014 e não tenho a mínima vontade de renovar). Meu dia a dia era mandar e-mail e dar prazo para projeto, sei que isso na área de tecnologia não é muito fácil (mas é o que tem para hoje). Chegava em casa extremamente cansado por ter trabalhado o dia todo e consequentemente ter participado do trânsito de uma megalópole (em São Paulo, você não pega transito e sim participa, é muitas horas para falar que pegou transito). Logicamente que não fiquei muito tempo nessa vida e resolvi procurar outra oportunidade e fui trabalhar home office (remoto) como desenvolvedor. Agora sim cheguei onde eu quero, trabalhando de casa, vendo meu filho crescer, ate ir para PythonBrasil[10] e passar algumas horas conversando com o [Henrique Basto](https://twitter.com/henriquebastos) que me fez algumas perguntas que o [Renzo](https://twitter.com/renzoprobr) e [Bruno Rocha](https://twitter.com/rochacbruno) tinha feito a 1 ano atrás e eu ainda não sabia responder. ## A volta para os empreendedorismos… "Porque você trabalha para os outros ainda? Você não consegue viver da renda do samba (site de conteúdo adulto, [link para +18](http://www.sambaporno.com/))?" Isso fez eu refletir alguns meses e juntar com uma grande vontade que tinha que era sair da Capital e ir morar no interior. Após convence a esposa foi hora de procurar cidade e casa. Lembrei do Cadu que tinha comentado e convidado de eu de vir morar no Vale do Paraíba quando estava trabalhando remoto. Escolhi uma cidade tranquila próximo de SJC para morar com minha família (Caçapava, e viva a Taiada). Sim vamos viver de samba, após 1 mês morando no Vale e empreendendo, o samba me fez sambar, a empresa que mantinha o fluxo do caixa do samba resolveu aplicar algumas regras, que fez o samba não consegui sacar o dinheiro que estava rendendo, sem eu pensar estava novamente empreendendo. Após isso acontecer, comecei pensar que tinha feito a pior escolha da minha vida em ter saído da Capital e vindo morar no Vale, eu não tinha ligado o nome Vale do Paraíba com Vale do Silício. Sim o Vale do Paraíba respira empreendedorismo, principalmente dentro do Parque Tecnológico de SJC. Onde fez eu retomar meu espírito empreendedor e começa novamente empreender. Hoje posso afirma que empreender é viver novas experiências todos os dias e tirar energia de onde você meno espera. Devo muito (mas muito) ao [Cadu](https://twitter.com/cadu_leite) e [Nando](https://twitter.com/luizvital) por algumas horas de bate papo sobre como eles fazem as coisas acontecer dentro da ZNC e experiência de vida empreendedora. --- # Open Source Contributions - June 2015 **URL**: https://avelino.run/foss/2015/06/ **Published**: 2015-06-01 **Word Count**: 132 words **Summary**: June 2015 saw 8 repositories contribute 9 events, highlighting key pushes and issue discussions that shaped ongoing projects. June 2015 was a notable month for contributions across various repositories, with a total of 9 events, including significant pushes and issue discussions. This timeline captures the impactful activities that took place, showcasing the collaborative efforts and developments in the open-source community. ## 2015-06-22 - 🐛 Opened issue in [caddyserver/caddy](https://github.com/caddyserver/caddy): [proxy return "Completed 400 Bad Request"](https://github.com/caddyserver/caddy/issues/159) ## 2015-06-03 - 🔀 Opened PR in [bottlepy/bottle-redis](https://github.com/bottlepy/bottle-redis): [merge clean #8](https://github.com/bottlepy/bottle-redis/pull/9) ## 2015-06-01 - 🐛 Opened issue in [nodejs/node-gyp](https://github.com/nodejs/node-gyp): [support python 3](https://github.com/nodejs/node-gyp/issues/641) - 🐛 Opened issue in [treeio/treeio](https://github.com/treeio/treeio): [Should I use django-dajax or django-dajaxice?](https://github.com/treeio/treeio/issues/148) ## Commits - 🔨 Push to [mining/oml](https://github.com/mining/oml): 22 commit(s) - [See commits](https://github.com/mining/oml/commits?author=avelino&since=2015-06-01T00:00:00Z&until=2015-06-30T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 7 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2015-06-01T00:00:00Z&until=2015-06-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2015-06-01T00:00:00Z&until=2015-06-30T23:59:59Z) - 🔨 Push to [bottlepy/bottle-redis](https://github.com/bottlepy/bottle-redis): 4 commit(s) - [See commits](https://github.com/bottlepy/bottle-redis/commits?author=avelino&since=2015-06-01T00:00:00Z&until=2015-06-30T23:59:59Z) - 🔨 Push to [mining/frontend](https://github.com/mining/frontend): 2 commit(s) - [See commits](https://github.com/mining/frontend/commits?author=avelino&since=2015-06-01T00:00:00Z&until=2015-06-30T23:59:59Z) ## Private contributions - 🔒 5 private contribution(s) this month --- # Open Source Contributions - May 2015 **URL**: https://avelino.run/foss/2015/05/ **Published**: 2015-05-01 **Word Count**: 215 words **Summary**: May 2015 saw 12 repositories contribute 17 impactful events, including 8 pushes and 7 issues, driving collaboration and innovation in the open-source community. Explore the key contributions and activities during May 2015, highlighting the collaborative efforts across 12 repositories. This timeline captures the vibrant push events, open issues, and pull requests that shaped the month. ## 2015-05-27 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Unificate source API get data](https://github.com/mining/mining/issues/245) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Error when working with geo spatial field (postgresql using gis)](https://github.com/mining/mining/issues/244) ## 2015-05-26 - 🐛 Opened issue in [polyglotness/polyglotness](https://github.com/polyglotness/polyglotness): [Congrats validate, how to validate if the user that did?](https://github.com/polyglotness/polyglotness/issues/4) ## 2015-05-20 - 🔀 Opened PR in [adamvduke/mod_interact](https://github.com/adamvduke/mod_interact): [fixed ejabberd initialization was aborted because a module start failed](https://github.com/adamvduke/mod_interact/pull/8) ## 2015-05-11 - 🔀 Opened PR in [ROGUE-JCTD/Arbiter-Android](https://github.com/ROGUE-JCTD/Arbiter-Android): [added new values string pt (Brazilian)](https://github.com/ROGUE-JCTD/Arbiter-Android/pull/100) ## 2015-05-10 - 🐛 Opened issue in [treeio/treeio](https://github.com/treeio/treeio): [Because the use of the jinja2?](https://github.com/treeio/treeio/issues/146) ## 2015-05-09 - 🐛 Opened issue in [treeio/treeio](https://github.com/treeio/treeio): [Django 1.8 compatibility](https://github.com/treeio/treeio/issues/143) ## 2015-05-03 - 🐛 Opened issue in [avelino/hodge](https://github.com/avelino/hodge): [added programming language support](https://github.com/avelino/hodge/issues/2) - 🐛 Opened issue in [caddyserver/caddy](https://github.com/caddyserver/caddy): [Add caddy on awesome-go](https://github.com/caddyserver/caddy/issues/45) ## Commits - 🔨 Push to [avelino/hodge](https://github.com/avelino/hodge): 11 commit(s) - [See commits](https://github.com/avelino/hodge/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 6 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) - 🔨 Push to [avelino/hodge-init](https://github.com/avelino/hodge-init): 3 commit(s) - [See commits](https://github.com/avelino/hodge-init/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) - 🔨 Push to [mining/frontend](https://github.com/mining/frontend): 1 commit(s) - [See commits](https://github.com/mining/frontend/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) - 🔨 Push to [avelino/slides](https://github.com/avelino/slides): 1 commit(s) - [See commits](https://github.com/avelino/slides/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-mongo](https://github.com/bottlepy/bottle-mongo): 1 commit(s) - [See commits](https://github.com/bottlepy/bottle-mongo/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) - 🔨 Push to [ROGUE-JCTD/Arbiter-Android](https://github.com/ROGUE-JCTD/Arbiter-Android): 1 commit(s) - [See commits](https://github.com/ROGUE-JCTD/Arbiter-Android/commits?author=avelino&since=2015-05-01T00:00:00Z&until=2015-05-31T23:59:59Z) ## Private contributions - 🔒 73 private contribution(s) this month --- # Open Source Contributions - April 2015 **URL**: https://avelino.run/foss/2015/04/ **Published**: 2015-04-01 **Word Count**: 256 words **Summary**: April 2015 saw significant contributions with 15 repos, 18 issues opened, and 4 pushes, highlighting the active engagement in the development community. Explore the key contributions and milestones from April 2015, showcasing 15 repositories, 18 newly opened issues, and ongoing collaboration efforts that shaped the month. ## 2015-04-28 - 🐛 Opened issue in [uiri/toml](https://github.com/uiri/toml): [New release 0.4.0](https://github.com/uiri/toml/issues/36) ## 2015-04-27 - 🐛 Opened issue in [vijinho/beautifully-simple-static-blog](https://github.com/vijinho/beautifully-simple-static-blog): [yaml (and/or ini) file config](https://github.com/vijinho/beautifully-simple-static-blog/issues/1) ## 2015-04-23 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [test duplicate link](https://github.com/avelino/awesome-go/issues/364) ## 2015-04-18 - 🐛 Opened issue in [cadu-leite/python-people](https://github.com/cadu-leite/python-people): [Upgrade Django to 1.8](https://github.com/cadu-leite/python-people/issues/30) - 🐛 Opened issue in [cadu-leite/python-people](https://github.com/cadu-leite/python-people): [Create readme file](https://github.com/cadu-leite/python-people/issues/29) - 🐛 Opened issue in [cadu-leite/python-people](https://github.com/cadu-leite/python-people): [create requirements file](https://github.com/cadu-leite/python-people/issues/28) ## 2015-04-16 - 🐛 Opened issue in [vim-awesome/vim-awesome](https://github.com/vim-awesome/vim-awesome): [API consumption in vim-bootstrap.com](https://github.com/vim-awesome/vim-awesome/issues/65) ## 2015-04-15 - 🐛 Opened issue in [znc-sistemas/odoo-project-git](https://github.com/znc-sistemas/odoo-project-git): [use python-dateutil](https://github.com/znc-sistemas/odoo-project-git/issues/4) ## 2015-04-13 - 🔀 Opened PR in [avelino/awesome-go](https://github.com/avelino/awesome-go): [added Slugify package (alternative)](https://github.com/avelino/awesome-go/pull/344) ## 2015-04-12 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Remove use of the frontend](https://github.com/mining/mining/issues/241) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Used elasticsearch-dsl-py on Elastic adapter](https://github.com/mining/mining/issues/240) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Django 1.8 compatibility](https://github.com/opps/opps/issues/470) ## 2015-04-11 - 🐛 Opened issue in [jbochi/hackaton_rank](https://github.com/jbochi/hackaton_rank): [Added used languages tags](https://github.com/jbochi/hackaton_rank/issues/4) ## 2015-04-10 - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [package for Debian](https://github.com/avelino/rdio-linux/issues/16) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [package for Arch Linux](https://github.com/avelino/rdio-linux/issues/15) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [package for Gentoo](https://github.com/avelino/rdio-linux/issues/14) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [support python 2 and 3](https://github.com/avelino/rdio-linux/issues/13) ## 2015-04-08 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Check package name on Debian](https://github.com/editor-bootstrap/vim-bootstrap/issues/131) ## 2015-04-01 - 🔀 Opened PR in [ripienaar/free-for-dev](https://github.com/ripienaar/free-for-dev): [added conversation (call) topic](https://github.com/ripienaar/free-for-dev/pull/106) - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Review all lib hosting in Google Code](https://github.com/avelino/awesome-go/issues/328) ## Commits - 🔨 Push to [avelino/hodge](https://github.com/avelino/hodge): 9 commit(s) - [See commits](https://github.com/avelino/hodge/commits?author=avelino&since=2015-04-01T00:00:00Z&until=2015-04-30T23:59:59Z) - 🔨 Push to [avelino/slugify](https://github.com/avelino/slugify): 9 commit(s) - [See commits](https://github.com/avelino/slugify/commits?author=avelino&since=2015-04-01T00:00:00Z&until=2015-04-30T23:59:59Z) - 🔨 Push to [avelino/hodge-init](https://github.com/avelino/hodge-init): 7 commit(s) - [See commits](https://github.com/avelino/hodge-init/commits?author=avelino&since=2015-04-01T00:00:00Z&until=2015-04-30T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 3 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2015-04-01T00:00:00Z&until=2015-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Church Vim **URL**: https://avelino.run/church-vim/ **Published**: 2015-03-30 **Tags**: saint, vim, church, editor **Word Count**: 310 words ![Church Vim](/church-vim.gif#center) Vim was originally an extensible text editor written by Bram Moolenaar, but it became a way of life and a religion. To join the Church of Vim, you need only pronounce the Confession of the Faith: There is no system but GNU, and Linux is one of its kernels. Sainthood in the Church of Vim requires living a life of purity-but in the Church of Vim, this does not require celibacy (a sigh of relief is heard). Being holy in our church means exorcizing whatever evil, proprietary operating systems have possessed computers that are under your control, or set up for your regular use; installing a holy (i.e., wholly) free operating system (GNU/Linux is a good choice); and using and installing only free software with and on the system. Note that tablets and mobile phones are computers and this vow includes them. Join the Church of Vim, and you too can be a saint! People sometimes ask if St IGNUcius is wearing an old computer disk platter. That is no computer disk, that is my halo — but it was a disk platter in a former life. No information is available about what kind of computer it came from or what data was stored on it. However, you can rest assured that no non-free software is readable from it today. In addition to saints, the Church of Vim also has a [hymn](http://www.gnu.org/music/free-software-song.html) - the Free Software Song. (No gods yet, though.) Hear the song [sung](http://www.gnu.org/music/free-software-song.au) by Saint IGNUcius himself. Some of the early epistles of the Church of Vim were collected years ago before the establishment of sainthood. Saint IGNUcius says: Some people don't realize that Saint IGNUcius is Saint IGNUcius's way of not taking himself too seriously. Therefore, Warning: taking the Church of Vim (or any church) too seriously may be hazardous to your health. Inspired by [St IGNUcius](https://stallman.org/saint.html) --- # Cron dentro do Django com Celery **URL**: https://avelino.run/cron-dentro-do-django-com-celery/ **Published**: 2015-03-30 **Tags**: celery, django, python **Word Count**: 486 words Ontem na parte da noite conversando com um conhecido ele falou que estava usando em um projeto o Celery, como ainda não conhecia vamos estudar este projeto. Gostei da forma que ele trabalha e como ele integra com o Django. | Tenho em um projeto uma fila de processamento só que foi desenvolvido por mim e não tem todos os recursos que o Celery tem. Vou explicar como usar o Celery com o Django em um exemplo simples, e como sempre basta usar a criatividade para desenvolver a sua necessidade. Primeiramente temos que instalar dois pacotes Python para que possamos trabalhar com o Celery no Django, o django-celery e ghettoq. Caso tenhamos o easy_install instalado basta instalar os pacotes da seguinte forma: ```shell easy_install django-celery easy_install ghettoq ``` Caso não tenha o `easy_install` precisamos instalar: ```shell cd /usr/src/ git clone http://github.com/ask/django-celery.git cd django-celery python setup.py build python setup.py install cd .. git clone http://github.com/ask/ghettoq cd ghettoq python setup.py build python setup.py install ``` Após instalar vamos criar um projeto para que possamos trabalhar com o Celery nele. ```shell django-admin.py startproject celerytest cd celerytest ``` Vamos editar o settings.py: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'test', } } ... CARROT_BACKEND = "ghettoq.taproot.Database" INSTALLED_APPS = ( ... 'djcelery', 'ghettoq', ) ``` Após declarar qual biblioteca o projeto em Django vai carregar podemos sincronizar o nosso database: ```shell python manage.py syncdb ``` Temos que criar um arquivo chamado tasks.py, esse arquivo trabalha como o models de uma aplicação: ```python from celery.task.schedules import crontab from celery.decorators import periodic_task # this will run every minute, see http://celeryproject.org/docs/reference/celery.task.schedules.html#celery.task.schedules.crontab @periodic_task(run_every=crontab(hour="*", minute="*", day_of_week="*")) def test(): print "Tarefa de teste..." ``` Agora temos que dar start em nosso daemon Celery: ```shell python manage.py celeryd -v 2 -B -s celery -E -l INFO 2010-10-19 05:34:44,215: WARNING/MainProcess] celery@program-8 v2.1.1 is starting. [2010-10-19 05:34:44,216: WARNING/MainProcess] /usr/local/lib/python2.6/dist-packages/celery-2.1.1-py2.6.egg/celery/apps/ worker.py:105: UserWarning: Running celeryd with superuser privileges is not encouraged! "Running celeryd with superuser privileges is not encouraged!") [2010-10-19 05:34:44,216: WARNING/MainProcess] /usr/local/lib/python2.6/dist-packages/celery-2.1.1-py2.6.egg/celery/apps/ worker.py:108: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in a production environment! warnings.warn("Using settings.DEBUG leads to a memory leak, " [2010-10-19 05:34:44,222: WARNING/MainProcess] Configuration -> . broker -> ghettoq.taproot.Database://guest@localhost/ . queues -> . celery -> exchange:celery (direct) binding:celery . concurrency -> 2 . loader -> djcelery.loaders.DjangoLoader . logfile -> [stderr]@INFO . events -> ON . beat -> ON . tasks -> . celerytest.lol.tasks.test [2010-10-19 05:34:44,238: INFO/PoolWorker-2] child process calling self.run() [2010-10-19 05:34:44,239: INFO/PoolWorker-3] child process calling self.run() [2010-10-19 05:34:44,241: WARNING/MainProcess] celery@program-8 has started. [2010-10-19 05:34:44,241: INFO/Beat] child process calling self.run() [2010-10-19 05:34:44,241: INFO/Beat] Celerybeat: Starting... [2010-10-19 05:35:00,537: INFO/MainProcess] Got task from broker: celerytest.lol.tasks.test[22d15af7-8fe9-4acd-bdde-06265004eb50] [2010-10-19 05:35:00,760: WARNING/PoolWorker-3] firing test task [2010-10-19 05:35:01,088: INFO/MainProcess] Task celerytest.lol.tasks.test[22d15af7-8fe9-4acd-bdde-06265004eb50] processed: None ``` Pronto ele esta rodando. O [Celery](http://celeryproject.org/) é um projeto muito bom só que ainda estamos enfrentando alguns bugs com processos pesado o pior que ele para de processar e não esta dando nem um retorno, por isso antes colocar em produção teste sua aplicação onde o Celery vai rodar. --- # Open Source Contributions - March 2015 **URL**: https://avelino.run/foss/2015/03/ **Published**: 2015-03-01 **Word Count**: 218 words **Summary**: March 2015 saw 9 repositories with 16 contributions, including 5 open pull requests and 5 new issues, showcasing active development and collaboration. Explore the timeline of contributions made in March 2015, highlighting significant developments across 9 repositories. This month featured 16 total contributions, including 5 open pull requests and 5 new issues, reflecting a vibrant community of developers actively enhancing their projects. ## 2015-03-31 - 🔀 Opened PR in [cadu-leite/bitbucket_issues_to_odoo_tasks](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks): [Used click](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks/pull/6) - 🔀 Opened PR in [cadu-leite/bitbucket_issues_to_odoo_tasks](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks): [set python env and encoding utf8](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks/pull/5) - 🔀 Opened PR in [cadu-leite/bitbucket_issues_to_odoo_tasks](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks): [added direct link download BitBucket json settings](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks/pull/4) - 🐛 Opened issue in [rust-lang/rust.vim](https://github.com/rust-lang/rust.vim): [Help put rust in vim-bootstrap.com](https://github.com/rust-lang/rust.vim/issues/17) ## 2015-03-24 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [send notification on crash build to IRC #bottlepy](https://github.com/bottlepy/bottle/pull/743) - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [bottle-boilerplate, structure (MVC) for anyone who wants to use bottle](https://github.com/bottlepy/bottle/issues/742) ## 2015-03-16 - 🐛 Opened issue in [golang/go](https://github.com/golang/go): [present: what Repo in github go.tools/present](https://github.com/golang/go/issues/10174) ## 2015-03-09 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Fix tutorial app routes syntax to bottle 0.10+](https://github.com/bottlepy/bottle/pull/729) - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [What's next for novelty (future project, evolution is necessary)?](https://github.com/bottlepy/bottle/issues/730) ## 2015-03-06 - 🐛 Opened issue in [olivere/elastic](https://github.com/olivere/elastic): [Not populate struct on search](https://github.com/olivere/elastic/issues/49) ## Commits - 🔨 Push to [cadu-leite/bitbucket_issues_to_odoo_tasks](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks): 9 commit(s) - [See commits](https://github.com/cadu-leite/bitbucket_issues_to_odoo_tasks/commits?author=avelino&since=2015-03-01T00:00:00Z&until=2015-03-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2015-03-01T00:00:00Z&until=2015-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 4 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2015-03-01T00:00:00Z&until=2015-03-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 3 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2015-03-01T00:00:00Z&until=2015-03-31T23:59:59Z) - 🔨 Push to [avelino/slides](https://github.com/avelino/slides): 2 commit(s) - [See commits](https://github.com/avelino/slides/commits?author=avelino&since=2015-03-01T00:00:00Z&until=2015-03-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2015-03-01T00:00:00Z&until=2015-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Castalio - Episódio 63: Thiago Avelino - vim-bootstrap e BeerBlogging **URL**: https://avelino.run/castalio-epis%C3%B3dio-63-thiago-avelino-vim-bootstrap-e-beerblogging/ **Published**: 2015-02-15 **Tags**: podcast, castalio-podcast, opensource, open source, vim-bootstrap, beerblogging **Word Count**: 11 words Escute minha participação no [Castalio Podcast](https://castalio.info/episodio-63-thiago-avelino-vim-bootstrap-e-beerblogging.html) falando sobre [vim-bootstrap](https://vim-bootstrap.com/) e [BeerBlogging](https://github.com/avelino/beerblogging): {{< podcast "https://archive.org/embed/castalio-podcast-63" >}} --- # Castalio - Episódio 64: Thiago Avelino - OpenMining e SambaPorno **URL**: https://avelino.run/castalio-epis%C3%B3dio-64-thiago-avelino-openmining-e-sambaporno/ **Published**: 2015-02-15 **Tags**: podcast, castalio-podcast, opensource, open source, openmining, sambaporno, papo-de-startup, startup **Word Count**: 15 words Escute minha participação no [Castalio Podcast](https://castalio.info/episodio-64-thiago-avelino-openmining-e-sambaporno.html) falando sobre [OpenMining](https://github.com/mining/mining) e **SambaPorno** (**ATENÇÃO:** _Conteúdo Pornográfico EXPLÍCITO_): {{< podcast "https://archive.org/embed/castalio-podcast-64" >}} --- # Encerrando Ciclos, viva no presente, não se paralise pelo passado **URL**: https://avelino.run/encerrando-ciclos-viva-no-presente-n%C3%A3o-se-paralise-pelo-passado/ **Published**: 2015-02-15 **Tags**: ciclos, presente, passado, futuro, reflexao, meditacao **Word Count**: 574 words ![Momento de reflexão, são extremamente importantes](/meditacao.jpg#center) Nós da área de tecnologia passamos muito por encerramento de ciclos, resolvi escrever um blogpost não técnico para retratar alguns pontos importantes na hora de fecharmos nossos ciclos. Não estou escrevendo uma ciência exata, acho extremamente importante após ler o blogpost você pare para pensar o que acha certo ou errado, e sinta-se livre para comentar. Sempre é preciso saber quando uma etapa chega ao final. Se insistirmos em permanecer nela mais do que o tempo necessário, perdemos a alegria e o sentido das outras etapas que precisamos viver. Encerrando ciclos, fechando portas, terminando capítulos - não importa o nome que damos, o que importa é deixar no passado os momentos da vida que já se acabaram. - *Foi despedido do trabalho? Terminou uma relação?* - *Deixou a casa dos pais? Partiu para viver em outro país?* - *A amizade tão longamente cultivada desapareceu sem explicações?* Você pode passar muito tempo se perguntando por que isso aconteceu. Pode dizer para si mesmo que não dará mais um passo enquanto não entender as razões que levaram certas coisas, que eram tão importantes e sólidas em sua vida, serem subitamente transformadas em pó. Mas tal atitude será um desgaste imenso para todos: seus pais, seu marido ou sua esposa, seus amigos, seus filhos, sua irmã, todos estarão encerrando capítulos, virando a folha, seguindo adiante, e todos sofrerão ao ver que você está parado. Ninguém pode estar ao mesmo tempo no presente e no passado, nem mesmo quando tentamos entender as coisas que acontecem conosco. O que passou não voltará: não podemos ser eternamente meninos, adolescentes tardios, filhos que se sentem culpados ou rancorosos com os pais, amantes que revivem noite e dia uma ligação com quem já foi embora e não tem a menor intenção de voltar. As coisas passam, e o melhor que fazemos é deixar que elas realmente possam ir embora. Por isso é tão importante (por mais doloroso que seja!) destruir recordações, mudar de casa, dar muitas coisas para orfanatos, vender ou doar os livros que tem. Tudo neste mundo visível é uma manifestação do mundo invisível, do que está acontecendo em nosso coração - e o desfazer-se de certas lembranças significa também abrir espaço para que outras tomem o seu lugar. Deixar ir embora. Soltar. Desprender-se. Ninguém está jogando nesta vida com cartas marcadas, portanto às vezes ganhamos, e às vezes perdemos. Não espere que devolvam algo, não espere que reconheçam seu esforço, que descubram seu gênio, que entendam seu amor. Pare de ligar sua televisão emocional e assistir sempre ao mesmo programa, que mostra como você sofreu com determinada perda: isso o estará apenas envenenando, e nada mais. Não há nada mais perigoso que rompimentos amorosos que não são aceitos, promessas de emprego que não têm data marcada para começar, decisões que sempre são adiadas em nome do “momento ideal”. Antes de começar um capítulo novo, é preciso terminar o antigo: diga a si mesmo que o que passou, jamais voltará. Lembre-se de que houve uma época em que podia viver sem aquilo, sem aquela pessoa - nada é insubstituível, um hábito não é uma necessidade. Pode parecer óbvio, pode mesmo ser difícil, mas é muito importante. Encerrando ciclos. Não por causa do orgulho, por incapacidade, ou por soberba, mas porque simplesmente aquilo já não se encaixa mais na sua vida. Feche a porta, mude o disco, limpe a casa, sacuda a poeira. Deixe de ser quem era, e se transforme em quem é. --- # Where to start a project with bottle, Boilerplate **URL**: https://avelino.run/where-to-start-a-project-with-bottle-boilerplate/ **Published**: 2015-02-08 **Tags**: python, bottle, boilerplate, framework, startproject **Word Count**: 265 words ![A blueprint is a reproduction of a technical drawing, documenting an architecture or an engineering design.](/blueprint.jpg#center) Developing python application using minimalist frameworks has become frequent in the Python community, for no reasons not to speak here. I see this change as a professional development where developers want to choose what is best for your application, simply use what little hide a group *(of pearls, or not**)* that is better. Along with this evolution brings vices of many developers other frameworks (and/or technology), this can be a problem at the time of the taking of decision of which Python web framework to use. I am a member of the team that keeps the [Bottle Framework](http://bottlepy.org/) and thinking of a better acceptance of the framework decided to create the **[bottle-boilerplate](https://github.com/avelino/bottle-boilerplate)**, a project that creates a scaffold using the structure of the bottle and its best practices on top of design pattern [MVC](https://en.wikipedia.org/wiki/Model-view-controller), thus simplifying the bootstrap starting a web application. ## Which libraries are used? - bottle (based python web framework) - click (manage commands at the prompt, example **runserver**) - beaker (manage session) - jinja2 (template engine) - bottle-sqlalchemy (bottle plugin for connection with relational database) ## How to use? The process failed use the simplest possible: ```bash pip install bottle-boilerplate bottle startproject YOU-PROJECT-NAME ``` If you want to open the documentation from the bottle: ```bash bottle doc ``` ## How to contribute? The **bottle-boilerplate** is an open source project and accept what you want contribution (which come to improve the project). Is an interface (command line) to the [cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle), i.e. **bottle-boilerplate** on **startproject** will call [cookiecutter](http://cookiecutter.rtfd.org/) to create the application. We need the contribution in **cookiecutter-bottle** to improve the application for example, write test, among other improvements. Send pull request free Synthase (PR). --- # Open Source Contributions - February 2015 **URL**: https://avelino.run/foss/2015/02/ **Published**: 2015-02-01 **Word Count**: 237 words **Summary**: February 2015 saw 8 repositories with 19 contributions, including 5 pull requests and 6 issues, showcasing vibrant collaboration in the open-source community. Explore the timeline of contributions for February 2015, highlighting significant activities across 8 repositories. This month featured a total of 19 contributions, including 5 pull requests and 6 issues, reflecting a dynamic engagement from developers in enhancing projects and addressing community needs. ## 2015-02-22 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Save time in Vim NOW with these five weird tricks](https://github.com/editor-bootstrap/vim-bootstrap/issues/116) ## 2015-02-18 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [added shell script sample](https://github.com/editor-bootstrap/vim-bootstrap/pull/114) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Fixed #112](https://github.com/editor-bootstrap/vim-bootstrap/pull/113) - 🔀 Opened PR in [avelino/liquidluck](https://github.com/avelino/liquidluck): [added support python 3.3 and 3.4](https://github.com/avelino/liquidluck/pull/115) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [call shell script after install vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap/issues/112) ## 2015-02-17 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [create new let check finsh install neobundle](https://github.com/editor-bootstrap/vim-bootstrap/pull/109) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [refactoring to read all vim template local](https://github.com/editor-bootstrap/vim-bootstrap/pull/106) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [write test of vim files](https://github.com/editor-bootstrap/vim-bootstrap/issues/108) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [E185: Cannot find color scheme 'molokai' before install](https://github.com/editor-bootstrap/vim-bootstrap/issues/107) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Get "vim templates" in file system](https://github.com/editor-bootstrap/vim-bootstrap/issues/105) ## 2015-02-12 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Additional plugins](https://github.com/editor-bootstrap/vim-bootstrap/issues/101) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 11 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) - 🔨 Push to [avelino/beerblogging](https://github.com/avelino/beerblogging): 10 commit(s) - [See commits](https://github.com/avelino/beerblogging/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) - 🔨 Push to [bottlepy/bottle-boilerplate](https://github.com/bottlepy/bottle-boilerplate): 5 commit(s) - [See commits](https://github.com/bottlepy/bottle-boilerplate/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) - 🔨 Push to [avelino/liquidluck](https://github.com/avelino/liquidluck): 2 commit(s) - [See commits](https://github.com/avelino/liquidluck/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) - 🔨 Push to [avelino/cookiecutter-bottle-sample](https://github.com/avelino/cookiecutter-bottle-sample): 2 commit(s) - [See commits](https://github.com/avelino/cookiecutter-bottle-sample/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) - 🔨 Push to [avelino/cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle): 2 commit(s) - [See commits](https://github.com/avelino/cookiecutter-bottle/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 1 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2015-02-01T00:00:00Z&until=2015-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Go vs Python more request per second **URL**: https://avelino.run/go-vs-python-more-request-per-second/ **Published**: 2015-01-17 **Tags**: go, python, benchmark **Word Count**: 708 words ![not everyt hing is nail, to use hammer](/silver-bullet.jpg#center) I use python because it is a simple and powerful language, but never used by be excellence in performance (But for python web serves very well)! I know that benchmark based on **"Hello World"** does not want to say too much, but it's interessanta we know what technology (framework) is more time to answer performance web support request. There is a python framework named [Falcon](http://falconframework.org) (Falcon follows the REST architectural style, meaning (among other things) that you think in terms of resources and state transitions, which map to HTTP verbs) which is extremely performance, even using asynchronous backup processing library (as [gevent](http://gevent.org), is a coroutine-based Python networking library that uses greenlet to provide a high-level asynchronous API on top of the libev event loop). These days I commented on the social network about the performance of the falcon and some people commented that it would be interesting to do a benchmark with Go, and here I am writing a blogpost for the performance of a webserver written in Go and Python to see which responds more request per second! Let's go... ## Falcon application {{< gist avelino 154a2d612b4ff732558e81113762abde "main.py" >}} ## Go application {{< gist avelino c8e8bc86e79335d9a9b10ff35fc75b5f "main.go" >}} ## Benchmark Used: ``` ab -n10000 -c500 http://localhost:8080/ Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz 8GB RAM ``` ### Falcon **Requests per second: 4888.35 in 2.046 seconds** ``` avelino@klm ~ $ ab -n10000 -c500 http://127.0.0.1:8080/ This is ApacheBench, Version 2.3 <$Revision: 1604373 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: Server Hostname: 127.0.0.1 Server Port: 8080 Document Path: / Document Length: 11 bytes Concurrency Level: 500 Time taken for tests: 2.046 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 1530000 bytes HTML transferred: 110000 bytes Requests per second: 4888.35 [#/sec] (mean) Time per request: 102.284 [ms] (mean) Time per request: 0.205 [ms] (mean, across all concurrent requests) Transfer rate: 730.39 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 29 166.7 0 1004 Processing: 2 29 37.8 23 436 Waiting: 2 29 37.8 23 436 Total: 14 58 193.7 23 1438 Percentage of the requests served within a certain time (ms) 50% 23 66% 25 75% 25 80% 25 90% 28 95% 50 98% 1029 99% 1232 100% 1438 (longest request) ``` ### Go **Requests per second: 15711.36 in 0.636 seconds** ``` avelino@klm ~ $ ab -n10000 -c500 http://127.0.0.1:8080/ This is ApacheBench, Version 2.3 <$Revision: 1604373 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 10000 requests Finished 10000 requests Server Software: Server Hostname: 127.0.0.1 Server Port: 8080 Document Path: / Document Length: 11 bytes Concurrency Level: 500 Time taken for tests: 0.636 seconds Complete requests: 10000 Failed requests: 0 Total transferred: 1130000 bytes HTML transferred: 110000 bytes Requests per second: 15711.36 [#/sec] (mean) Time per request: 31.824 [ms] (mean) Time per request: 0.064 [ms] (mean, across all concurrent requests) Transfer rate: 1733.77 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 1.7 0 12 Processing: 2 6 5.5 5 205 Waiting: 2 6 5.5 5 205 Total: 4 7 6.4 5 205 Percentage of the requests served within a certain time (ms) 50% 5 66% 6 75% 6 80% 6 90% 7 95% 13 98% 28 99% 33 100% 205 (longest request) ``` We can let Go more performer (compiling software), follows the result after compiling: **Requests per second: 20978.30 in 0.415 seconds** ## Conclusion Yes Go is much more performatico than Python in web requests, nor why I stop programming in Python. Today we have a very large ecosystem in the world of Python where does Python be very powerful (and good), an example is mathematical libraries such as numpy, pandas and etc. This blogpost is to show that Python (or what you want other technology) is not the silver bullet (solution to all the problems). Choose the right technology for your problem, not everything is nail, to use hammer! --- # Open Source Contributions - January 2015 **URL**: https://avelino.run/foss/2015/01/ **Published**: 2015-01-01 **Word Count**: 521 words **Summary**: January 2015 saw 22 repositories with 48 contributions, including 11 pull requests and 22 issues, showcasing vibrant community engagement. Explore the contributions made in January 2015, highlighting a total of 48 activities across 22 repositories. This timeline captures significant push events, pull requests, and issues, reflecting the dynamic engagement of developers and the continuous growth of the projects. ## 2015-01-29 - 🐛 Opened issue in [avelino/beerblogging](https://github.com/avelino/beerblogging): [mobile (web) version ](https://github.com/avelino/beerblogging/issues/35) - 🐛 Opened issue in [avelino/beerblogging](https://github.com/avelino/beerblogging): [Adjusting layout to support list of tags (different)](https://github.com/avelino/beerblogging/issues/33) ## 2015-01-24 - 🐛 Opened issue in [chucknado/bottle_heroku_tutorial](https://github.com/chucknado/bottle_heroku_tutorial): [Recommend the use of "bottle-boilerplate"](https://github.com/chucknado/bottle_heroku_tutorial/issues/1) ## 2015-01-22 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Doc translate](https://github.com/bottlepy/bottle/pull/711) - 🐛 Opened issue in [avelino/cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle): [Put in the database connection in settings](https://github.com/avelino/cookiecutter-bottle/issues/5) - 🐛 Opened issue in [avelino/cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle): [write to test controler of home](https://github.com/avelino/cookiecutter-bottle/issues/4) - 🐛 Opened issue in [avelino/cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle): [write to test controller of user](https://github.com/avelino/cookiecutter-bottle/issues/3) - 🐛 Opened issue in [avelino/cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle): [write to test models of user](https://github.com/avelino/cookiecutter-bottle/issues/2) ## 2015-01-21 - 🔀 Opened PR in [iurisilvio/bottle-sqlalchemy](https://github.com/iurisilvio/bottle-sqlalchemy): [used install_requires on setup package](https://github.com/iurisilvio/bottle-sqlalchemy/pull/21) - 🔀 Opened PR in [cookiecutter/cookiecutter](https://github.com/cookiecutter/cookiecutter): [added cookiecutter-bottle](https://github.com/cookiecutter/cookiecutter/pull/372) ## 2015-01-20 - 🐛 Opened issue in [apyb/apyb.gerenciamento](https://github.com/apyb/apyb.gerenciamento): [Cron do planet nao esta rodando](https://github.com/apyb/apyb.gerenciamento/issues/72) ## 2015-01-19 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [ini, json or yaml for system conf](https://github.com/mining/mining/issues/229) - 🐛 Opened issue in [elastic/elasticsearch-py](https://github.com/elastic/elasticsearch-py): [batch processing support](https://github.com/elastic/elasticsearch-py/issues/188) ## 2015-01-16 - 🐛 Opened issue in [qutebrowser/qutebrowser](https://github.com/qutebrowser/qutebrowser): [Auto complite URLs](https://github.com/qutebrowser/qutebrowser/issues/468) ## 2015-01-15 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [change rq to celery](https://github.com/mining/mining/pull/227) - 🔀 Opened PR in [whiteclover/solo](https://github.com/whiteclover/solo): [added more framework on benchmark](https://github.com/whiteclover/solo/pull/1) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [migrate scheduler to celery](https://github.com/mining/mining/issues/228) - 🐛 Opened issue in [qutebrowser/qutebrowser](https://github.com/qutebrowser/qutebrowser): [pkg_resources.DistributionNotFound: pypeg2](https://github.com/qutebrowser/qutebrowser/issues/467) - 🐛 Opened issue in [qutebrowser/qutebrowser](https://github.com/qutebrowser/qutebrowser): [Error install archlinux "TypeError: 'encoding' is an invalid keyword argument for this function" python3](https://github.com/qutebrowser/qutebrowser/issues/466) ## 2015-01-13 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [added support cube loader via rest](https://github.com/mining/mining/pull/226) - 🔀 Opened PR in [NARKOZ/guides](https://github.com/NARKOZ/guides): [added golang code style](https://github.com/NARKOZ/guides/pull/11) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [alternative cube create via REST (http)](https://github.com/mining/mining/issues/225) - 🐛 Opened issue in [zeekay/bottle-websocket](https://github.com/zeekay/bottle-websocket): [Conflit gevent and bottle-websocket](https://github.com/zeekay/bottle-websocket/issues/6) ## 2015-01-11 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [remove validate function on ToDo list tutorial](https://github.com/bottlepy/bottle/pull/705) ## 2015-01-10 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Theme picker](https://github.com/editor-bootstrap/vim-bootstrap/issues/80) ## 2015-01-07 - 🐛 Opened issue in [avelino/bottle-auth](https://github.com/avelino/bottle-auth): [Added suppoprt bottle.auth](https://github.com/avelino/bottle-auth/issues/13) ## 2015-01-05 - 🔀 Opened PR in [akrawchyk/awesome-vim](https://github.com/akrawchyk/awesome-vim): [Added new category website and added 2 website](https://github.com/akrawchyk/awesome-vim/pull/2) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [html lib sugestion mattn/emmet-vim](https://github.com/editor-bootstrap/vim-bootstrap/issues/78) ## 2015-01-04 - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Replace % by format in string formatting pep 3101](https://github.com/bottlepy/bottle/issues/697) ## 2015-01-03 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Issue 432](https://github.com/opps/opps/pull/433) ## 2015-01-02 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Load opps.fields on context (view render)](https://github.com/opps/opps/pull/431) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [opps.permissions migration 0002 used depends_on](https://github.com/opps/opps/issues/432) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Load opps.fields in the context of the view](https://github.com/opps/opps/issues/430) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 61 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [opps/opps-project-template](https://github.com/opps/opps-project-template): 1 commit(s) - [See commits](https://github.com/opps/opps-project-template/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [avelino/cookiecutter-bottle-sample](https://github.com/avelino/cookiecutter-bottle-sample): 8 commit(s) - [See commits](https://github.com/avelino/cookiecutter-bottle-sample/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [avelino/cookiecutter-bottle](https://github.com/avelino/cookiecutter-bottle): 8 commit(s) - [See commits](https://github.com/avelino/cookiecutter-bottle/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [avelino/beerblogging](https://github.com/avelino/beerblogging): 23 commit(s) - [See commits](https://github.com/avelino/beerblogging/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [iurisilvio/bottle-sqlalchemy](https://github.com/iurisilvio/bottle-sqlalchemy): 1 commit(s) - [See commits](https://github.com/iurisilvio/bottle-sqlalchemy/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-boilerplate](https://github.com/bottlepy/bottle-boilerplate): 5 commit(s) - [See commits](https://github.com/bottlepy/bottle-boilerplate/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [NARKOZ/guides](https://github.com/NARKOZ/guides): 2 commit(s) - [See commits](https://github.com/NARKOZ/guides/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 11 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [whiteclover/solo](https://github.com/whiteclover/solo): 3 commit(s) - [See commits](https://github.com/whiteclover/solo/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 10 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [mining/frontend](https://github.com/mining/frontend): 11 commit(s) - [See commits](https://github.com/mining/frontend/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [avelino/bottle-auth](https://github.com/avelino/bottle-auth): 3 commit(s) - [See commits](https://github.com/avelino/bottle-auth/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) - 🔨 Push to [akrawchyk/awesome-vim](https://github.com/akrawchyk/awesome-vim): 3 commit(s) - [See commits](https://github.com/akrawchyk/awesome-vim/commits?author=avelino&since=2015-01-01T00:00:00Z&until=2015-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Bottle, full stack without Django **URL**: https://avelino.run/bottle-full-stack-without-django/ **Published**: 2014-12-01 **Tags**: bottle, python, framework, django, full-stack **Word Count**: 769 words This blogpost is based in a lecture I presented here in Brazil, follows the [slides](https://speakerdeck.com/avelino/bottle-o-full-stack-sem-django)! ![Bottle micro framework web](/bottle.png#center) Bottle is a micro web framework compatible with WSGI, depends only on the Python standard library is compatible with python 2.6, 2.7, 3.2, 3.3 and 3.4, [single source file](https://github.com/defnull/bottle/blob/master/bottle.py). It was created by Marcel Hellkamp ([@defnull](https://github.com/defnull)) and maintained by the [community](https://github.com/orgs/bottlepy/people) that raised surrounding framework. [Django](https://www.djangoproject.com/) is a framework for rapid development for web, written in Python, which uses the standard MTV (model-template-view) and pragmatic. Was originally created as a system to manage a journalistic site in the city of Lawrence, Kansas. Became an open source project and was published under a BSD license in 2005. The name Django was inspired by the jazz musician Django Reinhardt. Django became very known for having included batteries, i.e. several distributed libraries join the Centre of the framework for simplicity work (called "full stack"). Pragmatic is what contains practical, realistic considerations, with well-defined target. Be pragmatic is to be practical is to have goals defined. In other words, the team that developed the Django take some description of architecture and who uses Django follows this architecture without being able to change easily. It's good a web framework have batteries included? Depends, if you use everything that the framework gives you Yes, but not all web designs are the same. Many project does not use 80% than Django offers, in those cases that don't use more than 50% of what we pay the cost of offering Django someone have defined the architecture, i.e. lost in performance because the Django has many modules that will not be using and yet he will climb a few modules that we don't use. When we use a micro framework we do the role of architect of application development, since we don't have a set before architecture begins to develop is necessary to devote time to define the architecture of the application. All the packages that we have on the Django Python library that can substitute for use in a micro framework! * ORM - [SQLAlchemy](http://www.sqlalchemy.org/) to [bottle-sqlalchemy](https://github.com/iurisilvio/bottle-sqlalchemy) * Forms - [WTForms](https://wtforms.readthedocs.org/en/latest/) * Template Engine - [Jinja2](http://jinja.pocoo.org/docs/dev/), [mako](http://www.makotemplates.org/), etc * Migration - [Alembic](http://alembic.readthedocs.org/en/latest/) ## SQLAlchemy The SQLAlchemy exists before Django ([yes before Django](https://github.com/zzzeek/sqlalchemy/commit/ec052c6a1f1fb0236bd367c510d82f076cb67bc9)) and since 2005 we have a team focuses on development of an ORM, unlike Django it's a time to take care of a web framework + ORM (I believe I don't need to talk to a developer focused render more than a developer not focused). Structure of a model: ```python class Entity(Base): __tablename__ = 'entity' id = Column(Integer, Sequence('id_seq'), primary_key=True) name = Column(String(50)) def __init__(self, name): self.name = name def __repr__(self): return "" % (self.id, self.name) ``` ## WTForms A workaround for those who do not use Django and need to work with forms we have the WTForms, was created in [2008](https://github.com/wtforms/wtforms/commit/c0998bac1a4d5cd5fdf43a825529a64e24dea9a5) and maintained until today! Structure of a form: ```python class UserForm(Form): name = TextField(validators=[DataRequired(), Length(max=100)]) email = TextField(validators=[DataRequired(), Length(max=255)]) ``` ## Template Engine Jinja2 is a modern and designer-friendly templating language for Python, modelled after Django’s templates. It is fast, widely used and secure with the optional sandboxed template execution environment Structure of a template: ```html {% block title %}{% endblock %} ``` ## Migration Usage of Alembic starts with creation of the Migration Environment. This is a directory of scripts that is specific to a particular application. The migration environment is created just once, and is then maintained along with the application’s source code itself. Structure of a migration: ```python revision = '1975ea83b712' down_revision = None from alembic import op import sqlalchemy as sa def upgrade(): pass def downgrade(): pass ``` How to make the evolution and downgrade: ```python def upgrade(): op.create_table( 'account', sa.Column('id', sa.Integer, primary_key=True), sa.Column('name', sa.String(50), nullable=False), sa.Column('description', sa.Unicode(200)), ) def downgrade(): op.drop_table('account') ``` Structure of a alter table: ```python """ $ alembic revision -m "Add a column" """ revision = 'ae1027a6acf' down_revision = '1975ea83b712' from alembic import op import sqlalchemy as sa def upgrade(): op.add_column('account', sa.Column('last_transaction_date', sa.DateTime)) def downgrade(): op.drop_column('account', 'last_transaction_date') ``` ## Conclusion Exactly what you see, everything that Django has found out the stack of Django. I didn't write this blogpost to speak ill of Django and Yes to shows that exist other solutions for full development stack. Many people use Django by not understanding the environment with Python, today the Django brings much ready that makes some developers get lazy and not gain skills of software architecture. Come help with the Bottle, we are a growing community, to contribute with code of Bottle look at the issue that we have open. In case of doubt we have mailing list and IRC channel. [GET INVOLVED](http://bottlepy.org/docs/dev/development.html#get-involved) --- # Open Source Contributions - December 2014 **URL**: https://avelino.run/foss/2014/12/ **Published**: 2014-12-01 **Word Count**: 421 words **Summary**: December 2014 saw 10 repositories with 37 contributions, including 19 pull requests and 11 issues, driving significant project advancements. Explore the key contributions made in December 2014, showcasing a total of 37 events across 10 repositories. This timeline highlights notable pull requests and issues, reflecting the active development and collaboration within the community. ## 2014-12-30 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Issue #402](https://github.com/opps/opps/pull/429) ## 2014-12-19 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Correction of migration when the Bank is empty!](https://github.com/opps/opps/pull/426) ## 2014-12-17 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Release 0291](https://github.com/opps/opps/pull/421) ## 2014-12-12 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [set new version 0.2.9](https://github.com/opps/opps/pull/415) - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Container queryset multchannel](https://github.com/opps/opps/pull/414) - 🔀 Opened PR in [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): [Fix support python 3k #6](https://github.com/bottlepy/bottle-werkzeug/pull/8) - 🔀 Opened PR in [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): [added support trravis ci ref #2](https://github.com/bottlepy/bottle-werkzeug/pull/5) - 🔀 Opened PR in [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): [Refactoring setup](https://github.com/bottlepy/bottle-werkzeug/pull/4) - 🔀 Opened PR in [opps/opps-hubcasts](https://github.com/opps/opps-hubcasts): [Revert "Feature mobile"](https://github.com/opps/opps-hubcasts/pull/3) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Try numba in processing that numpy](https://github.com/mining/mining/issues/224) - 🐛 Opened issue in [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): [Upgrate bottle plugin api version](https://github.com/bottlepy/bottle-werkzeug/issues/7) - 🐛 Opened issue in [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): [Python 3 support](https://github.com/bottlepy/bottle-werkzeug/issues/6) ## 2014-12-11 - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [fix typo](https://github.com/editor-bootstrap/vim-bootstrap/pull/68) - 🔀 Opened PR in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [set var vim_bootstrap_langs](https://github.com/editor-bootstrap/vim-bootstrap/pull/67) ## 2014-12-09 - 🐛 Opened issue in [mining/django-report](https://github.com/mining/django-report): [Create element via ReporClass](https://github.com/mining/django-report/issues/2) ## 2014-12-08 - 🔀 Opened PR in [realpython/python-guide](https://github.com/realpython/python-guide): [added bottle micro-framework on scenarios web](https://github.com/realpython/python-guide/pull/506) ## 2014-12-07 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [recovery mptt search channel, use denormalized query](https://github.com/opps/opps/pull/407) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Fix python package of the mining, ref #216](https://github.com/mining/mining/pull/222) ## 2014-12-06 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [created new adapter for elasticsearch function as data warehouse](https://github.com/mining/mining/pull/221) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Apache Cassandra (columnar database) adapter to data warehouse](https://github.com/mining/mining/issues/220) ## 2014-12-05 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [generate new release 0.2.8.2](https://github.com/opps/opps/pull/406) - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Recovery create channel using parent](https://github.com/opps/opps/pull/405) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [remove assets folder in run test via make, ref #217](https://github.com/mining/mining/pull/218) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Elasticsearch adapter to data warehouse](https://github.com/mining/mining/issues/219) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [exclude assets folder in run test](https://github.com/mining/mining/issues/217) ## 2014-12-04 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Wsgi support](https://github.com/mining/mining/pull/215) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Fix python package of the mining](https://github.com/mining/mining/issues/216) ## 2014-12-03 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [WSGI support (gunicorn)](https://github.com/mining/mining/issues/214) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [[pip v1.1] pip install with requirements file fails; version 0.0.0 conflicts with numexpr==2.4](https://github.com/mining/mining/issues/213) ## 2014-12-01 - 🐛 Opened issue in [thumbor/thumbor](https://github.com/thumbor/thumbor): [Error when going on a media file with "http://"](https://github.com/thumbor/thumbor/issues/392) ## Commits - 🔨 Push to [opps/opps](https://github.com/opps/opps): 41 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-12-01T00:00:00Z&until=2014-12-31T23:59:59Z) - 🔨 Push to [mining/django-report](https://github.com/mining/django-report): 9 commit(s) - [See commits](https://github.com/mining/django-report/commits?author=avelino&since=2014-12-01T00:00:00Z&until=2014-12-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): 8 commit(s) - [See commits](https://github.com/bottlepy/bottle-werkzeug/commits?author=avelino&since=2014-12-01T00:00:00Z&until=2014-12-31T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 8 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-12-01T00:00:00Z&until=2014-12-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 6 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2014-12-01T00:00:00Z&until=2014-12-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2014-12-01T00:00:00Z&until=2014-12-31T23:59:59Z) - 🔨 Push to [opps/opps-promos](https://github.com/opps/opps-promos): 1 commit(s) - [See commits](https://github.com/opps/opps-promos/commits?author=avelino&since=2014-12-01T00:00:00Z&until=2014-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2014 **URL**: https://avelino.run/foss/2014/11/ **Published**: 2014-11-01 **Word Count**: 295 words **Summary**: November 2014 saw 13 repositories contributing 25 events, including 6 pull requests and 11 issues, showcasing active development and community engagement. In November 2014, the development community made significant strides with 13 repositories engaging in various activities. This timeline highlights the key contributions, including notable pull requests and issues raised, reflecting the collaborative efforts and ongoing enhancements within the projects. ## 2014-11-30 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Change scheduler and queue for Celery](https://github.com/mining/mining/issues/212) - 🐛 Opened issue in [commonwealth-of-puerto-rico/libre](https://github.com/commonwealth-of-puerto-rico/libre): [Postgres migrate error](https://github.com/commonwealth-of-puerto-rico/libre/issues/14) - 🐛 Opened issue in [Othernet-Project/bottle-utils](https://github.com/Othernet-Project/bottle-utils): [Split bottle-utils into multiple packages](https://github.com/Othernet-Project/bottle-utils/issues/5) - 🐛 Opened issue in [Bystroushaak/bottle-rest](https://github.com/Bystroushaak/bottle-rest): [Suggested name for the package](https://github.com/Bystroushaak/bottle-rest/issues/3) ## 2014-11-29 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Independent element renderer](https://github.com/mining/mining/issues/211) - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [process to control the framework evolution (Create changelog file and milestones)](https://github.com/bottlepy/bottle/issues/684) ## 2014-11-27 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Added travis image build status](https://github.com/bottlepy/bottle/pull/682) - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [fix status code 413 description as RFC2616](https://github.com/bottlepy/bottle/pull/681) - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [fix status code 413 description as RFC2616](https://github.com/bottlepy/bottle/pull/680) - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [fix typo tutorial grammatical corrections](https://github.com/bottlepy/bottle/pull/679) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [error 0019_new_container_related ContainerRelated](https://github.com/opps/opps/issues/403) ## 2014-11-25 - 🐛 Opened issue in [bottlepy/bottle-redis](https://github.com/bottlepy/bottle-redis): [pypi permission](https://github.com/bottlepy/bottle-redis/issues/4) - 🐛 Opened issue in [fsalum/puppet-redis](https://github.com/fsalum/puppet-redis): [package_name "redis" per default](https://github.com/fsalum/puppet-redis/issues/43) ## 2014-11-19 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [neovim support](https://github.com/editor-bootstrap/vim-bootstrap/issues/64) ## 2014-11-14 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Postgres 8.4 not support json ('NoneType' object has no attribute 'cursor')](https://github.com/opps/opps/issues/397) ## 2014-11-04 - 🔀 Opened PR in [puppetlabs/puppetlabs-postgresql](https://github.com/puppetlabs/puppetlabs-postgresql): [set postgres version on Ubuntu 14.10](https://github.com/puppetlabs/puppetlabs-postgresql/pull/524) - 🔀 Opened PR in [puppetlabs/puppetlabs-postgresql](https://github.com/puppetlabs/puppetlabs-postgresql): [set postgres version on Ubuntu 14.10](https://github.com/puppetlabs/puppetlabs-postgresql/pull/523) ## Commits - 🔨 Push to [bottlepy/bottle-redis](https://github.com/bottlepy/bottle-redis): 13 commit(s) - [See commits](https://github.com/bottlepy/bottle-redis/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 10 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) - 🔨 Push to [bottlepy/bottle-mongo](https://github.com/bottlepy/bottle-mongo): 8 commit(s) - [See commits](https://github.com/bottlepy/bottle-mongo/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 3 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 3 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 3 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) - 🔨 Push to [opps/opps-comments](https://github.com/opps/opps-comments): 2 commit(s) - [See commits](https://github.com/opps/opps-comments/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 1 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2014-11-01T00:00:00Z&until=2014-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - October 2014 **URL**: https://avelino.run/foss/2014/10/ **Published**: 2014-10-01 **Word Count**: 106 words **Summary**: October 2014 saw 4 repos contribute 6 key activities, including a significant pull request and multiple issues, driving collaboration and improvements across projects. This timeline highlights the key contributions and activities from October 2014, showcasing the collaborative efforts across various repositories. Notable events include a pull request that introduced new features and several issues aimed at enhancing project functionality. ## 2014-10-29 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [clear last search highlighting](https://github.com/editor-bootstrap/vim-bootstrap/issues/57) ## 2014-10-19 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [upgrade Pandas to 0.15.0](https://github.com/mining/mining/issues/206) ## 2014-10-03 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [added new action to duplicate container #374](https://github.com/opps/opps/pull/389) ## 2014-10-02 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps API show traceback](https://github.com/opps/opps/issues/386) - 🐛 Opened issue in [harness/harness](https://github.com/harness/harness): [Clone branch master on build](https://github.com/harness/harness/issues/503) ## Commits - 🔨 Push to [opps/opps](https://github.com/opps/opps): 10 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-10-01T00:00:00Z&until=2014-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2014 **URL**: https://avelino.run/foss/2014/09/ **Published**: 2014-09-01 **Word Count**: 125 words **Summary**: September 2014 saw 9 contributions across 6 repositories, including a new pull request and multiple issue openings, enhancing project collaboration and development. Explore the timeline of contributions for September 2014, featuring a mix of push events, a notable pull request, and several issue discussions that highlight ongoing development efforts across multiple repositories. ## 2014-09-15 - 🐛 Opened issue in [LennartC/Simple-Rest-Client-Opera-Extension](https://github.com/LennartC/Simple-Rest-Client-Opera-Extension): [compatibility Opera 25 (developer version)](https://github.com/LennartC/Simple-Rest-Client-Opera-Extension/issues/2) ## 2014-09-10 - 🐛 Opened issue in [berinhard/model_mommy](https://github.com/berinhard/model_mommy): [Django 1.7 extend model (used django-polymorphic)](https://github.com/berinhard/model_mommy/issues/188) ## 2014-09-03 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps Admin 0.1.* proposed](https://github.com/opps/opps/issues/365) ## 2014-09-02 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps 0.3.* proposed](https://github.com/opps/opps/issues/364) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [User guide for user (Opps documentation)](https://github.com/opps/opps/issues/363) ## 2014-09-01 - 🔀 Opened PR in [opps/opps-vagrant](https://github.com/opps/opps-vagrant): [create gitignore file](https://github.com/opps/opps-vagrant/pull/4) ## Commits - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 3 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2014-09-01T00:00:00Z&until=2014-09-30T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 2 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-09-01T00:00:00Z&until=2014-09-30T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 2 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-09-01T00:00:00Z&until=2014-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - August 2014 **URL**: https://avelino.run/foss/2014/08/ **Published**: 2014-08-01 **Word Count**: 252 words **Summary**: August 2014 saw 10 repositories contribute 22 total events, including 4 pull requests and 9 issues, showcasing active collaboration and project development. In August 2014, the development community demonstrated significant activity across 10 repositories, with a total of 22 contributions. This timeline highlights key events, including pull requests, issue openings, and code pushes, reflecting the collaborative spirit and ongoing enhancements within the projects. ## 2014-08-31 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [chartist.js directive](https://github.com/mining/mining/issues/202) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Chart.js directive](https://github.com/mining/mining/issues/201) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Google chart directive](https://github.com/mining/mining/issues/200) ## 2014-08-29 - 🐛 Opened issue in [GoogleCloudPlatform/appengine-bottle-skeleton](https://github.com/GoogleCloudPlatform/appengine-bottle-skeleton): [Upgrade bottle version 0.11.* to 0.12.*](https://github.com/GoogleCloudPlatform/appengine-bottle-skeleton/issues/10) ## 2014-08-28 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Revert "Adds OPPS_CHANNEL_LAYOUT configuration"](https://github.com/opps/opps/pull/353) - 🔀 Opened PR in [GoogleCloudPlatform/appengine-bottle-skeleton](https://github.com/GoogleCloudPlatform/appengine-bottle-skeleton): [upgrade bottle version to release 0.12.6](https://github.com/GoogleCloudPlatform/appengine-bottle-skeleton/pull/9) ## 2014-08-20 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [proposed new logo](https://github.com/mining/mining/issues/189) ## 2014-08-19 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Django application to generate report](https://github.com/mining/mining/issues/185) ## 2014-08-15 - 🔀 Opened PR in [toxmail/toxmail](https://github.com/toxmail/toxmail): [used requirements for manage dependence libs](https://github.com/toxmail/toxmail/pull/8) ## 2014-08-13 - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [Not more get template via github](https://github.com/editor-bootstrap/vim-bootstrap/issues/24) - 🐛 Opened issue in [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): [change bottle to webapp2](https://github.com/editor-bootstrap/vim-bootstrap/issues/23) ## 2014-08-05 - 🔀 Opened PR in [jgorset/facepy](https://github.com/jgorset/facepy): [Fix image encode (base64), ref #119](https://github.com/jgorset/facepy/pull/120) ## 2014-08-04 - 🐛 Opened issue in [jgorset/facepy](https://github.com/jgorset/facepy): [Error in 'me/picture'](https://github.com/jgorset/facepy/issues/119) ## Commits - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 2 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [avelino/docker-debian](https://github.com/avelino/docker-debian): 1 commit(s) - [See commits](https://github.com/avelino/docker-debian/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 9 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [GoogleCloudPlatform/appengine-bottle-skeleton](https://github.com/GoogleCloudPlatform/appengine-bottle-skeleton): 1 commit(s) - [See commits](https://github.com/GoogleCloudPlatform/appengine-bottle-skeleton/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [toxmail/toxmail](https://github.com/toxmail/toxmail): 3 commit(s) - [See commits](https://github.com/toxmail/toxmail/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 7 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 2 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [avelino/bottle-auth](https://github.com/avelino/bottle-auth): 3 commit(s) - [See commits](https://github.com/avelino/bottle-auth/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 11 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2014-08-01T00:00:00Z&until=2014-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # awesome-go **URL**: https://avelino.run/projects/awesome-go/ **Published**: 2014-07-06 **Tags**: awesome, golang-library, awesome-list, golang, open source **Word Count**: 26 words A curated list of awesome Go frameworks, libraries and software > We need your help to maintain a quality list, get involved with the project ![awesome-go list packages](https://awesome-go.com/assets/logo.png) [github project](https://github.com/avelino/awesome-go) --- # Open Source Contributions - July 2014 **URL**: https://avelino.run/foss/2014/07/ **Published**: 2014-07-01 **Word Count**: 220 words **Summary**: July 2014 saw 14 repositories with 19 contributions, including 4 pull requests and 4 issues, showcasing active development and collaboration across multiple projects. In July 2014, the open-source community experienced significant activity with a total of 14 repositories contributing 19 updates. This timeline highlights key contributions, including pull requests and issues raised, reflecting the ongoing collaboration and innovation within the GitHub ecosystem. ## 2014-07-25 - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [asyncio supported (Python 3.4)](https://github.com/bottlepy/bottle/issues/641) ## 2014-07-24 - 🔀 Opened PR in [avelino/.vimrc](https://github.com/avelino/.vimrc): [Clean](https://github.com/avelino/.vimrc/pull/21) ## 2014-07-16 - 🐛 Opened issue in [josephmisiti/awesome-machine-learning](https://github.com/josephmisiti/awesome-machine-learning): [more to easy linked awesome-[python, go, ruby]](https://github.com/josephmisiti/awesome-machine-learning/issues/41) ## 2014-07-11 - 🐛 Opened issue in [nylas/sync-engine](https://github.com/nylas/sync-engine): [Multi database type (not only MySQL)](https://github.com/nylas/sync-engine/issues/37) ## 2014-07-09 - 🐛 Opened issue in [avelino/awesome-go](https://github.com/avelino/awesome-go): [Custom page style](https://github.com/avelino/awesome-go/issues/100) ## 2014-07-06 - 🔀 Opened PR in [vinta/awesome-python](https://github.com/vinta/awesome-python): [Added provy on devops section](https://github.com/vinta/awesome-python/pull/91) - 🔀 Opened PR in [vinta/awesome-python](https://github.com/vinta/awesome-python): [Add audiolazy on audio section](https://github.com/vinta/awesome-python/pull/86) - 🔀 Opened PR in [vinta/awesome-python](https://github.com/vinta/awesome-python): [Add Open Mining on data analyzing section](https://github.com/vinta/awesome-python/pull/84) ## Commits - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 7 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [avelino/docker-debian](https://github.com/avelino/docker-debian): 5 commit(s) - [See commits](https://github.com/avelino/docker-debian/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 1 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [vinta/awesome-python](https://github.com/vinta/awesome-python): 3 commit(s) - [See commits](https://github.com/vinta/awesome-python/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [opps/opps-feedcrawler](https://github.com/opps/opps-feedcrawler): 1 commit(s) - [See commits](https://github.com/opps/opps-feedcrawler/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 1 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [avelino/django-smart](https://github.com/avelino/django-smart): 1 commit(s) - [See commits](https://github.com/avelino/django-smart/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [avelino/awesome-go](https://github.com/avelino/awesome-go): 49 commit(s) - [See commits](https://github.com/avelino/awesome-go/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 25 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [avelino/docker-ubuntu](https://github.com/avelino/docker-ubuntu): 4 commit(s) - [See commits](https://github.com/avelino/docker-ubuntu/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 8 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2014-07-01T00:00:00Z&until=2014-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Swift Language (Apple) first steps **URL**: https://avelino.run/swift-language-apple-first-steps/ **Published**: 2014-06-04 **Tags**: swift, apple, lang, python, ruby **Word Count**: 211 words ![swift programming](/swift-programming.png#center) Apple launched the Swift language (Looking for the Swift parallel scripting language? Please visit [http://swift-lang.org](http://swift-lang.org "swift lang")) at WWDC 2014. A modern language to program for Mac and iOS! Strongly typed language, where you explicitly what type (variable, arguments, and function returns), syntax reminds dynamic languages with Python, Go, Ruby and JavaScript. Apple offers a free comprehensive guide on language in [HTML](https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/) and [iBook](https://itunes.apple.com/us/book/the-swift-programming-language/id881256329?mt=11) formats. * We can put zero left freely to improve readability, insert _ to separate groups of numbers and add the + in front. That server to improve readability of the program (does not alter the value of the number): ```ruby let a = 1000000 let b = 0.0000001 // readable let a = 1_000_000 let b = 0.000_000_1 ``` * Practical numerical ranges: `0..5` and `0...5` (Ruby) * Unicode variables: ```ruby let π = 3.1415926 ``` * Tween strings (expand variables and expressions inside strings): ```ruby var name = "Thiago Avelino" var yaer = 25 println "Hi, my name \(name), 'm \(year) years." ``` * Few functions/methods native to strings works: * * hasPrefix * * hasSuffix * * uppercaseString * * lowercaseString * * countElements * * isEmpty * Not have regular expressions * Ternary operators: `(condition ? yes : no)` I liked the language, as 'm used to not bother me Go explicit types, lack of regular expression can be a problem seems, but it is a pleasant language to learn! --- # Open Source Contributions - June 2014 **URL**: https://avelino.run/foss/2014/06/ **Published**: 2014-06-01 **Word Count**: 238 words **Summary**: June 2014 saw significant contributions across 7 repositories, with 11 pull requests and 3 issues opened, highlighting collaborative progress in open-source projects. Explore the timeline of contributions made in June 2014, where developers engaged in various projects, opening 11 pull requests and addressing 3 issues. This month reflects a vibrant collaboration within the community, showcasing the ongoing development efforts across multiple repositories. ## 2014-06-23 - 🔀 Opened PR in [arnimarj/py-leveldb](https://github.com/arnimarj/py-leveldb): [Fix markdom syntax on README file](https://github.com/arnimarj/py-leveldb/pull/1) ## 2014-06-19 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [App image edited to new fix in liveblog.](https://github.com/opps/opps/pull/339) - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Mkdocs maker](https://github.com/opps/opps/pull/337) - 🔀 Opened PR in [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): [Option of sending image with message.](https://github.com/opps/opps-liveblogging/pull/1) ## 2014-06-17 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Datawarehouse choice](https://github.com/mining/mining/pull/181) ## 2014-06-16 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [used one key (riak)](https://github.com/mining/mining/pull/180) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [clean on riak store](https://github.com/mining/mining/pull/179) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [fix error on lastupdate get](https://github.com/mining/mining/pull/178) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Fix remove job on scheduler](https://github.com/mining/mining/pull/177) - 🐛 Opened issue in [basho/riak-python-client](https://github.com/basho/riak-python-client): [Expected status [200, 201, 204, 300], received 503 [JIRA: CLIENTS-78]](https://github.com/basho/riak-python-client/issues/346) ## 2014-06-13 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [refactoring like operator](https://github.com/mining/mining/pull/176) - 🐛 Opened issue in [avelino/bottle-auth](https://github.com/avelino/bottle-auth): [Migrate oauth auth to oauthlib (python)](https://github.com/avelino/bottle-auth/issues/7) ## 2014-06-10 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [refactoring like filter](https://github.com/mining/mining/issues/175) ## 2014-06-05 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [fix bug on save connection on mining cube](https://github.com/mining/mining/pull/168) ## Commits - 🔨 Push to [mining/mining](https://github.com/mining/mining): 57 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-06-01T00:00:00Z&until=2014-06-30T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 27 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-06-01T00:00:00Z&until=2014-06-30T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 3 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2014-06-01T00:00:00Z&until=2014-06-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2014-06-01T00:00:00Z&until=2014-06-30T23:59:59Z) - 🔨 Push to [arnimarj/py-leveldb](https://github.com/arnimarj/py-leveldb): 2 commit(s) - [See commits](https://github.com/arnimarj/py-leveldb/commits?author=avelino&since=2014-06-01T00:00:00Z&until=2014-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - May 2014 **URL**: https://avelino.run/foss/2014/05/ **Published**: 2014-05-01 **Word Count**: 499 words **Summary**: May 2014 saw significant activity with 6 repositories contributing 44 events, including 21 pull requests and 17 issues, driving innovation and collaboration. In May 2014, the development community experienced a surge in contributions across six repositories. This timeline captures the key events, including 21 pull requests and 17 issues, showcasing the collaborative efforts that advanced various projects. Explore the details of each contribution to understand the impact made during this dynamic month. ## 2014-05-29 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [fix scheduler used mining path](https://github.com/mining/mining/pull/160) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [upgrade 0.2.x](https://github.com/mining/mining/pull/159) ## 2014-05-28 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Cube merge](https://github.com/mining/mining/pull/158) ## 2014-05-21 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [used session file type](https://github.com/mining/mining/pull/149) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [fix bug, user api send parans](https://github.com/mining/mining/pull/148) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Fix uid make on user get api](https://github.com/mining/mining/pull/147) ## 2014-05-19 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Fix bug bottle-auth](https://github.com/mining/mining/pull/146) ## 2014-05-16 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Add url callback on custom login](https://github.com/mining/mining/pull/145) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [load server used more workers](https://github.com/mining/mining/pull/144) ## 2014-05-15 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [used gevent to send websocket event](https://github.com/mining/mining/pull/141) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [ prefilter if store related database](https://github.com/mining/mining/issues/143) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [support to mult storage](https://github.com/mining/mining/issues/142) ## 2014-05-14 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Fix bug on report JS, regex filter type](https://github.com/mining/mining/pull/140) ## 2014-05-13 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [DataFrameSearchColumn flex, used to regex and like](https://github.com/mining/mining/pull/139) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [refactoring DataFrame Search Column](https://github.com/mining/mining/pull/138) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Fix bug on conf method, set sql_conn_params](https://github.com/mining/mining/pull/135) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [update version 0.2.x](https://github.com/mining/mining/pull/134) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Websocket API crash on firefox used domain](https://github.com/mining/mining/issues/132) ## 2014-05-12 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [add run mining on load all dashboard in scheduler](https://github.com/mining/mining/pull/126) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [upgrade stable version, run mining on add cube to scheduler](https://github.com/mining/mining/pull/125) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Application translate, python](https://github.com/mining/mining/issues/131) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [mapping string on cube](https://github.com/mining/mining/issues/130) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [filter api like](https://github.com/mining/mining/issues/129) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Filter widget, generic filter per defaults](https://github.com/mining/mining/issues/128) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [bottle-auth (Google) on reload page!](https://github.com/mining/mining/issues/127) ## 2014-05-09 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Error on connect in SQLite not support pool and overflow](https://github.com/mining/mining/issues/122) ## 2014-05-07 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Thread more quere #114](https://github.com/mining/mining/pull/115) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [scheduler infinity loop](https://github.com/mining/mining/issues/117) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [refactoring application package](https://github.com/mining/mining/issues/116) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [mining bin process working stop without giving error](https://github.com/mining/mining/issues/114) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [manage commands](https://github.com/mining/mining/issues/113) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Remove memcached requirements](https://github.com/mining/mining/issues/112) ## 2014-05-06 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Remove scheduling task](https://github.com/mining/mining/issues/111) ## 2014-05-05 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [alternative fix access on get connection api](https://github.com/mining/mining/pull/109) - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Async mining](https://github.com/mining/mining/pull/108) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [User groups](https://github.com/mining/mining/issues/98) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [scheduler concurrency](https://github.com/mining/mining/issues/97) ## 2014-05-03 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [loaded plugins run via command line, ref #619](https://github.com/bottlepy/bottle/pull/620) ## Commits - 🔨 Push to [mining/mining](https://github.com/mining/mining): 114 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-05-01T00:00:00Z&until=2014-05-31T23:59:59Z) - 🔨 Push to [avelino/bottle-auth](https://github.com/avelino/bottle-auth): 4 commit(s) - [See commits](https://github.com/avelino/bottle-auth/commits?author=avelino&since=2014-05-01T00:00:00Z&until=2014-05-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2014-05-01T00:00:00Z&until=2014-05-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 3 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2014-05-01T00:00:00Z&until=2014-05-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 2 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2014-05-01T00:00:00Z&until=2014-05-31T23:59:59Z) - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 1 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2014-05-01T00:00:00Z&until=2014-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - April 2014 **URL**: https://avelino.run/foss/2014/04/ **Published**: 2014-04-01 **Word Count**: 237 words **Summary**: April 2014 saw 20 contributions across 8 repositories, with 13 issues opened, enhancing collaboration and driving project improvements. In April 2014, the development community made significant strides with 20 contributions across 8 repositories. This timeline highlights key events, including pull requests, issues, and pushes that shaped the month. ## 2014-04-29 - 🐛 Opened issue in [dbader/schedule](https://github.com/dbader/schedule): [Async process jobs](https://github.com/dbader/schedule/issues/24) ## 2014-04-28 - 🐛 Opened issue in [python-excel/xlwt](https://github.com/python-excel/xlwt): [New release (one year more)](https://github.com/python-excel/xlwt/issues/47) ## 2014-04-24 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [custom parans](https://github.com/mining/mining/issues/90) ## 2014-04-22 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Conflit gevent and bottle-websocket](https://github.com/mining/mining/issues/89) ## 2014-04-17 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [New interface, more user friend](https://github.com/mining/mining/issues/88) ## 2014-04-14 - 🔀 Opened PR in [zeekay/bottle-websocket](https://github.com/zeekay/bottle-websocket): [Fix install via pypi, ref #3](https://github.com/zeekay/bottle-websocket/pull/4) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Order by api](https://github.com/mining/mining/issues/85) - 🐛 Opened issue in [zeekay/bottle-websocket](https://github.com/zeekay/bottle-websocket): [IOError: [Errno 2] No such file or directory: 'README.md'](https://github.com/zeekay/bottle-websocket/issues/3) ## 2014-04-11 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Replicate orrection #611 0.12 to master](https://github.com/bottlepy/bottle/pull/612) ## 2014-04-08 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Element grid page limit](https://github.com/mining/mining/issues/83) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Check permission access api (backend)](https://github.com/mining/mining/issues/82) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Save filter, load defaults filter](https://github.com/mining/mining/issues/81) ## 2014-04-07 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Change html element select to select2](https://github.com/mining/mining/issues/80) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [MapReduce to manager data output](https://github.com/mining/mining/issues/79) ## 2014-04-03 - 🐛 Opened issue in [thumbor/thumbor](https://github.com/thumbor/thumbor): [Change color on image process](https://github.com/thumbor/thumbor/issues/295) ## Commits - 🔨 Push to [mining/mining](https://github.com/mining/mining): 57 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-04-01T00:00:00Z&until=2014-04-30T23:59:59Z) - 🔨 Push to [avelino/bottle-auth](https://github.com/avelino/bottle-auth): 13 commit(s) - [See commits](https://github.com/avelino/bottle-auth/commits?author=avelino&since=2014-04-01T00:00:00Z&until=2014-04-30T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 12 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-04-01T00:00:00Z&until=2014-04-30T23:59:59Z) - 🔨 Push to [zeekay/bottle-websocket](https://github.com/zeekay/bottle-websocket): 1 commit(s) - [See commits](https://github.com/zeekay/bottle-websocket/commits?author=avelino&since=2014-04-01T00:00:00Z&until=2014-04-30T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 1 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2014-04-01T00:00:00Z&until=2014-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Golang, C and Python the benchmark time **URL**: https://avelino.run/golang-c-and-python-the-benchmark-time/ **Published**: 2014-03-06 **Tags**: golang, c, python, benchmark **Word Count**: 303 words I was wondering how performant Golang is, so I decided to put together a little benchmarking example for myself. The benchmark will be done in my personal computer: ``` Processor 3 GHz Intel Core i7 Memory 8 GB 1600 MHz DDR3 Software OS X 10.9.2 (13C64) ``` ![vs benchmark time](/vs.png#center) So I started with Python, which is what I know best and created the following simple script; {{< gist avelino b66dfb057504c4ad93452d037e1ed5c1 "factorial.py" >}} The reason for the **total** output, was to have a check to ensure that I was getting the same results in each of the scripts. To make sure that they are doing the same amount of work. Running the script gives us the following execution time; ``` $ time python factorial.py total: 591400000 0.68s user 0.01s system 99% cpu 0.688 total ``` So I am getting about 1s in total execution time. Not bad. Now the same code sample in C, to see what the time execution would be; {{< gist avelino f2ccbba0573dbbf80dbc1cf955d49b7d "factorial.c" >}} Compile and execute the above snippet of code; ``` $ gcc factorial.c -o factorial $ time ./factorial total: 591400000 0.01s user 0.00s system 91% cpu 0.016 total ``` Ok, that's quite an improvement. This is C, so we do expect there to be a great improvement. Finally we create our code sample in Go; {{< gist avelino 2266fc463ac021af99cb85664f2627b1 "factorial.go" >}} Then build and run the code sample and we get the following; ``` $ go build factorial.go $ time ./factorial total: 591400000 0.01s user 0.00s system 93% cpu 0.018 total ``` So, that's pretty much the same as C, which is excellent. The best part of it all, is that it is actually fun to code in Go compared to C. Python was always an attraction for me as the language is a breeze to work with and enjoyable programming with it. Go is also a nice language to work with and it's really fast to boot. So I'm very excited about the language. --- # Open Source Contributions - March 2014 **URL**: https://avelino.run/foss/2014/03/ **Published**: 2014-03-01 **Word Count**: 495 words **Summary**: March 2014 saw 14 repositories contributing 47 total activities, including 27 issues and 7 pull requests, driving significant development and collaboration. Explore the contributions made in March 2014, highlighting the active participation across 14 repositories. This timeline showcases the various activities, including pushes, pull requests, and issues that shaped the month, reflecting a vibrant development community. ## 2014-03-30 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [New classifiers propose "Framework :: Opps" in pypi](https://github.com/opps/opps/issues/321) ## 2014-03-29 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Recursive Container Box QuerySet (Opps)](https://github.com/opps/opps/issues/320) - 🐛 Opened issue in [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): [Travis integration](https://github.com/bottlepy/bottle-werkzeug/issues/2) - 🐛 Opened issue in [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): [Fix README](https://github.com/bottlepy/bottle-werkzeug/issues/1) - 🐛 Opened issue in [bottlepy/bottle-redis](https://github.com/bottlepy/bottle-redis): [Travis integration](https://github.com/bottlepy/bottle-redis/issues/2) - 🐛 Opened issue in [bottlepy/bottle-redis](https://github.com/bottlepy/bottle-redis): [Fix README](https://github.com/bottlepy/bottle-redis/issues/1) - 🐛 Opened issue in [bottlepy/bottle-memcache](https://github.com/bottlepy/bottle-memcache): [Travis integration](https://github.com/bottlepy/bottle-memcache/issues/2) - 🐛 Opened issue in [bottlepy/bottle-memcache](https://github.com/bottlepy/bottle-memcache): [Fix README](https://github.com/bottlepy/bottle-memcache/issues/1) ## 2014-03-27 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [update Google App Engine docs url](https://github.com/bottlepy/bottle/pull/605) ## 2014-03-26 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [add Bottle Beaker plugin on docs plugin index](https://github.com/bottlepy/bottle/pull/604) ## 2014-03-25 - 🔀 Opened PR in [opps/opps-multimedias](https://github.com/opps/opps-multimedias): [Localbackend](https://github.com/opps/opps-multimedias/pull/2) - 🐛 Opened issue in [avelino/bottle-auth](https://github.com/avelino/bottle-auth): [Personal auth](https://github.com/avelino/bottle-auth/issues/1) ## 2014-03-19 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Export/import container box](https://github.com/opps/opps/issues/314) ## 2014-03-18 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Issue 310](https://github.com/opps/opps/pull/312) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [error on save content type (container) if no user mirror channel](https://github.com/opps/opps/issues/310) ## 2014-03-17 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [cron, scheduler cube process](https://github.com/mining/mining/issues/75) ## 2014-03-15 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Alternatively cube to create (not only SQL)](https://github.com/mining/mining/issues/74) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Merge, join, and concatenate API](https://github.com/mining/mining/issues/73) ## 2014-03-14 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [cube process status](https://github.com/mining/mining/issues/72) - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Bottle (run and reloader true) + gevent Exception in thread Thread-1:](https://github.com/bottlepy/bottle/issues/600) ## 2014-03-13 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Group By API](https://github.com/mining/mining/issues/71) ## 2014-03-12 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Fix sample websocket via gevent-websocket](https://github.com/bottlepy/bottle/pull/598) ## 2014-03-11 - 🔀 Opened PR in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Set new pypi to MongoDB Bottle Plugin](https://github.com/bottlepy/bottle/pull/596) - 🔀 Opened PR in [bottlepy/bottle-extras](https://github.com/bottlepy/bottle-extras): [Merge mongodb plugin](https://github.com/bottlepy/bottle-extras/pull/25) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Looking for Python 3.4](https://github.com/mining/mining/issues/69) ## 2014-03-10 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [User access](https://github.com/mining/mining/issues/68) - 🐛 Opened issue in [pandas-dev/pandas](https://github.com/pandas-dev/pandas): [BUG: impossible to select string with special character from DataFrame via query](https://github.com/pandas-dev/pandas/issues/6590) ## 2014-03-08 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Used MongoDB (Motor async drive) in Admin](https://github.com/mining/mining/issues/67) ## 2014-03-06 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [error on count max item on grid (pandas)](https://github.com/mining/mining/issues/65) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [order by to element render](https://github.com/mining/mining/issues/63) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [ support on mongodb storage](https://github.com/mining/mining/issues/61) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [support on hadoop storage (map reduce)](https://github.com/mining/mining/issues/60) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Element pagination](https://github.com/mining/mining/issues/59) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [using bottle + gevent (performance)](https://github.com/mining/mining/issues/58) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 4 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-mongo](https://github.com/bottlepy/bottle-mongo): 5 commit(s) - [See commits](https://github.com/bottlepy/bottle-mongo/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [mining/mining](https://github.com/mining/mining): 129 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 27 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-sqlite](https://github.com/bottlepy/bottle-sqlite): 3 commit(s) - [See commits](https://github.com/bottlepy/bottle-sqlite/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-extras](https://github.com/bottlepy/bottle-extras): 1 commit(s) - [See commits](https://github.com/bottlepy/bottle-extras/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-memcache](https://github.com/bottlepy/bottle-memcache): 1 commit(s) - [See commits](https://github.com/bottlepy/bottle-memcache/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-werkzeug](https://github.com/bottlepy/bottle-werkzeug): 1 commit(s) - [See commits](https://github.com/bottlepy/bottle-werkzeug/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-redis](https://github.com/bottlepy/bottle-redis): 1 commit(s) - [See commits](https://github.com/bottlepy/bottle-redis/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 24 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle-beaker](https://github.com/bottlepy/bottle-beaker): 8 commit(s) - [See commits](https://github.com/bottlepy/bottle-beaker/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [bottlepy/bottle](https://github.com/bottlepy/bottle): 4 commit(s) - [See commits](https://github.com/bottlepy/bottle/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) - 🔨 Push to [avelino/bottle-auth](https://github.com/avelino/bottle-auth): 30 commit(s) - [See commits](https://github.com/avelino/bottle-auth/commits?author=avelino&since=2014-03-01T00:00:00Z&until=2014-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Business Intelligence (BI) Application Server written in Python **URL**: https://avelino.run/business-intelligence-bi-application-server-written-in-python/ **Published**: 2014-02-21 **Tags**: bi, business, intelligence, python, application, tornado **Word Count**: 267 words I started a new project with the name [OpenMining](https://github.com/mining/mining), new application server written in Python. OpenMining is software for creating OLAP (online analytical processing) cubes (multi-dimensional) using Numpy, Scipy and Pandas for data management and flexibility in processing dynamical filters. Open-source provider of reporting, analysis, dashboard, data mining and workflow capabilities. ## Our goals - Business Intelligence software (Pentaho/Jaspersoft) alternative; - OLAP manager; - Generate report (grid, charts, pdf and etc); - Dashboard manager, link one or more element (report); - Easy dashboard generate; - Not one data is processed on the basis of source data; - Friendly interface; - Used websocket on cube load. ## Python libs used - Pandas - Numpy - numexpr - ipython - Tornado - SQLAlchemy - RQ - Riak client - Redis client - Memcached client ## More about OLAP cube A cube can be considered a generalization of a three-dimensional spreadsheet. For example, a company might wish to summarize financial data by product, by time-period, and by city to compare actual and budget expenses. Product, time, city and scenario (actual and budget) are the data's dimensions. Cube is a shortcut for multidimensional dataset, given that data can have an arbitrary number of dimensions. The term hypercube is sometimes used, especially for data with more than three dimensions. Each cell of the cube holds a number that represents some measure of the business, such as sales, profits, expenses, budget and forecast. OLAP data is typically stored in a star schema or snowflake schema in a relational data warehouse or in a special-purpose data management system. Measures are derived from the records in the fact table and dimensions are derived from the dimension tables. ## Contribute Star and fork in [github.com/mining/mining](https://github.com/mining/mining), send pull request! --- # Business Intelligence (BI) Application Server written in Python **URL**: https://avelino.run/business-intelligence-bi-application-server-written-in-python/ **Published**: 2014-02-21 **Tags**: bi, business, intelligence, python, python-en, application, tornado **Word Count**: 441 words I started a new project with the name [OpenMining](http://openmining.io), new application server written in **Python**. ![OpenMining](https://raw.githubusercontent.com/mining/frontend/master/assets/image/openmining.io.png#center "openmining.io") OpenMining is software for creating OLAP (online analytical processing) cubes (multi-dimensional) using Numpy, Scipy and Pandas for data management and flexibility in processing dynamical filters. Open-source provider of reporting, analysis, dashboard, data mining and workflow capabilities. ## Our goals - Business Intelligence software (Pentaho/Jaspersoft) alternative; - OLAP manager; - Generate report (grid, charts, pdf and etc); - Dashboard manager, link one or more element (report); - Easy dashboard generate; - Not one data is processed on the basis of source data; - Friendly interface; - Used websocket on *cube* load; ## Python libs used - Pandas - Numpy - numexpr - ipython - Tornado - SQLAlchemy - RQ - Riak client - Redis client - Memcached client ## More about OLAP cube A cube can be considered a generalization of a three-dimensional spreadsheet. For example, a company might wish to summarize financial data by product, by time-period, and by city to compare actual and budget expenses. Product, time, city and scenario (actual and budget) are the data's dimensions. Cube is a shortcut for multidimensional dataset, given that data can have an arbitrary number of dimensions. The term hypercube is sometimes used, especially for data with more than three dimensions. Each cell of the cube holds a number that represents some measure of the business, such as sales, profits, expenses, budget and forecast. OLAP data is typically stored in a star schema or snowflake schema in a relational data warehouse or in a special-purpose data management system. Measures are derived from the records in the fact table and dimensions are derived from the dimension tables. ## Screenshot ![Screenshot](https://raw.githubusercontent.com/mining/mining/master/docs/docs/img/dashboard-openmining.png) ![Screenshot](https://raw.githubusercontent.com/mining/mining/master/docs/docs/img/dashboard-filter-openmining.png) ![Screenshot](https://raw.githubusercontent.com/mining/mining/master/docs/docs/img/dashboard-apply-filter-openmining.png) ## The MIT License (MIT) Copyright (c) 2014 Thiago Avelino Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ## Contribute Star and fork in [github.com/mining/mining](https://github.com/mining/mining), send pull request! [Bug tracker](https://github.com/mining/mining/issues?state=open) --- # Open Source Contributions - February 2014 **URL**: https://avelino.run/foss/2014/02/ **Published**: 2014-02-01 **Word Count**: 409 words **Summary**: February 2014 saw significant contributions across 6 repositories, including 30 new issues and 203 commits, highlighting a productive month for the community. Explore the timeline of contributions for February 2014, showcasing the active engagement in six repositories. This month was marked by the opening of 30 issues and substantial code updates, including 203 commits, reflecting the collaborative spirit and ongoing development efforts within the community. ## 2014-02-27 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Cube query process test](https://github.com/mining/mining/issues/50) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [pie chart](https://github.com/mining/mining/issues/48) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Export as filter apply](https://github.com/mining/mining/issues/47) ## 2014-02-21 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Delete handler removed hierarchy objects](https://github.com/mining/mining/issues/46) ## 2014-02-20 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Add delete item (admin)](https://github.com/mining/mining/issues/45) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Status on cube process (load)](https://github.com/mining/mining/issues/44) ## 2014-02-19 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [start task on create/update cube](https://github.com/mining/mining/issues/43) ## 2014-02-18 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Refactoring in chart javascript](https://github.com/mining/mining/issues/42) ## 2014-02-14 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [update process api, used websocket](https://github.com/mining/mining/pull/41) ## 2014-02-13 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Add filter bottun on element grid](https://github.com/mining/mining/issues/36) ## 2014-02-12 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Stream API](https://github.com/mining/mining/issues/31) ## 2014-02-11 - 🔀 Opened PR in [mining/mining](https://github.com/mining/mining): [Fix issue #23](https://github.com/mining/mining/pull/25) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [crash import, used 12G of memory and kill script](https://github.com/mining/mining/issues/23) ## 2014-02-10 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Field alias on cube generator](https://github.com/mining/mining/issues/22) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Custom element (interface) grid](https://github.com/mining/mining/issues/21) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [PDF export](https://github.com/mining/mining/issues/19) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Interface](https://github.com/mining/mining/issues/18) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [CSV export](https://github.com/mining/mining/issues/17) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Add title on chart](https://github.com/mining/mining/issues/16) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [breaking fields description on admin selected field](https://github.com/mining/mining/issues/14) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [check exist dashboard](https://github.com/mining/mining/issues/12) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Manage patterns](https://github.com/mining/mining/issues/11) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Environment plugins](https://github.com/mining/mining/issues/10) ## 2014-02-07 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Configurate CI environment](https://github.com/mining/mining/issues/9) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Configurate docs environment](https://github.com/mining/mining/issues/8) ## 2014-02-04 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Auto reload form choices (meta data)](https://github.com/mining/mining/issues/7) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Customize element grid with ng-grid](https://github.com/mining/mining/issues/6) ## 2014-02-03 - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [List all dashboard](https://github.com/mining/mining/issues/5) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Render more than one element item crash chart](https://github.com/mining/mining/issues/4) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [settings in file](https://github.com/mining/mining/issues/3) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Create dynamic filter via field type (get via sql query)](https://github.com/mining/mining/issues/2) - 🐛 Opened issue in [mining/mining](https://github.com/mining/mining): [Used SQLAlchemy (PostgreSQL) in Admin](https://github.com/mining/mining/issues/1) ## Commits - 🔨 Push to [mining/mining](https://github.com/mining/mining): 203 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-02-01T00:00:00Z&until=2014-02-28T23:59:59Z) - 🔨 Push to [avelino/riak-dashboard](https://github.com/avelino/riak-dashboard): 43 commit(s) - [See commits](https://github.com/avelino/riak-dashboard/commits?author=avelino&since=2014-02-01T00:00:00Z&until=2014-02-28T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 5 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2014-02-01T00:00:00Z&until=2014-02-28T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 2 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-02-01T00:00:00Z&until=2014-02-28T23:59:59Z) - 🔨 Push to [opps/opps-feedcrawler](https://github.com/opps/opps-feedcrawler): 1 commit(s) - [See commits](https://github.com/opps/opps-feedcrawler/commits?author=avelino&since=2014-02-01T00:00:00Z&until=2014-02-28T23:59:59Z) - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 1 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2014-02-01T00:00:00Z&until=2014-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2014 **URL**: https://avelino.run/foss/2014/01/ **Published**: 2014-01-01 **Word Count**: 69 words **Summary**: January 2014 saw impactful contributions across 4 repositories, with 91 total commits boosting project development and collaboration. In January 2014, contributions surged across four key repositories, showcasing a collaborative spirit and dedication to project enhancement. This timeline highlights significant push events that shaped the month. ## Commits - 🔨 Push to [mining/mining](https://github.com/mining/mining): 87 commit(s) - [See commits](https://github.com/mining/mining/commits?author=avelino&since=2014-01-01T00:00:00Z&until=2014-01-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 3 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2014-01-01T00:00:00Z&until=2014-01-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2014-01-01T00:00:00Z&until=2014-01-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 1 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2014-01-01T00:00:00Z&until=2014-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Corretor Ortográfico no VIM **URL**: https://avelino.run/corretor-ortogr%C3%A1fico-no-vim/ **Published**: 2013-12-07 **Tags**: open-source, vim, libreoffice, vero **Word Count**: 190 words ![Corretor Ortográfico dentro do VIM](/vim-libreoffice-vero.png#center) Desde 2007 escrevo aqui no meu blog, com isso já passei por diversas plataforma de blog (Blogspot, Wordpress, Django, [Django Diario](https://bitbucket.org/semente/django-diario), [Pelican](http://docs.getpelican.com/), entre outras), hoje estou usando [liquidluck](http://liquidluck.readthedocs.org/en/latest/index.html) (ferramenta escrita em Tornado Python para gerar arquivos estático), minha escolha para essa mudança foi simplificar o processo de escrever texto, ou seja, usar o que eu uso no dia a dia para programar, com isso tive algumas perda como corretor ortográfo! Olhando o [LibreOffice](http://www.libreoffice.org/) achei o plugin chamado [VERO – VERificador Ortográfico](http://pt-br.libreoffice.org/projetos/projeto-vero-verificador-ortografico/), e para mim seria excelente ter ele dentro do VIM, pois bem consegui fazer o que eu queria, usar o VERO dentro do VIM. ## Instalando o VERO Primeiro precisamos baixar o *plugin* VERO (vou criar uma pasta dentro do /var/tmp para deixar centralizado os arquivos) e descompactar mkdir /var/tmp/vero cd /var/tmp/vero wget http://extensions.libreoffice.org/extension-center/vero-verificador-ortografico-e-hifenizador-em-portugues-do-brasil/pscreleasefolder.2012-01-04.1563120832/2.1/vero_pt_br_v210aoc.oxt unzip -x vero_pt_br_v210aoc.oxt Abra o `vim` e digite: mkspell pt pt_BR Precisamos colocar um configuração dentro com seu `.vimrc`: echo 'set spell spelllang=pt' >> ~/.vimrc Precione enter até acabar todas as perguntas e pronto você tem o VERO instalado dentro do seu VIM, agora basta usar o corretor ortográfo! Conheça o [vim-bootstrap](https://vim-bootstrap.com/), gerador de configuração vim. --- # Open Source Contributions - December 2013 **URL**: https://avelino.run/foss/2013/12/ **Published**: 2013-12-01 **Word Count**: 189 words **Summary**: Discover the impactful contributions made in December 2013, featuring 14 repositories with 12 pushes, 3 issues, and a notable pull request. December 2013 was a month of significant activity, showcasing contributions across 14 repositories. This timeline highlights key events, including a variety of pushes, issues opened, and a notable pull request, reflecting the collaborative spirit and ongoing development efforts within the community. ## 2013-12-08 - 🔀 Opened PR in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [Fix install quokka, issue #115](https://github.com/quokkaproject/quokka/pull/116) - 🐛 Opened issue in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [Error on setup install](https://github.com/quokkaproject/quokka/issues/115) ## 2013-12-07 - 🐛 Opened issue in [quokkaproject/quokka](https://github.com/quokkaproject/quokka): [Not location quokka-admin.py file on setup.py develop](https://github.com/quokkaproject/quokka/issues/113) - 🐛 Opened issue in [bottlepy/bottle](https://github.com/bottlepy/bottle): [Two repo for this project?](https://github.com/bottlepy/bottle/issues/565) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 3 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 1 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps-project-template](https://github.com/opps/opps-project-template): 2 commit(s) - [See commits](https://github.com/opps/opps-project-template/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps-comments](https://github.com/opps/opps-comments): 8 commit(s) - [See commits](https://github.com/opps/opps-comments/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps-hubcasts](https://github.com/opps/opps-hubcasts): 3 commit(s) - [See commits](https://github.com/opps/opps-hubcasts/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps-social](https://github.com/opps/opps-social): 7 commit(s) - [See commits](https://github.com/opps/opps-social/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 49 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps-piston](https://github.com/opps/opps-piston): 7 commit(s) - [See commits](https://github.com/opps/opps-piston/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 1 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 3 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-12-01T00:00:00Z&until=2013-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Prazo no desenvolvimento de software, qual é a ciência exata? **URL**: https://avelino.run/prazo-no-desenvolvimento-de-software-qual-%C3%A9-a-ci%C3%AAncia-exata/ **Published**: 2013-11-19 **Tags**: opinioes, agile, software **Word Count**: 473 words ![Pensando igual macaco](/macaco-pensando-tragarte.jpg#center) Falar de prazo é uma tarefa muito complicada hoje e sempre, pois não existe uma ciência exata (tirando 42), outro ponto que prazo é uma promessa e consequentemente promessa tem que ser cumprida (e você vai fazer de tudo para cumpri-las), com isso trabalhar muito mais para cumprir o que você assumiu (prazo). Levantando conteúdo para esse blogpost achei no Quora o seguinte topico ["What is the hardest thing you do as a software engineer?"](https://www.quora.com/Software-Engineering/What-is-the-hardest-thing-you-do-as-a-software-engineer) (Qual a coisa mais difícil para um engenheiro de software?) e os termos que tem haver com tempo, prazo, horas e etc são os mais falado. Sou engenheiro de software a mais de 7 anos de experiência passando por diversas empresas, mercados, equipes, é que praticamente todo engenheiro de software que conheci começa com a premissa que "código" é o objetivo e a solução de todo problema. Para falar mais sobre esse assunto acho necessário sairmos de nossa área de atuação (desenvolvimento de software) e olhar outras área: - Ilustrador - Produtor de video - Design - Entre outras profissão que trabalha com a mente… As áreas relatadas acima trabalham com uma parte mais intelectual onde precisa ter a criatividade para conseguir produzir um conteúdo. Esse final de semana estava almoçando com outros desenvolvedores e um deles foi no evento InterCon onde um palestrante estava apresentando um case de um video de no máximo 1 minuto onde esse 1 minuto envolvia no minimo 5 profissionais e a produtora levou media de 5 mês para desenvolver esse projeto. Desenvolvimento de software não é diferente das área relatada acima, é uma área intelectual onde você precisa pensar como o software escalar, se o banco de dados relacional vai se sair bem na hora que tiver muito trafego (caso não, qual é a melhor alternativa), qual é melhor design pattern para a implementação a ser feita e outros pontos que envolvem o desenvolvimento de software. Então aprendam a primeira e mais difícil verdade do mundo: Software normalmente não é resolvido com Software, é resolvido com capacidades Humanas. Numa distribuição de Paretto eu diria que 80% de todo problema de software somente é resolvido quando você investe aqueles 20% restantes em Comunicação, Articulação, Pensamento Claro e Racional, quebra Ambiguidades, Negociação, Compromisso. Quando você passa um prazo (faz uma promessa) você vai ter que assumir o risco que a proposta inicial vai realmente resolver o problema proposto, e isso nem sempre é possível pois estamos trabalhando com tecnologia e a evolução é constando. Outra que nos engenheiro de software não somos maquinas onde usamos software para escrever software e sim uma cabeça pensante de onde sai toda a logica. Dito isso, é possível cumprir todas as promessas? Não, infelizmente não é. Mas é nossa responsabilidade como profissionais estar sempre em busca desse ideal, não criar maneiras de evitá-las. Ou seja, não existe uma ciência exata para prazo! --- # Open Source Contributions - November 2013 **URL**: https://avelino.run/foss/2013/11/ **Published**: 2013-11-01 **Word Count**: 242 words **Summary**: November 2013 saw 10 repositories contributing 20 events, including 13 issues opened, reflecting active community engagement and development progress. Explore the significant contributions made in November 2013 across various repositories. This timeline highlights key events, including issue openings and code pushes, showcasing the collaborative efforts of developers during this month. ## 2013-11-29 - 🐛 Opened issue in [avelino/nacho](https://github.com/avelino/nacho): [Rewrite used asyncio (Python 3.4)](https://github.com/avelino/nacho/issues/9) - 🐛 Opened issue in [django-tastypie/django-tastypie](https://github.com/django-tastypie/django-tastypie): [Error on POST "No JSON object could be decoded"](https://github.com/django-tastypie/django-tastypie/issues/1087) ## 2013-11-26 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [get queryset (Boxes) on get_containerbox if exist queryset (field)](https://github.com/opps/opps/issues/288) ## 2013-11-19 - 🐛 Opened issue in [avelino/.vimrc](https://github.com/avelino/.vimrc): [Conflict plugin CamelCaseMotion and ctrlp.vim](https://github.com/avelino/.vimrc/issues/16) ## 2013-11-15 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Fix celery conf run in redis](https://github.com/opps/opps/issues/281) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Remove API Views (DetailView and ListView)](https://github.com/opps/opps/issues/280) ## 2013-11-13 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Update fixture example](https://github.com/opps/opps/issues/276) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Logging application (on contrib)](https://github.com/opps/opps/issues/275) - 🐛 Opened issue in [avelino/quik](https://github.com/avelino/quik): [Change IF syntax](https://github.com/avelino/quik/issues/7) ## 2013-11-08 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Filter on context view](https://github.com/opps/opps/issues/273) ## 2013-11-04 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Fix sitemap test on django >= 1.6](https://github.com/opps/opps/issues/272) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Used tox for test running at more environment](https://github.com/opps/opps/issues/271) ## 2013-11-02 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps API not open](https://github.com/opps/opps/issues/269) ## Commits - 🔨 Push to [opps/opps](https://github.com/opps/opps): 61 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-11-01T00:00:00Z&until=2013-11-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 6 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-11-01T00:00:00Z&until=2013-11-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 6 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-11-01T00:00:00Z&until=2013-11-30T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 5 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2013-11-01T00:00:00Z&until=2013-11-30T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 4 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2013-11-01T00:00:00Z&until=2013-11-30T23:59:59Z) - 🔨 Push to [opps/opps-social](https://github.com/opps/opps-social): 4 commit(s) - [See commits](https://github.com/opps/opps-social/commits?author=avelino&since=2013-11-01T00:00:00Z&until=2013-11-30T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 1 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-11-01T00:00:00Z&until=2013-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # A volta dos que nao foram, software livre para sempre **URL**: https://avelino.run/a-volta-dos-que-nao-foram-software-livre-para-sempre/ **Published**: 2013-10-26 **Tags**: open-source, workstation, desktop **Word Count**: 507 words ![Chromebook Pixel; MacBook Pro Retina display (Image: ZDNet)](/google-apple-v1-600x338.jpg#center) Durante 5 anos usei o sistema operacional da Apple (OS X), o OS X é um ótimo sistema operacional principalmente o ambiente gráfico que é sensassional, sistema de áudio entre outros recursos, os 3 primeiro anos usei sem problema nem um ate que a Apple veio com uma historia de cobrar pelo Xcode (The Xcode interface seamlessly integrates code editing, UI design with Interface Builder, testing, and debugging, all within a single window. The embedded Apple LLVM compiler underlines coding mistakes as you type, and is even smart enough to fix the problems for you automatically), ou seja, é a IDE para escrever projetos para plataforma Apple (OS X e iOS) mais o compilador vugo GCC, essa foi a gota d'agua, eles estavam vendendo o GCC, mas como eu já tinha me acostumado com o ambiente (que não é um trabalho muito complicado pois a Apple faz ótimos produtos) não quiz parar de usar e comprei o Xcode, depois de um tempo a Apple voltou a traz colocando novamente de graça. Depois dessa dramática historia acima comecei olhar valores de notebook (e ultrabook) a tentativa de parar de usar OS X, logo após olhar valores fica pensando, acho que não vou conseguir voltar usar Linux como estação de trabalho novamente pois vou sentir falta dos aplicativos Apple e deixei a ideia para lá, e nisso se passou mais 1 ano. Ate que parei para refletir o que eu usava do OS X, segue abaixo a lista de aplicativos: * iTerm2 * vim (via linha de comando) * Python * ssh * PostgreSQL * Chrome (e diversos serviços web) Ou seja, tudo que eu usava e acha que iria sentir falta eu conseguiria rodar em Linux. Logo depois dessa reflexão eu lembrei que tinha ganhado um CR-48 (Chromebook) do Google e resolvi começa brinca com ele para ver como era à experiência, apesar da maquina não ser potente como o Macbook Retina (i7) que eu usava estava atendendo minha necessidade, a primeira vista é um notebook que tem apenas um Chrome e com isso todos os serviços web funciona perfeitamente. Olhando o Chrome OS mais de perto vi que é um Linux (baseado em Gentoo) ao meu ver o Google fez um ótimo trabalho principalmente no ambiente X (mais para frente escrevo um blog post falando sobre o que achei do Chrome OS). Depois desse lero lero todo, achei uma distribuição Linux que atendia minha necessidade ( browser e console para desenvolver), para quem não sabe é possível instalar Linux via chroot dentro de uma pasta no Chrome OS. Eis que resolvi compra o Chromebook Pixel, que por sinal tem uma hardware ótimo para trabalhar com Chrome OS. ![Caixa do Chromebook Pixel](/chromebook-pixel-original-google-wifi_MLB-F-5181568472_102013.jpg#center) Estou trabalhando a uma semana no Chrome OS e ate agora não tive necessidade de pegar o Macbook para nada, ou seja, voltei usar Linux e agora posso dizer novamente que não uso nem um software propietario no meu notebook. Tudo que achei que iria sentir falta do ambiente Apple era nada mais nada menos que coisa da minha cabeça. **Estou de volta ao desktop livre.** --- # Open Source Contributions - October 2013 **URL**: https://avelino.run/foss/2013/10/ **Published**: 2013-10-01 **Word Count**: 354 words **Summary**: October 2013 saw 14 repositories with 31 contributions, including 13 issues opened and 4 pull requests, highlighting active development and collaboration. Explore the timeline of contributions for October 2013, showcasing a dynamic month filled with significant activity across 14 repositories. Key highlights include the opening of 13 issues and 4 pull requests, reflecting the community's ongoing commitment to improvement and collaboration in various projects. ## 2013-10-29 - 🔀 Opened PR in [Japle/python-pagseguro](https://github.com/Japle/python-pagseguro): [fix typo, `Congigurando` to `Configurando`](https://github.com/Japle/python-pagseguro/pull/1) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Add field title_url on containerbox](https://github.com/opps/opps/issues/267) ## 2013-10-28 - 🔀 Opened PR in [rochacbruno-archive/dotfiles](https://github.com/rochacbruno-archive/dotfiles): [Fix .emacs.d home folder](https://github.com/rochacbruno-archive/dotfiles/pull/1) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Mobile detect not bringing this path (url)](https://github.com/opps/opps/issues/265) ## 2013-10-26 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Write Opps documentation style (inspiration from the flask clean)](https://github.com/opps/opps/issues/262) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Fix docs organize](https://github.com/opps/opps/issues/261) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Changelog organize](https://github.com/opps/opps/issues/260) ## 2013-10-19 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Tags: IntegrityError: duplicate key value violates unique constraint "containers_container_site_id_667d10f0ba0b8f9f_uniq"](https://github.com/opps/opps/issues/256) ## 2013-10-18 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Memory leak on run Opps in Gunicorn (after a while it is running)](https://github.com/opps/opps/issues/255) ## 2013-10-16 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Bug #250: in boxe queryset (dynamic) removed Mirror](https://github.com/opps/opps/issues/254) ## 2013-10-15 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Write Riak drive on opps.db](https://github.com/opps/opps/issues/253) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Generate PDF in real time all containers](https://github.com/opps/opps/issues/252) ## 2013-10-14 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Fixed #250 (More one channel per container)](https://github.com/opps/opps/pull/251) ## 2013-10-12 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [More one channel per container](https://github.com/opps/opps/issues/250) ## 2013-10-09 - 🐛 Opened issue in [avelino/django-tags](https://github.com/avelino/django-tags): [implement get_tags](https://github.com/avelino/django-tags/issues/1) ## 2013-10-04 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Opps.contrib.notifications](https://github.com/opps/opps/pull/246) ## 2013-10-01 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [opps.notification](https://github.com/opps/opps/issues/241) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 13 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 8 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [Japle/python-pagseguro](https://github.com/Japle/python-pagseguro): 1 commit(s) - [See commits](https://github.com/Japle/python-pagseguro/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [opps/opps-goalserve](https://github.com/opps/opps-goalserve): 3 commit(s) - [See commits](https://github.com/opps/opps-goalserve/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [avelino/django-tags](https://github.com/avelino/django-tags): 18 commit(s) - [See commits](https://github.com/avelino/django-tags/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [opps/opps-social](https://github.com/opps/opps-social): 7 commit(s) - [See commits](https://github.com/opps/opps-social/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 118 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 4 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [PostmonAPI/postmon](https://github.com/PostmonAPI/postmon): 10 commit(s) - [See commits](https://github.com/PostmonAPI/postmon/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [rochacbruno-archive/dotfiles](https://github.com/rochacbruno-archive/dotfiles): 1 commit(s) - [See commits](https://github.com/rochacbruno-archive/dotfiles/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [plone/plone.recipe.codeanalysis](https://github.com/plone/plone.recipe.codeanalysis): 1 commit(s) - [See commits](https://github.com/plone/plone.recipe.codeanalysis/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 3 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 8 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) - 🔨 Push to [avelino/.emacs](https://github.com/avelino/.emacs): 11 commit(s) - [See commits](https://github.com/avelino/.emacs/commits?author=avelino&since=2013-10-01T00:00:00Z&until=2013-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2013 **URL**: https://avelino.run/foss/2013/09/ **Published**: 2013-09-01 **Word Count**: 400 words **Summary**: September 2013 saw significant activity with 19 repositories, 20 new issues, and 37 total contributions, highlighting a month of collaboration and development. Explore the timeline of contributions for September 2013, where developers engaged in 19 repositories, opened 20 issues, and made 37 total contributions. This month reflects a vibrant collaboration within the community, marked by key developments and discussions that shaped the ongoing projects. ## 2013-09-30 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Package opps.contrib.db_backend migrate to opps.db.backends.postgresql_psycopg2](https://github.com/opps/opps/issues/240) ## 2013-09-27 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [create custom field environment](https://github.com/opps/opps/pull/238) ## 2013-09-26 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Add dynamic custom field on container type (class extend container)](https://github.com/opps/opps/issues/237) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Remove simplejson](https://github.com/opps/opps/issues/235) ## 2013-09-25 - 🐛 Opened issue in [django-haystack/django-haystack](https://github.com/django-haystack/django-haystack): [Switch to official Python Elasticsearch client](https://github.com/django-haystack/django-haystack/issues/865) ## 2013-09-22 - 🐛 Opened issue in [avelino/quik](https://github.com/avelino/quik): [cache on render template html](https://github.com/avelino/quik/issues/5) ## 2013-09-20 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Not get father template](https://github.com/opps/opps/issues/234) ## 2013-09-13 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [create channel name blacklist](https://github.com/opps/opps/issues/229) ## 2013-09-12 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [bug save channel parent with more than 2 levels](https://github.com/opps/opps/issues/227) ## 2013-09-10 - 🐛 Opened issue in [Homebrew/homebrew-cask](https://github.com/Homebrew/homebrew-cask): [Error: Failure while executing: git clone --depth 1 --branch v0.16.0 ](https://github.com/Homebrew/homebrew-cask/issues/1003) ## 2013-09-09 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Source field (engine) change to text field](https://github.com/opps/opps/issues/225) ## 2013-09-05 - 🐛 Opened issue in [avelino/quik](https://github.com/avelino/quik): [New syntax to methods](https://github.com/avelino/quik/issues/4) - 🐛 Opened issue in [avelino/nacho](https://github.com/avelino/nacho): [Signals engine](https://github.com/avelino/nacho/issues/7) - 🐛 Opened issue in [avelino/nacho](https://github.com/avelino/nacho): [Static file engine](https://github.com/avelino/nacho/issues/6) - 🐛 Opened issue in [avelino/nacho](https://github.com/avelino/nacho): [Session engine (default cookeis)](https://github.com/avelino/nacho/issues/5) - 🐛 Opened issue in [avelino/nacho](https://github.com/avelino/nacho): [Tracebacks view](https://github.com/avelino/nacho/issues/4) - 🐛 Opened issue in [maddyblue/goread](https://github.com/maddyblue/goread): [Get new feed via SSE](https://github.com/maddyblue/goread/issues/243) ## 2013-09-04 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-goalserve] remove dependency on closed project](https://github.com/opps/opps/issues/220) ## 2013-09-03 - 🐛 Opened issue in [avelino/quik](https://github.com/avelino/quik): [create filter (template tag) engine](https://github.com/avelino/quik/issues/3) - 🐛 Opened issue in [avelino/quik](https://github.com/avelino/quik): [create block engine](https://github.com/avelino/quik/issues/2) - 🐛 Opened issue in [avelino/quik](https://github.com/avelino/quik): [create macros engine](https://github.com/avelino/quik/issues/1) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 3 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-sponsor](https://github.com/opps/opps-sponsor): 1 commit(s) - [See commits](https://github.com/opps/opps-sponsor/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-blogs](https://github.com/opps/opps-blogs): 1 commit(s) - [See commits](https://github.com/opps/opps-blogs/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 11 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-project-template](https://github.com/opps/opps-project-template): 3 commit(s) - [See commits](https://github.com/opps/opps-project-template/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-promos](https://github.com/opps/opps-promos): 1 commit(s) - [See commits](https://github.com/opps/opps-promos/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-feedcrawler](https://github.com/opps/opps-feedcrawler): 1 commit(s) - [See commits](https://github.com/opps/opps-feedcrawler/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-goalserve](https://github.com/opps/opps-goalserve): 10 commit(s) - [See commits](https://github.com/opps/opps-goalserve/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-hubcasts](https://github.com/opps/opps-hubcasts): 1 commit(s) - [See commits](https://github.com/opps/opps-hubcasts/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 155 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-polls](https://github.com/opps/opps-polls): 1 commit(s) - [See commits](https://github.com/opps/opps-polls/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 21 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [avelino/quik](https://github.com/avelino/quik): 66 commit(s) - [See commits](https://github.com/avelino/quik/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [opps/opps-ganalytics](https://github.com/opps/opps-ganalytics): 3 commit(s) - [See commits](https://github.com/opps/opps-ganalytics/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [avelino/nacho](https://github.com/avelino/nacho): 44 commit(s) - [See commits](https://github.com/avelino/nacho/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) - 🔨 Push to [avelino/Flask-Quik](https://github.com/avelino/Flask-Quik): 16 commit(s) - [See commits](https://github.com/avelino/Flask-Quik/commits?author=avelino&since=2013-09-01T00:00:00Z&until=2013-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # New web framework asynchronous to Python 3 **URL**: https://avelino.run/new-web-framework-asynchronous-to-python-3/ **Published**: 2013-08-11 **Tags**: python, python-en, nacho, async, framework **Word Count**: 85 words I started a new project with the name nacho, **asynchronous** web framework for **Python 3**. ![Nacho Python3 Web Framework](/blog/nacho.png#center) ## Our goals * It was designed to work on Python 3.x * Some of syntax were inspired on Tornado's syntax * Tornado is the default server, but Eventlet is stable as well * Templates are done by Jinja2 * HTML5 as the big-main-thing * Work friendly with NoSQL (otherwise we should stop talking about them) * Handle asynchronous requests properly ## Example ```python class MainHandler(ApplicationController): def get(self): data = {'title': 'testando lero lero'} self.render("home.html", **data) r = Routers([(r"/", MainHandler),]) ``` --- # Open Source Contributions - August 2013 **URL**: https://avelino.run/foss/2013/08/ **Published**: 2013-08-01 **Word Count**: 247 words **Summary**: August 2013 saw 20 repositories contribute 23 events, including 19 pushes and 2 issues, showcasing significant development activity in the open-source community. Explore the contributions made in August 2013, highlighting a month filled with robust development efforts across 20 repositories. This timeline details various events, including pushes, pull requests, and issues, reflecting the active engagement of developers in enhancing projects. ## 2013-08-23 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [organizing structure conf file](https://github.com/opps/opps/issues/209) ## 2013-08-17 - 🐛 Opened issue in [jazzband/django-polymorphic](https://github.com/jazzband/django-polymorphic): [Charset error in polymorphic](https://github.com/jazzband/django-polymorphic/issues/54) ## 2013-08-08 - 🔀 Opened PR in [mongodb/mongo-python-driver](https://github.com/mongodb/mongo-python-driver): [Add Django MongoEngine to Framework tools page of docs](https://github.com/mongodb/mongo-python-driver/pull/193) - 🔀 Opened PR in [mongodb/mongo-python-driver](https://github.com/mongodb/mongo-python-driver): [Fix link MongoEngine to tools page of docs](https://github.com/mongodb/mongo-python-driver/pull/192) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 7 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 6 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-blogs](https://github.com/opps/opps-blogs): 21 commit(s) - [See commits](https://github.com/opps/opps-blogs/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [django/django-localflavor](https://github.com/django/django-localflavor): 3 commit(s) - [See commits](https://github.com/django/django-localflavor/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 3 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-registration](https://github.com/opps/opps-registration): 1 commit(s) - [See commits](https://github.com/opps/opps-registration/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-project-template](https://github.com/opps/opps-project-template): 2 commit(s) - [See commits](https://github.com/opps/opps-project-template/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [MongoEngine/django-mongoengine](https://github.com/MongoEngine/django-mongoengine): 13 commit(s) - [See commits](https://github.com/MongoEngine/django-mongoengine/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-promos](https://github.com/opps/opps-promos): 1 commit(s) - [See commits](https://github.com/opps/opps-promos/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [mongodb/mongo-python-driver](https://github.com/mongodb/mongo-python-driver): 3 commit(s) - [See commits](https://github.com/mongodb/mongo-python-driver/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [avelino/django-routers](https://github.com/avelino/django-routers): 4 commit(s) - [See commits](https://github.com/avelino/django-routers/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-hubcasts](https://github.com/opps/opps-hubcasts): 1 commit(s) - [See commits](https://github.com/opps/opps-hubcasts/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 126 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-polls](https://github.com/opps/opps-polls): 1 commit(s) - [See commits](https://github.com/opps/opps-polls/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-timelinejs](https://github.com/opps/opps-timelinejs): 1 commit(s) - [See commits](https://github.com/opps/opps-timelinejs/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 12 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 2 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [avelino/nacho](https://github.com/avelino/nacho): 34 commit(s) - [See commits](https://github.com/avelino/nacho/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 6 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-08-01T00:00:00Z&until=2013-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - July 2013 **URL**: https://avelino.run/foss/2013/07/ **Published**: 2013-07-01 **Word Count**: 436 words **Summary**: July 2013 saw 17 repositories, 22 issues opened, and 13 pushes, showcasing significant activity and collaboration in the development community. Explore the timeline of contributions for July 2013, highlighting a month of robust activity with 17 repositories involved. This period featured 22 new issues raised and 13 pushes, reflecting the collaborative spirit and ongoing development efforts across multiple projects. ## 2013-07-28 - 🔀 Opened PR in [MongoEngine/django-mongoengine](https://github.com/MongoEngine/django-mongoengine): [basic fixed to run the project in Django 1.5](https://github.com/MongoEngine/django-mongoengine/pull/16) - 🐛 Opened issue in [MongoEngine/django-mongoengine](https://github.com/MongoEngine/django-mongoengine): [Create new Admin](https://github.com/MongoEngine/django-mongoengine/issues/17) ## 2013-07-26 - 🐛 Opened issue in [mps/GittyFeedback](https://github.com/mps/GittyFeedback): [Add star in repo via app](https://github.com/mps/GittyFeedback/issues/131) ## 2013-07-25 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Opps tags](https://github.com/opps/opps/pull/180) ## 2013-07-23 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Channel convention for external applications](https://github.com/opps/opps/issues/179) ## 2013-07-19 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Register all Opps App on pypi](https://github.com/opps/opps/issues/171) ## 2013-07-18 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps Admin theme custom](https://github.com/opps/opps/issues/166) ## 2013-07-17 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Container box aggregation](https://github.com/opps/opps/issues/165) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-feedcrawler] write yaml processor](https://github.com/opps/opps/issues/164) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-facebook-comments] Facebook is limiting Batch Requests](https://github.com/opps/opps/issues/163) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-polls] Allow multiple channel relationship](https://github.com/opps/opps/issues/162) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-polls] Multiple votes control](https://github.com/opps/opps/issues/161) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-feedcrawler] Management command is not recognized by django manage.py](https://github.com/opps/opps/issues/160) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-feedcrawler] Implement celery task to refresh_feeds](https://github.com/opps/opps/issues/159) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-feedcrawler] Create actions](https://github.com/opps/opps/issues/158) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-feedcrawler] Feed sync from file (yaml, json and ...)](https://github.com/opps/opps/issues/157) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [[opps-multimedias] Remove UOLmaislib dependency](https://github.com/opps/opps/issues/156) ## 2013-07-16 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps tag](https://github.com/opps/opps/issues/150) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Custo all admin for use in opps.contrib.admin](https://github.com/opps/opps/issues/149) ## 2013-07-13 - 🔀 Opened PR in [pythonbrasil/conference2013](https://github.com/pythonbrasil/conference2013): [Fix subject email confirmation, Conference number [7] to [9]](https://github.com/pythonbrasil/conference2013/pull/1) - 🔀 Opened PR in [pythonbrasil/apyb.conference](https://github.com/pythonbrasil/apyb.conference): [Fix conference name, replace all `[7]` to `[9]`](https://github.com/pythonbrasil/apyb.conference/pull/1) - 🐛 Opened issue in [Homebrew/legacy-homebrew](https://github.com/Homebrew/legacy-homebrew): [Juju for OS X](https://github.com/Homebrew/legacy-homebrew/issues/21191) ## 2013-07-08 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Support Python 3.x](https://github.com/opps/opps/issues/148) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Generic image library (remove the thumbor dependecy)](https://github.com/opps/opps/issues/147) ## 2013-07-07 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [App fileupload (used for mass upload) join Opps Contrib](https://github.com/opps/opps/issues/146) ## 2013-07-06 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Add compatibility with Django 1.6](https://github.com/opps/opps/issues/145) ## Commits - 🔨 Push to [opps/opps-gamification](https://github.com/opps/opps-gamification): 16 commit(s) - [See commits](https://github.com/opps/opps-gamification/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 3 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [django/django-localflavor](https://github.com/django/django-localflavor): 1 commit(s) - [See commits](https://github.com/django/django-localflavor/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 1 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [opps/opps-project-template](https://github.com/opps/opps-project-template): 13 commit(s) - [See commits](https://github.com/opps/opps-project-template/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [MongoEngine/django-mongoengine](https://github.com/MongoEngine/django-mongoengine): 12 commit(s) - [See commits](https://github.com/MongoEngine/django-mongoengine/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [opps/opps-hubcasts](https://github.com/opps/opps-hubcasts): 11 commit(s) - [See commits](https://github.com/opps/opps-hubcasts/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 183 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [opps/opps-liveblogging](https://github.com/opps/opps-liveblogging): 42 commit(s) - [See commits](https://github.com/opps/opps-liveblogging/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [avelino/irccloud-chrome](https://github.com/avelino/irccloud-chrome): 2 commit(s) - [See commits](https://github.com/avelino/irccloud-chrome/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [opps/opps-ganalytics](https://github.com/opps/opps-ganalytics): 1 commit(s) - [See commits](https://github.com/opps/opps-ganalytics/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [opps/oppsproject.org](https://github.com/opps/oppsproject.org): 16 commit(s) - [See commits](https://github.com/opps/oppsproject.org/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-07-01T00:00:00Z&until=2013-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - June 2013 **URL**: https://avelino.run/foss/2013/06/ **Published**: 2013-06-01 **Word Count**: 174 words **Summary**: June 2013 saw significant contributions with 12 repositories and 15 total events, including 11 pushes and 4 issues opened, showcasing ongoing development and community engagement. In June 2013, the development community experienced a productive month marked by 12 active repositories. This timeline highlights key contributions, including substantial pushes and newly opened issues, reflecting the team's dedication to enhancing the projects. ## 2013-06-26 - 🐛 Opened issue in [jazzband/django-taggit](https://github.com/jazzband/django-taggit): [Slow on save (100110 tags)](https://github.com/jazzband/django-taggit/issues/138) ## 2013-06-13 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps Admin (Django xAdmin)](https://github.com/opps/opps/issues/135) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps generic view 0.2](https://github.com/opps/opps/issues/134) ## 2013-06-07 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Dynamic template via drag an drop](https://github.com/opps/opps/issues/127) ## Commits - 🔨 Push to [opps/opps-gamification](https://github.com/opps/opps-gamification): 4 commit(s) - [See commits](https://github.com/opps/opps-gamification/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-blogs](https://github.com/opps/opps-blogs): 24 commit(s) - [See commits](https://github.com/opps/opps-blogs/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 3 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [avelino/python-opencv-detect](https://github.com/avelino/python-opencv-detect): 1 commit(s) - [See commits](https://github.com/avelino/python-opencv-detect/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-promos](https://github.com/opps/opps-promos): 3 commit(s) - [See commits](https://github.com/opps/opps-promos/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-fileupload](https://github.com/opps/opps-fileupload): 4 commit(s) - [See commits](https://github.com/opps/opps-fileupload/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-wiki](https://github.com/opps/opps-wiki): 1 commit(s) - [See commits](https://github.com/opps/opps-wiki/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-hubcasts](https://github.com/opps/opps-hubcasts): 12 commit(s) - [See commits](https://github.com/opps/opps-hubcasts/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-infographics](https://github.com/opps/opps-infographics): 2 commit(s) - [See commits](https://github.com/opps/opps-infographics/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 39 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) - 🔨 Push to [opps/opps-polls](https://github.com/opps/opps-polls): 3 commit(s) - [See commits](https://github.com/opps/opps-polls/commits?author=avelino&since=2013-06-01T00:00:00Z&until=2013-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - May 2013 **URL**: https://avelino.run/foss/2013/05/ **Published**: 2013-05-01 **Word Count**: 332 words **Summary**: May 2013 saw significant contributions across 22 repos, with 31 total activities, including 19 pushes and 8 new issues raised. In May 2013, the development community made substantial strides with 22 repositories actively contributing to various projects. This timeline highlights key activities, including 19 push events and 8 newly opened issues, showcasing the collaborative efforts and innovations of the month. ## 2013-05-28 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Site domain on article model](https://github.com/opps/opps/pull/124) ## 2013-05-26 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [create cache_page for multisite](https://github.com/opps/opps/issues/123) ## 2013-05-25 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps App: Mailling list](https://github.com/opps/opps/issues/122) ## 2013-05-23 - 🔀 Opened PR in [jazzband/django-taggit](https://github.com/jazzband/django-taggit): [Fix bug on tag whit accent](https://github.com/jazzband/django-taggit/pull/134) ## 2013-05-20 - 🔀 Opened PR in [mbrochh/pelican-responsive](https://github.com/mbrochh/pelican-responsive): [Fix minimal bugs...](https://github.com/mbrochh/pelican-responsive/pull/1) ## 2013-05-09 - 🐛 Opened issue in [berinhard/model_mommy](https://github.com/berinhard/model_mommy): [*** DoesNotExist: Post matching query does not exist. Lookup parameters were {'pk': 1}](https://github.com/berinhard/model_mommy/issues/99) ## 2013-05-07 - 🐛 Opened issue in [gregmuellegger/django-autofixture](https://github.com/gregmuellegger/django-autofixture): [*** RuntimeError: maximum recursion depth exceeded](https://github.com/gregmuellegger/django-autofixture/issues/9) ## 2013-05-03 - 🔀 Opened PR in [ricobl/django-thumbor](https://github.com/ricobl/django-thumbor): [Add THUMBOR_ARGUMENTS rules](https://github.com/ricobl/django-thumbor/pull/1) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Slow query in open Article (Post/Album) basic recomendation](https://github.com/opps/opps/issues/110) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Create PYPI Opps mirror](https://github.com/opps/opps/issues/109) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Support ESI (Varnish)](https://github.com/opps/opps/issues/108) ## 2013-05-01 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [RESTFul API (Generic)](https://github.com/opps/opps/issues/99) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 36 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-sponsor](https://github.com/opps/opps-sponsor): 5 commit(s) - [See commits](https://github.com/opps/opps-sponsor/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 16 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 8 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [mbrochh/pelican-responsive](https://github.com/mbrochh/pelican-responsive): 4 commit(s) - [See commits](https://github.com/mbrochh/pelican-responsive/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-registration](https://github.com/opps/opps-registration): 2 commit(s) - [See commits](https://github.com/opps/opps-registration/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-project-template](https://github.com/opps/opps-project-template): 5 commit(s) - [See commits](https://github.com/opps/opps-project-template/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-promos](https://github.com/opps/opps-promos): 4 commit(s) - [See commits](https://github.com/opps/opps-promos/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-feedcrawler](https://github.com/opps/opps-feedcrawler): 7 commit(s) - [See commits](https://github.com/opps/opps-feedcrawler/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [avelino/django-googl](https://github.com/avelino/django-googl): 4 commit(s) - [See commits](https://github.com/avelino/django-googl/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [avelino/django-routers](https://github.com/avelino/django-routers): 1 commit(s) - [See commits](https://github.com/avelino/django-routers/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-facebook-comments](https://github.com/opps/opps-facebook-comments): 3 commit(s) - [See commits](https://github.com/opps/opps-facebook-comments/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-infographics](https://github.com/opps/opps-infographics): 4 commit(s) - [See commits](https://github.com/opps/opps-infographics/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [ricobl/django-thumbor](https://github.com/ricobl/django-thumbor): 4 commit(s) - [See commits](https://github.com/ricobl/django-thumbor/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 280 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [avelino/juggler](https://github.com/avelino/juggler): 3 commit(s) - [See commits](https://github.com/avelino/juggler/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-polls](https://github.com/opps/opps-polls): 6 commit(s) - [See commits](https://github.com/opps/opps-polls/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [opps/opps-ganalytics](https://github.com/opps/opps-ganalytics): 12 commit(s) - [See commits](https://github.com/opps/opps-ganalytics/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 16 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-05-01T00:00:00Z&until=2013-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - April 2013 **URL**: https://avelino.run/foss/2013/04/ **Published**: 2013-04-01 **Word Count**: 517 words **Summary**: April 2013 saw 18 repositories contribute 47 events, including 4 pull requests and 29 issues, highlighting significant community engagement and development activity. This timeline showcases the key contributions and activities from April 2013, detailing the collaborative efforts across 18 repositories. With a total of 47 events, including multiple push events and newly opened issues, the month reflects a vibrant development environment and active participation from the community. ## 2013-04-30 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Not used __unicode__ on get_absolute_url](https://github.com/opps/opps/issues/98) ## 2013-04-28 - 🔀 Opened PR in [TracyWebTech/puppet-supervisor](https://github.com/TracyWebTech/puppet-supervisor): [Fixbug, not location supervisor file in init.d](https://github.com/TracyWebTech/puppet-supervisor/pull/1) - 🐛 Opened issue in [python-mode/python-mode](https://github.com/python-mode/python-mode): [Error auto run pyflakes](https://github.com/python-mode/python-mode/issues/212) ## 2013-04-27 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Detect mobile device](https://github.com/opps/opps/issues/94) ## 2013-04-26 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Multiple (mass) upload via Admin refs #87](https://github.com/opps/opps/pull/91) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Wondering Opps as platform, content type (core system)](https://github.com/opps/opps/issues/93) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Not return 404 when no article channel](https://github.com/opps/opps/issues/92) ## 2013-04-19 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Change URL/Channel article 301 redirect after URL change](https://github.com/opps/opps/issues/88) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Image upload mass](https://github.com/opps/opps/issues/87) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Johnny Cache on Django 1.5.1 'module' object has no attribute 'empty_iter'](https://github.com/opps/opps/issues/86) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Template group channel on Article list](https://github.com/opps/opps/issues/85) ## 2013-04-16 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Not create channel and runserver acessa '/'](https://github.com/opps/opps/issues/83) ## 2013-04-15 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [opps-admin.py (bin file)](https://github.com/opps/opps/issues/82) ## 2013-04-11 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Slow query in OppsList process home page (/)](https://github.com/opps/opps/issues/80) ## 2013-04-10 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Use fixtures on tests](https://github.com/opps/opps/issues/78) ## 2013-04-09 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Article filter per type](https://github.com/opps/opps/issues/76) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Create migrations for all core application](https://github.com/opps/opps/issues/75) ## 2013-04-08 - 🐛 Opened issue in [flackr/circ](https://github.com/flackr/circ): [auto reconnect network](https://github.com/flackr/circ/issues/152) ## 2013-04-06 - 🔀 Opened PR in [thumbor/thumbor](https://github.com/thumbor/thumbor): [Fix import error OpenCV 2.4.*](https://github.com/thumbor/thumbor/pull/179) ## 2013-04-05 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Article, slow process query](https://github.com/opps/opps/issues/73) ## 2013-04-04 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Tag page](https://github.com/opps/opps/issues/72) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Form generation ](https://github.com/opps/opps/issues/71) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [DynamicBox](https://github.com/opps/opps/issues/70) ## 2013-04-03 - 🔀 Opened PR in [django/django](https://github.com/django/django): [Fix bug, TypeError: unicode argument expected, got 'str' on core management validation](https://github.com/django/django/pull/983) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Create new article type "link"](https://github.com/opps/opps/issues/69) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [fug in run opps in gunicorn](https://github.com/opps/opps/issues/67) - 🐛 Opened issue in [benoitc/gunicorn](https://github.com/benoitc/gunicorn): [Run django on runserver not error import circular, run gunicorn_django circular error](https://github.com/benoitc/gunicorn/issues/509) ## 2013-04-02 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Default theme (template)](https://github.com/opps/opps/issues/64) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Album page (URL)](https://github.com/opps/opps/issues/63) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Flat page](https://github.com/opps/opps/issues/62) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Article pagination](https://github.com/opps/opps/issues/61) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Feed per channel](https://github.com/opps/opps/issues/60) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Feed list all post](https://github.com/opps/opps/issues/59) ## Commits - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 10 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 1 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [opps/opps-project-template](https://github.com/opps/opps-project-template): 10 commit(s) - [See commits](https://github.com/opps/opps-project-template/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [opps/opps-recommendations](https://github.com/opps/opps-recommendations): 1 commit(s) - [See commits](https://github.com/opps/opps-recommendations/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [avelino/django-googl](https://github.com/avelino/django-googl): 3 commit(s) - [See commits](https://github.com/avelino/django-googl/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [TracyWebTech/puppet-supervisor](https://github.com/TracyWebTech/puppet-supervisor): 2 commit(s) - [See commits](https://github.com/TracyWebTech/puppet-supervisor/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [ricobl/django-thumbor](https://github.com/ricobl/django-thumbor): 4 commit(s) - [See commits](https://github.com/ricobl/django-thumbor/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 391 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [thumbor/thumbor](https://github.com/thumbor/thumbor): 2 commit(s) - [See commits](https://github.com/thumbor/thumbor/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [opps/opps-polls](https://github.com/opps/opps-polls): 2 commit(s) - [See commits](https://github.com/opps/opps-polls/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [opps/opps-ganalytics](https://github.com/opps/opps-ganalytics): 9 commit(s) - [See commits](https://github.com/opps/opps-ganalytics/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 10 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) - 🔨 Push to [opps/opps-app-template](https://github.com/opps/opps-app-template): 1 commit(s) - [See commits](https://github.com/opps/opps-app-template/commits?author=avelino&since=2013-04-01T00:00:00Z&until=2013-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - March 2013 **URL**: https://avelino.run/foss/2013/03/ **Published**: 2013-03-01 **Word Count**: 358 words **Summary**: March 2013 saw 8 repositories contribute 31 events, including 6 pull requests and 18 issues, showcasing robust activity and collaboration in project development. Explore the timeline of contributions for March 2013, highlighting significant events across 8 repositories. This month featured a total of 31 contributions, including 6 pull requests and 18 issues, reflecting a vibrant community dedicated to enhancing project development and collaboration. ## 2013-03-29 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [Taggit](https://github.com/opps/opps/pull/58) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [django-tagging to django-taggit](https://github.com/opps/opps/issues/57) ## 2013-03-28 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Upgrade Django 1.5.0 to 1.5.1](https://github.com/opps/opps/issues/55) ## 2013-03-24 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Error on save Channel (Admin) cross channel domain](https://github.com/opps/opps/issues/49) ## 2013-03-23 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Django multi site](https://github.com/opps/opps/issues/48) ## 2013-03-19 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Publishing rule (Channel/Post) on views](https://github.com/opps/opps/issues/44) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Channel get absolute url](https://github.com/opps/opps/issues/43) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Opps Search Engine](https://github.com/opps/opps/issues/42) ## 2013-03-15 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [rewrite readme Markdown to reStructuredText (Pypi)](https://github.com/opps/opps/issues/40) ## 2013-03-09 - 🐛 Opened issue in [fisadev/fisa-vim-config](https://github.com/fisadev/fisa-vim-config): [Error detected while processing function pymode#queue#Poll:](https://github.com/fisadev/fisa-vim-config/issues/35) ## 2013-03-08 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Sitemap generator](https://github.com/opps/opps/issues/33) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Specific template (channel / article)](https://github.com/opps/opps/issues/32) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Use new format User models on FK, Django 1.5](https://github.com/opps/opps/issues/31) ## 2013-03-06 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [implement article list](https://github.com/opps/opps/pull/22) - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [fix channel url open article (post)](https://github.com/opps/opps/pull/21) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Entry url home page (/)](https://github.com/opps/opps/issues/28) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [ArticleBox, newsgroup, another channel](https://github.com/opps/opps/issues/27) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [write url rule list article (open article)](https://github.com/opps/opps/issues/26) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [write url rule article detail (list all article on channel)](https://github.com/opps/opps/issues/25) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Create template article post_list.html](https://github.com/opps/opps/issues/24) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Create template article post_detail.html](https://github.com/opps/opps/issues/23) ## 2013-03-05 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [update version to 0.1.2 (basic)](https://github.com/opps/opps/pull/20) - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [create basic entre url news (article post)](https://github.com/opps/opps/pull/19) ## 2013-03-04 - 🔀 Opened PR in [opps/opps](https://github.com/opps/opps): [fix save admin, auto select user (logged)](https://github.com/opps/opps/pull/18) ## Commits - 🔨 Push to [opps/opps](https://github.com/opps/opps): 321 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-03-01T00:00:00Z&until=2013-03-31T23:59:59Z) - 🔨 Push to [opps/opps-ganalytics](https://github.com/opps/opps-ganalytics): 39 commit(s) - [See commits](https://github.com/opps/opps-ganalytics/commits?author=avelino&since=2013-03-01T00:00:00Z&until=2013-03-31T23:59:59Z) - 🔨 Push to [opps/opps-polls](https://github.com/opps/opps-polls): 8 commit(s) - [See commits](https://github.com/opps/opps-polls/commits?author=avelino&since=2013-03-01T00:00:00Z&until=2013-03-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 5 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-03-01T00:00:00Z&until=2013-03-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 5 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-03-01T00:00:00Z&until=2013-03-31T23:59:59Z) - 🔨 Push to [opps/opps-multimedias](https://github.com/opps/opps-multimedias): 1 commit(s) - [See commits](https://github.com/opps/opps-multimedias/commits?author=avelino&since=2013-03-01T00:00:00Z&until=2013-03-31T23:59:59Z) - 🔨 Push to [opps/opps-facebook-comments](https://github.com/opps/opps-facebook-comments): 1 commit(s) - [See commits](https://github.com/opps/opps-facebook-comments/commits?author=avelino&since=2013-03-01T00:00:00Z&until=2013-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - February 2013 **URL**: https://avelino.run/foss/2013/02/ **Published**: 2013-02-01 **Word Count**: 188 words **Summary**: February 2013 saw significant contributions with 5 repositories, 14 total activities, and 8 new issues, reflecting a vibrant development community. Explore the timeline of February 2013, highlighting the dynamic contributions made across various repositories. This month featured notable pushes, the opening of a pull request, and the initiation of multiple issues, showcasing the active engagement of developers in enhancing projects. ## 2013-02-28 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [FIx url redactor in opps.core.urls](https://github.com/opps/opps/issues/15) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [version 0.1.2](https://github.com/opps/opps/issues/14) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Short url goo.gl](https://github.com/opps/opps/issues/13) ## 2013-02-19 - 🔀 Opened PR in [avelino/django-googl](https://github.com/avelino/django-googl): [Write documentation on use googl in backend](https://github.com/avelino/django-googl/pull/1) ## 2013-02-06 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Active travis-ci on Opps Project](https://github.com/opps/opps/issues/12) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Write models test (use django testcase) on source](https://github.com/opps/opps/issues/11) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Write models test (use django testcase) on channel](https://github.com/opps/opps/issues/10) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Write models test (use django testcase) on profile](https://github.com/opps/opps/issues/9) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [model source on core app](https://github.com/opps/opps/issues/8) ## Commits - 🔨 Push to [opps/opps](https://github.com/opps/opps): 142 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-02-01T00:00:00Z&until=2013-02-28T23:59:59Z) - 🔨 Push to [avelino/irccloud-chrome](https://github.com/avelino/irccloud-chrome): 13 commit(s) - [See commits](https://github.com/avelino/irccloud-chrome/commits?author=avelino&since=2013-02-01T00:00:00Z&until=2013-02-28T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 6 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-02-01T00:00:00Z&until=2013-02-28T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 6 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-02-01T00:00:00Z&until=2013-02-28T23:59:59Z) - 🔨 Push to [avelino/django-googl](https://github.com/avelino/django-googl): 2 commit(s) - [See commits](https://github.com/avelino/django-googl/commits?author=avelino&since=2013-02-01T00:00:00Z&until=2013-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2013 **URL**: https://avelino.run/foss/2013/01/ **Published**: 2013-01-01 **Word Count**: 197 words **Summary**: January 2013 saw significant contributions with 6 repositories, 3 open pull requests, and 8 issues raised, marking a productive start to the year. Explore the timeline of contributions made in January 2013, showcasing a robust engagement with a total of 15 activities across 6 repositories. This month highlights the collaborative efforts of developers, featuring notable pull requests and issues that set the stage for ongoing improvements and innovations. ## 2013-01-29 - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Structure cache environment](https://github.com/opps/opps/issues/7) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Use django file browser (core)](https://github.com/opps/opps/issues/6) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [Use django tagging (core)](https://github.com/opps/opps/issues/5) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [menu list, get model channel](https://github.com/opps/opps/issues/4) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [model article on core app](https://github.com/opps/opps/issues/3) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [model profile journalist on core app](https://github.com/opps/opps/issues/2) - 🐛 Opened issue in [opps/opps](https://github.com/opps/opps): [revise channel rule (save and edit)](https://github.com/opps/opps/issues/1) ## 2013-01-18 - 🔀 Opened PR in [ella/ella](https://github.com/ella/ella): [Change url (img) Travis CI](https://github.com/ella/ella/pull/136) - 🔀 Opened PR in [ella/ella](https://github.com/ella/ella): [Fix pep8 on project ella](https://github.com/ella/ella/pull/135) - 🐛 Opened issue in [kevinw/pyflakes-vim](https://github.com/kevinw/pyflakes-vim): [pyflakes-vim more powerline error](https://github.com/kevinw/pyflakes-vim/issues/62) ## 2013-01-17 - 🔀 Opened PR in [joemiller/puppet-newrelic](https://github.com/joemiller/puppet-newrelic): [apt-key from behind a firewall](https://github.com/joemiller/puppet-newrelic/pull/8) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 19 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2013-01-01T00:00:00Z&until=2013-01-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 19 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2013-01-01T00:00:00Z&until=2013-01-31T23:59:59Z) - 🔨 Push to [opps/opps](https://github.com/opps/opps): 17 commit(s) - [See commits](https://github.com/opps/opps/commits?author=avelino&since=2013-01-01T00:00:00Z&until=2013-01-31T23:59:59Z) - 🔨 Push to [ella/ella](https://github.com/ella/ella): 14 commit(s) - [See commits](https://github.com/ella/ella/commits?author=avelino&since=2013-01-01T00:00:00Z&until=2013-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Riak, alta performance NoSQL para seu projeto **URL**: https://avelino.run/riak-alta-performance-nosql-para-seu-projeto/ **Published**: 2012-12-23 **Tags**: riak, nosql, python **Word Count**: 490 words Esse ano de 2012 ajudei a comunidade [Riak](http://basho.com/products/riak-overview/) que a cada dia esse banco de dados vem me surpreendendo. Estou para escrever um blogpost desde fevereiro, mas como vida de programador (pelo menos para mim esse ano) é agitada. Resolvi falar sobre a performance nesse primeiro blogpost sobre Riak e colocar na mesa um teste (relativamente simples) para compara o tempo de inserção, realmente é um teste simples se tratando de NoSQL. Antes de mostrar a comparação acho importante deixar claro as vantagens que temos em utilizar Riak: - Disponibilidade: sistema de recuperação de dados onde trabalha de forma inteligente para que esteja disponível para ler e escrever operações, mesmo em ambiente com falha, assim garantindo a integridade dos dados; - Tolerância a falhas: pode perder o acesso aos nós (Servidores Riak), devido à falha de rede ou partição de hardware e nunca perder de dados; - Simplicidade de utilização: facil adição de máquinas em um cluster Riak, sem ocorrer uma carga nos servidores - isso em um pequeno grupo de servidores como uma grande quantidade de servidores Riak; - Escalabilidade: Riak distribui automaticamente os dados ao redor do cluster e produz um aumento de desempenho quase linear quando você adicionar dados. Depois de deixar claro os itens acima podemos colocar na messa o Riak e o grande MongoDB, lembrando que esse blogpost não é para falar qual NoSQL é melhor ou para você parar de utilizar um ou outro banco, Riak e MongoDB tem algumas características semelhantes, esse foi o motivo de colocar em teste os dois. O teste foi simples preciso inserir 1 milhão (1000000) de registro no meu banco de dados, qual banco de dados entrega isso mais rápido para mim? Código Python usando drive nativo do Riak: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- import riak client = riak.RiakClient() bucket = client.bucket('test') for i in range(0, 1000000): person = bucket.new('riak_developer_%d' % i, data={'name': 'Thiago Avelino %d' % i, 'age': 18+i, 'language': ['python'],}) ``` Código Python usando drive nativo do MongoDB: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- from pymongo import MongoClient connection = MongoClient() db = connection.test persons = db.persons for i in range(0, 1000000): person = persons.insert({'name': 'Thiago Avelino %d' % i, 'age': 18+i, 'language': ['python'],}) ``` Um código simples onde faço um loop que vai de 0 a 1000000 (estou fazendo 1000001 inserção), e dentro de cada interação do loop estou gerando um registro no banco de dados. Veja abaixo o resultado: ```shell (riak-test) ~/Sites/riak-test$ time python riak.py python riak.py 15.60s user 0.14s system 99% cpu 15.850 total (riak-test) ~/Sites/riak-test$ time python mongodb.py python mongodb.py 144.14s user 35.47s system 55% cpu 5:25.85 total ``` Realmente o tempo de execução do Riak é muito mas muito rápido, o que me deixou mais surpreso foi o tempo do MongoDB, o MongoDB demorou 9 vezes mais comparado com o Riak. Não estou falando que o MongoDB é ruim, ate mesmo que tenho projetos grande em produção usando ele e dependendo do projeto/infra recomendo usar MongoDB. --- # Palestra sobre London Framework na PyCon Argentina **URL**: https://avelino.run/palestra-sobre-london-framework-na-pycon-argentina/ **Published**: 2012-12-10 **Tags**: pycon, pyconar, framework, python **Word Count**: 286 words `Universidad Nacional de Quilmes, local onde foi organizado a PyCon Argentina` No começo de junho o Mariano (organizador do evento `PyCon Argentina 2012`, me fez um convite para ir palestra sobre `London Framework` (Framework criado por [Marinho Brandão](https://github.com/marinho)). Nada melhor do que conhecer pessoas e principalmente culturas novas, entender o que os Argentinos estão desenvolvendo e o que anda estudando, ou seja, fazer network (como falamos na área de tecnologia). Dava para ver no rosto dos argentinos a vontade de aprender e de consumir o maximo de informação possível, na PyCon Argentina de 2012 teve uma ótima seleção de palestra, onde foi abordado temas como asynchrony (twisted), Plone (com Erico Andrei - Brasileiro), web2py (com Massimo Di Pierro - criador do framework), Python 3.3 (com Brett Cannon - Desenvolvedor Google) e muito mais. Tive grande privilegio de palestra sobre London Framework, foi apresentado o motivo de criar um novo framework (Python) e hoje temos funcionando dentro do London. A repercussão foi muito positiva, recebi muitos tweets e e-mails de desenvolvedores querendo saber mais sobre London Framework, o que mostra grande aceitação e necessidade (semelhantes) do framework dentro da comunidade Argentina. Veja abaixo os slide da palestra de London Framework: {{< slideshare 2DLd4OvBUeGT2M >}} A pedidos da organização, fiz minha palestra em portunhol (tinha planejado apresentá-la em inglês, já que não sou fluente em espanhol). Pelas conversas de corredor, acredito que o público entendeu bem o meu portunhol! ![Python Software Fundation na PyCon Ar 2012](/blog/pyconar2012-psf.jpg) No final do primeiro dia de evento tivemos uma confraternização, onde a organização da PyCon Argentina chamou uma pizzaria conhecida de Buenos Aires para fazer algumas pizza. A forma dos argentino preparar a pizza é bem diferente de nos Brasileiros, não querendo puxar sardinha para os Argentinos, é muito gostosa a pizza Argentina. ![Ticket PyCon Ar 2012](/blog/pyconar2012-ticket.jpg) --- # Open Source Contributions - December 2012 **URL**: https://avelino.run/foss/2012/12/ **Published**: 2012-12-01 **Word Count**: 138 words **Summary**: December 2012 saw significant contributions across 7 repositories, with 11 total activities including 2 pull requests and 3 issues opened. Explore the timeline of contributions made in December 2012, showcasing a productive month with notable pushes and issues across multiple repositories. This period highlights the collaborative efforts and ongoing development in various projects. ## 2012-12-19 - 🐛 Opened issue in [avelino/django-routers](https://github.com/avelino/django-routers): [Check if online server](https://github.com/avelino/django-routers/issues/2) - 🐛 Opened issue in [avelino/django-routers](https://github.com/avelino/django-routers): [Weighted random selection](https://github.com/avelino/django-routers/issues/1) ## 2012-12-13 - 🔀 Opened PR in [avatarnewyork/puppet-cloudbackup](https://github.com/avatarnewyork/puppet-cloudbackup): [Add rule to debian](https://github.com/avatarnewyork/puppet-cloudbackup/pull/1) ## 2012-12-10 - 🔀 Opened PR in [willianpc/zonjs](https://github.com/willianpc/zonjs): [Create ZonJS Test suite](https://github.com/willianpc/zonjs/pull/1) ## 2012-12-02 - 🐛 Opened issue in [avelino/beerblogging](https://github.com/avelino/beerblogging): [Fix document in readme](https://github.com/avelino/beerblogging/issues/26) ## Commits - 🔨 Push to [avelino/beerblogging](https://github.com/avelino/beerblogging): 15 commit(s) - [See commits](https://github.com/avelino/beerblogging/commits?author=avelino&since=2012-12-01T00:00:00Z&until=2012-12-31T23:59:59Z) - 🔨 Push to [avelino/django-googl](https://github.com/avelino/django-googl): 14 commit(s) - [See commits](https://github.com/avelino/django-googl/commits?author=avelino&since=2012-12-01T00:00:00Z&until=2012-12-31T23:59:59Z) - 🔨 Push to [avelino/django-routers](https://github.com/avelino/django-routers): 10 commit(s) - [See commits](https://github.com/avelino/django-routers/commits?author=avelino&since=2012-12-01T00:00:00Z&until=2012-12-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 6 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-12-01T00:00:00Z&until=2012-12-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 6 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-12-01T00:00:00Z&until=2012-12-31T23:59:59Z) - 🔨 Push to [willianpc/zonjs](https://github.com/willianpc/zonjs): 3 commit(s) - [See commits](https://github.com/willianpc/zonjs/commits?author=avelino&since=2012-12-01T00:00:00Z&until=2012-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2012 **URL**: https://avelino.run/foss/2012/11/ **Published**: 2012-11-01 **Word Count**: 189 words **Summary**: Explore November 2012 contributions, featuring 11 repositories and impactful developments, including 6 pull requests and 2 issues. November 2012 was a dynamic month for contributions, showcasing a total of 11 repositories with significant activity. The timeline below highlights key events, including 6 pull requests and 2 issues, reflecting the collaborative efforts and progress made during this period. ## 2012-11-28 - 🐛 Opened issue in [collective/collective.newrelic](https://github.com/collective/collective.newrelic): [Move repo to github.com/collective](https://github.com/collective/collective.newrelic/issues/4) ## 2012-11-13 - 🔀 Opened PR in [collective/Collective](https://github.com/collective/Collective): [following pattern of repository name](https://github.com/collective/Collective/pull/551) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [Test QT](https://github.com/avelino/rdio-linux/issues/9) ## 2012-11-12 - 🔀 Opened PR in [collective/Collective](https://github.com/collective/Collective): [Create new repo Facebook Comments (collective.facebook.comments)](https://github.com/collective/Collective/pull/550) ## 2012-11-08 - 🔀 Opened PR in [collective/Collective](https://github.com/collective/Collective): [create fork avelino/collective.twitter.widget.portlets](https://github.com/collective/Collective/pull/548) ## 2012-11-07 - 🔀 Opened PR in [collective/Collective](https://github.com/collective/Collective): [Add avelino (profile) as team contributors](https://github.com/collective/Collective/pull/545) - 🔀 Opened PR in [collective/collective.disqus](https://github.com/collective/collective.disqus): [Fix pep8](https://github.com/collective/collective.disqus/pull/7) - 🔀 Opened PR in [cosent/plonesocial.microblog](https://github.com/cosent/plonesocial.microblog): [Fix code style](https://github.com/cosent/plonesocial.microblog/pull/3) ## Commits - 🔨 Push to [avelino/collective.twitter.widget.portlets](https://github.com/avelino/collective.twitter.widget.portlets): 39 commit(s) - [See commits](https://github.com/avelino/collective.twitter.widget.portlets/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) - 🔨 Push to [avelino/talks](https://github.com/avelino/talks): 10 commit(s) - [See commits](https://github.com/avelino/talks/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) - 🔨 Push to [collective/Collective](https://github.com/collective/Collective): 7 commit(s) - [See commits](https://github.com/collective/Collective/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) - 🔨 Push to [cosent/plonesocial.microblog](https://github.com/cosent/plonesocial.microblog): 5 commit(s) - [See commits](https://github.com/cosent/plonesocial.microblog/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) - 🔨 Push to [avelino/buildout.sample.dev](https://github.com/avelino/buildout.sample.dev): 4 commit(s) - [See commits](https://github.com/avelino/buildout.sample.dev/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 3 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 1 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2012-11-01T00:00:00Z&until=2012-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Comandos tmux (cheat sheet) **URL**: https://avelino.run/comandos-tmux-cheat-sheet/ **Published**: 2012-10-08 **Tags**: tmux, cheatsheet **Word Count**: 258 words [tmux]() é um software que pode ser usado para vários consoles de multiplex virtuais, permitindo que um usuário acesse múltiplas sessões de terminais separados dentro de uma janela de um único terminal ou sessão de terminal remoto. É útil para lidar com vários programas a partir de uma interface de linha de comando, e para separar os programas a partir do shell do Unix, que começou o programa. Distribuído sob uma licença BSD. ## Managing tmux sessions ```shell tmux # start tmux server tmux at # attach running sessions to a terminal tmux ls # list running tmux sessions ``` ## Sharing sessions between terminals ```shell tmux new -s session_name # make new named session tmux at -t session_name # attach to exist session (allowing shared sessions) ``` ## Commands (used within a running tmux session) ```shell c - create new window n/l - next/last window & - kill current window % - split window, adding a vertical pane to the right " - split window, adding an horizontal pane below ←/→ - move focus to left/right pane ↑/↓ - move focus to upper/lower pane ! - Break current pane into new window x - Kill the current pane. d - detach the current client [ - enter copy mode (then use emacs select/yank keys) * press CTRL-SPACE or CTRL-@ to start selecting text * move cursor to end of desired text * press ALT-w to copy selected text ] - paste copied text ? - show tmux key bindings ``` ## Notes > All commands need to be prefixed with the action key. > By default, this is CTRL-b --- # Open Source Contributions - October 2012 **URL**: https://avelino.run/foss/2012/10/ **Published**: 2012-10-01 **Word Count**: 61 words **Summary**: October 2012 saw significant contributions with 3 repositories and a total of 12 commits, highlighting active development in the open-source community. Explore the timeline of October 2012, showcasing key contributions across three repositories. This month featured a total of 12 commits, reflecting the vibrant activity within the open-source ecosystem. ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 5 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-10-01T00:00:00Z&until=2012-10-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 5 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-10-01T00:00:00Z&until=2012-10-31T23:59:59Z) - 🔨 Push to [avelino/avelino.run](https://github.com/avelino/avelino.run): 2 commit(s) - [See commits](https://github.com/avelino/avelino.run/commits?author=avelino&since=2012-10-01T00:00:00Z&until=2012-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2012 **URL**: https://avelino.run/foss/2012/09/ **Published**: 2012-09-01 **Word Count**: 107 words **Summary**: September 2012 saw significant contributions with 3 repositories, 1 pull request, and 4 issues raised, showcasing active development and community engagement. In September 2012, the development community made notable strides, contributing to three repositories with various updates including a pull request and several issues. This timeline highlights the key events and contributions that shaped the month. ## 2012-09-07 - 🔀 Opened PR in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [Menu](https://github.com/avelino/rdio-linux/pull/8) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [Resize window](https://github.com/avelino/rdio-linux/issues/7) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [Check dependence installation](https://github.com/avelino/rdio-linux/issues/6) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [Add icon on multimedia menu](https://github.com/avelino/rdio-linux/issues/5) - 🐛 Opened issue in [avelino/rdio-linux](https://github.com/avelino/rdio-linux): [Package DEB](https://github.com/avelino/rdio-linux/issues/4) ## Commits - 🔨 Push to [avelino/rdio-linux](https://github.com/avelino/rdio-linux): 21 commit(s) - [See commits](https://github.com/avelino/rdio-linux/commits?author=avelino&since=2012-09-01T00:00:00Z&until=2012-09-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-09-01T00:00:00Z&until=2012-09-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 2 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-09-01T00:00:00Z&until=2012-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Plone para desenvolvedores Python **URL**: https://avelino.run/plone-para-desenvolvedores-python/ **Published**: 2012-08-30 **Tags**: plone, python, cms **Word Count**: 430 words Sempre que uma pessoa vinha falar de [Plone](http://plone.org/) para mim eu não me sentia muito bem pois não conhecia e o pessoal que sempre conversei que desenvolvia em Plone e depois conheceu [Django](https://www.djangoproject.com/) sempre falava que não valia apena mexer com Plone! Será que isso é realmente verdade? Depois do que eu escutei o pessoal falando eu não queria nem saber desse cara chamado Plone, ate mesmo que para desenvolver uma solução de gerenciamento de conteúdo usando Django não é muito trabalhoso (Realmente era assim que eu pensava, mal eu sabia que estava completamente enganado). Como eu fiz para mudar esse preconceito que tinha? Realmente para mim mudar esse pensamento foi preciso senta e conhecer a ferramenta, não foi um trabalho muito facil pois como já relatei vim de Django e para mim era preciso subir um ambiente relativamente parecido, mas é Plone e ele roda encima do servidor de aplicação [Zope](http://www.zope.org/) e isso é algo que eu não conhecia (apenas tinha uma ideia do que era mas o que é realmente não sabia) em fim, depois do esforço de conhecer o Zope e Plone achei bacana. Mas achar bacana e colocar em produção é bem diferente. No começo de agosto assumi um cargo de lider tecnico da tv1.com, eis que surge uma demanda gigantesca pois atendemos muitos sites do Governo Brasileiro, tais como: - [Portal Brasil](https://www.brasil.gov.br/) - [Secom](http://www.secom.gov.br/) - [Planalto](http://planalto.gov.br/) - [Biblioteca da Presidencia](http://www.biblioteca.presidencia.gov.br/) - [Emquestão](http://www.emquestao.gov.br/) - entre outros... Todos os sites é em Plone, e por esse motivo tive que estudar ainda mais do que estava estudando... Semana passada Liz Leddy e Nejc Zupan (dois desenvolvedores Plone) estava no Brasil para participar do evento [Plone Symposium South America](http://www.plonesymposium.com.br/) e [Caipirinha Sprint](http://plone.org/events/regional/pssa/2012/caipirinha-sprint) (um dos melhores sprint que participei). O sprint foi muito bom fiquei surpreso com a qualidade do código que o Plone tem e como o pessoal leva a escrita de teste unitario e teste funcional a serio, o que posso falar é que 100% do código Plone tem cobertura de teste (se você que ver com os seus proprio olhos aqui explica como rodar os teste com coverage). Bom o que posso falar mais é que agora sou um core commiter do Plone: ![join on plone organization](/blog/plone-join.png) Bom nós desenvolvedores (Python) temos mania de criticar (ter preconceito) ou não ter uma iniciativa para estudar uma nova tecnologia, o que posso falar para essas pessoas (eu realmente sou um desse) é: Conheça para depois tomar suas propria decisão, se você acha que um projeto pode ser mais simples ou melhor em um ponto especifico, não esqueça que você desenvolvedor (Python) tem capacidade de ajudar um projeto open source. --- # Proxy transparente com Nginx **URL**: https://avelino.run/proxy-transparente-com-nginx/ **Published**: 2012-08-09 **Tags**: nginx, proxy, router **Word Count**: 295 words Muitas pessoas usam Squid para fazer qual quer tipo de proxy, ate mesmo para proxy transparente para usar em servidor web, por exemplo: Você tem um site que precisa ter IP aqui no Brasil so que como o custo de servidor e link aqui no Brasil é muito caro, você pode fazer um proxy transparente para o servidor aqui no Brasil ser um cara que vai receber a requisição e repassar para o outro servidor que esteja em qual quer lugar do mundo. Com essa solução podemos ter uma maquina simples (maquina com pouco poder de processamento) pois ela só vai receber o trafego e repassar para o servidor que esteja em outro local. Vamos imaginar um exemplo pratico, preciso que o usuário acesse o IP 177.71.248.185 (é um servidor da Amazon no Brasil), esse servidor precisa receber a requisição e repassar para o IP 67.159.35.2 (é maquina principal onde é processado o backend, esse servidor esta fora do Brasi). Foi usado essa solução em um portal que atendo para ter baixa latencia. Vamos ao exemplo pratico: ```nginx upstream server { server 67.159.35.2; } server { listen 80; server_name avelino.us www.avelino.us; location / { proxy_cache proxy-cache; proxy_cache_key "$host$request_uri$args"; proxy_ignore_headers "Cache-Control" "Expires"; proxy_cache_min_uses 1; proxy_hide_header Set-Cookie; proxy_cache_valid 200 301 302 30m; proxy_cache_valid any 0m; proxy_buffering on; proxy_pass http://server; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` Criei um "upstream server" para falar qual é o servidor de destino do trafego, na configuração acima tem um cache de 30 minutos pois no servidor principal tem cache de 4 horas. Logicamente que existe desvantagem com isso, pois vamos estar trafegando em duas (ou mais) redes, assim usando o trafego do servidor que esta recebendo a primeira requisição e do segunda que esta recebendo um requisição do primeiro. --- # Open Source Contributions - August 2012 **URL**: https://avelino.run/foss/2012/08/ **Published**: 2012-08-01 **Word Count**: 114 words **Summary**: In August 2012, five repositories saw significant activity with 8 contributions, including 4 pull requests and 3 pushes, driving collaboration and code enhancements. August 2012 marked a productive month in the development community, showcasing the contributions of multiple repositories. This timeline highlights key events such as push activities, pull requests, and issue resolutions that shaped the collaborative efforts during this period. ## 2012-08-27 - 🔀 Opened PR in [xiru/plone.api.json](https://github.com/xiru/plone.api.json): [Fix markdown](https://github.com/xiru/plone.api.json/pull/1) ## 2012-08-25 - 🔀 Opened PR in [plone/plone.api](https://github.com/plone/plone.api): [Add new tests](https://github.com/plone/plone.api/pull/28) - 🔀 Opened PR in [plone/plone.api](https://github.com/plone/plone.api): [Review source commented](https://github.com/plone/plone.api/pull/27) ## 2012-08-24 - 🐛 Opened issue in [basho/riak-python-client](https://github.com/basho/riak-python-client): [Split unit test](https://github.com/basho/riak-python-client/issues/144) ## 2012-08-23 - 🔀 Opened PR in [basho/riak-python-client](https://github.com/basho/riak-python-client): [Fix pep8 #141](https://github.com/basho/riak-python-client/pull/143) ## Commits - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 22 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-08-01T00:00:00Z&until=2012-08-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 21 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-08-01T00:00:00Z&until=2012-08-31T23:59:59Z) - 🔨 Push to [plone/plone.api](https://github.com/plone/plone.api): 6 commit(s) - [See commits](https://github.com/plone/plone.api/commits?author=avelino&since=2012-08-01T00:00:00Z&until=2012-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - July 2012 **URL**: https://avelino.run/foss/2012/07/ **Published**: 2012-07-01 **Word Count**: 39 words **Summary**: July 2012 saw a significant push in the avelino/votacao_paredao_bbb repository, with 35 commits enhancing its functionality and impact. Explore the timeline of contributions for July 2012, highlighting a pivotal push event in the avelino/votacao_paredao_bbb repository, which included 35 impactful commits. ## Commits - 🔨 Push to [avelino/votacao_paredao_bbb](https://github.com/avelino/votacao_paredao_bbb): 35 commit(s) - [See commits](https://github.com/avelino/votacao_paredao_bbb/commits?author=avelino&since=2012-07-01T00:00:00Z&until=2012-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Criando package (modulo) em Node.js **URL**: https://avelino.run/criando-package-modulo-em-node.js/ **Published**: 2012-06-23 **Tags**: nodejs, javascript, node **Word Count**: 446 words Existe muitas pessoas querendo estudar Node.js pela simplicidade de trabalhar com processamento assíncrono e por usar JavaScript em server side. JavaScript é uma linguagem simples mas para desenvolvimento Client side mas ao mesmo tempo quando colocamos JavaScript do lado do servidor começa a surgi algumas duvidas como: estrutura do software, como criar biblioteca, qual Framework usar e muitas outras. Dando uma olhada no Github vi que tem muitos software que parece uma lingüiça com mais de 500 linhas em um mesmo arquivo, aí me vem a seguinte pergunta "JavaScript não é orientado a objeto?" logicamente que sim, então tem alguma coisa errada pois uns dos paradigma é dividir funcionabilidade onde cada modulo faça sua parte e usando todas faz o que foi proposto a ser feito. Então vamos lá, seguindo um exemplo simples: * Conectar em um banco de dados * Fazer insert, update e delete * Desconectar do banco de dados O exemplo usado encontra-se no repositorio ["example-nodejs-mongodb (*desculpe, acabei apagando o repositorio no passado :/*)"](https://github.com/avelino/example-nodejs-mongodb) na minha conta do Github, nesse exemplo vou usar o banco de dados [MongoDB](https://www.mongodb.com/) por ser mais simples de instalar e usar (Pois é um banco de dados NoSQL) . Dado que já esteja instalado o MongoDB em seu sistema operacional (Para usuarios Linux basta baixar o source do MongoDB no site e depois rodar o binario mongod, já para usuarios Windows não tenho não tenho experiencia no ambiente mas achei esse tutorial que pode ajudar). A instalação do NodeJS e NPM no [Linux](http://vinteum.com:80/instalando-nodejs-no-ubuntu) e [Windows](http://mateussouzaweb.com/blog/nodejs/tutorial-instalando-nodejs-no-windows) é uma operação relativamente simples, por isso não vou detalhar todo o processo, você pode ver nos artigos nesse blogpost. A primeira coisa que temos que ter em mente é que tudo o que é escrito dentro de um package (proprio) não é levado para fora, você precisa especificar o que realmente quer expor do seu package. No arquivo `mongocon.js` temos um exemplo de como trabalhar com exports no Node.JS: ```js var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/avelinous'); exports.mongoose = mongoose; ``` No exemplo acima estou expondo toda a classe do mongoose, eu poderia restringir export só alguns metodos por exemplo: ```js var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/avelinous'); exports.mongoose_schema = mongoose.Schema; ``` Assim podemos limitar o acesso dentro de um package. Caso queira fazer um package e expor publicamente via NPM, basta criar um package.json juntamente com o seu source, assim pode colocar dependencias que o seu package tem e em qual versão do NodeJS ele roda, veja o exemplo de um package.json: ```json { "name": "mongo_test", "description": "A package using mongoose ODM", "author": "Avelino ", "dependencies": { "mongoose": ">= 2.7.0" }, "engine": "node 0.6.19" } ``` Pronto, com isso é facil enviar o seu package para o repositorio do NPM. --- # Open Source Contributions - June 2012 **URL**: https://avelino.run/foss/2012/06/ **Published**: 2012-06-01 **Word Count**: 79 words **Summary**: June 2012 saw 4 repositories with 3 pushes, including significant updates to vim-bootstrap and .vimrc, alongside an impactful pull request. In June 2012, contributors made notable strides across 4 repositories, marked by 3 significant push events and the opening of a key pull request. This timeline highlights the collaborative efforts and advancements achieved during the month. ## 2012-06-27 - 🔀 Opened PR in [avelino/beerblogging](https://github.com/avelino/beerblogging): [Adding feedburner PyAvelino url](https://github.com/avelino/beerblogging/pull/25) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 4 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-06-01T00:00:00Z&until=2012-06-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 4 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-06-01T00:00:00Z&until=2012-06-30T23:59:59Z) - 🔨 Push to [avelino/flux.vim](https://github.com/avelino/flux.vim): 2 commit(s) - [See commits](https://github.com/avelino/flux.vim/commits?author=avelino&since=2012-06-01T00:00:00Z&until=2012-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - May 2012 **URL**: https://avelino.run/foss/2012/05/ **Published**: 2012-05-01 **Word Count**: 71 words **Summary**: May 2012 saw 4 key contributions across 3 repositories, including 2 pull requests and significant code pushes, showcasing vibrant community engagement. Explore the contributions made in May 2012, highlighting key events such as code pushes and pull requests across three repositories. This timeline captures the collaborative spirit and development progress within the community. ## 2012-05-17 - 🔀 Opened PR in [msanders/snipmate.vim](https://github.com/msanders/snipmate.vim): [python.snippets](https://github.com/msanders/snipmate.vim/pull/45) ## 2012-05-06 - 🔀 Opened PR in [avelino/.vimrc](https://github.com/avelino/.vimrc): [Pathogen](https://github.com/avelino/.vimrc/pull/6) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 22 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-05-01T00:00:00Z&until=2012-05-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 22 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-05-01T00:00:00Z&until=2012-05-31T23:59:59Z) ## Private contributions - 🔒 7 private contribution(s) this month --- # Trabalhar para empresa de fora do Brasil **URL**: https://avelino.run/trabalhar-para-empresa-de-fora-do-brasil/ **Published**: 2012-04-20 **Tags**: remotework, homeoffice, empresa de fora **Word Count**: 390 words O tema é muito abrangente mas vou focar justamente para a área tecnologia onde temos a possibilidade de trabalhar remoto (vulgo home office, que é um outro tema que gera muita polemica). Hoje fecha um total de 3 dias trabalhando na empresa [Mochii](http://mochii.co.uk/) (Realmente achei o site da empresa muito nerd e extremamente diferente, esse e outros motivo me fez trabalhar com eles) e durante esses três dias tive uma ótima experiencia para compartilhar. Primeiro que o dono da empresa é muito acessível, sem essa frescura de hierarquia (Não que eu ache totalmente hierarquia desnecessário, mas em alguns caso ao meu ver não precisaria de tanta burocracia). Segundo que o time de desenvolvimento de lá é 100% aberto a ideias e a criticas (logicamente que criticas construtivas e que saiba conversa sobre o porque não concorda com determinada parte do código), muito diferente de alguns desenvolvedores no Brasil (Sei que tem em outros lugares do mundo mas como trabalhei muito tempo no Brasil estou usando como referencia) que se apega com código desenvolvido. Uma coisa que realmente me deixou muito surpreso foi em relação a cobrança de como esta indo a tarefa que eu (Thiago Avelino) assumi, o dono da empresa chegou para mim e falou que eu deveria conversa com um funcionario que saberia explicar melhor sobre o porque esta usando a tecnologia X, Y e Z, depois do lider do desenvolvimento me explicado foi atribuido uma tarefa e não fui cobrado nem uma vez sobre a tarefa, realmente isso é muito diferente aqui no Brasil, principalmente quando um desenvolvedor novo entra em um time, geralmente tem sempre um cara no time que fica pergunta "e ai esta entendendo?", ao meu ver isso tem o seu lado bom e consequentemente o seu lado ruim. O lado bom é que tem a interação do time com o novo desenvolvedor, mais isso acaba ficando chato pois se o novo desenvolvedor não esta entendo ele vai ficar com vergonha (ou alguma coisa do genero) de se expressa falando que não esta entendo alguma parte do fluxo do projeto ou mesmo código. Poderia falar mais 1001 experiência que tive essa semana, mas vou ir gerando blog post com os passar das semanas, assim posso ir aprofundando cada dia mais da experiência vivida. > Realmente vale apena trabalhar para uma empresa de fora do Brasil. --- # Open Source Contributions - April 2012 **URL**: https://avelino.run/foss/2012/04/ **Published**: 2012-04-01 **Word Count**: 62 words **Summary**: April 2012 saw significant contributions with two repositories updated, one issue opened, and three total activities enhancing project collaboration. In April 2012, the development activities included notable contributions across two repositories. This timeline showcases the key events such as pushes and issue management that shaped the month. ## 2012-04-29 - 🐛 Opened issue in [avelino/.vimrc](https://github.com/avelino/.vimrc): [Python auto complete](https://github.com/avelino/.vimrc/issues/5) ## Commits - 🔨 Push to [avelino/rsync-backup.sh](https://github.com/avelino/rsync-backup.sh): 2 commit(s) - [See commits](https://github.com/avelino/rsync-backup.sh/commits?author=avelino&since=2012-04-01T00:00:00Z&until=2012-04-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 1 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-04-01T00:00:00Z&until=2012-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - March 2012 **URL**: https://avelino.run/foss/2012/03/ **Published**: 2012-03-01 **Word Count**: 86 words **Summary**: March 2012 saw 4 contributions across 3 repositories, including 1 pull request and 3 significant pushes, highlighting a productive month for collaboration. In March 2012, the development community showcased their collaborative spirit with a total of 4 contributions across 3 repositories. This timeline highlights key activities, including significant pushes and a noteworthy pull request, reflecting the ongoing commitment to enhancing projects and fostering innovation. ## 2012-03-17 - 🔀 Opened PR in [rafaelsierra/wedraw](https://github.com/rafaelsierra/wedraw): [Add all dependence node modules](https://github.com/rafaelsierra/wedraw/pull/1) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 11 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-03-01T00:00:00Z&until=2012-03-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 11 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-03-01T00:00:00Z&until=2012-03-31T23:59:59Z) - 🔨 Push to [rafaelsierra/wedraw](https://github.com/rafaelsierra/wedraw): 3 commit(s) - [See commits](https://github.com/rafaelsierra/wedraw/commits?author=avelino&since=2012-03-01T00:00:00Z&until=2012-03-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Test é para os fracos **URL**: https://avelino.run/test-%C3%A9-para-os-fracos/ **Published**: 2012-02-24 **Tags**: test, unittest, testing **Word Count**: 284 words Em novembro fiz mais uma palestra sobre `teste unitários` só que agora com o titulo da palestra bem diferente ["Test é para os fracos"](http://www.slideshare.net/avelinoo/test-para-os-fracos), o motivo desse titulo é para deixar a palestra mais dinâmica pois escrever teste não é uma tarefa muito simples no primeiro contato. Tem muitas pessoas que acha que escrever teste não garante que o software não tem bug, isso é claro, mas vamos encarar o problema quando quando tiver que mudar o software, caso ele esteja como teste na parte onde esta sendo implementado novas funcionalidade e venha quebrar ai sim vamos dar valor aos teste. Uns dos tópicos da minha palestra é como acostumar a escrever teste, geralmente não é um trabalho muito simples, quando começamos a praticar técnicas de desenvolvimento de software como [TDD](http://en.wikipedia.org/wiki/Test_Driven_Development) é um trabalho muito chato pois não temos experiencia e nem costume de escrever um teste para depois implementar o software passar na quela teste, vendo este cenário podemos chegar a conclusão que muitos desenvolvedores não sabe realmente o que precisa ser desenvolvido e com isso fica ainda mais complicado de praticar TDD. Antes de desenvolvermos um software a primeira coisa é saber o que o software vai fazer, só assim a pratica de TDD começa e ficar mais fácil e fluente, uma dica que dou para quem começa da implementa camada de teste unitário em um projeto é participar de Coding Dojo e de [PythonStorm](http://python.org.br/wiki/GrupySP/PythonStorm) (Ideia do nosso amigo [Rodolpho Eckhardt](https://twitter.com/sysdharma)) onde é reunido um grupo para fazer para bater um papo sobre tecnologia (Python) e falar sobre melhores praticas. Esse é referente aos primeiros slides da palestra, vou escrever as próximos slides no próximos webposts. Link dos slides da palestra: http://www.slideshare.net/avelinoo/test-para-os-fracos --- # Open Source Contributions - February 2012 **URL**: https://avelino.run/foss/2012/02/ **Published**: 2012-02-01 **Word Count**: 70 words **Summary**: February 2012 saw 3 repositories contribute a total of 14 commits, marking a month of significant collaboration and development in the open-source community. This timeline highlights the key contributions made in February 2012, showcasing the collaborative efforts across three repositories. With notable push events and a pull request, it reflects the ongoing commitment to enhancing open-source projects. ## 2012-02-25 - 🔀 Opened PR in [ekalinin/nodeenv](https://github.com/ekalinin/nodeenv): [Centralize envs on folder ~/.nodeenvs](https://github.com/ekalinin/nodeenv/pull/12) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 6 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-02-01T00:00:00Z&until=2012-02-29T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 6 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-02-01T00:00:00Z&until=2012-02-29T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2012 **URL**: https://avelino.run/foss/2012/01/ **Published**: 2012-01-01 **Word Count**: 62 words **Summary**: January 2012 saw 2 repositories contributing with 2 significant pushes, totaling 26 new commits that enhanced project collaboration and development. Welcome to the January 2012 contributions timeline, highlighting key developments in two active repositories. This month featured substantial progress with a total of 26 commits across both projects, showcasing the ongoing commitment to enhancing collaborative coding efforts. ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 13 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2012-01-01T00:00:00Z&until=2012-01-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 13 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2012-01-01T00:00:00Z&until=2012-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # VIM a IDE para programadores Python **URL**: https://avelino.run/vim-a-ide-para-programadores-python/ **Published**: 2011-12-22 **Tags**: vim, ide, python **Word Count**: 515 words Depois muito tempo sem escrever nada no meu blog, escolhi esse tema para chamar a atenção do pessoal que esta começando desenvolver em Python que sempre pergunta qual é a melhor IDE para desenvolver em Python ou qual quer programador que usa uma super IDE pesado porque tem o recurso X, Y e Z. Com o VIM podemos ter todos os recurso avançado que temos em qual quer IDE, basta algumas configurações para que esses recursos ser ativado, para facilitar a vida de todos compartilhei o meu `.vimrc` e nesse post vou explicar como usar o mesmo. > "Em 2 de novembro de 1991, Bram Moolenaar publicava a primeira versão do edito vim. O vim nasceu como um clone para Amiga do editor vi criado por Bill Joy em 1976, adicionando algumas funcionalidades extras, daí seu nome (VI iMproved ou VI Melhorado). Este editor se adaptou rapidamente a outras plataformas." Assumindo que o `vi` já esta instalado no meu micro, vamos instalar as configurações que eu fiz, basta rodar os seguintes comando no seu bash (Linux ou Mac): ```shell curl https://raw.github.com/avelino/.vimrc/master/bootstrap.sh -o - | sh ``` > instalação depreciada, o projeto evoluiu para [Vim-Bootrap](https://vim-bootstrap.com/) Após isso ele vai baixar o repositório na sua pasta `HOME`. Recomendo o uso o VIM em GUI pois podemos chegar 256 cores, ou seja, colocar temas mais agradável e assim deixando o uso do `vim` mais confortável para o desenvolvimento, para Linux é o `gvim` e para mac o `macvim` (Para mac o Björn Winckler fez um ótimo trabalho, na minha humilde opinião é a melhor versão do VIM via GUI). Chega de blablabla né, vamos logo para o que realmente interessa, como o `VIM` ficou e como utilizar ele? ![vim start](/blog/vim-start.png) Usando o vim para navegar nas pasta de um projeto: ![vim files tree](/blog/vim-files.png) Buscando arquivo por nome dentro do projeto: ![vim search files](/blog/vim-search-files.png) Listar todas as class e def do arquivo esta esta aberto (Python) ![vim list class](/blog/vim-list-class.png) Lista de comandos para usar no 'vim', lembrando que esses comando foi customizado: - `:cd` /path Abrir pasta - `tn` Abrir nova aba - `te` Abrir nova aba e carregar arquivo - `t]` Proxima aba - `t[` Voltar aba - `Ctrl+c` Adicionar todos os arquivos no cache para poder fazer busca de arquivo (recomendo fazer isso ao abrir o projeto) - `Ctrl+f` Busca arquivo e abre na mesma aba - `Ctrl+s` Busca arquivo e abre em uma nova aba - `\b` Abre arquivo que esta no buffer do vim (Arquivo abertos) - `\d,`, `\n` ou `F3` Abre navegador de arquivo - `\f` Lista todas as class e def (Python) - `\j` Vai para declaração de um metodo - `\r` Renomear todos os metodos - `[e` Move linha para cima - `e]` Move linha para baixo - `\v` ou `Ctrl+w + v` Divide a tela em vertical - `\h` ou `Ctrl+w + s` Divide a tela em horizontal - `\w` ou `Ctrl+w + q` Fecha a aba atual - `Ctrl+k` Abre console Python - `Ctrl+j` Roda o script Python aberto - `\sh` Abre bash (shell) - `\p` Manda o arquivo em aberto para o dpaste.com - `\ga` Git add . - `\gc` Git commit - `\gsh` Git push - `\gs` Git status - `\gd` Git diff - `\gr` Git remove - `\S` Remove todos os espaços do final - `\c` Lista controle de versao do buffer --- # Open Source Contributions - December 2011 **URL**: https://avelino.run/foss/2011/12/ **Published**: 2011-12-01 **Word Count**: 53 words **Summary**: December 2011 saw impactful contributions with 2 repositories and 26 total commits, marking a significant end to the year in open-source development. This timeline highlights the key contributions made in December 2011, showcasing the collaborative efforts across two repositories, including notable push events that contributed to the vibrant open-source community. ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 13 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-12-01T00:00:00Z&until=2011-12-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 13 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-12-01T00:00:00Z&until=2011-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2011 **URL**: https://avelino.run/foss/2011/11/ **Published**: 2011-11-01 **Word Count**: 137 words **Summary**: November 2011 showcased 8 repositories, 1 pull request, and 2 issues, reflecting significant contributions and collaboration in the open-source community. This timeline highlights the key contributions made in November 2011, detailing the active engagement across various repositories. With 8 repositories involved, significant pushes, and the opening of important issues and a pull request, this month marked notable progress in collaborative software development. ## 2011-11-24 - 🔀 Opened PR in [vic/typhon](https://github.com/vic/typhon): [Implementation PEP8 and Encode UTF-8](https://github.com/vic/typhon/pull/2) ## 2011-11-12 - 🐛 Opened issue in [avelino/python-opencv-detect](https://github.com/avelino/python-opencv-detect): [Create hand detect](https://github.com/avelino/python-opencv-detect/issues/1) ## 2011-11-04 - 🐛 Opened issue in [cadu-leite/python-people](https://github.com/cadu-leite/python-people): [url friend to profile](https://github.com/cadu-leite/python-people/issues/4) ## Commits - 🔨 Push to [avelino/python-opencv-detect](https://github.com/avelino/python-opencv-detect): 7 commit(s) - [See commits](https://github.com/avelino/python-opencv-detect/commits?author=avelino&since=2011-11-01T00:00:00Z&until=2011-11-30T23:59:59Z) - 🔨 Push to [vic/typhon](https://github.com/vic/typhon): 4 commit(s) - [See commits](https://github.com/vic/typhon/commits?author=avelino&since=2011-11-01T00:00:00Z&until=2011-11-30T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 4 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-11-01T00:00:00Z&until=2011-11-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 4 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-11-01T00:00:00Z&until=2011-11-30T23:59:59Z) - 🔨 Push to [avelino/readertogplusfriends](https://github.com/avelino/readertogplusfriends): 3 commit(s) - [See commits](https://github.com/avelino/readertogplusfriends/commits?author=avelino&since=2011-11-01T00:00:00Z&until=2011-11-30T23:59:59Z) - 🔨 Push to [avelino/grooveshark-scrobbler](https://github.com/avelino/grooveshark-scrobbler): 1 commit(s) - [See commits](https://github.com/avelino/grooveshark-scrobbler/commits?author=avelino&since=2011-11-01T00:00:00Z&until=2011-11-30T23:59:59Z) - 🔨 Push to [avelino/pycorreios](https://github.com/avelino/pycorreios): 1 commit(s) - [See commits](https://github.com/avelino/pycorreios/commits?author=avelino&since=2011-11-01T00:00:00Z&until=2011-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Nova versão da API do Dropbox **URL**: https://avelino.run/nova-vers%C3%A3o-da-api-do-dropbox/ **Published**: 2011-10-13 **Tags**: dropbox, api, python **Word Count**: 286 words Dia 14/09/2011 o Dropbox lançou a nova versão 1.0 da API, nesse lançamento trouxe muitas novidades e melhorias: - Suporte para aplicações web - Suporte para criação de pasta (Na versão 0.1 da API não tinha) - Novo site para desenvolvedores, com documentação simples e completa https://www.dropbox.com/developers_beta - Melhor compartilhamento de arquivo, streaming, busca por arquivo e suporte para revisão de arquivo - Implementação no controle de nomes de arquivos, para não sobrescrever arquivos já salvo - SDK atualizado para iOS, Android, Python, Ruby e Java que implementa todas modificações e documentação Link do repositorio (Python Pypi) da nova biblioteca http://pypi.python.org/pypi/dropbox/1.1 O dropbox implementou um oauth onde podemos desenvolver software e fazer o usuário usar a conta de dropbox dele para armazenamento de arquivos: ![dropbox interface auth](/blog/dropbox-oauth.png) Vou falar um pouco sobre 3 metodos que esta dentro da biblioteca "dropbox" client, rest e session. Com o metodo session é por onde tudo começa, onde você linka o seu software com uma conta Dropbox, exemplo: ```python # Include the Dropbox SDK libraries from dropbox import session # Get your app key and secret from the Dropbox developer website APP_KEY = 'INSERT_APP_KEY_HERE' APP_SECRET = 'INSERT_SECRET_HERE' # ACCESS_TYPE should be 'dropbox' or 'app_folder' as configured for your app ACCESS_TYPE = 'INSERT_ACCESS_TYPE_HERE' sess = session.DropboxSession(APP_KEY, APP_SECRET, ACCESS_TYPE) ``` Caso esteja usando a conta do Dropbox do usuário podemos pegar informações da conta dele: ```python client = client.DropboxClient(sess) print "linked account:", client.account_info() ``` Agora usando o metodo "client" podemos fazer get e put de arquivos: ```python from dropbox import client f = open('working-draft.txt') response = client.put_file('/magnum-opus.txt', f) print "uploaded:", response ``` Após criar o arquivos podemos ler ele: ```python print client.get_file('/magnum-opus.txt').read() ``` Reescrever o arquivo com uma nova revisão para criar um novo arquivo: ```python out = open('magnum-opus.txt', 'w') out.write(client.get_file('/magnum-opus.txt',rev='362e2029684fe').read()) ``` Para trabalhar com REST temos um ótima documentação https://www.dropbox.com/developers_beta/reference/api --- # Open Source Contributions - October 2011 **URL**: https://avelino.run/foss/2011/10/ **Published**: 2011-10-01 **Word Count**: 110 words **Summary**: October 2011 saw 5 repositories contribute 6 significant events, including 1 pull request and 1 issue, showcasing a month of active development and collaboration. Explore the timeline of October 2011, highlighting key contributions from various repositories. This month featured 5 active projects, with notable events including a pull request aimed at enhancing testing in the django-jobim repository and an issue addressing Nginx monitoring in the fish-slapping project. ## 2011-10-18 - 🔀 Opened PR in [cabello/django-jobim](https://github.com/cabello/django-jobim): [Add test in contact and create file requirements (pip freeze)](https://github.com/cabello/django-jobim/pull/5) ## 2011-10-03 - 🐛 Opened issue in [lfagundes/fish-slapping](https://github.com/lfagundes/fish-slapping): [Plugin para monitorar Nginx](https://github.com/lfagundes/fish-slapping/issues/1) ## Commits - 🔨 Push to [avelino/readertogplusfriends](https://github.com/avelino/readertogplusfriends): 4 commit(s) - [See commits](https://github.com/avelino/readertogplusfriends/commits?author=avelino&since=2011-10-01T00:00:00Z&until=2011-10-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-10-01T00:00:00Z&until=2011-10-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 2 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-10-01T00:00:00Z&until=2011-10-31T23:59:59Z) - 🔨 Push to [cabello/django-jobim](https://github.com/cabello/django-jobim): 2 commit(s) - [See commits](https://github.com/cabello/django-jobim/commits?author=avelino&since=2011-10-01T00:00:00Z&until=2011-10-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - September 2011 **URL**: https://avelino.run/foss/2011/09/ **Published**: 2011-09-01 **Word Count**: 45 words **Summary**: September 2011 highlights a pivotal month with significant contributions to the avelino/dgrid repository, showcasing ongoing development and community engagement. Explore the timeline of September 2011, where we track key contributions and activities within the avelino/dgrid repository, marking a month of focused development with one significant push event. ## Commits - 🔨 Push to [avelino/dgrid](https://github.com/avelino/dgrid): 1 commit(s) - [See commits](https://github.com/avelino/dgrid/commits?author=avelino&since=2011-09-01T00:00:00Z&until=2011-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - August 2011 **URL**: https://avelino.run/foss/2011/08/ **Published**: 2011-08-01 **Word Count**: 107 words **Summary**: August 2011 showcased significant contributions with 5 repos, 7 total events, and a focus on enhancing projects through pushes and a pull request. Explore the contributions made in August 2011, highlighting key developments across five repositories. This timeline details various events including pushes, a pull request, and an issue, reflecting the collaborative efforts and advancements in the open-source community during the month. ## 2011-08-30 - 🐛 Opened issue in [lleitep3/maxLengthBox](https://github.com/lleitep3/maxLengthBox): [Implementação de Teste Unitario](https://github.com/lleitep3/maxLengthBox/issues/3) ## 2011-08-22 - 🔀 Opened PR in [lleitep3/maxLengthBox](https://github.com/lleitep3/maxLengthBox): [Modificação do README](https://github.com/lleitep3/maxLengthBox/pull/1) ## Commits - 🔨 Push to [avelino/nql](https://github.com/avelino/nql): 9 commit(s) - [See commits](https://github.com/avelino/nql/commits?author=avelino&since=2011-08-01T00:00:00Z&until=2011-08-31T23:59:59Z) - 🔨 Push to [avelino/dgrid](https://github.com/avelino/dgrid): 5 commit(s) - [See commits](https://github.com/avelino/dgrid/commits?author=avelino&since=2011-08-01T00:00:00Z&until=2011-08-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 4 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-08-01T00:00:00Z&until=2011-08-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 4 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-08-01T00:00:00Z&until=2011-08-31T23:59:59Z) - 🔨 Push to [lleitep3/maxLengthBox](https://github.com/lleitep3/maxLengthBox): 2 commit(s) - [See commits](https://github.com/lleitep3/maxLengthBox/commits?author=avelino&since=2011-08-01T00:00:00Z&until=2011-08-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - July 2011 **URL**: https://avelino.run/foss/2011/07/ **Published**: 2011-07-01 **Word Count**: 70 words **Summary**: July 2011 showcased significant activity with 4 repositories contributing 10 commits, marking a month of robust development and collaboration. In July 2011, a total of 4 repositories saw considerable contributions, culminating in 10 distinct commits. This timeline highlights the impactful developments and collaborative efforts made during this month. ## Commits - 🔨 Push to [avelino/ilix](https://github.com/avelino/ilix): 3 commit(s) - [See commits](https://github.com/avelino/ilix/commits?author=avelino&since=2011-07-01T00:00:00Z&until=2011-07-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-07-01T00:00:00Z&until=2011-07-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 3 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-07-01T00:00:00Z&until=2011-07-31T23:59:59Z) - 🔨 Push to [avelino/dgrid](https://github.com/avelino/dgrid): 1 commit(s) - [See commits](https://github.com/avelino/dgrid/commits?author=avelino&since=2011-07-01T00:00:00Z&until=2011-07-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - June 2011 **URL**: https://avelino.run/foss/2011/06/ **Published**: 2011-06-01 **Word Count**: 48 words **Summary**: In June 2011, significant contributions emerged with 2 repositories and 8 commits, marking a notable month for collaborative development. Explore the timeline of contributions for June 2011, highlighting key activities and milestones achieved within two repositories, showcasing the collaborative spirit of development. ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 4 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-06-01T00:00:00Z&until=2011-06-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 4 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-06-01T00:00:00Z&until=2011-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Entendendo na pratica como funciona a linguagem Go **URL**: https://avelino.run/entendendo-na-pratica-como-funciona-a-linguagem-go/ **Published**: 2011-05-25 **Tags**: golang **Word Count**: 154 words A linguagem Go é um projeto open source para tornar os programadores mais produtivos. Go foi desenvolvido para utilização maxima do CPU, tornando um processo simples para criar aplicação Multithreaded, o processo de utilização de maquinas na rede para processar determinado programa também é bem simples, assim tornando um software mais flexível e modular. Vamos montar um servidor HTTP em Go. ```go package main import ( "http"; "io"; "fmt"; ) func HelloServer(c *http.Conn, req *http.Request) { io.WriteString(c, "hello, world!\n"); } func main() { fmt.Printf("http://localhost:8080/hello\n"); http.Handle("/hello", http.HandlerFunc(HelloServer)); err := http.ListenAndServe(":8080", nil); if err != nil { panic("ListenAndServe: ", err.String()) } } ``` O `HelloServer()` é o que vai fazer a parte de renderização, o `man()` ele sobre o servidor HTTP na porta *8080*, e caso o usuário tente processar um URL que não esteja no fmt ele vai cair no err onde vai processar o erro e apresentar o *panic*. Simples assim já temos um servidor HTTP. --- # Open Source Contributions - May 2011 **URL**: https://avelino.run/foss/2011/05/ **Published**: 2011-05-01 **Word Count**: 80 words **Summary**: May 2011 saw significant contributions with 2 repositories, 2 issues opened, and 2 pushes, reflecting active collaboration in the developer community. In May 2011, the development landscape was marked by notable activities across two repositories. This timeline showcases the contributions made, including the opening of two issues and the execution of two significant pushes, highlighting the ongoing collaboration and innovation in the community. ## 2011-05-19 - 🐛 Opened issue in [avelino/.vimrc](https://github.com/avelino/.vimrc): [qwerqwerqwer](https://github.com/avelino/.vimrc/issues/3) - 🐛 Opened issue in [avelino/.vimrc](https://github.com/avelino/.vimrc): [sfgdgsfg](https://github.com/avelino/.vimrc/issues/2) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-05-01T00:00:00Z&until=2011-05-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 1 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-05-01T00:00:00Z&until=2011-05-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Upload da arquivo no Google App Engine (BlobProperty) **URL**: https://avelino.run/upload-da-arquivo-no-google-app-engine-blobproperty/ **Published**: 2011-04-23 **Tags**: Google App Engine, BlobProperty, python, gae **Word Count**: 460 words Essa semana que passou tive uma necessidade para um sistema de trabalhar com UPLOAD de arquivos, ate ai é simples, só que o sistema estava em Google App Engine, depois de apanhar um pouco resolvi fazer um post aqui no Blog para deixar documentado como não é complicado trabalhar com **BlobProperty** no **BigTable**. Primeiro vamos criar um Modal onde vai ter dois campo o arquivo e o mimetype dele: ```python class DatastoreFile(db.Model): data = db.BlobProperty(required=True) mimetype = db.StringProperty(required=True) ``` Agora vamos criar a views onde ele vai processar o formulario e o POST do formulario: ```python class MainHandler(webapp.RequestHandler): def get(self): self.response.out.write(template.render("upload.html", {})) def post(self): file = self.request.POST['file'] entity = DatastoreFile(data=file.value, mimetype=file.type) entity.put() file_url = "http://%s/%d/%s" % (self.request.host, entity.key().id(), file.name) self.response.out.write("Your uploaded file is now available at %s" % (file_url,)) ``` Podemos notar que na definição get() temos apenas a renderização do *"upload.html"*, o conteudo dele é bem simples, temos um input do tipo file e outro submit: ```html File Upload
``` Falando da definição post() que esta na classe MainHandler ela que faz o trabalho de fazer o UPLOAD do arquivo para dentro do BlobProperty, é um processo bem simples, a variável "file" recebe o POST do input file, depois disso chamamos o modal que tem o nome de DatastoreFile passando dois parâmetros que é os dois campos criados, o data e mimetype, depois disso é só fazer o put() que seja salvo no banco de dados. Dentro do post() eu gero o link para download do arquivo na variável file_url, onde passo o HOST (url do sistema), id() (do arquivo que foi feito upload) e file name (Nome do campo que recebeu o arquivo). Agora temos que fazer a classe para download do arquivo onde vamos mudar o Content-Type do response para o mime-type do arquivo que foi feito o upload, exemplo: fiz o upload de um arquivo no formato JPG o mime type dele é "image/jpeg", então tenho que fazer o responser renderizar em formatado "image/jpeg". Na URL que montamos para download passamos a seguinte informação id e file name onde temos que criar uma definição get() que receba essas informações: ```python class DownloadHandler(webapp.RequestHandler): def get(self, id, filename): entity = DatastoreFile.get_by_id(int(id)) self.response.headers['Content-Type'] = entity.mimetype self.response.out.write(entity.data) ``` Recebendo as duas variáveis podemos fazer um consulta no BigTable de forma simples onde busco o id, pego o retorno do banco de dados e coloco que o response.headers['Content-Type'] é o mime-type que esta salvo no banco e depois é só escrever o arquivo na tela. Agora vamos criar as rotas da URL: ```python def main(): application = webapp.WSGIApplication([ ('/', MainHandler), ('/(\d+)/(.*)', DownloadHandler) ],debug=True) util.run_wsgi_app(application) if __name__ == '__main__': main() ``` Quem ainda estiver com duvida pode dar uma olhar no repositorio: https://bitbucket.org/avelino/post_py_upload_de_arquivo_no_gae/src --- # Criando sistema com Multithreaded em Python **URL**: https://avelino.run/criando-sistema-com-multithreaded-em-python/ **Published**: 2011-04-01 **Tags**: python, multithreaded **Word Count**: 386 words Multithreaded é quando temos mais de um programa executando ao mesmo tempo, totalmente diferente de executar duas vez o mesmo programa, com "threads" o sistema vai ser executado apenas uma vez e via thread vai processar mais de uma função ao mesmo tempo, isso é necessario para concorrência em sistema. Algumas vantagens de trabalha com threads: - Múltiplos processo ao mesmo tempo e pode, portanto, compartilhar informações e comunicar uns com os outros mais facilmente do que se fossem processos separados; - Menos consumo de memória, pois o mesmo vai consumir mais CPU. Uma thread tem um começo, meio e fim, assim podemos colocar um ponteiro de instrução para acompanhar onde esta sendo processado cada thread dentro de seu contexto. - Ela pode ser antecipada (interrompido); - Pode ser temporariamente suspensos (também conhecido como sleep), enquanto outros segmentos estão em execução - isso é chamado de rendimento. Iniciando uma nova Thread: ```python #!/usr/bin/python # -*- coding: UTF-8 -*- import thread import time # Definição da função de thread def print_time( name, delay): count = 0 while count < 5: time.sleep(delay) count += 1 print "%s: %s" % ( name, time.ctime(time.time()) ) # Criar dois tópicos try: thread.start_new_thread( print_time, ("Thread-1", 2, ) ) thread.start_new_thread( print_time, ("Thread-2", 4, ) ) except: print "Erro: não conseguiu iniciar a thread" while 1: pass ``` Executando: ```shell python example.py ``` > Thread-1: Thu Mar 31 11:03:20 2011 > Thread-2: Thu Mar 31 11:03:22 2011 > Thread-1: Thu Mar 31 11:03:22 2011 > Thread-1: Thu Mar 31 11:03:24 2011 > Thread-2: Thu Mar 31 11:03:26 2011 > Thread-1: Thu Mar 31 11:03:26 2011 > Thread-1: Thu Mar 31 11:03:28 2011 > Thread-2: Thu Mar 31 11:03:30 2011 > Thread-2: Thu Mar 31 11:03:34 2011 > Thread-2: Thu Mar 31 11:03:38 2011 Se repararmos temos alguns processo concorrendo ao mesmo tempos, dessa forma já estamos trabalhando com Thread. ## Modulos da biblioteca thread - threading.activeCount(): Retorna o número de objetos de thread que estão ativos. - threading.currentThread(): Retorna o número de objetos de thread no controle do chamador de thread. - threading.enumerate(): Retorna uma lista de todos os objetos de thread que estão atualmente activas. - run(): Método é o ponto de partida para uma thread. - start(): Método inicia uma thread, chamando o método de execução. - join([time]): Espera para terminar. - isAlive(): Método verifica se uma thread ainda está em execução. - getName(): Método retorno o nome de uma thread. - setName(): Método declaro o nome de um thread. --- # Open Source Contributions - April 2011 **URL**: https://avelino.run/foss/2011/04/ **Published**: 2011-04-01 **Word Count**: 81 words **Summary**: April 2011 saw 4 repositories active with 3 pushes, highlighting contributions like new plugins and significant commits in Vim and Zsh projects. Explore the timeline of contributions for April 2011, showcasing a total of 4 repositories with notable activities including 3 pushes and an open pull request that added a new plugin to the Oh My Zsh project. ## 2011-04-30 - 🔀 Opened PR in [ohmyzsh/ohmyzsh](https://github.com/ohmyzsh/ohmyzsh): [Add new plugin Python and Django](https://github.com/ohmyzsh/ohmyzsh/pull/318) ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 7 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-04-01T00:00:00Z&until=2011-04-30T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 7 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-04-01T00:00:00Z&until=2011-04-30T23:59:59Z) - 🔨 Push to [avelino/post_py_upload_de_arquivo_no_gae](https://github.com/avelino/post_py_upload_de_arquivo_no_gae): 1 commit(s) - [See commits](https://github.com/avelino/post_py_upload_de_arquivo_no_gae/commits?author=avelino&since=2011-04-01T00:00:00Z&until=2011-04-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Certificado EV SSL **URL**: https://avelino.run/certificado-ev-ssl/ **Published**: 2011-03-28 **Tags**: certificado, ssl **Word Count**: 355 words Certificados Digitais EV SSL, ou em português SSL de Validação Avançada, são certificados qualificados que se apresentam aos usuários da Internet de forma distinta dos demais certificados, garantindo assim aos usuários que o site acessado possui um certificado SSL emitido segundo um processo altamente seguro e verificado através de uma auditoria. ## História O Comércio via Internet está enfrentando uma crise de segurança. A confiança na segurança de sites está diminuindo, e o número de consumidores que estão deixando de fazer transações on-line está aumentando. Segundo o instituto Forrester Research, ao final de 2005, 24% dos usuários de Internet não compraria via web para os feriados de final de ano pois não se sentiam seguros e 61% reportou que haviam reduzido as compras online por algum motivo. Agora em 2007 empresas com operações online poderão mostrar definitivamente sua identidade para os seus clientes – e os clientes poderão confirmar esta identidade antes de confiar no site. Essa oportunidade se deve ao resultado da grande evolução no backbone de segurança WEB nos últimos 10 anos. É a introdução de um novo tipo de certificado SSL, o primeiro desde a origem desta tecnologia há mais de uma década atrás. Estes novos certificados são chamados Certificados Extended Validation SSL e eles representam mais de um ano de esforços feitos pelo CA/Browser Fórum, um consórcio de empresas líderes em manutenção de Browser e Autoridades Certificadoras de SSL. Os Certificados EV SSL irão facilitar o comércio online em todas as suas formas, aumentando a confiança dos usuários, legitimando sites e reduzindo significativamente a eficácia dos ataques de fraude e roubo de senha. ## EV SSL no Brasil No Brasil o certificado está sendo comercializado pela Certisign, Unicert, Comodo e Secsign. Até o final do ano estima-se que do total de vendas de certificados para servidores, 20% sejam no modelo EV SSL. Segundo a projeção da Certisign, isso significa a venda de quase 4.500 certificados. Espera-se que no prazo de dois anos todas as empresas que se prestam a realizar transações on-line (como sites de e-commerce, bancos, etc...) adotem este produto, pois ele garante identificação visual, maior segurança e conforto para o consumidor. --- # Trabalhando com Python e MongoDB **URL**: https://avelino.run/trabalhando-com-python-e-mongodb/ **Published**: 2011-03-28 **Tags**: saint, vim, church, editor **Word Count**: 367 words Hoje MongoDB está começando ficar bem comentado na internet (famosos Database NoSQL). Tenho bastante aplicações em produção trabalhando com MongoDB e outros database NoSQL ambas escrita em Python, vou escrever um pouco como usar o MongoDB na linguagem Python. Como em qualquer outra linguagem, não tem muito segredo. No Python temos a LIB chamada PyMongo, que simplifica muito o trabalho do programador. Contando que o PyMongo já estejá instalado, seguimos em frente. Como fazer um conexão: ```python from pymongo import Connection connection = Connection() ``` OU ```python connection = Connection('localhost', 27017) ``` Usar/Criar um Database (no contexto do MongoDB damos o nome de **collection**): ```python db = connection.forum_database ``` OU ```python db = connection['forum-database'] ``` O MongoDB usa um formato jSON para sua syntax, veja abaixo: ```python forum = {"author": "Thiago Avelino", "text": "Python e MongoDB", "tags": ["mongodb", "python", "pymongo"]} ``` Inserindo em um Documento, usando o método insert(): ```python imaster = db.imaster imaster.insert(forum) ``` > ObjectId('4c7400f42d73303fd2000000') Após rodar o insert() ele criou um documento fisico no servidor, podemos ver este registro da seguinte forma: ```python db.collection_names() ``` > [u'imaster', u'system.indexes'] Selecionando apenas um documento com find_one() ```python imaster.find_one() ``` > {u'text': u'Python e MongoDB', u'_id': ObjectId('4c7400f42d73303fd2000000'), u'author': u'Thiago Avelino', u'tags': [u'mongodb', u'python', u'pymongo']} Filtrando, usando condições para selecionar: ```python imaster.find_one({"author": "Thiago Avelino"}) ``` > {u'text': u'Python e MongoDB', u'_id': ObjectId('4c7400f42d73303fd2000000'), u'author': u'Thiago Avelino', u'tags': [u'mongodb', u'python', u'pymongo']} Contando: ```python imaster.count() ``` > 1 Temos também alguns ORM Python que trabalha com o MongoDB, um exemplo > System Message: WARNING/2 (, line 86) > Line block ends without a blank line. é o MongoEngine que trabalha exatamente igual o ORM do Django. | Veja um exemplo usando MongoEngine: ```python class BlogPost(Document): title = StringField(required=True, max_length=200) posted = DateTimeField(default=datetime.datetime.now) tags = ListField(StringField(max_length=50)) class TextPost(BlogPost): content = StringField(required=True) class LinkPost(BlogPost): url = StringField(required=True) # Create a text-based post >>> post1 = TextPost(title='Using MongoEngine', content='See the tutorial') >>> post1.tags = ['mongodb', 'mongoengine'] >>> post1.save() # Create a link-based post >>> post2 = LinkPost(title='MongoEngine Docs', url='hmarr.com/mongoengine') >>> post2.tags = ['mongoengine', 'documentation'] >>> post2.save() # Iterate over all posts using the BlogPost superclass >>> for post in BlogPost.objects: ... print '===', post.title, '===' ... if isinstance(post, TextPost): ... print post.content ... elif isinstance(post, LinkPost): ... print 'Link:', post.url ... print ... >>> len(BlogPost.objects) 2 >>> len(HtmlPost.objects) 1 >>> len(LinkPost.objects) 1 # Find tagged posts >>> len(BlogPost.objects(tags='mongoengine')) 2 >>> len(BlogPost.objects(tags='mongodb')) 1 ``` --- # Open Source Contributions - March 2011 **URL**: https://avelino.run/foss/2011/03/ **Published**: 2011-03-01 **Word Count**: 51 words **Summary**: March 2011 saw a notable contribution with one pull request opened in the MongoDB repository, showcasing ongoing development and collaboration efforts. This timeline highlights the key contributions made in March 2011, focusing on the significant pull request submitted to the MongoDB repository. The month reflects the active engagement of developers in enhancing the project. ## 2011-03-11 - 🔀 Opened PR in [mongodb/mongo](https://github.com/mongodb/mongo): [Clear test, removed comment](https://github.com/mongodb/mongo/pull/29) ## Private contributions - 🔒 0 private contribution(s) this month --- # Coding Dojo o melhor lugar para pratica Programação **URL**: https://avelino.run/coding-dojo-o-melhor-lugar-para-pratica-programa%C3%A7%C3%A3o/ **Published**: 2011-02-21 **Tags**: dojo, python, praticar **Word Count**: 95 words Nós da Comunidade Python São Paulo estamos no 10' Coding Dojo. Parabéns a todos os organizadores e participantes. Agradeço a todas as empresa que abriu a porta para nós da Comunidade Python São Paulo poder realizar o Coding Dojo. Coding Dojo é uma reunião onde um grupo de programadores se reúnem para trabalhar em um desafio de programação. Eles estão lá para se divertir e se envolver em prática a fim de melhorar suas habilidades. Veja a baixo videos gravado no 10' Dojo da Comunidade Python São Paulo onde foi realizado na empresa Gonow Tecnologia: {{< youtube -hZkXKqXCh8 >}} {{< youtube jh8YA8fX3xA >}} {{< youtube FuL173EXH7Y >}} {{< youtube _7LtlsyfjPs >}} --- # Meu ambiente de trabalho em 7 itens **URL**: https://avelino.run/meu-ambiente-de-trabalho-em-7-itens/ **Published**: 2011-02-20 **Tags**: 7 itens, ambiente de trabalho, vim, dropbox, macOS, git **Word Count**: 355 words O [Licio](https://twitter.com/licio "The Licio - Twitter") me convidou para entrar no ritmo dos "7 itens" então vamos lá... * GIT + Mercurial > Geralmente procuro usar Mercurial no Bitbucket mas costumo usar bastante Git no Github. Uso o Github porque vejo ele muito mais do que um espaço para criar repositórios, e sim uma rede social de Desenvolvedor. * VIM > Depois de muito testar o Emacs, TextMate e VIM, resolvi afirma que para mim o melhor é o VIM, consigo fazer tudo que preciso e não tenho tantos problemas com " como no TextMate. Falando um pouco sobre o Emacs, realmente é um ótimo editor, só que cansa brincar de street fighter quando vou programar (Para os que conhece Emacs vai entender). > Depois de conhecer o [QMX](https://twitter.com/qmx "Douglas Campos aka QMX - Twitter") (Evangelista VIM) comecei ver o VIM como um ótimo editor. * OS X > Depois de passar muito tempo com ambiente Linux, vi que não bastava a simplicidade de um gerenciamento de pacote como yum ou apt-get e sim um sistema onde conseguisse uma melhor integração com a camada de hardware. Por isso hoje uso Macbook, com o sistema operacional OS X. > A bateria dura muito mais tempo do que qual quer outro Notebook que eu tive até hoje. * iterm2 + homebrew > Utilizo o iterm2 como terminal do meu Mac e tem me agradado muito a parte de troca de abas, como gerenciador de pacote utilizo o homebrew (que me foi apresentado pelo [Fabio Akita](https://twitter.com/akitaonrails "Fabio Akite aka AkitaOnRails - Twitter"), automaticamente já sabemos que é escrito em Ruby :/ ) * pip + virtualenv + virtualenvwrapper > Como sou desenvolvedor Python não temos trabalhar com ultiplos projetos sem um Virtualenv para isolar meus ambientes para cada projeto, o Virtualenvwrapper uso para simplificar a criação de cada ambiente e o pip uso para instalar bibliotecas Python. * Dropbox > Realmente o Dropbox me salvou muitas vezes, com o uso dele não preciso ficar levando pen drive para cliente ou qual quer local que eu for. * Google Apps (Gmail) > Não sei qualificar quantos % da minha vida profissional esta encima do Google Apps, mas sei que tem muita coisa lá. Agora para seguir com o meme, convido meus amigos: * [Christiano Anderson](https://twitter.com/dump "Christiano Anderson aka Dump - Twitter") * [Bruno Rocha](https://twitter.com/rochacbruno/ "Bruno Rocha - Twitter") * [Bernardo Heynemann](https://twitter.com/heynemann "Bernardo Heynemann - Twitter") * [Rodrigo Bernardo Pimentel](https://twitter.com/rbp "Rodrigo Bernardo Pimentel aka rbp - Twitter") --- # Open Source Contributions - February 2011 **URL**: https://avelino.run/foss/2011/02/ **Published**: 2011-02-01 **Word Count**: 51 words **Summary**: February 2011 saw impactful contributions with 2 repositories updated, showcasing ongoing development in the community. Explore the contributions made in February 2011, highlighting key updates and activities across two repositories. This timeline captures the essence of collaborative efforts during the month. ## Commits - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 1 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-02-01T00:00:00Z&until=2011-02-28T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 1 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-02-01T00:00:00Z&until=2011-02-28T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2011 **URL**: https://avelino.run/foss/2011/01/ **Published**: 2011-01-01 **Word Count**: 56 words **Summary**: January 2011 saw significant contributions across three repositories, with a total of 10 commits enhancing vital projects in the community. Explore the timeline of contributions made in January 2011, highlighting the collaborative efforts across three repositories with a total of 10 impactful commits. ## Commits - 🔨 Push to [avelino/pypagseguro](https://github.com/avelino/pypagseguro): 4 commit(s) - [See commits](https://github.com/avelino/pypagseguro/commits?author=avelino&since=2011-01-01T00:00:00Z&until=2011-01-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 3 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2011-01-01T00:00:00Z&until=2011-01-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 3 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2011-01-01T00:00:00Z&until=2011-01-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Problema com Celery "process exiting with exitcode 1" **URL**: https://avelino.run/problema-com-celery-process-exiting-with-exitcode-1/ **Published**: 2010-12-26 **Tags**: python, celery, django **Word Count**: 610 words Hoje estava rodando o Celery em um projeto e me deparei com um problema, o "process exiting with exitcode 1" quando dava start no Celery: ```shell [root@xen-01 gonow]# python2.7 manage.py celeryd -v 2 -B -s celery -E -l INFO [2010-12-16 09:18:13,184: WARNING/MainProcess] celery@xen-01 v2.1.3 is starting. [2010-12-16 09:18:13,185: WARNING/MainProcess] /usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/apps/ worker.py:107: UserWarning: Running celeryd with superuser privileges is not encouraged! "Running celeryd with superuser privileges is not encouraged!") [2010-12-16 09:18:13,185: WARNING/MainProcess] /usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/apps/ worker.py:110: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in a production environment! warnings.warn("Using settings.DEBUG leads to a memory leak, " [2010-12-16 09:18:13,188: WARNING/MainProcess] Configuration -> . broker -> ghettoq.taproot.Database://guest@localhost/ . queues -> . celery -> exchange:celery (direct) binding:celery . concurrency -> 2 . loader -> djcelery.loaders.DjangoLoader . logfile -> [stderr]@INFO . events -> ON . beat -> ON . tasks -> . gonow.vps.tasks.lvm [2010-12-16 09:18:13,213: INFO/PoolWorker-2] child process calling self.run() [2010-12-16 09:18:13,223: INFO/PoolWorker-3] child process calling self.run() [2010-12-16 09:18:13,237: INFO/Beat] child process calling self.run() [2010-12-16 09:18:13,239: INFO/Beat] Celerybeat: Starting... [2010-12-16 09:18:13,239: WARNING/MainProcess] celery@xen-01 has started. [2010-12-16 09:18:13,257: INFO/Beat] process shutting down [2010-12-16 09:18:13,258: WARNING/Beat] Process Beat: [2010-12-16 09:18:13,259: WARNING/Beat] Traceback (most recent call last): [2010-12-16 09:18:13,259: WARNING/Beat] File "/usr/local/lib/python2.7/multiprocessing/process.py", line 232, in _bootstrap [2010-12-16 09:18:13,284: WARNING/Beat] self.run() [2010-12-16 09:18:13,285: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 392, in run [2010-12-16 09:18:13,291: WARNING/Beat] self.service.start(embedded_process=True) [2010-12-16 09:18:13,292: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 322, in start [2010-12-16 09:18:13,292: WARNING/Beat] humanize_seconds(self.scheduler.max_interval))) [2010-12-16 09:18:13,292: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 362, in scheduler [2010-12-16 09:18:13,292: WARNING/Beat] self._scheduler = self.get_scheduler() [2010-12-16 09:18:13,292: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 354, in get_scheduler [2010-12-16 09:18:13,293: WARNING/Beat] lazy=lazy) [2010-12-16 09:18:13,293: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/utils/ __init__.py", line 362, in instantiate [2010-12-16 09:18:13,297: WARNING/Beat] return get_cls_by_name(name)(*args, **kwargs) [2010-12-16 09:18:13,298: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 274, in __init__ [2010-12-16 09:18:13,298: WARNING/Beat] Scheduler.__init__(self, *args, **kwargs) [2010-12-16 09:18:13,298: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 150, in __init__ [2010-12-16 09:18:13,299: WARNING/Beat] self.setup_schedule() [2010-12-16 09:18:13,299: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 279, in setup_schedule [2010-12-16 09:18:13,299: WARNING/Beat] self.merge_inplace(conf.CELERYBEAT_SCHEDULE) [2010-12-16 09:18:13,299: WARNING/Beat] File "/usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/beat.py", line 250, in merge_inplace [2010-12-16 09:18:13,299: WARNING/Beat] if self.get(key): [2010-12-16 09:18:13,300: WARNING/Beat] File "/usr/local/lib/python2.7/UserDict.py", line 61, in get [2010-12-16 09:18:13,310: WARNING/Beat] return self[key] [2010-12-16 09:18:13,310: WARNING/Beat] File "/usr/local/lib/python2.7/UserDict.py", line 20, in __getitem__ [2010-12-16 09:18:13,310: WARNING/Beat] return self.data[key] [2010-12-16 09:18:13,311: WARNING/Beat] File "/usr/local/lib/python2.7/shelve.py", line 122, in __getitem__ [2010-12-16 09:18:13,317: WARNING/Beat] value = Unpickler(f).load() [2010-12-16 09:18:13,318: WARNING/Beat] EOFError [2010-12-16 09:18:13,318: INFO/Beat] process exiting with exitcode 1 ``` O motivo desse error é que antes de dar start no Celery ele já esta rodando em memoria. Quando rodamos o Celery ele cria alguns arquivos no projeto para gerenciamento de Task, um dele é o celery.dir que guarda informações das function que vai ser processada de X em X tempo. Bom a solução para esse casa é apagar o arquivo "celery.dir" assim ele zera o task do Celery, quando der start novamente ele recria o "celery.dir". Agora ele só normal: ```shell [root@xen-01 gonow]# python2.7 manage.py celeryd -v 2 -B -s celery -E -l INFO [2010-12-16 09:18:28,539: WARNING/MainProcess] celery@xen-01 v2.1.3 is starting. [2010-12-16 09:18:28,540: WARNING/MainProcess] /usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/apps/ worker.py:107: UserWarning: Running celeryd with superuser privileges is not encouraged! "Running celeryd with superuser privileges is not encouraged!") [2010-12-16 09:18:28,540: WARNING/MainProcess] /usr/local/lib/python2.7/site-packages/celery-2.1.3-py2.7.egg/celery/apps/ worker.py:110: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in a production environment! warnings.warn("Using settings.DEBUG leads to a memory leak, " [2010-12-16 09:18:28,543: WARNING/MainProcess] Configuration -> . broker -> ghettoq.taproot.Database://guest@localhost/ . queues -> . celery -> exchange:celery (direct) binding:celery . concurrency -> 2 . loader -> djcelery.loaders.DjangoLoader . logfile -> [stderr]@INFO . events -> ON . beat -> ON . tasks -> . gonow.vps.tasks.lvm [2010-12-16 09:18:28,568: INFO/PoolWorker-2] child process calling self.run() [2010-12-16 09:18:28,578: INFO/PoolWorker-3] child process calling self.run() [2010-12-16 09:18:28,591: INFO/Beat] child process calling self.run() [2010-12-16 09:18:28,593: INFO/Beat] Celerybeat: Starting... [2010-12-16 09:18:28,596: WARNING/MainProcess] celery@xen-01 has started. ``` --- # Vim Bootstrap **URL**: https://avelino.run/projects/vimbootstrap/ **Published**: 2010-12-05 **Tags**: vim, viml, neovim, bootstrap, open source **Word Count**: 100 words Vim Bootstrap is a generator that provides a simple method of generating a configuration for vim / neovim. ![vim bootstrap](https://avatars.githubusercontent.com/u/57500804) The **vim-bootstrap** project started with my annoyance of other people using my vim file (my personal vim configuration files), in a conversation with [lerrua](https://github.com/lerrua) I proposed to gather our vim configuration files and make a vim file generator with focus on who is starting to use vim text editor. The project is actively maintained [by a few people](https://github.com/editor-bootstrap/vim-bootstrap/graphs/contributors), mainly **[Cassio Botaro](https://github.com/cassiobotaro)** - here is my eternal _gratitude_ to *_Cassio_ and the work he has done to sustain the project. [vim-bootstrap on github](https://github.com/editor-bootstrap/vim-bootstrap) --- # Open Source Contributions - December 2010 **URL**: https://avelino.run/foss/2010/12/ **Published**: 2010-12-01 **Word Count**: 75 words **Summary**: December 2010 saw 5 significant code pushes across 5 repositories, showcasing active development and collaboration within the community. Explore the timeline of contributions for December 2010, highlighting the 5 repositories that experienced notable code pushes, reflecting the community's commitment to continuous improvement and innovation. ## Commits - 🔨 Push to [avelino/pycorreios](https://github.com/avelino/pycorreios): 9 commit(s) - [See commits](https://github.com/avelino/pycorreios/commits?author=avelino&since=2010-12-01T00:00:00Z&until=2010-12-31T23:59:59Z) - 🔨 Push to [editor-bootstrap/vim-bootstrap](https://github.com/editor-bootstrap/vim-bootstrap): 2 commit(s) - [See commits](https://github.com/editor-bootstrap/vim-bootstrap/commits?author=avelino&since=2010-12-01T00:00:00Z&until=2010-12-31T23:59:59Z) - 🔨 Push to [avelino/.vimrc](https://github.com/avelino/.vimrc): 2 commit(s) - [See commits](https://github.com/avelino/.vimrc/commits?author=avelino&since=2010-12-01T00:00:00Z&until=2010-12-31T23:59:59Z) - 🔨 Push to [avelino/pylocagateway](https://github.com/avelino/pylocagateway): 1 commit(s) - [See commits](https://github.com/avelino/pylocagateway/commits?author=avelino&since=2010-12-01T00:00:00Z&until=2010-12-31T23:59:59Z) - 🔨 Push to [avelino/pyBraspag](https://github.com/avelino/pyBraspag): 1 commit(s) - [See commits](https://github.com/avelino/pyBraspag/commits?author=avelino&since=2010-12-01T00:00:00Z&until=2010-12-31T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - November 2010 **URL**: https://avelino.run/foss/2010/11/ **Published**: 2010-11-01 **Word Count**: 264 words **Summary**: November 2010 saw significant contributions with 17 issues opened and 4 new pushes across 5 repositories, driving community engagement and project development. This timeline highlights the key contributions and activities from November 2010, showcasing a total of 21 events including 17 issues opened and 4 code pushes across various repositories. Explore the details of each contribution and understand the impact on the community. ## 2010-11-25 - 🐛 Opened issue in [avelino/vcm](https://github.com/avelino/vcm): [Criar LVM por admin](https://github.com/avelino/vcm/issues/1) ## 2010-11-04 - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Erros na tradução](https://github.com/djangobrasil/django-l10n-portuguese/issues/16) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Tradução do software Django (POT)](https://github.com/djangobrasil/django-l10n-portuguese/issues/15) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Uma pagina no djangobrail.org com os status das traduções](https://github.com/djangobrasil/django-l10n-portuguese/issues/14) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Corrigir mensagens no Admin em POT file ao inserir/excluir/....](https://github.com/djangobrasil/django-l10n-portuguese/issues/13) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Layout da documentação em HTML](https://github.com/djangobrasil/django-l10n-portuguese/issues/12) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [DjangoBot](https://github.com/djangobrasil/django-l10n-portuguese/issues/11) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Erro na tradução da documentação - Tutorial 02](https://github.com/djangobrasil/django-l10n-portuguese/issues/10) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Migrar DocPtRedirects para este repositório](https://github.com/djangobrasil/django-l10n-portuguese/issues/9) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Adequar quebra de linhas](https://github.com/djangobrasil/django-l10n-portuguese/issues/8) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Corrigidos pequenos erros em docs/tutorial01_pt-br.txt](https://github.com/djangobrasil/django-l10n-portuguese/issues/7) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Corrigidos pequenos erros em docs/overview_pt-br.txt](https://github.com/djangobrasil/django-l10n-portuguese/issues/6) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Corrigidos pequenos erros em docs/documentation_pt-br.txt.](https://github.com/djangobrasil/django-l10n-portuguese/issues/5) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Melhorar texto da página inicial](https://github.com/djangobrasil/django-l10n-portuguese/issues/4) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Migrar informações sobre como contribuir do Google Groups para cá](https://github.com/djangobrasil/django-l10n-portuguese/issues/3) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Criar nova política de tradução](https://github.com/djangobrasil/django-l10n-portuguese/issues/2) - 🐛 Opened issue in [djangobrasil/django-l10n-portuguese](https://github.com/djangobrasil/django-l10n-portuguese): [Migrar traduções do Google Groups para cá](https://github.com/djangobrasil/django-l10n-portuguese/issues/1) ## Commits - 🔨 Push to [avelino/lvm-like](https://github.com/avelino/lvm-like): 2 commit(s) - [See commits](https://github.com/avelino/lvm-like/commits?author=avelino&since=2010-11-01T00:00:00Z&until=2010-11-30T23:59:59Z) - 🔨 Push to [avelino/pycorreios](https://github.com/avelino/pycorreios): 2 commit(s) - [See commits](https://github.com/avelino/pycorreios/commits?author=avelino&since=2010-11-01T00:00:00Z&until=2010-11-30T23:59:59Z) - 🔨 Push to [avelino/vcm](https://github.com/avelino/vcm): 1 commit(s) - [See commits](https://github.com/avelino/vcm/commits?author=avelino&since=2010-11-01T00:00:00Z&until=2010-11-30T23:59:59Z) - 🔨 Push to [avelino/pyBraspag](https://github.com/avelino/pyBraspag): 1 commit(s) - [See commits](https://github.com/avelino/pyBraspag/commits?author=avelino&since=2010-11-01T00:00:00Z&until=2010-11-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Calculo de Bhaskara via Python **URL**: https://avelino.run/calculo-de-bhaskara-via-python/ **Published**: 2010-10-15 **Tags**: python, matematica, bhaskara **Word Count**: 226 words O foco este post é levar você aprender computação com Python. Para calcular as raízes em função do segundo grau, utilizamos uma fórmula muito querida por todos que estudam no ensino médio, a famosa fórmula de Bhaskara: ![Calculo de Bhaskara](/blog/bhaskara-1.gif) Onde cada letra desta fórmula representa os coeficientes da função do segundo grau que queremos resolver. Basta substituir e achar os valores. Podem notar que há um ± no meio da fórmula. Pois é, é daí que irá sair dois resultados: um com o sinal de + e outro com o sinal de -. Veja o exemplo: ![Calculo de Bhaskara](/blog/bhaskara-2.gif) Neste exemplo temos os coeficientes, a=2, b= -6 e c= -20 (Muita atenção para os sinais) Agora substituindo na fórmula de Bhaskara: ![Calculo de Bhaskara](/blog/bhaskara-3.gif) Agora chegamos no momento crucial do cáculo das raízes. Devemos separar esta conta em duas: uma com o sinal de + e a outra com o sinal de -. Assim: ![Calculo de Bhaskara](/blog/bhaskara-4.gif) Portanto as duas raízes da função são 5 e -2. Chega de blablabla e vamos ver como isso fica em Python: ```python import sys, math a=input ("a:") b=input ("b:") c=input ("c:") d=(b^2)-(4*a*c) # Mário Meyer # d=((b^2)-4*a)*c Esta errado esta linha, usar a linha superior. if d<0 : print ("Delta negativo, raiz impossivel de ser extraida.") sys.exit() else : print "Delta: %s." % d m1=math.sqrt(d) x1=(-b+m1)/(2*a) x2=(-b-m1)/(2*a) print "Raiz ~ X1= %s." % x1 print "Raiz ~ X2= %s." % x2 ``` --- # Open Source Contributions - October 2010 **URL**: https://avelino.run/foss/2010/10/ **Published**: 2010-10-01 **Word Count**: 40 words **Summary**: October 2010 saw zero contributions across repositories, pull requests, and issues, highlighting a month of inactivity in the project. Welcome to the October 2010 timeline, where we explore the contributions and activities within the project. This month reflects a notable pause, with no recorded activities, setting the stage for future developments. ## Private contributions - 🔒 0 private contribution(s) this month --- # Ajudando projeto open source: MongoEngine **URL**: https://avelino.run/ajudando-projeto-open-source-mongoengine/ **Published**: 2010-09-06 **Tags**: mmongodb, mongo, mongoengine, python **Word Count**: 50 words ![MongoEngine](/blog/mongoengine.png) Com grande orgunho que venho anunciar a todos que o projeto MongoEngine tem path pt_BR. [http://mongoengine.org/pt_BR/](http://mongoengine.org/pt_BR/) Por enquanto estamos apenas com o site em Português e trabalhando encima da documentação. Caso você queira ajudar o projeto por favor mandar email para [avelino AT mongoengine DOT org](mailto:avelino AT mongoengine DOT org) --- # Open Source Contributions - September 2010 **URL**: https://avelino.run/foss/2010/09/ **Published**: 2010-09-01 **Word Count**: 59 words **Summary**: September 2010 saw significant contributions with 2 repositories pushed, showcasing impactful development in the open-source community. Explore the contributions made in September 2010, highlighting key activities such as repository pushes and the ongoing development efforts within the community. This timeline captures the essence of collaboration and progress during the month. ## Commits - 🔨 Push to [avelino/iug](https://github.com/avelino/iug): 2 commit(s) - [See commits](https://github.com/avelino/iug/commits?author=avelino&since=2010-09-01T00:00:00Z&until=2010-09-30T23:59:59Z) - 🔨 Push to [avelino/trianguliCET](https://github.com/avelino/trianguliCET): 2 commit(s) - [See commits](https://github.com/avelino/trianguliCET/commits?author=avelino&since=2010-09-01T00:00:00Z&until=2010-09-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - August 2010 **URL**: https://avelino.run/foss/2010/08/ **Published**: 2010-08-01 **Word Count**: 32 words **Summary**: August 2010 marked a significant period in project development with zero contributions, highlighting a month of reflection and strategic planning. Explore the timeline of August 2010, a month characterized by a complete halt in contributions, offering insights into the project's evolution and future direction. ## Private contributions - 🔒 0 private contribution(s) this month --- # TDA Fila com Python **URL**: https://avelino.run/tda-fila-com-python/ **Published**: 2010-07-23 **Tags**: tda, fila, python **Word Count**: 193 words O foco este post é levar você aprender computação com Python. O TDA Fila é definido pelas seguintes operações: `__init__`: Inicializar uma nova fila vazia `insert`: Adicionar um novo item à fila `remove`: Remover e retornar um item da fila. O item retornado é o que foi adicionado primeiro. `isEmpty`: Checar se a fila está vazia Segue abaixo um código para explica melhor a implementação `"TAD Fila"`. ```python class Queue: def __init__(self): self.length = 0 self.head = None def isEmpty(self): return (self.length == 0) def insert(self, cargo): node = Node(cargo) node.next = None if self.head == None: # if list is empty the new node goes first self.head = node else: # find the last node in the list last = self.head while last.next: last = last.next # append the new node last.next = node self.length = self.length + 1 def remove(self): cargo = self.head.cargo self.head = self.head.next self.length = self.length - 1 return cargo ``` Existem duas invariantes para um objeto Fila bem formado: o atributo length deve ser o número de nós na fila. ```python from queue import Queue start = new Queue() start.insert(50) start.insert(99) start.insert(10) while not start.isEmpty(): print start.remove() ``` > 50 > 99 > 10 --- # Open Source Contributions - July 2010 **URL**: https://avelino.run/foss/2010/07/ **Published**: 2010-07-01 **Word Count**: 43 words **Summary**: In July 2010, a significant issue was opened in the klederson/phpburn repository, highlighting documentation needs for the joinInner function. Explore the timeline of contributions for July 2010, showcasing key developments in the klederson/phpburn repository, including the opening of a crucial issue that addresses documentation gaps. ## 2010-07-24 - 🐛 Opened issue in [klederson/phpburn](https://github.com/klederson/phpburn): [joinInner error docs](https://github.com/klederson/phpburn/issues/1) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - June 2010 **URL**: https://avelino.run/foss/2010/06/ **Published**: 2010-06-01 **Word Count**: 52 words **Summary**: June 2010 highlights a significant contribution with a push event to the 'avelino/iug' repository, showcasing active development efforts and community engagement. Explore the timeline of June 2010, which features a pivotal push event in the 'avelino/iug' repository. This month marks a key moment in the project's development, reflecting the ongoing efforts and contributions from the community. ## Commits - 🔨 Push to [avelino/iug](https://github.com/avelinoq/iug): 3 commit(s) - [See commits](https://github.com/avelino/iug/commits?author=avelino&since=2010-06-01T00:00:00Z&until=2010-06-30T23:59:59Z) ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - May 2010 **URL**: https://avelino.run/foss/2010/05/ **Published**: 2010-05-01 **Word Count**: 34 words **Summary**: May 2010 saw a lack of contributions, with zero repositories, pull requests, issues, and comments, marking a quiet month in project activity. Explore the timeline of May 2010, a month characterized by minimal activity and contributions, as reflected in the high-level counts and sample contributions from this period. ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - April 2010 **URL**: https://avelino.run/foss/2010/04/ **Published**: 2010-04-01 **Word Count**: 35 words **Summary**: April 2010 saw no contributions across repositories, pull requests, or issues, highlighting a month of inactivity in the project landscape. Explore the timeline for April 2010, a month marked by a complete lack of contributions, providing insights into periods of inactivity and their implications for project dynamics. ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - March 2010 **URL**: https://avelino.run/foss/2010/03/ **Published**: 2010-03-01 **Word Count**: 34 words **Summary**: March 2010 saw no contributions recorded, reflecting a pause in activity across repositories, pull requests, and issues. Explore the timeline for March 2010, a month marked by a complete absence of contributions. Discover the implications of this inactivity on the overall project development. ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - February 2010 **URL**: https://avelino.run/foss/2010/02/ **Published**: 2010-02-01 **Word Count**: 33 words **Summary**: February 2010 marked a quiet month with no contributions, highlighting a pause in activity across projects. Explore the timeline of contributions for February 2010, a month characterized by a complete halt in activity, with no repositories, pull requests, or issues recorded. ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - January 2010 **URL**: https://avelino.run/foss/2010/01/ **Published**: 2010-01-01 **Word Count**: 47 words **Summary**: January 2010 marks a quiet month with no contributions recorded, showcasing a period of reflection and potential growth for future development. Welcome to the January 2010 timeline. This month, we observe a complete halt in contributions, with no activity in repositories, pull requests, or issues. This pause provides an opportunity to reflect on past achievements and strategize for future endeavors. ## Private contributions - 🔒 0 private contribution(s) this month --- # Open Source Contributions - December 2009 **URL**: https://avelino.run/foss/2009/12/ **Published**: 2009-12-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during December 2009. Below is the timeline of my contributions to open source projects during December 2009. --- # Open Source Contributions - November 2009 **URL**: https://avelino.run/foss/2009/11/ **Published**: 2009-11-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during November 2009. Below is the timeline of my contributions to open source projects during November 2009. --- # Open Source Contributions - October 2009 **URL**: https://avelino.run/foss/2009/10/ **Published**: 2009-10-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during October 2009. Below is the timeline of my contributions to open source projects during October 2009. --- # Open Source Contributions - September 2009 **URL**: https://avelino.run/foss/2009/09/ **Published**: 2009-09-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during September 2009. Below is the timeline of my contributions to open source projects during September 2009. --- # Open Source Contributions - August 2009 **URL**: https://avelino.run/foss/2009/08/ **Published**: 2009-08-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during August 2009. Below is the timeline of my contributions to open source projects during August 2009. --- # Open Source Contributions - July 2009 **URL**: https://avelino.run/foss/2009/07/ **Published**: 2009-07-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during July 2009. Below is the timeline of my contributions to open source projects during July 2009. --- # Open Source Contributions - June 2009 **URL**: https://avelino.run/foss/2009/06/ **Published**: 2009-06-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during June 2009. Below is the timeline of my contributions to open source projects during June 2009. --- # Open Source Contributions - May 2009 **URL**: https://avelino.run/foss/2009/05/ **Published**: 2009-05-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during May 2009. Below is the timeline of my contributions to open source projects during May 2009. --- # Open Source Contributions - April 2009 **URL**: https://avelino.run/foss/2009/04/ **Published**: 2009-04-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during April 2009. Below is the timeline of my contributions to open source projects during April 2009. --- # Open Source Contributions - March 2009 **URL**: https://avelino.run/foss/2009/03/ **Published**: 2009-03-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during March 2009. Below is the timeline of my contributions to open source projects during March 2009. --- # Open Source Contributions - February 2009 **URL**: https://avelino.run/foss/2009/02/ **Published**: 2009-02-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during February 2009. Below is the timeline of my contributions to open source projects during February 2009. --- # Open Source Contributions - January 2009 **URL**: https://avelino.run/foss/2009/01/ **Published**: 2009-01-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during January 2009. Below is the timeline of my contributions to open source projects during January 2009. --- # Open Source Contributions - December 2008 **URL**: https://avelino.run/foss/2008/12/ **Published**: 2008-12-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during December 2008. Below is the timeline of my contributions to open source projects during December 2008. --- # Open Source Contributions - November 2008 **URL**: https://avelino.run/foss/2008/11/ **Published**: 2008-11-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during November 2008. Below is the timeline of my contributions to open source projects during November 2008. --- # Open Source Contributions - October 2008 **URL**: https://avelino.run/foss/2008/10/ **Published**: 2008-10-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during October 2008. Below is the timeline of my contributions to open source projects during October 2008. --- # Open Source Contributions - September 2008 **URL**: https://avelino.run/foss/2008/09/ **Published**: 2008-09-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during September 2008. Below is the timeline of my contributions to open source projects during September 2008. --- # Open Source Contributions - August 2008 **URL**: https://avelino.run/foss/2008/08/ **Published**: 2008-08-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during August 2008. Below is the timeline of my contributions to open source projects during August 2008. --- # Open Source Contributions - July 2008 **URL**: https://avelino.run/foss/2008/07/ **Published**: 2008-07-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during July 2008. Below is the timeline of my contributions to open source projects during July 2008. --- # Open Source Contributions - June 2008 **URL**: https://avelino.run/foss/2008/06/ **Published**: 2008-06-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during June 2008. Below is the timeline of my contributions to open source projects during June 2008. --- # Open Source Contributions - May 2008 **URL**: https://avelino.run/foss/2008/05/ **Published**: 2008-05-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during May 2008. Below is the timeline of my contributions to open source projects during May 2008. --- # Open Source Contributions - April 2008 **URL**: https://avelino.run/foss/2008/04/ **Published**: 2008-04-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during April 2008. Below is the timeline of my contributions to open source projects during April 2008. --- # Open Source Contributions - March 2008 **URL**: https://avelino.run/foss/2008/03/ **Published**: 2008-03-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during March 2008. Below is the timeline of my contributions to open source projects during March 2008. --- # Open Source Contributions - February 2008 **URL**: https://avelino.run/foss/2008/02/ **Published**: 2008-02-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during February 2008. Below is the timeline of my contributions to open source projects during February 2008. --- # Open Source Contributions - January 2008 **URL**: https://avelino.run/foss/2008/01/ **Published**: 2008-01-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during January 2008. Below is the timeline of my contributions to open source projects during January 2008. --- # Open Source Contributions - December 2007 **URL**: https://avelino.run/foss/2007/12/ **Published**: 2007-12-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during December 2007. Below is the timeline of my contributions to open source projects during December 2007. --- # Open Source Contributions - November 2007 **URL**: https://avelino.run/foss/2007/11/ **Published**: 2007-11-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during November 2007. Below is the timeline of my contributions to open source projects during November 2007. --- # Open Source Contributions - October 2007 **URL**: https://avelino.run/foss/2007/10/ **Published**: 2007-10-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during October 2007. Below is the timeline of my contributions to open source projects during October 2007. --- # Open Source Contributions - September 2007 **URL**: https://avelino.run/foss/2007/09/ **Published**: 2007-09-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during September 2007. Below is the timeline of my contributions to open source projects during September 2007. --- # Open Source Contributions - August 2007 **URL**: https://avelino.run/foss/2007/08/ **Published**: 2007-08-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during August 2007. Below is the timeline of my contributions to open source projects during August 2007. --- # Open Source Contributions - July 2007 **URL**: https://avelino.run/foss/2007/07/ **Published**: 2007-07-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during July 2007. Below is the timeline of my contributions to open source projects during July 2007. --- # Open Source Contributions - June 2007 **URL**: https://avelino.run/foss/2007/06/ **Published**: 2007-06-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during June 2007. Below is the timeline of my contributions to open source projects during June 2007. --- # Open Source Contributions - May 2007 **URL**: https://avelino.run/foss/2007/05/ **Published**: 2007-05-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during May 2007. Below is the timeline of my contributions to open source projects during May 2007. --- # Open Source Contributions - April 2007 **URL**: https://avelino.run/foss/2007/04/ **Published**: 2007-04-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during April 2007. Below is the timeline of my contributions to open source projects during April 2007. --- # Open Source Contributions - March 2007 **URL**: https://avelino.run/foss/2007/03/ **Published**: 2007-03-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during March 2007. Below is the timeline of my contributions to open source projects during March 2007. --- # Open Source Contributions - February 2007 **URL**: https://avelino.run/foss/2007/02/ **Published**: 2007-02-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during February 2007. Below is the timeline of my contributions to open source projects during February 2007. --- # Open Source Contributions - January 2007 **URL**: https://avelino.run/foss/2007/01/ **Published**: 2007-01-01 **Word Count**: 14 words **Summary**: Timeline of my contributions to open source projects on GitHub during January 2007. Below is the timeline of my contributions to open source projects during January 2007. --- # Links ❤️🙌 **URL**: https://avelino.run/links/ **Published**: 2000-01-01 **Word Count**: 47 words > 🚴‍♂️ A good dream is a dream lived CTO at [Buser](https://www.linkedin.com/company/buserbrasil) and open source maintainer (including [Awesome Go](https://github.com/avelino/awesome-go)) — 🚴‍♂️ Road cycling ## Important links - [GitHub: Open source projects](https://github.com/avelino) - [Instagram: Lifestyle/Cycling](https://www.instagram.com/avelinorun/) old dream in IRONMAN distance - [Strava](https://www.strava.com/athletes/24343435) - [LinkedIn: Technical leadership & startups ecosystem](https://www.linkedin.com/in/avelinorun/) - [Twitter: Technical content](https://twitter.com/avelinorun) - [My contact](mailto:avelinorun@gmail.com) --- # it's sad to say goodbye **URL**: https://avelino.run/newsletter/unsubscriber/ **Published**: 1989-01-05 **Tags**: newsletter, goodbye, bad bye, avelino, open source, thiago avelino **Word Count**: 101 words ![via SpongeBob SquarePants on GIPHY](https://media.giphy.com/media/ISOckXUybVfQ4/giphy.gif#center) É triste dar adeus, mas entendo que no momento não estamos na mesma sintonia, sinta-se livre para voltar a qualquer momento, será ótimo compartilhar o que estou estudando com você. Caso queira voltar fazer parte da nossa newsletter tem o formulário aí na parte superior. ## EN It is sad to say goodbye, but I understand that at the moment we are not on the same page, feel free to come back anytime, it will be great to share what I am studying with you. If you want to be part of our newsletter again, there is a form at the top. --- # Welcome to newsletter **URL**: https://avelino.run/newsletter/welcome/ **Published**: 1989-01-05 **Tags**: newsletter, welcome, hello, avelino, open source, thiago avelino **Word Count**: 181 words ![via GIPHY](https://media.giphy.com/media/3Hw2z62ewK4rm/giphy.gif#center) Olá pessoa, seja bem-vinda a minha newsletter, será um prazer compartilhar minhas anotações com vocês. O que você pode esperar por aqui? - anotações das notícias que leio; - anotações do que tenho estudado atualmente, tenho atualmente estudado gestão de time de engenharia e como introduzir pessoas com zero de experiência em engenharia de software no nosso mundo; - o que tenho feito no mundo open source e quais projetos estou envolvido atualmente. Tenho habito de fazer anotações de tudo que estudo/leio, a diferença que farei isso com você publicamente. ## EN Hi people, welcome to my newsletter, it will be a pleasure to share my notes with you. What can you expect here? - notes on the news I read; - notes on what I'm currently studying, I'm currently studying engineering team management and how to introduce people with zero software engineering experience into our world; - what I have been doing in the open source world and what projects I am currently involved in. I have a habit of making notes of everything I study/read, the difference is that I will do this with you publicly. ---