<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Fernando Bevilacqua</title>
 <link href="https://www.fernandobevilacqua.com/atom.xml" rel="self"/>
 <link href="https://www.fernandobevilacqua.com/"/>
 <updated>2026-05-15T11:44:44+00:00</updated>
 <id>https://www.fernandobevilacqua.com</id>
 <author>
   <name>Fernando Bevilacqua</name>
   <email></email>
 </author>

 
 <entry>
   <title>Past the Event Horizon - Why &quot;AI Replacing Developers&quot; Is the Wrong Frame</title>
   <link href="https://www.fernandobevilacqua.com/blog/2025/01/past-the-event-horizon-why-ai-replacing-developers-is-the-wrong-frame/"/>
   <updated>2025-01-11T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2025/01/past-the-event-horizon-why-ai-replacing-developers-is-the-wrong-frame</id>
   <content type="html">&lt;p&gt;In June 2025, Sam Altman published a blog post titled &lt;a href=&quot;https://blog.samaltman.com/the-gentle-singularity&quot;&gt;&lt;em&gt;“The Gentle Singularity,”&lt;/em&gt;&lt;/a&gt; in which he made a declaration that would have sounded insane just three years prior: &lt;em&gt;“We are past the event horizon; the takeoff has started”&lt;/em&gt;. To the uninitiated, this summons images of science fiction—robots walking the streets or a sudden, dramatic rupture in reality. Yet, as Altman noted, the world looks largely the same. Commuters still sit in traffic; we still use Jira; and the physical constraints of the universe remain stubbornly in place.&lt;/p&gt;

&lt;p&gt;But for those of us in software engineering, the shift has been anything but gentle. We stand at the intersection of three contradictory narratives:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Barriers to entry have collapsed&lt;/strong&gt;, leading to “Vibe Coding” where natural language replaces syntax.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Labor demand has cratered&lt;/strong&gt;, with US job postings falling to pre-pandemic lows.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;The developer population is exploding&lt;/strong&gt;, driven by global adoption and AI integration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The capability-to-cost curve has shifted. The real question now is: &lt;strong&gt;how do we integrate this tool into what we already know about building software—without fooling ourselves with demo-driven thinking?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This post is an attempt to do that, grounded in the latest labor signals, developer-population data, and a critical “third axis” that many discussions ignore: &lt;strong&gt;verification cost&lt;/strong&gt; (and why most GenAI projects still fail).&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;1-abstraction-doesnt-erase-developers--it-changes-what-developer-work-means&quot;&gt;1) Abstraction doesn’t erase developers — it changes what “developer work” means&lt;/h2&gt;

&lt;p&gt;A useful historical analogy is the compiler. Before its usage in scale, software was handcrafted on the binary level (or very close to it). As the abstraction improved, developers stopped caring about (or paying attention to) the generated, low-level code. The higher the abstraction (programing languange, paradigm, etc), the less we look down the chain.&lt;/p&gt;

&lt;p&gt;We don’t spend much time today arguing “compiled vs interpreted”, or about the “perfect assembly” in the way people did decades ago. That’s because most teams now operate at a higher layer of abstraction. Following that analogy, today’s Java code is the abstraction, not its bytecodes. Same for C, for instance: most of the time (not always, but very significantly) you don’t look at the generated assembly code. It’s simply too low level.&lt;/p&gt;

&lt;p&gt;In that sense, compilers or interpreters didn’t eliminate developers; they made it cheaper to create software. That dynamic tends to increase demand. You can see this in how the developer population grew alongside each major abstraction wave.&lt;/p&gt;

&lt;h3 id=&quot;evidence-the-pool-keeps-growing&quot;&gt;Evidence: the pool keeps growing&lt;/h3&gt;

&lt;p&gt;Contradicting the narrative of “AI replacing humans” is the relentless growth of the global developer population. According to &lt;a href=&quot;https://www.slashdata.co/research/developer-population&quot;&gt;SlashData’s &lt;em&gt;Developer Nation&lt;/em&gt; surveys&lt;/a&gt;, the number of developers has nearly doubled in four years:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Q3 2021:&lt;/strong&gt; 28.8 Million&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Q3 2023:&lt;/strong&gt; 38.9 Million&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Q3 2025:&lt;/strong&gt; &lt;a href=&quot;https://www.developernation.net/developer-reports/dn23/&quot;&gt;&lt;strong&gt;48.4 Million&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The image below shows the progression:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/slashdata-developer-nation-growth.png&quot; alt=&quot;Developer Population Growth&quot; /&gt;
&lt;em&gt;&lt;a href=&quot;https://www.slashdata.co/research/developer-population&quot;&gt;Source: SlashData&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Takeaway:&lt;/strong&gt; If AI reduces the “cost per unit of software,” the most historically consistent outcome is &lt;strong&gt;more software&lt;/strong&gt;, not less (&lt;a href=&quot;https://uberty.org/wp-content/uploads/2015/08/John_M._Polimeni_Kozo_Mayumi_Mario_Giampietro.pdf&quot;&gt;the Jevons Paradox&lt;/a&gt;). More importantly, that very software still needs to be designed, operated, secured, audited, and maintained—i.e., the parts of the job that &lt;em&gt;aren’t&lt;/em&gt; “just code.”&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;2-the-labor-market-chart-needs-context-the-covid-spike-distorts-the-story&quot;&gt;2) The labor-market chart needs context: the COVID spike distorts the story&lt;/h2&gt;

&lt;p&gt;The &lt;a href=&quot;https://fred.stlouisfed.org/series/IHLIDXUSTPSOFTDEVE&quot;&gt;FRED/Indeed chart&lt;/a&gt; below is often used to prove the “collapse” of the industry. But it requires context.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/fredgraph.png&quot; alt=&quot;Software Development Job Postings on Indeed in the United States (IHLIDXUSTPSOFTDEVE)&quot; /&gt;
&lt;em&gt;&lt;a href=&quot;https://fred.stlouisfed.org/series/IHLIDXUSTPSOFTDEVE&quot;&gt;Source: FRED/Indeed&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the curve actually says:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There was a &lt;a href=&quot;https://fredblog.stlouisfed.org/2023/03/was-there-a-tech-hiring-bubble/&quot;&gt;major run-up during the COVID-era boom&lt;/a&gt; (the peak visually dominates the chart).&lt;/li&gt;
  &lt;li&gt;Then a sharp decline as interest rates rose and the “growth at all costs” era ended.&lt;/li&gt;
  &lt;li&gt;After 2024, the series looks closer to &lt;strong&gt;stabilization&lt;/strong&gt;, and by late 2025 it shows &lt;strong&gt;slight upward drift&lt;/strong&gt; (e.g., &lt;a href=&quot;https://data.indeed.com/#/&quot;&gt;&lt;strong&gt;68.30 on 2025-12-12&lt;/strong&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you anchor on the COVID spike, you’ll read everything after as “collapse.” If you treat that spike as an outlier boom, the post-2024 pattern reads more like &lt;strong&gt;a market finding a new baseline&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, this stabilization hides a qualitative shift. We are witnessing the decoupling of “coding” from “employment.” While the demand for full-time, US-based W-2 engineers has contracted, the population of people building software has exploded.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;3-the-rise-of-vibe-coding-and-theory-loss&quot;&gt;3) The Rise of “Vibe Coding” and Theory Loss&lt;/h2&gt;

&lt;p&gt;If the quantitative shift is about numbers, the qualitative shift is about &lt;em&gt;method&lt;/em&gt;. We have entered the era of &lt;strong&gt;“Vibe Coding.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Popularized by Andrej Karpathy, Vibe Coding describes a workflow where the human acts as a director rather than a mason. You don’t write loops; you “vibe” with the LLM. You paste a screenshot and say, &lt;em&gt;“Make it look like this but pop more.”&lt;/em&gt; You describe intent, and the machine generates syntax.&lt;/p&gt;

&lt;p&gt;This was made possible by the rapid commoditization of AI models. Using Claude Opus 4.5 today, for instance, is something impossible to think of (or explain) 10 years ago. It is important to stress that this way of working is in the hands of those who can affort tokens. Also they are gatekept by the FANGS of the world.&lt;/p&gt;

&lt;p&gt;Open-source models, however, are improving at neck-breaking speed. As shown below, models like &lt;a href=&quot;https://lmsys.org/blog/2023-03-30-vicuna/&quot;&gt;&lt;strong&gt;Vicuna-13B&lt;/strong&gt; quickly reached &lt;strong&gt;92%&lt;/strong&gt; of ChatGPT’s quality&lt;/a&gt;, collapsing the moat between proprietary and open tools.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/open-source-ai-models-evolution.webp&quot; alt=&quot;Vicuna: An Open-Source Chatbot Impressing GPT-4 with 90%* ChatGPT Quality&quot; /&gt;
&lt;em&gt;&lt;a href=&quot;https://lmsys.org/blog/2023-03-30-vicuna/&quot;&gt;Source: Vicuna&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If we bring the chinese massive progress regarding AI, specially in the open-source scene, things become even more interesting. As &lt;a href=&quot;https://github.com/deepseek-ai/DeepSeek-V3&quot;&gt;DeepSeek-V3 states in its README&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;DeepSeek-V3 stands as the best-performing open-source model, and also exhibits competitive performance against frontier closed-source models.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The power of open-source is already stablished in software development. It is paving the same way regarding AI. The famous &lt;a href=&quot;https://www.supervised.news/p/revisiting-that-old-google-ai-memo&quot;&gt;Google’s Leaked “No Moat” Memo&lt;/a&gt; warned the company about that. The memo noted that open-source models were achieving results comparable to Google’s with significantly less time and capital investment. &lt;em&gt;“Open-source models are faster, more customizable, more private, and pound-for-pound more capable”&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Regardless of the model, be it a paid or an open-source one, its usage has very low friction now. It clearly helps the development and production of software, so it becomes an inflection point. It is simply too slow to create something without AI from now on.&lt;/p&gt;

&lt;h3 id=&quot;the-danger-theory-loss&quot;&gt;The Danger: Theory Loss&lt;/h3&gt;

&lt;p&gt;But this ease of generation brings a hidden risk: &lt;strong&gt;Theory Loss&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://pages.cs.wisc.edu/~remzi/Naur.pdf&quot;&gt;Peter Naur’s classic 1985 essay &lt;em&gt;“Programming as Theory Building”&lt;/em&gt;&lt;/a&gt; argues that a program is not its source code. A program is a shared mental construct (a &lt;strong&gt;theory&lt;/strong&gt;) that lives in the minds of the people who work on it.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Old World:&lt;/strong&gt; You built the theory by struggling with the syntax.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;New World (Vibe Coding):&lt;/strong&gt; The AI generates the code. If you merely “approve” it without struggle, the mental model is never formed in your mind.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The software becomes a “zombie”: it works, but no one knows why or how to change it safely. This leads us to the central economic friction of the AI era.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;4-the-new-axis-95-of-genai-pilots-fail--and-verification-cost-is-why&quot;&gt;4) The “new axis”: 95% of GenAI pilots fail — and verification cost is why&lt;/h2&gt;

&lt;p&gt;In a &lt;a href=&quot;https://www.forbes.com/sites/jasonsnyder/2025/08/26/mit-finds-95-of-genai-pilots-fail-because-companies-avoid-friction/&quot;&gt;recent Forbes piece covering MIT research&lt;/a&gt;, the framing is blunt: &lt;strong&gt;95% of custom GenAI tools fail to cross the pilot-to-production cliff&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Why? Because of the &lt;strong&gt;Verification Tax&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Generative AI is confidently wrong. If a model is 95% accurate, you still have to check 100% of its work to find the 5% of errors. The economic formula for AI adoption isn’t just about speed.&lt;/p&gt;

&lt;p&gt;When systems are confidently wrong, people accumulate &lt;strong&gt;“Trust Debt.”&lt;/strong&gt; They spend more time forensic-checking the AI’s output than they would have spent writing it themselves.&lt;/p&gt;

&lt;h3 id=&quot;the-technological-response-why-typescript-won&quot;&gt;The Technological Response: Why TypeScript Won&lt;/h3&gt;

&lt;p&gt;This explains a startling statistic from &lt;a href=&quot;https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/&quot;&gt;GitHub’s &lt;em&gt;Octoverse 2025&lt;/em&gt;&lt;/a&gt;: In August 2025, &lt;strong&gt;TypeScript overtook Python&lt;/strong&gt; to become the #1 language on GitHub.&lt;/p&gt;

&lt;p&gt;Why? Because Types are the &lt;strong&gt;automated payment of the Verification Tax&lt;/strong&gt;.
In a world where AI generates millions of lines of code, humans can no longer verify it all by reading. We need automated guardrails. TypeScript’s static type system rejects invalid code before it ever runs, preventing the AI from “hallucinating” artifacts that don’t exist. It turns the “Vibe” into a contract.&lt;/p&gt;

&lt;p&gt;Additionally, types and interfaces are ground theory for any system. A seasoned software engineer can plan and architect using type-defined contracts that the AI will follow. This was good practice before AI-driven development, now it is a requirement.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;5-humans--ai-beats-either-alone-and-this-is-where-roi-actually-comes-from&quot;&gt;5) Humans + AI beats either alone (and this is where “ROI” actually comes from)&lt;/h2&gt;

&lt;p&gt;So, how do we fix the failure rate? The answer lies in &lt;strong&gt;pairing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://arxiv.org/abs/2510.04374&quot;&gt;OpenAI’s recent white paper on productivity impacts (GDPval)&lt;/a&gt; should be treated as part of the “human+agent pairing” evidence base. The research highlights that &lt;strong&gt;big gains appear when AI and experts work together&lt;/strong&gt;, not when you try to replace humans outright.&lt;/p&gt;

&lt;p&gt;On the &lt;a href=&quot;https://stackoverflow.blog/2026/01/07/you-need-quality-engineers-to-turn-ai-into-roi/&quot;&gt;Stack Overflow podcast&lt;/a&gt;, Pete Johnson (Field CTO, AI at MongoDB) reinforced this, noting that the “job killer” framing is flawed. He argues:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“You still own it… You’re still responsible for it running in production.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Synthesis:&lt;/strong&gt; The best ROI story is not “replace people,” it’s:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Reduce cycle time&lt;/strong&gt; on well-defined tasks (drafting).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Keep experts responsible&lt;/strong&gt; for correctness and system-level coherence (verification).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Reinvest the productivity gains&lt;/strong&gt; into more software and better operations (Jevons Paradox).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every serious, corporate-grade line of code needs caring beyond text. For instance, systems still need customer feedback loops, support, investiment, decisions. It’s naive to belive that when you replace all developers with AI equivalents, you can just say:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Oh, that’s wrong because of my AI. I am sorry, it will fix it”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can’t say that specially when your software causes financial (or human) losses. Someone still has to “sign” and respond for it. Are C-class executives ready to fire all developers then take the fall for absolutely everything? I doubt it.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;6-the-jetbrains-lens-some-categories-shrink-others-expand&quot;&gt;6) The JetBrains lens: some categories shrink, others expand&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://devecosystem-2025.jetbrains.com/&quot;&gt;JetBrains’ Developer Ecosystem data&lt;/a&gt; reframes the workforce as a portfolio of activities, not just “dev count.” With &lt;strong&gt;~20.8M professional developers in 2025&lt;/strong&gt;, the work is redistributing.&lt;/p&gt;

&lt;p&gt;My read of the likely shift:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Fewer people&lt;/strong&gt; needed in “first-draft” tasks (boilerplate, rote CRUD scaffolding, basic docs).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;More people&lt;/strong&gt; needed in tasks that scale with output volume and risk:&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Evaluation &amp;amp; Testing:&lt;/strong&gt; Building the “Accuracy Flywheels” that catch AI errors.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Platform Engineering:&lt;/strong&gt; Managing the infrastructure for 10x more services.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Security &amp;amp; Compliance:&lt;/strong&gt; Auditing the black box.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Domain-Heavy Product Engineering:&lt;/strong&gt; The “Theory Building” that AI cannot simulate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the same “abstraction expands the surface area” dynamic—except now the abstraction is probabilistic and requires verification.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;7-final-claim-if-software-eats-the-world-ai-makes-it-hungrier&quot;&gt;7) Final claim: If software eats the world, AI makes it hungrier&lt;/h2&gt;

&lt;p&gt;Software development is coordination across stakeholders (execs, product, support, legal, ops). If AI starts to mediate &lt;em&gt;all&lt;/em&gt; of those interfaces—writing specs, drafting contracts, generating runbooks, then society doesn’t become less dependent on engineers.&lt;/p&gt;

&lt;p&gt;It becomes &lt;strong&gt;more dependent on the people who can design, integrate, and operate AI-enabled systems end-to-end&lt;/strong&gt;, with accountability.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The engineers of the future will not be those who can prompt the fastest, but those who can verify and plan the deepest.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;h1 id=&quot;what-leaders-should-do&quot;&gt;What leaders should do&lt;/h1&gt;

&lt;p&gt;Finally some not-requested ideas for the future.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Treat GenAI as a system, not a feature.&lt;/strong&gt; Budget for evaluation, monitoring, and workflow redesign.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Engineer for the verification tax.&lt;/strong&gt; Make uncertainty explicit; build feedback loops (“accuracy flywheel”).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Adopt “Safety-First” languages and tooling.&lt;/strong&gt; The rise of TypeScript is a signal: use tools that automate verification.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Pair AI with accountable experts.&lt;/strong&gt; The “human + AI” combination is where gains compound.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Measure transformation, not logins.&lt;/strong&gt; Pilot success is redesign + adoption in real workflows, not just chat usage.&lt;/li&gt;
&lt;/ol&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;additional-resources&quot;&gt;Additional Resources&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://octoverse.github.com/2022/global-tech-talent&quot;&gt;GitHub, &lt;em&gt;The State of the Octoverse 2022: Global Tech Talent&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://mlq.ai/media/quarterly_decks/v0.1_State_of_AI_in_Business_2025_Report.pdf&quot;&gt;MIT Media Lab (Project NANDA), &lt;em&gt;The GenAI Divide: State of AI in Business 2025&lt;/em&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.hackerrank.com/blog/the-productivity-paradox-of-ai/&quot;&gt;HackerRank Blog, &lt;em&gt;The Productivity Paradox of AI&lt;/em&gt;, 2025&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.microsoft.com/en-us/research/publication/the-impact-of-ai-on-developer-productivity-evidence-from-github-copilot/&quot;&gt;Microsoft Research, &lt;em&gt;The Impact of AI on Developer Productivity&lt;/em&gt;, 2024&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;note&quot;&gt;Note&lt;/h3&gt;

&lt;p&gt;This text has been edited by me and mostly written by AI models. I provided the ideas, my notes, the links to fetch information (which I have consumed myself previously) and the narravite I wanted. I iterated on the final text for quite some time. I also wrote parts of the text myself.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My year 2019 in review</title>
   <link href="https://www.fernandobevilacqua.com/blog/2020/01/my-year-2019-in-review/"/>
   <updated>2020-01-07T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2020/01/my-year-2019-in-review</id>
   <content type="html">&lt;p&gt;The year 2020 is upon us already. Since barely a week has passed in this new year, I think it is a good time to reflect on the previous year. If I were to summarize 2019 in a single word, it would be &lt;em&gt;atypical&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I honestly can’t remember a year where so many different things happened. Both regarding my personal life and the world. Since it is out of my scope to discuss the problems of the world here, I will keep the focus on myself.&lt;/p&gt;

&lt;h2 id=&quot;i-finished-my-phd&quot;&gt;I finished my PhD&lt;/h2&gt;

&lt;p&gt;After 3.3 years of work, on November the 19th of 2018, I defended &lt;a href=&quot;http://urn.kb.se/resolve?urn=urn:nbn:se:his:diva-16347&quot;&gt;my thesis&lt;/a&gt;. I was awarded the title of PhD in Information Technology. The title was granted by the &lt;a href=&quot;https://his.se&quot;&gt;Univesity of Skövde&lt;/a&gt;, in Skövde, Sweden.&lt;/p&gt;

&lt;p&gt;Technically my defence is outside 2019, but it is somehow connected. Doing a PhD is a three-headed beast that takes more than you can actually perceive. I moved from Brazil to Sweden with my wife in April 2015. It was the very first time we left Brazil to live abroad. I can confidently say that those years living in Skövde were beyond what I had bargained for. It was amazing to know the Swedish culture, meet people from all over the world and get to see the fantastic Scandinavia.&lt;/p&gt;

&lt;p&gt;While doing my PhD, my work was delightful. Despite the inherent unknowns of any research work, everything else was great. A lot of &lt;em&gt;fikas&lt;/em&gt; (Swedish coffee break) with colleagues and friends. Coding, learning new things, evolving as a professional and independent researcher. I have nothing but a warm thank you to say about that.&lt;/p&gt;

&lt;h2 id=&quot;hard-landing&quot;&gt;Hard landing?&lt;/h2&gt;

&lt;p&gt;Right before Christmas in 2018, I flew back home (to Brazil). January and February are the vacation period in Brazil, so I had a well-deserved break to clear my head. In March, I resumed my duties at the Federal University of Fronteira Sul (&lt;a href=&quot;https://www.uffs.edu.br&quot;&gt;UFFS&lt;/a&gt;). After literally years without teaching, I was assigned 3 courses as main responsible.&lt;/p&gt;

&lt;p&gt;As a curious fact, I received the news about my teaching duties and courses of 2019 at the end of 2018. It was the very same day I received the printed copies of my thesis. Quite a plot twist.&lt;/p&gt;

&lt;p&gt;The going back to teaching or my old duties were never a problem. I like to work. Above all, I like challenges. I returned from a PhD with abnormal energy to change the world and everything.&lt;/p&gt;

&lt;p&gt;As a result of that, I signed up to be the next coordinator of the Undergraduate Program on Computer Science at UFFS, effectively April 2019. Should I have waited for that step? Sure. Could I have waited? No, I could not. I have to admit that the academic environment is quite heavy sometimes. Not having a PhD in academia is like being a woodworker and not having your own tools. You might have the competence, the will and the means, but somehow the system fights against you. Additionally, if you are a younger person, that’s even more complicated. That might be my personal view of the whole thing, but that’s how I felt back then.&lt;/p&gt;

&lt;p&gt;Having finished my PhD, for the first time in my career, I felt I had my own tools. This time I could not only move the wheel, but I could also very well destroy it if the spinning was not my liking. And that thought burned vividly in my head. Looking back now, I think I was more eager to prove myself (or others?) that I could actually make the difference. That could be seen as fuel by most people, but I was not counting on something else.&lt;/p&gt;

&lt;h2 id=&quot;the-ocd-hits&quot;&gt;The OCD hits&lt;/h2&gt;

&lt;p&gt;When I was about 9 years old, I suffered from severe Obsessive-Compulsive Disorder (OCD). Back then, my life was significantly disturbed by it. After some time, however, and without medical help, it all went away. This time, however, it did not go away. On the contrary, it has grown out of control. From 2015 to 2018, that OCD demon slowly evolved in me again. Ironically, right after I had finished my PhD and rested during vacations, the OCD became unbearable. Around April and May, I was literally afraid to leave my house.&lt;/p&gt;

&lt;p&gt;OCD is a heavy burden. It is always there, in an ever-growing vortex of anxiety. I reached a point that I thought the university would prevent me from teaching. I was also tormenting all those around me, particularly my wife. I finally admitted defeat and sought out a psychiatrist.&lt;/p&gt;

&lt;h2 id=&quot;changing-the-world-is-hard&quot;&gt;Changing the world is hard&lt;/h2&gt;

&lt;p&gt;I started taking medicine for OCD. Slowly, things improved over time. However, I had signed up for the coordination of our CS program. Hence my stress and anxiety levels were always on the roof. I was constantly thinking I was not doing enough or well enough. I was being unpolite (to say the least) with people to ensure things would move the way I thought were right.&lt;/p&gt;

&lt;p&gt;Having studied human emotions in my PhD, I should know better that human beings are complicated animals. Anything that has people in it is complex by nature. We have different dreams, fears and goals. It is tough to align all thoughts under the same light.&lt;/p&gt;

&lt;p&gt;I had managed teams before. I had worked with lots of different people in the past. But this time I had too much energy and too little patience. And above all, I was not willing to tolerate any academic behaviour that I once allowed.&lt;/p&gt;

&lt;p&gt;The result? Friction all over the place, anxiety crisis, and so on. A colleague even asked me once if &lt;em&gt;“it was really worth it to do all this I was doing at the cost of my own health and friends”&lt;/em&gt;. Burning bridges almost as my main job.&lt;/p&gt;

&lt;h2 id=&quot;shallow-rate-for-open-source-contributions&quot;&gt;Shallow rate for open-source contributions&lt;/h2&gt;

&lt;p&gt;I want to add that my contributions to open-source projects, including my own, e.g. &lt;a href=&quot;https://github.com/Dovyski/flixel-studio&quot;&gt;Flixel Studio&lt;/a&gt; and &lt;a href=&quot;https://github.com/Dovyski/cvuis&quot;&gt;cvui&lt;/a&gt;, have reached their lowest rate ever. I literally had no time or will to work on them. My everyday routine was draining all my energy.&lt;/p&gt;

&lt;p&gt;Differently from 2017 and 2018, where I significantly contributed to open-source, 2019 has been quite slow. Even after receiving a donation from the awesome &lt;a href=&quot;http://haxeflixel.com/&quot;&gt;Haxeflixel&lt;/a&gt; community to work on Flixel Studio (thank you very much!), I was not able to focus. That made me feel incredibly guilty and not worth the investment. Luckily the Flixel community and the people behind the project are great to lift contributors.&lt;/p&gt;

&lt;h2 id=&quot;anything-good&quot;&gt;Anything good?&lt;/h2&gt;

&lt;p&gt;Yes, definitely! Lots of nice things happened, but I don’t think they quite fit in here. I mainly wanted to document how my 2019 gravitated. I am very thankful for all the great things that happened in 2019, like helping bootstrap a &lt;a href=&quot;https://uffs.cc/fronteiracast&quot;&gt;podcast&lt;/a&gt; and being invited to be the paranymph for our 2019 class.&lt;/p&gt;

&lt;p&gt;I am working towards making 2020 a less intense, but more productive year. Less stress and fire, more applied energy and well being. That’s all. So long and thanks for all the fish, 2019.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>cvui 2.7.0 is out! OpenCV GUI in Python</title>
   <link href="https://www.fernandobevilacqua.com/blog/2019/02/cvui-2-7-0-is-out-opencv-gui-in-python/"/>
   <updated>2019-02-16T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2019/02/cvui-2-7-0-is-out-opencv-gui-in-python</id>
   <content type="html">&lt;p&gt;I am pleased to inform that version &lt;a href=&quot;https://github.com/Dovyski/cvui/releases/tag/v2.7.0&quot;&gt;2.7.0&lt;/a&gt; of &lt;a href=&quot;https://dovyski.github.com/cvui&quot;&gt;cvui&lt;/a&gt; is out! &lt;a href=&quot;https://dovyski.github.com/cvui&quot;&gt;cvui&lt;/a&gt; is a simple UI lib built on top of OpenCV drawing primitives.&lt;/p&gt;

&lt;p&gt;This release contains bug fixes and the addition of a &lt;a href=&quot;https://dovyski.github.io/cvui/usage/&quot;&gt;pure Python implementation of cvui&lt;/a&gt;, i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui.py&lt;/code&gt;. The Python port of cvui has been conceived and developed with the aim of achieving a 1-to-1 match regarding the already existing C++ API. As a consequence, functions and parameters names were kept the same, so existing C++ documentation should apply to Python with minor changes.&lt;/p&gt;

&lt;p&gt;From now on, all computer vision developers out there working with Python can add UI components to their applications in an extremely easy way. The Python port of cvui is available via PyPy, so it is a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip&lt;/code&gt; command away. Just run:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip install cvui
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;and you are ready to go. As simple as cvui itself.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui.py&lt;/code&gt; also aims to be a “header-only” file, so all you have to do is add it to your project if you are not using any package manager. Here is a simple example of the Python usage of cvui:&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;numpy&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;cv2&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;cvui&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;WINDOW_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;CVUI Test&apos;&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WINDOW_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;# Create a frame
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frame&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;zeros&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;np&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;uint8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# clear the frame
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[:]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;52&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;49&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;# render a message in the frame at position (10, 15)
&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;# then show it on the screen
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;Hello world!&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;imshow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WINDOW_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cv2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;waitKey&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;27&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;break&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All &lt;a href=&quot;https://dovyski.github.io/cvui/examples/&quot;&gt;code examples&lt;/a&gt; are now also available in Python. The C++ version of cvui makes heavy use of parameters overloading, which is a problem in Python. To ensure good documentation and proper code auto-completion for cvui in Python IDEs, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui.py&lt;/code&gt; has several dummy/wrapping functions. They have a proper list of arguments instead of a single &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;*args&lt;/code&gt; parameter. It should provide a good user experience without causing any problems.&lt;/p&gt;

&lt;p&gt;Finally, I would like to highlight the addition of new &lt;a href=&quot;https://dovyski.github.io/cvui/examples/&quot;&gt;code examples&lt;/a&gt;, particularly the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ui-enhanced-*&lt;/code&gt; ones. They show how to improve existing cvui components, e.g. make a window movable and minimizable. Documentation pages have also been tweaked to accommodate information regarding the newly added Python support.&lt;/p&gt;

&lt;p&gt;Below is a list of changes according to the &lt;a href=&quot;https://github.com/Dovyski/cvui/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;. Thank you to all contributors that have helped improve cvui!&lt;/p&gt;

&lt;h3 id=&quot;added&quot;&gt;Added&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Python implementation of cvui, i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui.py&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/usage/&quot;&gt;read more&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Dovyski/cvui/tree/master/example/&quot;&gt;Python examples&lt;/a&gt; ported from the already existing C++ ones.&lt;/li&gt;
  &lt;li&gt;New &lt;a href=&quot;https://github.com/Dovyski/cvui/tree/master/example/&quot;&gt;ui-enhanced-* examples&lt;/a&gt;, e.g. moving settings window (&lt;a href=&quot;https://github.com/Dovyski/cvui/pull/41&quot;&gt;#41&lt;/a&gt;, &lt;a href=&quot;https://github.com/Dovyski/cvui/pull/36&quot;&gt;#36&lt;/a&gt;, help from &lt;a href=&quot;https://github.com/abreheret&quot;&gt;Amaury Bréhéret&lt;/a&gt; and &lt;a href=&quot;https://github.com/shengyu7697&quot;&gt;ShengYu&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Cmake option &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ADD_PYTHON_EXAMPLES&lt;/code&gt; to control the build of Python examples (&lt;a href=&quot;https://dovyski.github.io/cvui/usage/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;changed&quot;&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://dovyski.github.io/cvui/&quot;&gt;Documentation&lt;/a&gt; tweaks (help from &lt;a href=&quot;https://github.com/shengyu7697&quot;&gt;ShengYu&lt;/a&gt; and &lt;a href=&quot;https://github.com/ksakash&quot;&gt;Akash Kumar Singh&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Cmake version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.1&lt;/code&gt; or higher is now required to build the examples.&lt;/li&gt;
  &lt;li&gt;Cmake files were improved.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rect()&lt;/code&gt; color filling now supports alpha values, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0x7700ff00&lt;/code&gt; (blue with 50% transparency) (&lt;a href=&quot;https://github.com/Dovyski/cvui/pull/39&quot;&gt;#39&lt;/a&gt;, help from &lt;a href=&quot;https://github.com/jmuncaster&quot;&gt;Justin Muncaster&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;fixed&quot;&gt;Fixed&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rect()&lt;/code&gt; issue related to opacity (&lt;a href=&quot;https://github.com/Dovyski/cvui/pull/42&quot;&gt;#42&lt;/a&gt;, help from &lt;a href=&quot;https://github.com/jmuncaster&quot;&gt;Justin Muncaster&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Conflict with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dirent.h&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;min()/max()&lt;/code&gt; macros on Windows (&lt;a href=&quot;https://github.com/Dovyski/cvui/issues/38&quot;&gt;#38&lt;/a&gt;, help from &lt;a href=&quot;https://github.com/AliZ-ee&quot;&gt;Ali Zarei&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>The rule of five projects</title>
   <link href="https://www.fernandobevilacqua.com/blog/2018/07/the-rule-of-five-projects/"/>
   <updated>2018-07-21T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2018/07/the-rule-of-five-projects</id>
   <content type="html">&lt;p&gt;Side projects are a great way to learn new technologies, to exercise what you already know or to just challenge yourself a bit. Usually a side project is not connected to a contract or backed by financial support, so there is no real pressure to actually finish them. As a consequence, the landscape becomes something like the following very quickly (at least for me):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/commitstrip-side-projects.jpg&quot; alt=&quot;Commitstrip about side projects&quot; /&gt;
&lt;em&gt;&lt;a href=&quot;http://www.commitstrip.com/en/2014/11/25/west-side-project-story/&quot;&gt;Source: Commitstip - side projects&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This great strip by &lt;a href=&quot;http://www.commitstrip.com/&quot;&gt;Commitstip&lt;/a&gt; perfectly illustrates the life cycle of side projects. If you are like me, you have seen this scene way too many times: you have an idea, you start the project, things look and feel great. Then you pass the initial barrier where the creative work lives and you are left with non-creative, boring work to do. And sadly those tasks that remained are required to actually bring the project to life instead of creating yet another draft or handicapped prototype.&lt;/p&gt;

&lt;p&gt;I got really sick of having ideas without implementation, or having half-baked and unfinished projects lying around. To end that problem once and for all, I came up with &lt;strong&gt;the rule of five projects&lt;/strong&gt; (see below). It is very simple: use the energy and motivation of &lt;em&gt;starting&lt;/em&gt; a new project as the fuel to actually &lt;em&gt;finishing&lt;/em&gt; on-going ones. It’s like following a contract, but you are the contractor and the contractee.&lt;/p&gt;

&lt;p&gt;I’ve been using the rule of 5 projects and it indeed prevented the creation of new side projects. More impressively, it helped me &lt;strong&gt;&lt;em&gt;ship&lt;/em&gt;&lt;/strong&gt; old side projects that were dormant, e.g. &lt;a href=&quot;https://codebot.cc&quot;&gt;Codebot&lt;/a&gt;. It blew my expectations!&lt;/p&gt;

&lt;h2 id=&quot;the-rule-of-five-projects&quot;&gt;The rule of five projects&lt;/h2&gt;

&lt;p&gt;At any given time, you are allowed to have at most 5 (five!) side projects, which can be &lt;em&gt;under development&lt;/em&gt; or &lt;em&gt;on-going&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Note: for obvious reasons, anything that is related to your regular job does not count towards those 5 slots, unless you get paid to do whatever you want.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;1-under-development&quot;&gt;1. Under development&lt;/h3&gt;

&lt;p&gt;A side project is said to be &lt;strong&gt;under development&lt;/strong&gt; when it fulfills at &lt;em&gt;least one&lt;/em&gt; of the following:&lt;/p&gt;

&lt;h4 id=&quot;11-it-is-unable-to-deliver-its-core-reason-to-exist-it-is-not-a-mvp-yet&quot;&gt;1.1 It is unable to deliver its core reason to exist (it is not a &lt;em&gt;MVP&lt;/em&gt; yet)&lt;/h4&gt;

&lt;p&gt;This rule is open to interpretation, but you can be honest with yourself here. For instance, if you are creating an image editing software, it should &lt;em&gt;minimally&lt;/em&gt; be able to open an image file, allow its pixels to be edited, then be able to save the result as a new (or existing) image. That simple, a true &lt;em&gt;minimum viable product&lt;/em&gt;.&lt;/p&gt;

&lt;h4 id=&quot;12-it-has-not-been-publicly-released&quot;&gt;1.2 It has not been publicly released&lt;/h4&gt;

&lt;p&gt;This rule might seem too much, but it is really required. It is the mental and public “acknowledgment seal” you need to move on.&lt;/p&gt;

&lt;p&gt;The project must fulfill &lt;strong&gt;&lt;em&gt;ALL&lt;/em&gt;&lt;/strong&gt; of the following to be considered publicly released:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Users can download/install/use the project without your help&lt;/strong&gt;. E.g. if it is compiled software, users should be able to download and run binaries.
    &lt;blockquote&gt;
      &lt;p&gt;Note: your project must have enough documentation to allow people to actually use it. Nothing fancy is required, a README file is enough and will do the trick.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Others can continue your work&lt;/strong&gt;. E.g. if the project is an open source lib/software, it &lt;em&gt;must&lt;/em&gt; have a README describing how to install (itself and dependencies), run and test things.
    &lt;blockquote&gt;
      &lt;p&gt;Note: no tacit knowledge about the project is allowed, e.g. something that only you know to make the project work, i.e. installing a specific a DLL file. Downloading the project source (and following its README) should be enough to put it up and allow further development.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It must be announced in a channel (or channels).&lt;/strong&gt; E.g. tweet, blog post, project’s own website.
    &lt;blockquote&gt;
      &lt;p&gt;Note: the objective here is not to gather a lot of users for your project. The intent is to make the project visible in whatever channel(s) you have available.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Exception:&lt;/strong&gt; if the project is a contribution to an open-source project, rules 1.1 and 1.2 are not required. In such case, the project is said to deliver its core reason to exist and is publicly released when a pull request has been issued and accepted (or declined).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-on-going&quot;&gt;2. On-going&lt;/h3&gt;

&lt;p&gt;A side project is said to be &lt;strong&gt;on-going&lt;/strong&gt; when it is not &lt;strong&gt;under development&lt;/strong&gt; (according to the previously mentioned rules 1.1 and 1.2) and it is &lt;strong&gt;being used&lt;/strong&gt; by someone (including yourself).&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Note: an on-going project might not be under development anymore, but it can still receive maintenance, i.e. bug fixes, or creative work, i.e. new features.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An on-going project only occupies one of the 5 working slots when it fulfills at &lt;em&gt;least one&lt;/em&gt; of the following:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;It received new features or bug fixes that were not released yet&lt;/strong&gt;. E.g. new version of the project.
    &lt;blockquote&gt;
      &lt;p&gt;Note: releasing features/bug fixes for a on-going project is wrapping them up in a new release version, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v1.5.0&lt;/code&gt;, and updating the project’s CHANGELOG.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;It requires work to remain up and running for its users&lt;/strong&gt;. E.g. add new content to a movie app, moderate submissions in a news portal, etc.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Exception:&lt;/strong&gt; if the project is not related to software, then &lt;em&gt;project version&lt;/em&gt; can be seen as making content publicly available. Similarly new content can be seen as new features or bug fixes. If you have unpublished content, you have an on-going project occupying a working slot.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-possible-adaptations&quot;&gt;3. Possible adaptations&lt;/h3&gt;

&lt;p&gt;Working habits, especially for side projects, are very dependent on personal inclination and energy. For me, 5 working slots is great, but it could be too little/much for you.&lt;/p&gt;

&lt;p&gt;Similarly making on-going projects occupy 1 working slot each might be too much. An on-going project could occupy half a working slot, for instance. It’s up to you to find the right balance for everything.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>cvui 2.5.0 is out!</title>
   <link href="https://www.fernandobevilacqua.com/blog/2018/04/cvui-2-5-0-is-out/"/>
   <updated>2018-04-04T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2018/04/cvui-2-5-0-is-out</id>
   <content type="html">&lt;p&gt;I am pleased to inform that version &lt;a href=&quot;https://github.com/Dovyski/cvui/releases/tag/v2.5.0&quot;&gt;2.5.0&lt;/a&gt; of &lt;a href=&quot;https://dovyski.github.com/cvui&quot;&gt;cvui&lt;/a&gt; is out! &lt;a href=&quot;https://dovyski.github.com/cvui&quot;&gt;cvui&lt;/a&gt; is a simple UI lib built on top of OpenCV drawing primitives.&lt;/p&gt;

&lt;p&gt;As usual this release contains contributions from several awesome people, so I would like to thank all contributors that have helped improve cvui. Thank you, you rock! New features for this release include support for &lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;multiple windows&lt;/a&gt;, a &lt;a href=&quot;https://dovyski.github.io/cvui/advanced-mouse/&quot;&gt;mouse API&lt;/a&gt; and the addition of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::imshow()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This post will give an overview of those cool new features. All GIFs in this post are from applications whose &lt;a href=&quot;https://dovyski.github.io/cvui/examples/&quot;&gt;source code is available as examples&lt;/a&gt; in the &lt;a href=&quot;https://github.com/Dovyski/cvui&quot;&gt;cvui repository&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;support-for-multiple-windows&quot;&gt;Support for multiple windows&lt;/h3&gt;

&lt;p&gt;In previous versions of cvui it was possible to render UI components to multiple windows. However components that respond to user interaction, e.g. buttons, would only work in one of those windows.&lt;/p&gt;

&lt;p&gt;That was a significant limitation since multiple windows in graphical applications are quite common. cvui &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.5.0&lt;/code&gt; no longer has such limitation:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/cvui-2.5-multiple-windows.gif&quot; alt=&quot;cvui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Using the newly added function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::context()&lt;/code&gt;, developers can easily inform cvui of which window is being rendered/worked at any given time. cvui will internally track the state of each window and ensure that all UI interactions are handled properly, no matter the window.&lt;/p&gt;

&lt;p&gt;Some existing functions were also updated and a few new ones were added to facilitate the work with multiple windows. For instance, you don’t need to create your own windows using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cv::namedWindow()&lt;/code&gt; anymore (only if you wish so, of course). cvui can do that for you now:&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cv&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;windows&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;WINDOW1_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;WINDOW2_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;WINDOW3_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;WINDOW4_NAME&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;windows&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All changes regarding windows are backward compatible, so existing projects should not face any problems. To learn more about this new feature, check out the &lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;multiple windows&lt;/a&gt; entry in the docs.&lt;/p&gt;

&lt;h3 id=&quot;new-mouse-api&quot;&gt;New mouse API&lt;/h3&gt;

&lt;p&gt;Mouse interaction is an important part of a graphical application. Particularly in computer vision applications, tasks quite often require quick iterations and selection of regions, for instance.&lt;/p&gt;

&lt;p&gt;cvui has the philosophy of &lt;em&gt;“one line of code produces one element on the screen”&lt;/em&gt;. This should remain true for a mouse API. The newly added &lt;a href=&quot;https://dovyski.github.io/cvui/advanced-mouse/&quot;&gt;mouse API&lt;/a&gt; provides lots of functionality without sacrificing simplicity. Everything related to the mouse is available via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::mouse()&lt;/code&gt;, which provide an easy way to query mouse information.&lt;/p&gt;

&lt;p&gt;The function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bool cvui::mouse(int query)&lt;/code&gt; allows you to query the mouse for events, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::mouse(cvui::DOWN)&lt;/code&gt;. Available queries are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::DOWN&lt;/code&gt;: any mouse button was pressed. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::mouse()&lt;/code&gt; returns &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; for a single frame only.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::UP&lt;/code&gt;: any mouse button was released. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::mouse()&lt;/code&gt; returns &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; for a single frame only.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::CLICK&lt;/code&gt;: any mouse button was clicked (went down then up, no matter the amount of frames in between). &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::mouse()&lt;/code&gt; returns &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; for a single frame only.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::IS_DOWN&lt;/code&gt;: any mouse button is currently pressed. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::mouse()&lt;/code&gt; returns &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; for as long as the button is down/pressed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::mouse()&lt;/code&gt; returns a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cv::Point&lt;/code&gt; which can be used to track the position of the mouse cursor. The combination of those two functions allow the creation of complex GUI with few (and clean) lines of code.&lt;/p&gt;

&lt;p&gt;Below is a simple application demonstrating the new mouse API, whose &lt;em&gt;complete&lt;/em&gt; source code has 57 lines in total (excluding comments).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/cvui-2.5-mouse-api.gif&quot; alt=&quot;cvui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The new mouse API seamlessly works with multiple windows:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/cvui-2.5-mouse-multiple-windows.gif&quot; alt=&quot;cvui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;All mouse functions also accept the name of a given window as a parameter, so you can get mouse info of any window in your application. Additionally it is possible to query information of any given button, e.g.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// check if left button of the mouse is down&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// in the current window.&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mouse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LEFT_BUTTON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IS_DOWN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// do something&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// check if the middle button of the mouse is down&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// in the window named WINDOW_NAME.&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mouse&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WINDOW_NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MIDDLE_BUTTON&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cvui&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;IS_DOWN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// do something&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Below is &lt;a href=&quot;https://github.com/Dovyski/cvui/tree/master/example/src/mouse-complex-buttons&quot;&gt;one application&lt;/a&gt; (source code available as an &lt;a href=&quot;https://dovyski.github.io/cvui/examples/&quot;&gt;example&lt;/a&gt;) that uses the mouse API to dynamically create ROIs based on clicks of different mouse buttons.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/cvui-2.5-mouse-complex.gif&quot; alt=&quot;cvui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;To learn more about this new feature, check out the &lt;a href=&quot;https://dovyski.github.io/cvui/advanced-mouse/&quot;&gt;mouse API&lt;/a&gt; entry in the docs.&lt;/p&gt;

&lt;h3 id=&quot;better-documentation&quot;&gt;Better documentation&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://dovyski.github.io/cvui&quot;&gt;cvui documentation&lt;/a&gt; was completely overhauled, including the addition of several new &lt;a href=&quot;https://dovyski.github.io/cvui/examples/&quot;&gt;code examples&lt;/a&gt;. Documentation pages have been significantly improved with code samples, figures and better explanations. All pages also have an &lt;em&gt;Edit this page on Github&lt;/em&gt; button, so feel invited to improve the documentation as you see fit.&lt;/p&gt;

&lt;p&gt;A tool is as good as its docs, so I hope this will make cvui even better.&lt;/p&gt;

&lt;h3 id=&quot;important-changes&quot;&gt;Important changes&lt;/h3&gt;

&lt;p&gt;Finally I want to mention some changes that landed in this release. I tried my best to ensure backward compatibility, but unfortunately a small change is required to make cvui &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.5.0&lt;/code&gt; work with existing projects. I am honestly sorry for any inconveniences this might cause.&lt;/p&gt;

&lt;p&gt;From now on, one (&lt;strong&gt;and only one&lt;/strong&gt;) of your C++ files must include &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui.h&lt;/code&gt; after a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#define CVUI_IMPLEMENTATION&lt;/code&gt;, e.g.&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#define CVUI_IMPLEMENTATION
#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&quot;cvui.h&quot;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;All other files should include cvui as usual:&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&quot;cvui.h&quot;&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This change was required to keep cvui as flexible, simple and “sane” as possible. The function &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::init()&lt;/code&gt; was also modified, but it should not affect existing  addition of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::imshow()&lt;/code&gt; (equivalent of calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::update()&lt;/code&gt; then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cv::imshow()&lt;/code&gt;, as explained &lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;here&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Below is a list of changes according to the &lt;a href=&quot;https://github.com/Dovyski/cvui/blob/master/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;added&quot;&gt;Added&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Support for &lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;multiple windows&lt;/a&gt; (help from &lt;a href=&quot;https://github.com/jmuncaster&quot;&gt;Justin Muncaster&lt;/a&gt;, &lt;a href=&quot;https://github.com/4xle&quot;&gt;4xle&lt;/a&gt; and Luca Del Tongo).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dovyski.github.io/cvui/advanced-mouse/&quot;&gt;Mouse API&lt;/a&gt; (help from &lt;a href=&quot;https://github.com/pthom&quot;&gt;Pascal Thomet&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Compilation flag &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVUI_IMPLEMENTATION&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/usage/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;New parameter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bool theCreateNamedWindow&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init()&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;init(const cv::String[], size_t, int, bool)&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;watch(cv::String, bool)&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::imshow()&lt;/code&gt;, equivalent of calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui::update()&lt;/code&gt; then &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cv::imshow()&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/advanced-multiple-windows/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;More &lt;a href=&quot;https://github.com/Dovyski/cvui/tree/master/example/&quot;&gt;examples&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Compilation flag &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVUI_DISABLE_COMPILATION_NOTICES&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/usage/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;changed&quot;&gt;Changed&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;cvui can now be included in multiple files (help from Luca Del Tongo; &lt;a href=&quot;https://dovyski.github.io/cvui/usage/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Requirement that one (&lt;strong&gt;and only one&lt;/strong&gt;) of your C++ files must include &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cvui.h&lt;/code&gt; after a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#define CVUI_IMPLEMENTATION&lt;/code&gt; (&lt;a href=&quot;https://dovyski.github.io/cvui/usage/&quot;&gt;read more&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://dovyski.github.io/cvui/&quot;&gt;Documentation&lt;/a&gt; was significantly improved, e.g. code samples, figures, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;fixed&quot;&gt;Fixed&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sparkline()&lt;/code&gt; crashes with empty vector (&lt;a href=&quot;https://github.com/Dovyski/cvui/issues/23&quot;&gt;#23&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;&lt;a href=&quot;https://dovyski.github.io/cvui&quot;&gt;cvui 2.5.0&lt;/a&gt; is full of new features to help you improve your workflow and create awesome GUI applications. I hope this new release will make cvui even more useful.&lt;/p&gt;

&lt;p&gt;As a final remark, the source code of all applications mentioned in this post is available in the &lt;a href=&quot;https://github.com/Dovyski/cvui/tree/master/example/&quot;&gt;examples&lt;/a&gt; folder of &lt;a href=&quot;https://github.com/Dovyski/cvui&quot;&gt;cvui repository&lt;/a&gt;. Inspect and use them as you please since everything is MIT licensed (as cvui itself).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>You can pursue anything</title>
   <link href="https://www.fernandobevilacqua.com/blog/2017/11/you-can-pursue-anything/"/>
   <updated>2017-11-20T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2017/11/you-can-pursue-anything</id>
   <content type="html">&lt;p&gt;One of the first worries that hit me really hard when I became a professor was the influence I have on my students. Even if I just stand in front of my students, speechless and doing absolutely nothing, it will impact them somehow. They are there to learn not only the content listed in the syllabus but new experiences as well.&lt;/p&gt;

&lt;p&gt;When I started, I was scared to say something that would not help them, that would push them towards the wrong direction. So I did what I experienced myself in the past. Something that helped me. I encourage my students to do anything. You know that famous saying?&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You can do anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That’s what I did. There is no way to be more clear and straight to the point than that. You want to become an astronaut? You can do it! An athlete? Yep. The inventor of the next Facebook? Sure. Why not? I thought that was the right approach to impact my students. If they were to learn more than just the course material, it could well be something that inspired them to thrive and aim high.&lt;/p&gt;

&lt;p&gt;One day I watched on YouTube &lt;a href=&quot;https://youtu.be/miwrDpbb25Q?t=53m53s&quot;&gt;a talk by Rami Ismail&lt;/a&gt;, a recognized game developer. The talk mentioned encouraging people to do anything they want. Again it was the famous &lt;em&gt;“you can do it!”&lt;/em&gt; being spread in the wild. This time things were different though. Rami said something that resonated with me, something that made me realize how wrong my thoughts were. I can’t recall the exact words, but he commented how shallow pieces of advice like &lt;em&gt;“follow your dreams”&lt;/em&gt; can be. Sure you should follow your dreams, but does the person giving such advice know the environment where the receiver lives in? He mentioned that some people just lack the required ground to engage in such endeavor. Following your dream might imply quitting your job, studying something that has a low financial return in the long run, and so on. It directly impacts your life, possibly changing it forever.&lt;/p&gt;

&lt;p&gt;Being a Brazilian, I know exactly what that means. Lots of families in my home country need to fight to obtain the basics. My family was able to provide me with a good education, leisure opportunities, books, and trips. We were not rich, but for sure we were privileged. I never took that for granted, but I realized for the first time how “easier” it was for me to follow my dream compared to someone that did not share the same opportunities. That was the moment I thought everything I have been teaching to my students was wrong.&lt;/p&gt;

&lt;p&gt;Advice as &lt;em&gt;“follow your dream”&lt;/em&gt; is indeed shallow. It means nothing because it is mindless, blind and lacking any concrete steps. Combining it with &lt;em&gt;“you can do anything”&lt;/em&gt; could be a recipe for disaster. It’s cliché to say, but everyone is fighting a battle you know nothing about. What if your advice is the wrong step in such battle?&lt;/p&gt;

&lt;p&gt;The day I saw that talk changed my mind. I will never say &lt;em&gt;“you can do anything”&lt;/em&gt; anymore because I know how much frustration it could produce. I’ve seen some of my students struggling to understand concepts of programming. It will only inflict pain on them if I repeatedly say &lt;em&gt;“sure, you can do it!”&lt;/em&gt; when they struggle so much to do it. Maybe those students, in particular, have a tough time grasping programming concepts. That is pretty much my case when trying to understand how to play the guitar. For me, guitars are simply harder than programming. Can I learn how to play guitar? Sure, I can. Will it take me a lot of time and energy and the outcome will be very simplistic? Yes, it will. Period. Maybe my time will be better invested in something else, something that I also enjoy and I am more likely to thrive.&lt;/p&gt;

&lt;p&gt;That’s the reason why I say &lt;em&gt;“you can pursue anything”&lt;/em&gt; nowadays. It is way more grounded in reality because pursuing implies going after something. You need a target and a plan to do that. It is also implicit that you might not get there at all. Is it sad? Yes, but is better than chasing an unreachable ghost. I will tell you that you can pursue anything, but the path might be hard and energy-demanding.&lt;/p&gt;

&lt;p&gt;I genuinely think that, as someone who can impact the lives of those in my class, I should measure my words. I need to join that individual battle, even if I know nothing about it. I can’t choose the path for that person in that battle, but I can help by giving an educated guess about how to pursue something. What are the challenges and probable steps ahead? And above all, don’t assume that we all have the same resources/passion/energy/time/conditions to pursue things.&lt;/p&gt;

&lt;p&gt;You might not be able to do anything you want, but sure as hell you can pursue anything you want.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Experiences are what matters</title>
   <link href="https://www.fernandobevilacqua.com/blog/2017/09/experiences-are-what-matters/"/>
   <updated>2017-09-24T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2017/09/experiences-are-what-matters</id>
   <content type="html">&lt;p&gt;I started my studies in Computer Science at the &lt;a href=&quot;http://ufsm.br&quot;&gt;Federal University of Santa Maria&lt;/a&gt; in 2003. I was very young and the only reason I had to study Computer Science was that I liked computers. I had no clue about what Computer Science would be, or what things I could do after graduation. I honestly had no expectations beyond improving my knowledge about computers.&lt;/p&gt;

&lt;p&gt;That is for sure a naïve mindset to start a career, but today I see that you can’t get any more prepared than that when you are young and join the university. Since I was little everyone around me told me that the university was the ultimate goal, the final frontier someone could breach into. I did my best in school and eventually I complied with this idea when I entered the university education.&lt;/p&gt;

&lt;p&gt;I remember the feeling of being amazed by the whole thing. My first thought was:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You have to enroll in courses to learn about different things! If you don’t do it, nobody will do it for you. How cool is that?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I thought it was so different from regular school, where you learn lots of pre-defined things in sequence, one day after another. University was not different than that at all, but it sure felt different. I had the feeling of freedom, of picking the things I wanted to learn. Even though I disliked several of the topics that I was learning (I am more of a practical guy instead of theoretical), everything that was being presented somehow contributed to my knowledge.&lt;/p&gt;

&lt;p&gt;My young soul was full of dreams. The more I discovered, the more I wanted to learn. Officially I only learned the C programming language during programming courses, but curiosity, good colleagues and studying groups provided me with Java, Actionscript, C++ and PHP. Back in those days, I thought that I needed to learn &lt;em&gt;all&lt;/em&gt; programming languages to be successful. It is incredible how I saw the world in an entirely different way during that time.&lt;/p&gt;

&lt;p&gt;The years have passed (precisely 14 of them) and I see the same world so differently that I could as well say I am no longer the same person. The classes I attended, all the content I’ve learned faded and converged into a single thing I remember today: the person behind the teaching process. Sure it was important to learn about math, system architectures, software engineering, but the only value that remained was the experience I had. I remember the stories some professors told me, I remember their passion, their clever way of overcoming problems. That was the most important thing I have learned.&lt;/p&gt;

&lt;p&gt;Back in 2003 there was no computer vision able to detect and identify objects (not at my university at least), nobody was talking about deep learning and Javascript was the black sheep of the Internet. In the helm of technology, things change at a neck-breaking speed, so the landscape is very different today than it was 14 years ago. The experiences I had, however, still remain and they are the elements that define me. They made me the professional I am today.&lt;/p&gt;

&lt;p&gt;That was one of the main reasons why I decided to do my PhD abroad. I wanted to learn from different lenses, from different people. I am so thankful for having the opportunity to study in Sweden. Just like the experiences I had in 2003 changed my life, the years I am living now will define me even more. If I could give a piece of advice to my past self, I would say:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Understand the challenges in front of you as a school to teach you how to learn. Some things you are learning now are important, some are not. Learn how to learn, and learn from the experiences presented to you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is definitely how I live and learn now. You don’t have to go to the university or get a PhD to learn about many things. Everyone has a life of experiences you can learn from, no matter their social class or level of instruction.&lt;/p&gt;

&lt;p&gt;Learning from your own experiences and the experiences of others is what matters, the rest you read from a piece of paper.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>cvui 2.0.0 is out!</title>
   <link href="https://www.fernandobevilacqua.com/blog/2017/08/cvui-2-0-0-is-out/"/>
   <updated>2017-08-06T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2017/08/cvui-2-0-0-is-out</id>
   <content type="html">&lt;p&gt;I am pleased to inform that version &lt;a href=&quot;https://github.com/Dovyski/cvui/releases/tag/v2.0.0&quot;&gt;2.0.0&lt;/a&gt; of &lt;a href=&quot;https://github.com/Dovyski/cvui&quot;&gt;cvui&lt;/a&gt; is out! cvui is a simple UI lib built on top of OpenCV drawing primitives. This post is a bit overdue since the release happened in May, but better late than never.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/cvui-v2.png&quot; alt=&quot;cvui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Version 2.0.0 is packed with new features, however the API remains the same, so it is quite easy to upgrade. The inner parts of cvui have been completely overhauled, allowing better support for old versions of OpenCV, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2.x&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is a complete list of additions and changes (including &lt;a href=&quot;https://travis-ci.org/Dovyski/cvui/builds&quot;&gt;CI builds&lt;/a&gt;):&lt;/p&gt;

&lt;h3 id=&quot;added&quot;&gt;Added&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;image()&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iarea()&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;trackbar()&lt;/code&gt; component (thanks to &lt;a href=&quot;https://github.com/pthom&quot;&gt;Pascal Thomet&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Support for OpenCV 2.x (thanks to &lt;a href=&quot;https://github.com/pthom&quot;&gt;Pascal Thomet&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Basic cmake support for examples (thanks to &lt;a href=&quot;https://github.com/pthom&quot;&gt;Pascal Thomet&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Multiplatform improvements (thanks to &lt;a href=&quot;https://github.com/ebachard&quot;&gt;ebachard&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;More &lt;a href=&quot;https://github.com/Dovyski/cvui/tree/master/example/&quot;&gt;examples&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;Better &lt;a href=&quot;https://github.com/Dovyski/cvui/tree/master/docs/&quot;&gt;documentation&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;changed&quot;&gt;Changed&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;cvui is now a header-only lib.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;button()&lt;/code&gt; component can now use images.&lt;/li&gt;
  &lt;li&gt;Labels in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;button()&lt;/code&gt; component can have keyboard shortcuts with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&lt;/code&gt;, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;Quit&lt;/code&gt; (thanks to &lt;a href=&quot;https://github.com/pthom&quot;&gt;Pascal Thomet&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;Fixes to README file (thanks to &lt;a href=&quot;https://github.com/hrastnik&quot;&gt;Mateo Hrastnik&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the things I am most happy about this release is that cvui is now a &lt;strong&gt;&lt;em&gt;header-only lib&lt;/em&gt;&lt;/strong&gt;. I am a huge fan of such approaches since they are easy to integrate and use in a project. Additionally there is a &lt;a href=&quot;https://dovyski.github.io/cvui&quot;&gt;new website&lt;/a&gt; full of documentation and examples related to cvui.&lt;/p&gt;

&lt;p&gt;Following the release of version 2.0.0, I made a guest post at &lt;a href=&quot;http://www.learnopencv.com/cvui-gui-lib-built-on-top-of-opencv-drawing-primitives/&quot;&gt;learnopencv.com&lt;/a&gt; about cvui. It highlights the true nature of the project, which is allowing developers to do a lot with very few lines of code. For example, the following application has 37 lines of C++ code (including blank lines as well):&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.learnopencv.com/cvui-gui-lib-built-on-top-of-opencv-drawing-primitives/&quot;&gt;&lt;img src=&quot;/public/img/cvui-canny-complete-ui.gif&quot; alt=&quot;cvui&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also want to thank all contributors that have helped improve cvui! If you have not tried cvui yourself, &lt;a href=&quot;https://dovyski.github.io/cvui&quot;&gt;take it for a ride&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Jabref - reference manager for latex and bibtex</title>
   <link href="https://www.fernandobevilacqua.com/blog/2017/04/jabref-reference-manager-for-latex-and-bibtex/"/>
   <updated>2017-04-07T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2017/04/jabref-reference-manager-for-latex-and-bibtex</id>
   <content type="html">&lt;p&gt;Managing references is a common and daily task of any academic. It consists of keeping track of papers you have read and how to cite them in the future. If you are involved in a little endeavor with a few papers to monitor, you are good to go with a folder where you store the PDF files and pull the citations from there.&lt;/p&gt;

&lt;p&gt;I am a &lt;a href=&quot;https://www.latex-project.org/&quot;&gt;Latex&lt;/a&gt; user, so I organize all my references using &lt;a href=&quot;http://www.bibtex.org/&quot;&gt;Bibtex&lt;/a&gt;. It’s an easy to use format that works most of the time flawlessly. A Bibtex entry usually looks like this:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot; data-lang=&quot;shell&quot;&gt;@inproceedings&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;bevilacqua2016variations,
  &lt;span class=&quot;nv&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;Variations of Facial Actions While Playing Games with Inducing Boredom and Stress&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;nv&quot;&gt;author&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;Bevilacqua, Fernando and Backlund, Per and Engstrom, Henrik&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;nv&quot;&gt;booktitle&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;Games and Virtual Worlds &lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;Serious Applications &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;VS-Games&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 2016 8th International Conference on&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;nv&quot;&gt;pages&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;1--8&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;nv&quot;&gt;year&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;2016&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;nv&quot;&gt;organization&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;={&lt;/span&gt;IEEE&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;At the beginning of my PhD, I used a Bibtex file (e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;references.bib&lt;/code&gt;) as my reference manager. Every time I read a paper, I added a new entry to that file and dropped the PDF into a folder. Simple and straightforward. Meanwhile, I kept on hearing several suggestions regarding the use of a (bibliography) reference manager. I soon realized why a reference manager is not only useful but definitely required.&lt;/p&gt;

&lt;p&gt;As you deepen the research, the number of papers you have to deal with grows significantly. The number of files &lt;em&gt;per se&lt;/em&gt; is not a problem, but remembering who wrote that piece you want to cite is the tricky part. Say you remember a few keywords, but you don’t remember the author (or the other way around). That’s when a reference manager saves the day. By using one, you can quickly search papers by author, year, keywords, conferences, anything you can index on.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/jabref.jpg&quot; alt=&quot;JabRef: open-source reference manager&quot; /&gt;
&lt;em&gt;&lt;a href=&quot;http://www.jabref.org/&quot;&gt;JabRef: open-source reference manager&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I decided that a reference manager was necessary, a quick search returned names like &lt;a href=&quot;https://www.mendeley.com/&quot;&gt;Mendeley&lt;/a&gt;, one of the most mentioned suggestions regarding reference management. I believe that is because it easily integrates with Microsoft Word. &lt;a href=&quot;http://endnote.com/&quot;&gt;Endnote&lt;/a&gt; was another popular (and expensive) suggestion. Being an open-source fanatic, I googled for OSS alternatives and found &lt;a href=&quot;http://www.jabref.org/&quot;&gt;JabRef&lt;/a&gt;. It is quite a piece of software, kudos to the development team!&lt;/p&gt;

&lt;p&gt;JabRef not only helps you manage your references, but it also helps you obtain information about them. Usually, my workflow involves searching for a paper on &lt;a href=&quot;https://scholar.google.com&quot;&gt;Google Scholar&lt;/a&gt; and getting its bibtext entry from there. After I add the entry to JabRef and use its excellent features set to automatically look up the DOI and the PDF of the paper for me. And just like magic, my initial bibtex entry is updated with very accurate info and ready to be used. Additionally, JabRef uses a Bibtex file as a database, so there are no intermediary files or similars. JabRef works as a nice GUI to edit (and improve) bibtex files. Straight to the nail for Latex users.&lt;/p&gt;

&lt;p&gt;If you are writing anything in the academia or doing research, start using a (bibliography) reference manager as soon as you can. &lt;a href=&quot;http://www.jabref.org/&quot;&gt;JabRef&lt;/a&gt; is free, open-source and works great with Latex.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Scifibot - Devlog 2</title>
   <link href="https://www.fernandobevilacqua.com/blog/2017/01/scifibot-devlog-2/"/>
   <updated>2017-01-20T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2017/01/scifibot-devlog-2</id>
   <content type="html">&lt;p&gt;This is the second update on &lt;a href=&quot;https://www.fernandobevilacqua.com/blog/2016/12/scifibot-devlog-1/&quot;&gt;Scifibot&lt;/a&gt;, my companion app for sci-fi fans. Things are finally starting to take shape, which is great and bad at the same time. It’s great because the app is coming together and I can actually see it working. The bad part is that I reached the 90% development mark, which means I have only 10% of work to go. Right?&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/scifibot-devlog2-title-info.gif&quot; title=&quot;Scifibot - improved title screen&quot; style=&quot;float: right; margin: 7px 7px 7px 20px; width: 30%; height: auto;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you have experience shipping any software that targets real users, you know the last 10% of the development actually represents 90% of the project. That’s the amazing development math, but it is true if you want to deliver a product with decent UX instead of a clunky pile of non-functional buttons. My last tasks regarding Scifibot have been almost exclusively focused on UX, like tweaking menus, adjusting buttons, creating visual feedbacks for actions, etc. It’s a boring task to me, but it needs to be done.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/scifibot-devlog2-settings.gif&quot; title=&quot;Scifibot - settings screen&quot; style=&quot;float: left; margin: 7px 20px 7px 7px; width: 30%; height: auto;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I also added some love to the title screen (the one showing the details of a movie/series). It’s now possible to see real ratings from IMDb, Metacritic and Rotten Tomatoes. I also decided to leave the reviewing of titles out of the app for now, because it will consume a significant amount of time to implement. I want this app out quickly, so it’s time to start dealing with feature creep.&lt;/p&gt;

&lt;p&gt;Under the hood I worked on the synchronization code, which is responsible for updating the app’s database with new titles informed by the REST API. I designed both the API the and sync system to consume as little network resources as possible. The app will never ask the server about the full database, it will ask for modifications since a timestamp instead. It should prevent the download of already acquired info, cutting data transfer. I also implemented an “offline sync” procedure, which is used in case the app is updated via Google Play. Internally any new version of the app will be seen as new data to be sync’d, so I can actually update the catalog of titles using Google Play updates, if necessary.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/scifibot-devlog2-notifications.gif&quot; title=&quot;Scifibot - notifications&quot; style=&quot;float: right; margin: 7px 7px 20px 7px; width: 30%; height: auto;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Things got a bit complex after the sync system was in place, so I needed a way to trigger sync actions manually. I spent a few hours and created a settings screen. At the moment it has the bare minimum required for the app to run, like an option to enable/disable remote sync, allow device notifications, etc. I don’t plan to add much more options to that screen, but it is there (and already working) if needed.&lt;/p&gt;

&lt;p&gt;Last but not least, I worked on the notification system. It will be responsible for informing the user about new content, especially info regarding titles the user is tracking/following. The gif on the side has a demonstration of the notification system showing two new titles that were added to the catalog recently.&lt;/p&gt;

&lt;p&gt;At the moment my focus has been on fixing bugs. There is a very nasty one regarding dynamic screens and navigation. I thought I was using &lt;a href=&quot;https://framework7.io&quot;&gt;Framework7&lt;/a&gt; in the wrong way, but it seems it is not my fault. It looks more and more like a bug on their side, but I will work around it. After this bug is fixed, I think the app reaches alpha status and I can start packaging and deploying it on real mobile devices. I’m looking forward to doing it!&lt;/p&gt;

&lt;hr style=&quot;clear: both;&quot; /&gt;

</content>
 </entry>
 
 <entry>
   <title>Scifibot - Devlog 1</title>
   <link href="https://www.fernandobevilacqua.com/blog/2016/12/scifibot-devlog-1/"/>
   <updated>2016-12-21T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2016/12/scifibot-devlog-1</id>
   <content type="html">&lt;p&gt;I love scifi movies and series. There are plently of good (and not so good) titles out there to be seen, but it is really hard to find them or keep track of interesting things. If you are like me, you probably had spent a significant amount of your time 1) finding things and 2) making notes or equivalents to remember what to watch.&lt;/p&gt;

&lt;p&gt;I would like to see a list of &lt;em&gt;every&lt;/em&gt; scifi movie or series available with a clear indication if I had or not watched it yet. I want to see a cool movie/series and add it to a list I can come back to later. More importantly, &lt;em&gt;I want to be informed about the titles I am interested on&lt;/em&gt;, e.g. receive a notification when an upcoming movie hits the theaters.&lt;/p&gt;

&lt;p&gt;Filled with frustration of my current workflow to find/track things and inspired by the bright future described above, I decided to work on a mobile app. Its codenamed &lt;em&gt;Scifibot&lt;/em&gt;. I have managed to work on it during the weekends and sometimes during the weeks at night.&lt;/p&gt;

&lt;p&gt;This post is a dev log regarding my progress so far. I wanted to quickly finish this project, so I decided to stick with web technologies (HTML5/CSS/JS) on top of a runtime (e.g. Phonegap or similar). After spending some time reading about and testing a few mobile frameworks, I decided to go with &lt;a href=&quot;https://framework7.io&quot;&gt;Framework7&lt;/a&gt;. I had never heard of that before, but it is a full featured HTML framework for building iOS &amp;amp; Android apps. It is simple, efficient, elegant and easy to grasp.&lt;/p&gt;

&lt;p&gt;After my first coding session (about 2 hours), I was able to put together a very simple app fully implemented on top of Google Material Design, which is a must for Android. That was impressive. I had used &lt;a href=&quot;https://jquerymobile.com/&quot;&gt;jQuery mobile&lt;/a&gt; in the past, but my progression at the time was not that good.&lt;/p&gt;

&lt;p&gt;My development focus has been on creating the basic structure of the app, creating the screens and the flow among them. Here is an screenshot of the current state:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/scifibot_devlog1.png&quot; alt=&quot;Scifibot - list of available movies&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I had a few quirks regarding some aspects, such as the navigation bar and its buttons. It is probably because I am doing something wrong, but I will deal with that later. The plan is to move fast and reach a MVP, then iterate from that. As any good side project, feature creep has already took over, but I moved several of the non-essential features to the “Cool to have in the future” pile. The project should be safe for now :D&lt;/p&gt;

&lt;p&gt;I want a functional app, so it should be &lt;em&gt;fast&lt;/em&gt; and self-contained. As a consequence, no login will be required and no internet connection too. However, if the user wants to backup any saved things or make reviews, for instance, authentication will be required.&lt;/p&gt;

&lt;p&gt;Here is a gif showing a bit of the app (it is alpha state and totally incomplete):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/posts/scifibot-devlog1-compressed.gif&quot; alt=&quot;Scifibot - usage demonstration&quot; /&gt;&lt;/p&gt;

&lt;p&gt;If you like scifi, stay tuned for my progress. This app will be available on Google Play in the near future, specially because I am tired of keeping track of movies/series to watch in an archaic way.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Writing software to write software</title>
   <link href="https://www.fernandobevilacqua.com/blog/2016/11/writing-software-to-write-software/"/>
   <updated>2016-11-11T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2016/11/writing-software-to-write-software</id>
   <content type="html">&lt;p&gt;Since I started my PhD in September, 2015, I have been writing a &lt;a href=&quot;https://github.com/Dovyski&quot;&gt;lot of code&lt;/a&gt;. My research project contains its fair amount of theory, but it is significantly practical and applied science, so I need to write software to test things out.&lt;/p&gt;

&lt;p&gt;A percentage of my coding was indeed targeted at creating original software that could do something related to my research. Another significant part, however, was about automation:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://imgs.xkcd.com/comics/automation.png&quot; alt=&quot;Obligatory xkcd strip about automation&quot; /&gt;
&lt;em&gt;&lt;a href=&quot;https://xkcd.com/1319/&quot;&gt;Source: xkcd: Automation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In my case, doing applied science means I need to iterate, test and evaluate a lot of things on a daily basis. I could do the analysis by hand, or by copying-and-pasting numbers back and forth in Excel. In the short term that works perfectly well, but things start to grow and become more and more error prone in the long run.&lt;/p&gt;

&lt;p&gt;In February 2016 I conducted an experiment involving games, facial expressions and heart rate measurements. Each participant spent, on average, 25 minutes in a gaming session, which involved playing 3 different games (&lt;a href=&quot;https://github.com/Dovyski/face-tracking-games&quot;&gt;two&lt;/a&gt; coded from scratch by myself), resting and answering questionnaires. I could be there in the room, with a notebook frantically taking notes of things. Then I would need to transcribe all that information into a spreadsheet to perform further analysis. Again the chances of misplacing numbers here and there is very real (and dangerous), so I wrote a &lt;a href=&quot;https://github.com/Dovyski/face-tracking-games/tree/master/experiment&quot;&gt;software&lt;/a&gt; to run the whole experiment for me.&lt;/p&gt;

&lt;p&gt;During the development time, I even spent a few additional precious hours to create a very simple web interface, accessible from my mobile, to monitor the experiment. That was awesome! Even though I was not in the experiment room, I could just light up my phone and see what was happening. Was the participant playing game #2? Or maybe resting? I could enter the room at the precise moment the experiment was over.&lt;/p&gt;

&lt;p&gt;Later on I needed to analyze all the data I collected. Solution? I wrote another piece of software to visualize the data (since everything was custom recorded):&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/dashboard-face-tracking-games.png&quot; alt=&quot;Dashboard to visualize data&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A few months after the experiment, I started a paper about it. I needed several different chunks of data and reports, so I distilled several command line utilities (e.g. &lt;a href=&quot;https://github.com/Dovyski/face-tracking-games/blob/master/backend/analyze.php&quot;&gt;analyze&lt;/a&gt; and &lt;a href=&quot;https://github.com/Dovyski/face-tracking-games/blob/master/backend/hr2db.php&quot;&gt;hr2db&lt;/a&gt;) that helped me obtain what I wanted. As a side note and honest advice, &lt;em&gt;don’t write crappy and/or undocumented software just because you are the sole user&lt;/em&gt; (at the moment). Doing a PhD often involves switching contexts pretty frequently, so at times I only re-used (or coded again) a utility 2 months after its creation. Despite being the author of the tool, it is fair to say I remembered nothing about it after 2 months doing other things. The tool might as well be considered to be written by someone else.&lt;/p&gt;

&lt;p&gt;That’s the reason why I tried my best to make the tools at least UX-acceptable with a minimum amount of documentation:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot; data-lang=&quot;shell&quot;&gt;Usage:
 php analyze.php &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&amp;lt;subjectId&amp;gt;|&amp;lt;firstId&amp;gt;:&amp;lt;lastId&amp;gt;] &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;options]

Options:
 &lt;span class=&quot;nt&quot;&gt;--report&lt;/span&gt;         Prints the processing as a report.

 &lt;span class=&quot;nt&quot;&gt;--csv&lt;/span&gt; &amp;lt;file&amp;gt;     Saves the processing as a CSV file defined
                  by &amp;lt;file&amp;gt;.

 &lt;span class=&quot;nt&quot;&gt;--export&lt;/span&gt; &amp;lt;file&amp;gt;  Exports all HR entries as a file defined
                  by &amp;lt;file&amp;gt;.&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;A few months ago, I had to analyze a database of 530 videos, all containing BDF files unsupported by my software. I needed only the HR from those BDF files. I found several different programs that could convert the files to me, but they required manual interaction with a GUI. Solution? I wrote &lt;a href=&quot;https://github.com/Dovyski/BDFextractor/&quot;&gt;BDFextractor&lt;/a&gt; to extract the HR from BDF files using the command line. Now I could run (another) little software on the database and export the HR from all those 530 files. Victory!&lt;/p&gt;

&lt;p&gt;I have been writing lots of &lt;a href=&quot;https://www.r-project.org/&quot;&gt;R code&lt;/a&gt; lately, to perform statistical analysis and plot some charts. I can confidently say I wrote more multi-use support software in the past year than I thought I would.&lt;/p&gt;

&lt;p&gt;Writing that much software might be seen as a waste of time, after all there are plenty of solutions out there for virtually everything. Every move demands time, though, be it learning (or developing) a new tool. Time is an incredibly precious resource, so I always choose the option that better accounts for that. Every time I have to write a small tool, I remember the advice from an old saying about chopping off of a huge tree: &lt;em&gt;if you have to do it, you better have the right tools and be sure they are as sharp as they could be&lt;/em&gt;. That’s a fact.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>cvui 1.1.0 is out!</title>
   <link href="https://www.fernandobevilacqua.com/blog/2016/08/cvui-1-1-0-is-out/"/>
   <updated>2016-08-19T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2016/08/cvui-1-1-0-is-out</id>
   <content type="html">&lt;p&gt;I am pleased to inform that version &lt;a href=&quot;https://github.com/Dovyski/cvui/releases/tag/v1.1.0&quot;&gt;1.1.0&lt;/a&gt; of &lt;a href=&quot;https://github.com/Dovyski/cvui&quot;&gt;cvui&lt;/a&gt; is out! cvui is a simple UI lib built on top of OpenCV drawing primitives. Here is an image to show the new features:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/cvui-row-column.png&quot; alt=&quot;cvui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This release is backward compatible, so users of the lib should be able to upgrade by just dropping the new files into their projects. There ara few bug fixes as well as some pretty cool new features.&lt;/p&gt;

&lt;p&gt;One of the most annoying tasks when building UI is to calculate where each component should be placed on the screen. Version 1.1.0 brings a set of methods that abstract the process of positioning
components, so you don’t have to think about assigning a X and Y coordinate. Instead you just add components and cvui will place them as you go.&lt;/p&gt;

&lt;p&gt;An example is the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;beginRow()&lt;/code&gt; function to start a group of elements. After &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;beginRow()&lt;/code&gt; has been called, all subsequent component calls don’t have to specify
the frame where the component should be rendered nor its position. The position of the component will be automatically calculated by cvui based on the components within the group.&lt;/p&gt;

&lt;p&gt;All components are placed side by side, from left to right. E.g.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;span class=&quot;n&quot;&gt;beginRow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;endRow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Rows and columns can be nested, so you can create columns/rows within columns/rows as much as you want:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;span class=&quot;n&quot;&gt;beginRow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;btn&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;beginColumn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;column1&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;column2&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;endColumn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;endRow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;I am pretty happy with the new API and the possibilities it brings, specially because it means less code to achieve more things. That’s always a thing to celebrate =)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>cvui - A very simple UI lib for OpenCV</title>
   <link href="https://www.fernandobevilacqua.com/blog/2016/06/cvui-a-very-simple-ui-lib-for-opencv/"/>
   <updated>2016-06-17T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2016/06/cvui-a-very-simple-ui-lib-for-opencv</id>
   <content type="html">&lt;p&gt;I have been working a lot with &lt;a href=&quot;http://opencv.org/&quot;&gt;OpenCV&lt;/a&gt; and C++ lately. After spending a great amount of time waiting for things to compile (so I could see my changes), I decided to improve my workflow. I decided to make changes in runtime, so I could tweak things without the need to recompile the whole project.&lt;/p&gt;

&lt;p&gt;I immediately faced a problem: how to quickly and easily create GUI with OpenCV. The OpenCV lib has complete support for &lt;a href=&quot;https://wiki.qt.io/OpenCV_with_Qt&quot;&gt;Qt&lt;/a&gt; (which is great for UI creation), but you need to compile OpenCV with such Qt support. If you don’t like that (or you have OpenCV compiled without Qt), you can enable OpenGL and use any of the awesome GUI out there, e.g. &lt;a href=&quot;https://github.com/ocornut/imgui&quot;&gt;imgui&lt;/a&gt;. If you decide for that, you add the OpenGL dependency to your (probably already complex) project.&lt;/p&gt;

&lt;p&gt;I didn’t have Qt available and I didn’t want to use OpenGL, so I distilled &lt;a href=&quot;https://github.com/Dovyski/cvui&quot;&gt;cvui&lt;/a&gt;. cvui is a (very) simple UI lib built on top of OpenCV drawing primitives. All the rendering is made using OpenCV, by calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cv::rectangle()&lt;/code&gt;, for instance. Here is a picture of it working:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/public/img/cvui.png&quot; alt=&quot;cvui&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The API is heavily inspired by &lt;a href=&quot;https://github.com/ocornut/imgui&quot;&gt;imgui&lt;/a&gt;. The calls are all C-like, so no classes, objects nor OOP. I have nothing against that, I just wanted an extremely simple way of creating UI for my application (one line written, one thing on the screen).&lt;/p&gt;

&lt;p&gt;At the moment, the API includes a small set of components: button, checkbox, window and counter. I will probably add more components in the near future. For more information, visit the &lt;a href=&quot;https://github.com/Dovyski/cvui&quot;&gt;cvui repository on Github&lt;/a&gt;. The code is MIT licensed.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Goodbye Wordpress, hello Github Pages!</title>
   <link href="https://www.fernandobevilacqua.com/blog/2016/03/goodbye-wordpress-hello-github-pages/"/>
   <updated>2016-03-28T00:00:00+00:00</updated>
   <id>https://www.fernandobevilacqua.com/blog/2016/03/goodbye-wordpress-hello-github-pages</id>
   <content type="html">&lt;p&gt;It took a lot more than I wanted it to take, but I finally concluded the move from &lt;a href=&quot;http://wordpress.org/&quot;&gt;Wordpress&lt;/a&gt; to &lt;a href=&quot;https://pages.github.com/&quot;&gt;Github Pages&lt;/a&gt;! Finally my personal website (this one you are reading) runs in a static fashion, without PHP, databases and all that useful-but-not-for-my-personal-website stuff.&lt;/p&gt;

&lt;p&gt;I enjoyed Wordpress from the very beginning, it has a nice set of features and helps you write and manage content. During the last year or so, however, it was standing in my way. The template I was using was already showing signs of aging, some things were breaking and, last but not least, I had to pay constant attention to security patches/updates. Not anymore! Now I can use my daily code editor to write content using Markdown and publish it to the magic clouds of Github with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git push&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;I hope the move will encourage me to blog more often, which is something I have being trying to do lately. Time will tell if that worked or not :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My 2013 in review</title>
   <link href="https://www.fernandobevilacqua.com/2013/12/my-2013-in-review/"/>
   <updated>2013-12-30T09:56:18+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2013/12/my-2013-in-review</id>
   <content type="html">&lt;p&gt;Another years has gone by. I wrote &lt;a href=&quot;http://www.dovyski.com/2013/01/my-new-years-resolutions-for-2013/&quot; title=&quot;My new year’s resolutions for 2013&quot;&gt;my new year’s resolutions for 2013&lt;/a&gt; almost a year ago, but it still feels like yesterday. The last days of 2013 seem the perfect time to review the year and check if I collected accomplishments or lame excuses.&lt;/p&gt;

&lt;p&gt;Without further ado, down to the goals:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Improve my skills as an &lt;strong&gt;indie game developer&lt;/strong&gt;. I already joined &lt;a href=&quot;http://onegameamonth.com/&quot; target=&quot;_blank&quot;&gt;OneGameAMonth&lt;/a&gt; and will try to release 12 games in 2013. A pharaonic task, but the fun is proportional. It is not about working until faint, but learning how to avoid code bloat and feature creep (two of my most significant problems as a developer).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Depending on the point of view, this was completely or partially accomplished. I did not release 12 games in 2013, I did 6 instead. &lt;a href=&quot;http://onegameamonth.com&quot; target=&quot;_blank&quot;&gt;1GAM&lt;/a&gt; was amazing and I’ve learned a lot from it. The “12 games” thing was just a guide, not a goal per se.&lt;/p&gt;

&lt;p&gt;As I explained &lt;a href=&quot;http://www.as3gamegears.com/blog/my-gamedev-year-in-review/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;, my gamedev year was awesome. I can say I improved as an indie game developer, a LOT.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Exercise!&lt;/strong&gt; I stopped running with my friends (in 2011, I ran a 10km marathon, that felt great!). I want to start jogging at least. I also want to get back on track on my push-ups training. I will buy a dumbbell too.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Partially accomplished. I got on track on my push-ups and the jogging, but I didn’t follow a strict and regular routine.&lt;/p&gt;

&lt;p&gt;I trained for a marathon, signed up for it and was ready to run. However I’m too dump to pay attention to the payment due date, so my registration was invalidated  &lt;img src=&quot;http://www.dovyski.com/wp-includes/images/smilies/frownie.png&quot; alt=&quot;:(&quot; class=&quot;wp-smiley&quot; style=&quot;height: 1em; max-height: 1em;&quot; /&gt;Damn! It was a fun and short 5km marathon that I will have to postpone to 2014.&lt;/p&gt;

&lt;p&gt;I didn’t buy the dumbbell.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Regularly write &lt;strong&gt;tutorials&lt;/strong&gt; about game development at &lt;a href=&quot;http://as3gamegears.com/&quot; target=&quot;_blank&quot;&gt;As3GameGears&lt;/a&gt;. Since I started the blog, I just post about tools. It’s time to improve the content and write about game related stuff.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Again, depending on the point of view, I completely or partially accomplished this one. I did wrote several gamedev tutorials, but for the &lt;a href=&quot;http://gamedevelopment.tutsplus.com/&quot; target=&quot;_blank&quot;&gt;Game Development&lt;/a&gt; section of the &lt;a href=&quot;http://hub.tutsplus.com/&quot; target=&quot;_blank&quot;&gt;Tuts+ network&lt;/a&gt;, not As3GameGears.&lt;/p&gt;

&lt;p&gt;On the other hand, I kick started a new series named &lt;a title=&quot;New series: Game Dissection&quot; href=&quot;http://www.as3gamegears.com/blog/new-series-game-dissection/&quot; target=&quot;_blank&quot;&gt;game dissection&lt;/a&gt;. It’s not a tutorial, but it’s a start.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Write a &lt;strong&gt;book&lt;/strong&gt; about game development.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not accomplished. Judging by my work in March and April, I thought I would accomplish this one. I wrote two chapters, then I totally dropped the work.&lt;/p&gt;

&lt;p&gt;My university classes consumed a significant amount of time, so I was not able to write chapters. I was planning to write and use the texts in my gamedev classes, but that didn’t happen either. Too bad.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Contribute to an &lt;strong&gt;open source project&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Accomplished! I worked on &lt;a href=&quot;http://flixelcommunity.org&quot; target=&quot;_blank&quot;&gt;Flixel Community&lt;/a&gt;, fixing bugs and planning new features. By the end of November we released &lt;a href=&quot;http://www.as3gamegears.com/blog/flixel-community-2-56-is-out/&quot; target=&quot;_blank&quot;&gt;version 2.56&lt;/a&gt;, the very first Flixel release under the community label.&lt;/p&gt;

&lt;p&gt;We attracted more developers to the project, that was amazing! I will continue my efforts to make Flixel Community a great game engine.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Found a &lt;strong&gt;Jr tech company&lt;/strong&gt; at &lt;a href=&quot;http://www.uffs.edu.br/&quot; target=&quot;_blank&quot;&gt;UFFS&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not quite there yet. I mentored students regarding the tech company, which was founded and named &lt;a href=&quot;http://fronteiratec.com&quot; target=&quot;_blank&quot;&gt;FronteiraTec&lt;/a&gt;. In the founding process, however, we skipped all legal and governamental steps, so the company exists, but in a “virtual”.&lt;/p&gt;

&lt;p&gt;In that situation, the company is not able to sign any contract or sell anything, but it didn’t prevent the students from planning and working. They worked on several projects, covering subjects as games, mobile apps and hardware. They even made an &lt;a href=&quot;http://fronteiratec.com/blog/projeto-fliperama-na-efapi-2013/&quot; target=&quot;_blank&quot;&gt;arcade machine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The only missing piece of this puzzle is the legal papers and the official registration in the government records.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Research&lt;/strong&gt;. It’s been two years since I stopped working on my master’s dissertation. I want to start working on it again, researching and publishing papers.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not accomplished. I didn’t have the time (nor the will) to keep this up. I co-authored a paper about procedural generation of canyons, though. The paper is in the works, but it will be published in 2014.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Find inner &lt;strong&gt;patience&lt;/strong&gt;. Sometimes I get really upset by small things and it is not helping. I will try to keep myself calm and constant during 2013. It will make me a better husband, professor and person.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I don’t know how to classify this one. I made some great improvements, but I didn’t reach the point where I wanted to be.&lt;/p&gt;

&lt;p&gt;Finding inner patience is harder than I thought. It requires a lot of energy to take a deep breath and ignore the things that upset you. The jogging helped keep things cool, so I think I’m on track for this goal in 2014.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Release at least one &lt;strong&gt;side project&lt;/strong&gt;. I have lots of ideas, but I never manage to work on it and release something.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Not accomplished. I joined my friends on a project, we had some meetings, but we were not able to launch anything. I had some ideas too, but I was short on time to make them come true.&lt;/p&gt;

&lt;p&gt;Ok, that was the review!&lt;/p&gt;

&lt;p&gt;Looking back and checking all those accomplishments, I can say 2013 was an outstanding year! Goals keep me motivated, even if I’m not able to accomplish them all. I managed to accomplish much more than I expected, which was great!&lt;/p&gt;

&lt;p&gt;A new year is just around the corner. It’s time to write some new goals again 😀&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gamedev book – days 1 and 2</title>
   <link href="https://www.fernandobevilacqua.com/2013/03/gamedev-book-days-1-and-2/"/>
   <updated>2013-03-22T17:37:59+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2013/03/gamedev-book-days-1-and-2</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.dovyski.com/wp-content/uploads/2013/03/book_1_2.jpg&quot;&gt;&lt;img class=&quot;alignleft size-full wp-image-2883&quot; alt=&quot;book_1_2&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2013/03/book_1_2.jpg&quot; width=&quot;887&quot; height=&quot;665&quot; srcset=&quot;http://www.dovyski.com/wp-content/uploads/2013/03/book_1_2-400x300.jpg 400w, http://www.dovyski.com/wp-content/uploads/2013/03/book_1_2.jpg 887w&quot; sizes=&quot;(max-width: 887px) 100vw, 887px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s been three weeks since I started working on this book. During Friday the 15th I finished the summary. I came up with 19 chapters! That’s more than I previously thought, but since it’s a draft, I can cut some chapters along the way.&lt;/p&gt;

&lt;p&gt;Today I finally started writing something. Damn, it was &lt;strong&gt;hard&lt;/strong&gt;! It’s been almost 3 years since I wrote something big (my master thesis) , so I had to brush all that dust. The key secret for every endeavor is persistence, so it took me some time to get things working again. At the end of the day I was really proud of my result. It was a small piece of text, but it served the purpose of warming things up.&lt;/p&gt;

&lt;p&gt;Analyzing the current scene I will merge some chapters and change the main subject of others. However that’s a task for the future and for my next Friday.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gamedev book &amp;#8211; day 0</title>
   <link href="https://www.fernandobevilacqua.com/2013/03/gamedev-book-day-0/"/>
   <updated>2013-03-08T19:00:39+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2013/03/gamedev-book-day-0</id>
   <content type="html">&lt;p&gt;&lt;img class=&quot;alignleft  wp-image-2855&quot; alt=&quot;book-textbook&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2013/03/book-textbook-1024x678.jpg&quot; width=&quot;100%&quot; height=&quot;auto&quot; srcset=&quot;http://www.dovyski.com/wp-content/uploads/2013/03/book-textbook-1024x678.jpg 1024w, http://www.dovyski.com/wp-content/uploads/2013/03/book-textbook-452x300.jpg 452w&quot; sizes=&quot;(max-width: 1024px) 100vw, 1024px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I am thrilled to say that today I’ve started writing my book about game development! Every great (and huge) journey starts with a single step, which probably is the hardest one. This book is one of my &lt;a title=&quot;My new year’s resolutions for 2013&quot; href=&quot;http://www.dovyski.com/2013/01/my-new-years-resolutions-for-2013/&quot; target=&quot;_blank&quot;&gt;new year’s resolutions for 2013&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I’ve been planning to start this book since the beginning of the year, but university work (and some side projects, such as &lt;a href=&quot;http://onegameamonth.com&quot; target=&quot;_blank&quot;&gt;1GAM&lt;/a&gt;) swamped me with tasks. I knew there was no easy way to start this book, so I reserved 20% of my week to work exclusively on it. My workmate &lt;a href=&quot;http://duartedenio.wordpress.com/&quot; target=&quot;_blank&quot;&gt;Denio&lt;/a&gt; and I made a pact to progress a personal side-project during a specific day of the week. We chose Friday for that and named it “Insane Friday” (sounds much better in Portuguese).&lt;/p&gt;

&lt;p&gt;Sharing a common day to work on our projects is great because it helps us focus on the job, even though we are working on completely different things. No matter how much university work we need to overcome during Friday, we must progress with our projects, that’s the rule. I know 20% (a single day of the week) is not the perfect amount of time to finish a book, but I need to start with a healthy pace. The idea is to (hopefully) increase that amount over time, but smoothly.&lt;/p&gt;

&lt;p&gt;During my first day of work, I did the obvious: planned the content. I brainstormed all the subjects I want to cover, then I wrote them down on a draft summary. Our first Insane Friday just lasted for a couple of hours, so I was not able to make my draft become a real summary, but that’s already a start.&lt;/p&gt;

&lt;p&gt;I am looking forward to working on my book again. I will blog every week about my progress, so I can keep track of the time and measure how many centuries it will take me to finish this book :D.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My new year&amp;#8217;s resolutions for 2013</title>
   <link href="https://www.fernandobevilacqua.com/2013/01/my-new-years-resolutions-for-2013/"/>
   <updated>2013-01-03T08:20:11+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2013/01/my-new-years-resolutions-for-2013</id>
   <content type="html">&lt;p&gt;Last year was amazing! It was my second year working as a professor, something really different from the life I used to have as a game developer at &lt;a href=&quot;http://decadium.com&quot; target=&quot;_blank&quot;&gt;Decadium&lt;/a&gt;. I experimented much &lt;a href=&quot;http://www.dovyski.com/2012/04/i-told-my-2nd-year-cs-students-to-create-a-programming-language/&quot; title=&quot;I told my 2nd year CS students to create a programming language&quot;&gt;more&lt;/a&gt; and the overall was pretty good. I am happy with the results &lt;img src=&quot;http://www.dovyski.com/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; style=&quot;height: 1em; max-height: 1em;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I got so many ideas during last year that I end up surrounded by a vortex of them. Lots of those ideas came to reality, but a huge amount is still out there, waiting to be implemented. This year I will try to stick with the list below, my year’s resolutions for 2013:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Improve my skills as an &lt;strong&gt;indie game developer&lt;/strong&gt;. I already joined &lt;a href=&quot;http://onegameamonth.com&quot; target=&quot;_blank&quot;&gt;OneGameAMonth&lt;/a&gt; and will try to release 12 games in 2013. A pharaonic task, but the fun is proportional. It is not about working until faint, but learning how to avoid code bloat and feature creep (two of my most significant problems as a developer).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Exercise!&lt;/strong&gt; I stopped running with my friends (in 2011, I ran a 10km marathon, that felt great!). I want to start jogging at least. I also want to get back on track on my push-ups training. I will buy a dumbbell too.&lt;/li&gt;
  &lt;li&gt;Regularly write &lt;strong&gt;tutorials&lt;/strong&gt; about game development at &lt;a href=&quot;http://as3gamegears.com&quot; target=&quot;_blank&quot;&gt;As3GameGears&lt;/a&gt;. Since I started the blog, I just post about tools. It’s time to improve the content and write about game related stuff.&lt;/li&gt;
  &lt;li&gt; Write a &lt;strong&gt;book&lt;/strong&gt; about game development. That one is the toughest. I wrote a couple of tutorials last year, but they were small compared to a whole book. This item was in my year’s resolutions for 2012 as well, but I didn’t touch it during the year. What a shame! Let’s hope this year things will be different.&lt;/li&gt;
  &lt;li&gt;Contribute to an &lt;strong&gt;open source project&lt;/strong&gt;. This one is already happening since I joined &lt;a href=&quot;http://github.com/flixelcommunity&quot; target=&quot;_blank&quot;&gt;Flixel Community&lt;/a&gt; team. Flixel is a great game engine for Flash and I want to work hard to make it even better.&lt;/li&gt;
  &lt;li&gt;Found a &lt;strong&gt;Jr tech company&lt;/strong&gt; at &lt;a href=&quot;http://www.uffs.edu.br&quot; target=&quot;_blank&quot;&gt;UFFS&lt;/a&gt;. I’ve been working on that during the last months and it is almost done. It will improve the students perception about the world out there. My idea is to establish some sort of incubator-venture-capital-startup-booster company. I know, I know, but it works in my head 😀&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Research&lt;/strong&gt;. It’s been two years since I stopped working on my master’s dissertation. I want to start working on it again, researching and publishing papers.&lt;/li&gt;
  &lt;li&gt;Find inner &lt;strong&gt;patience&lt;/strong&gt;. Sometimes I get really upset by small things and it is not helping. I will try to keep myself calm and constant during 2013. It will make me a better husband, professor and person.&lt;/li&gt;
  &lt;li&gt;Release at least one &lt;strong&gt;side project&lt;/strong&gt;. I have lots of ideas, but I never manage to work on it and release something.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All right! That’s quite a list. If I accomplish half of it, it will be a huge step &lt;em&gt;per se&lt;/em&gt;. I’ve noticed I’m some sort of TODO list addicted. No matter if I accomplish the items, as long as I have a ton of them. Pretty creepy. I’ll work on improving that too.&lt;/p&gt;

&lt;p&gt;It’s time to keep the focus and work hard. The problem with a big list like that is the first step: where should I start?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Open-source projects of one man army</title>
   <link href="https://www.fernandobevilacqua.com/2012/11/open-source-projects-of-one-man-army/"/>
   <updated>2012-11-24T17:37:21+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2012/11/open-source-projects-of-one-man-army</id>
   <content type="html">&lt;p&gt;I am not a new “consumer” of open-source software (OSS). In fact several tools I work in a daily basis are open-source. The OSS idea of freedom to create, share and help others (most of the time for free) always fascinated me.&lt;/p&gt;

&lt;p&gt;I’ve been planning to jump into that open-source world for a while. And for “jump into” I mean start contributing code/ideas/energy instead of just watching things happen. I was certain I would not write the shiniest nor the best code in the world, but heck, I had to start! After a while, I started looking at the projects I use every day to find something to start contributing to. After some time, I must say I saw something pretty strange, but rather common in the community: projects with a &lt;strong&gt;single developer&lt;/strong&gt;. It is a project founded, coded and maintained by a single person. That’s honorable and bad at the same time.&lt;/p&gt;

&lt;p&gt;If you have a single point of failure, any fluctuation will generate a huge impact. If for some reason the author can’t work on that project (for a short period or for months), there is nothing you can do about it. You can contribute to that project doing things that do not involve the author (such as reporting bugs, answering questions at the forums), but you can’t do anything beyond.&lt;/p&gt;

&lt;p&gt;As a consequence the project may experience an inactivity time. Even if you can fix a bug, you can send a patch (or a pull request, for Github lovers) but it will land only when (and if) the author comes back. In the worst case scenario the project will slowly fade away, unable to catch up with another developer (or team). Here comes another huge misunderstanding of the idea behind OSS that I noticed in the users of some projects: the author &lt;strong&gt;must&lt;/strong&gt; continue&lt;strong&gt; &lt;/strong&gt;the work&lt;strong&gt;.&lt;/strong&gt; That’s nonsense! &lt;strong&gt;The developers owe you nothing!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you start an open-source project, it can be for a variety of reasons. Maybe the author just thought it could be a cool idea, he was trying something new or he got bored. It doesn’t matter the reason, but I am pretty sure when the projected started, the author did not sign any contract using his own blood to seal a connection that guaranties he will work on that project for the rest of his life. The same way the project started, it can end, because the author got a new job, had a baby or got tired. That happens.&lt;/p&gt;

&lt;p&gt;Complaining is not an option. We can do better than that! If the project is &lt;strong&gt;open-source&lt;/strong&gt; (and the license allows it), anyone in the world can fork it and continue the work. I know that a forked project may not be as strong as the original, but it’s &lt;em&gt;alive&lt;/em&gt; at least_. _If you can gather more developers, the fork may end up being as strong and popular as the original project.&lt;/p&gt;

&lt;p&gt;I might be new to all that OSS development, but I thought everyone already knew that.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using ChromiumOS in a daily basis</title>
   <link href="https://www.fernandobevilacqua.com/2012/06/using-chromiumos-in-a-daily-basis/"/>
   <updated>2012-06-10T23:15:44+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2012/06/using-chromiumos-in-a-daily-basis</id>
   <content type="html">&lt;p&gt;The very first time I heard about &lt;a href=&quot;http://www.chromium.org/chromium-os&quot; target=&quot;_blank&quot;&gt;ChromeOS&lt;/a&gt; I thought it was an amazing idea. I always hated the painful process of keeping a computer running smoothly, which consists of formatting, installing OS/apps, update everything, repeat it all. When Google released their &lt;a href=&quot;http://google.com/chromebook&quot; target=&quot;_blank&quot;&gt;Chromebooks&lt;/a&gt;, I joined the waiting list, but they were not available here in Brazil. Damn it!&lt;/p&gt;

&lt;p&gt;It did not stop me from trying ChromeOS. After some time, I searched the web and found &lt;a href=&quot;http://chromeos.hexxeh.net/&quot; target=&quot;_blank&quot;&gt;ChromiumOS&lt;/a&gt; builds by &lt;a href=&quot;http://hexxeh.net/&quot; target=&quot;_blank&quot;&gt;Hexxeh&lt;/a&gt;. I first created a bootable USB stick carrying the ChromiumOS and used it a couple times. It was cool, so I decided to go hardcore and installed ChromiumOS on my notebook (Lenovo ThinkPad T400). Those are my first impressions.&lt;/p&gt;

&lt;h2 id=&quot;is-it-fast&quot;&gt;Is it fast?&lt;/h2&gt;

&lt;p&gt;No and yes. Deeply inside I was expecting an extremely fast boot time (the famous 8 seconds), but I got a 23s boot. I know I don’t have an official Chromebook, so I was expecting that “slow” boot time. The resume time, however, is dead-fast. I guess it takes about 2 or 3 seconds to be ready to use after I open the notebook lid. Great!&lt;/p&gt;

&lt;p&gt;Excluding the boot and resume time, everything feels fast. The windows, the apps, the UI. The OS interface is easy to understand and is simple, no complex options.&lt;/p&gt;

&lt;h2 id=&quot;can-you-still-do-everything-you-used-to-using-another-os&quot;&gt;Can you still do everything you used to using another OS?&lt;/h2&gt;

&lt;p&gt;It depends. All tasks that are not related to game/app development I am able to do, such as create/view docs, read e-mails, blog, etc. I could even plug a data-show into the notebook and share the screen to use in my classes. I did not create anything unusual yet such as a banner or an image using any image editor in the cloud, but so far, so good with the rest.&lt;/p&gt;

&lt;p&gt;About my development tasks, I cannot perform any of them using ChromiumOS. Google already knew that was a problem for several developers out there, so they created &lt;a href=&quot;http://www.google.com.br/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CGQQFjAA&amp;amp;url=http%3A%2F%2Fchrome.google.com%2Fwebstore%2Fdetail%2Fgbchcmhmhahfdphkhkmpfmihenigjmpp&amp;amp;ei=kk3VT8O5JI6J6gHE1vD7Ag&amp;amp;usg=AFQjCNG8JLkmUNmz-g3VWvmekvM_FXe5jg&amp;amp;sig2=5xDmrsYR-E7Pj8uugnUB5Q&quot; target=&quot;_blank&quot;&gt;Chrome Remote Desktop&lt;/a&gt;, an extension that allows me to remotely access my other computers. I must say that it is fast, really fast! I’ve been using &lt;a href=&quot;http://logmein.com&quot; target=&quot;_blank&quot;&gt;LogMeIn&lt;/a&gt; or Windows Remote Desktop for that, the latter being the fastest. Chrome Remote Desktop is so fast that I feel like using the remote computer locally. It will fill the gap I need to use ChromiumOS to develop, however I still need another computer.&lt;/p&gt;

&lt;h2 id=&quot;is-it-buggy&quot;&gt;Is it buggy?&lt;/h2&gt;

&lt;p&gt;Sure! I assume ChromeOS is able to use the Chromebook hardware perfectly, but it is not able to do the same with my Lenovo. I was already expecting that. My trackpad works relatively well and all notebook shortcut buttons (such as the volume ones) work as well. However I am not able to use the trackpad to perform all OS gestures such as tap with two finders then drag them away from each other.&lt;/p&gt;

&lt;p&gt;Something I was not expecting was the network problems. Frequently ChromiumOS is unable to load any website, reporting there was a DNS problem. My network is just fine, because all other computers are using the Internet normally (using Chrome, by the way). To fix that I must constantly disable and enable the network, so everything starts to work again. Sometimes after the network reset ChromiumOS keeps telling me my device is offline, even when it is not.&lt;/p&gt;

&lt;h2 id=&quot;final-thoughts&quot;&gt;Final thoughts&lt;/h2&gt;

&lt;p&gt;I am happy with the experience so far. It is a new concept and I think it is the future. I’ve been trying to integrate ChromiumOS into my life one step at a time, starting with home activities. I plan to use it on my work too, but I need to set everything up first.&lt;/p&gt;

&lt;p&gt;Stay tuned for more reports!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I told my 2nd year CS students to create a programming language [RESULTS]</title>
   <link href="https://www.fernandobevilacqua.com/2012/05/i-told-my-2nd-year-cs-students-to-create-a-programming-language-results/"/>
   <updated>2012-05-14T18:21:05+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2012/05/i-told-my-2nd-year-cs-students-to-create-a-programming-language-results</id>
   <content type="html">&lt;p&gt;A few weeks ago &lt;a title=&quot;I told my 2nd year CS students to create a programming language&quot; href=&quot;http://www.dovyski.com/2012/04/i-told-my-2nd-year-cs-students-to-create-a-programming-language/&quot; target=&quot;_blank&quot;&gt;I told my 2nd year CS students to create a programming language&lt;/a&gt; and here are the results of such assignment. I am sorry for the long post, but I used any good information I collected.&lt;/p&gt;

&lt;p&gt;I have &lt;strong&gt;24&lt;/strong&gt; students attending my classes. The assignment was supposed to be performed by pairs within 3 weeks, but I had two students that decided to go alone, so there were only &lt;strong&gt;11 pairs&lt;/strong&gt; of students. I was expecting a high number of accomplishments, but it was better than I thought. In the end, just &lt;strong&gt;one&lt;/strong&gt; pair of students didn’t show up for the presentation day, all other students were there with a working interpreter.&lt;/p&gt;

&lt;h3 id=&quot;a-little-lie&quot;&gt;A little lie&lt;/h3&gt;

&lt;p&gt;According to the assignment description, the interpreter should be able to handle if’s and loops in order to get a good grade. I would test that asking them to implement two programs: #1 calculate the average of two numbers and #2 check prime numbers. If the interpreter was able to run program #1, they would be graded with at least 4.0 (up to 10.0). If the interpreter was able to run program #2, they would be graded from 8.0 to 10.0.&lt;/p&gt;

&lt;p&gt;I told them this little lie to keep everybody focused and avoid extremely simple interpreters (e.g. able to handle variable assignments and expressions only). I evaluated the interpreters using the students hard work and the evolution they had on subjects they learned during the classes.&lt;/p&gt;

&lt;h3 id=&quot;the-languages&quot;&gt;The languages&lt;/h3&gt;

&lt;p&gt;The very first thing I noticed was that they focused all their manpower on trying to create something able to interpret program #2. As a consequence, 12 of 14 interpreters were able to handle if’s and loops, but not nested ifs/loops. You could use several ifs and loops as long as they were not nested. However all those 12 interpreters were able to handle loops containing several ifs, as long as they were not nested among each other. One pair of students did not implement if’s/loops.&lt;/p&gt;

&lt;p&gt;I assume this “non-nested thing” happened because they were thinking about checking prime numbers using a loop containing some if’s. Some samples I found (translated to C for the sake or understanding):&lt;/p&gt;

&lt;pre&gt;if(exp) {
  // only variable assignments allowed here.
}
while(exp) {
  if(exp) {
     // only variable assignments allowed here.
  }
  if(exp) {
     // only variable assignments allowed here.
  }
  // the following is not allowed here:
  while() {
  }
}&lt;/pre&gt;

&lt;p&gt;Several students told me at the end of the presentation that they had ideas to allow nested if’s/loops, but they had no time left to implement it. They also said there were too focused on small things (e.g. variables) and forgot to check the big picture. One pair of students used an “assembly” like approach and implemented the goto, so they their code allowed nested if’s/loops.&lt;/p&gt;

&lt;p&gt;About 5 interpreters used an “op-code” like grammar, so the programmer must start every statement with an “instruction op-code”, e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;assign a = 2 + b&lt;/code&gt;. I think they did that because they thought it would be easier to analyze every line, but in the end they noticed it was not that useful.&lt;/p&gt;

&lt;p&gt;Just 3 interpreters were able to create variables on the fly, such as PHP does, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$var = 2&lt;/code&gt; declares &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$var&lt;/code&gt; if it is not already declared, or it assigns 2 if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$var&lt;/code&gt; already exists. All other interpreters force the programmer to previously declare variables. I think it happened because they wrote just C code until now (they will meet PHP next semester).&lt;/p&gt;

&lt;p&gt;Several interpreters were very sensitive about the spaces among tokens. As a consequence the programmer must use the exact number of spaces among tokens, otherwise it would not work. Just a few interpreters could read the code one char at a time, which allowed them to ignore extra spaces. All other interpreters used some sort of split method based on spaces/tabs/separators.&lt;/p&gt;

&lt;p&gt;Five interprets had input commands, pretty much like &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;input var;&lt;/code&gt;. The assignment description had no requirements about that, so it was cool to see them implementing something beyond what I asked for.&lt;/p&gt;

&lt;p&gt;I also saw one interpreters able to handle complex math expressions (more than two elements/operators), but analyzing it from left to right with no operator precedence; I also saw typed vars (including int, float and string!), predefined variable names (you could use “a” to “z”, and nothing else :)), output with value substitution (e.g &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;var = @var&lt;/code&gt; produces &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;var = 2&lt;/code&gt;).&lt;/p&gt;

&lt;h3 id=&quot;students-feedback&quot;&gt;Students feedback&lt;/h3&gt;

&lt;p&gt;The week after the students concluded the assignment, I issued a poll to check their opinion about all they had to go through. Those were the results:&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;strong&gt;How difficult was it to implement this assignment?&lt;/strong&gt;
&lt;/p&gt;

&lt;table id=&quot;table#0&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Pretty easy&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      0%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Easy&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      5%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Regular&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      11%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Hard&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      42%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Pretty hard&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      42%
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

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

&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;strong&gt;From 0 to 5, being 0 just a little and 5 very much, how much do you think this assignment helped you to understand the concepts we studied?&lt;/strong&gt;
&lt;/p&gt;

&lt;table id=&quot;table#2&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;
      0 &amp;#8211;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;div&gt;
        &lt;strong&gt;Just a little&lt;/strong&gt;
      &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      0%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      1
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      11%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      5%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      3
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      21%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      4
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      16%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      5 &amp;#8211;
    &lt;/td&gt;
    
    &lt;td&gt;
      &lt;div&gt;
        &lt;strong&gt;Very much&lt;/strong&gt;
      &lt;/div&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      47%
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

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

&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;strong&gt; How much fun did you have doing this assignment?&lt;/strong&gt;
&lt;/p&gt;

&lt;table id=&quot;table#4&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;It was death boring, don&amp;#8217;t ever do that again!&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      16%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;It was fun!&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      68%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;It was damn cool!&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      16%
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

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

&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;strong&gt;Would you recommend me to repeat this assignment in the future with other students?&lt;/strong&gt;
&lt;/p&gt;

&lt;table id=&quot;table#6&quot;&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Yes&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      89%
    &lt;/td&gt;
  &lt;/tr&gt;
  
  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;No&lt;/strong&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
    &lt;/td&gt;
    
    &lt;td&gt;
      11%
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

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

&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;

&lt;p&gt;It was outstanding! My very first goal with the interpreter was to make them understand about objects, classes, methods and their relation. I could have asked them to implement a simple calculator to enforce those concepts, but as I told before, it was too boring.&lt;/p&gt;

&lt;p&gt;I broke the line and pushed them really hard and they were able to handle it. I think nobody got depressed or something like that. I am very proud of them and looking forward to publish the next big assignment: a Guitar Hero like game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; discuss it on &lt;a href=&quot;http://news.ycombinator.com/item?id=3973367&quot; target=&quot;_blank&quot;&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I told my 2nd year CS students to create a programming language</title>
   <link href="https://www.fernandobevilacqua.com/2012/04/i-told-my-2nd-year-cs-students-to-create-a-programming-language/"/>
   <updated>2012-04-13T19:19:43+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2012/04/i-told-my-2nd-year-cs-students-to-create-a-programming-language</id>
   <content type="html">&lt;p&gt;I teach object-oriented programming using Java to 3rd semester Computer Science students at &lt;a href=&quot;http://www.uffs.edu.br&quot; target=&quot;_blank&quot;&gt;Federal University of Fronteira Sul&lt;/a&gt;. During their first years, the students attend to algorithms and data structures classes, all using C. I teach algorithms too.&lt;/p&gt;

&lt;p&gt;I like to teach using assignments. During the last two semesters, my OOP/Java classes were followed by small assignments, every two weeks. Those assignments were strictly related to some topic being discussed during the classes. I was afraid to push my students too hard, so the tasks were easy (in my opinion) to understand and complete. I already told them to implement a tic-tac-toe game, a simple Android app (at the end of semester), a simplified bank management app, among others. However they are all boring tasks.&lt;/p&gt;

&lt;p&gt;This semester I decided to take another approach. I wanted to push my students to the limits. After two months of classes, they were already familiar (or I thought so =) with objects, classes, strings and arrays. So I fired the first assignment: implement an interpreter for a programming language each pair of students must design. The language must have the following “feature” set:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Declaration of variables&lt;/li&gt;
  &lt;li&gt;Assign values to variables&lt;/li&gt;
  &lt;li&gt;Math expressions with at least two members (e.g. 2 + 2)&lt;/li&gt;
  &lt;li&gt;ifs&lt;/li&gt;
  &lt;li&gt;loops&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Boom! When I told them about the assignment, they were a little bit shocked. They will get in touch with subjects as compilers only at the beginning of the 4th year, so I told them some basic tips about interpreting a language, such as analyzing tokens and using a dictionary to store and manage variables.&lt;/p&gt;

&lt;p&gt;After they digested the information, they started designing their languages. They looked like they were having fun doing that. During the last two weeks, they have been working on that assignment. Lots of questions, lots of ideas and approaches. So far, so good.&lt;/p&gt;

&lt;p&gt;I don’t really expect them to create a production ready language interpreter. My goal with that task was to enhance their understanding about objects, classes, methods, instantiation, etc. They will empirically learn about a programming language structure. It’s been great so far.&lt;/p&gt;

&lt;p&gt;Next week they will present their interpreters. In order to make things even cooler, each pair of students must implement two programs using somebody else’s language. I know this may not be the best approach for teaching OOP/Java, but it’s way better than boring simple tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: check the &lt;a href=&quot;http://news.ycombinator.com/item?id=3839099&quot; target=&quot;_blank&quot;&gt;Hacker News&lt;/a&gt; thread.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nokaloompas</title>
   <link href="https://www.fernandobevilacqua.com/2011/09/nokaloompas/"/>
   <updated>2011-09-30T20:43:24+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2011/09/nokaloompas</id>
   <content type="html">&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;www.kongregate.com/games/iopdecadium/nukaloompas&quot;&gt;&lt;img class=&quot; wp-image-2698 aligncenter&quot; title=&quot;Nukaloompas&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2011/09/main.png&quot; alt=&quot;&quot; width=&quot;640&quot; height=&quot;302&quot; srcset=&quot;http://www.dovyski.com/wp-content/uploads/2011/09/main-300x141.png 300w, http://www.dovyski.com/wp-content/uploads/2011/09/main.png 800w&quot; sizes=&quot;(max-width: 640px) 100vw, 640px&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  My friends at &lt;a href=&quot;http://decadium.com&quot;&gt;Decadium&lt;/a&gt; just released a new game called &lt;a href=&quot;http://www.kongregate.com/games/iopdecadium/nukaloompas&quot; target=&quot;_blank&quot;&gt;Nokaloompas&lt;/a&gt;. It&amp;#8217;s a funny puzzle game that has the inverse gameplay of &lt;a href=&quot;http://itunes.apple.com/us/app/cut-the-rope/id380293530?mt=8&quot; target=&quot;_blank&quot;&gt;Cut the Rope&lt;/a&gt;, meaning you have to add ropes in order to achieve the level goal (carry bombs around)
&lt;/p&gt;

&lt;p&gt;Play for free at &lt;a href=&quot;http://www.kongregate.com/games/iopdecadium/nukaloompas&quot; target=&quot;_blank&quot;&gt;Kongregate&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>AS3 GameGears</title>
   <link href="https://www.fernandobevilacqua.com/2010/05/as3-gamegears/"/>
   <updated>2010-05-06T23:42:04+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/05/as3-gamegears</id>
   <content type="html">&lt;p&gt;Flash game developers – meet my new project: &lt;a href=&quot;http://www.as3gamegears.com/&quot; target=&quot;_blank&quot;&gt;AS3 Game Gears&lt;/a&gt; ! It is the right place to find useful tools to boost your game development. There is no need to reinvent the wheel, all you need is a place to find what you have been looking for. Enjoy!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>FIVe3D &amp;#8211; Flash Interactive Vector-based 3D</title>
   <link href="https://www.fernandobevilacqua.com/2010/05/five3d-flash-interactive-vector-based-3d/"/>
   <updated>2010-05-05T07:04:02+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/05/five3d-flash-interactive-vector-based-3d</id>
   <content type="html">&lt;p&gt;If you are looking for something different to make you game or Flash app looks better than the rest then you must take a look at &lt;a href=&quot;http://code.google.com/p/five3d/&quot; target=&quot;_blank&quot;&gt;FIVe3D.&lt;/a&gt; It is an open source code for the conception of interactive vector-based 3D animations.&lt;/p&gt;

&lt;p&gt;It is licensed under the &lt;a rel=&quot;nofollow&quot; href=&quot;http://www.opensource.org/licenses/mit-license.php&quot;&gt;MIT License.&lt;/a&gt; One of my favorites demos is the &lt;a href=&quot;http://five3d.mathieu-badimon.com/gallery/fluo/&quot; target=&quot;_blank&quot;&gt;Fluo Board&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>AS3-Utils</title>
   <link href="https://www.fernandobevilacqua.com/2010/04/as3-utils/"/>
   <updated>2010-04-23T01:08:41+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/04/as3-utils</id>
   <content type="html">&lt;p&gt;Sometimes I find myself solving the same problems again and again on several different projects. Definitely there is no need to reinvent the wheel, you just have to use the right tools.&lt;/p&gt;

&lt;p&gt;Theses days I found a perfect help on that subject. &lt;a title=&quot;As3 Utils&quot; href=&quot;http://github.com/as3/as3-utils/&quot; target=&quot;_blank&quot;&gt;AS3 utils&lt;/a&gt; is a set of useful function that solve common problems such as randomizing or summing the values of an a array. All functions were collected from several open souce projects from the Internet, so there is no unified license.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>BulkLoader &amp;#8211; managing multiple loadings in AS3</title>
   <link href="https://www.fernandobevilacqua.com/2010/03/bulkloader-managing-multiple-loadings-in-as3/"/>
   <updated>2010-03-09T07:02:28+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/03/bulkloader-managing-multiple-loadings-in-as3</id>
   <content type="html">&lt;p&gt;One of the most common tasks in game development is the assets loading process. You have two options: 1) ship your game as a single 45Mb SWF file filled with sweet and compressed-to-the-bones images/sounds or 2) load all those assets separately and on demand.&lt;a href=&quot;http://www.dovyski.com/wp-content/uploads/2010/02/nggshow.php_.png&quot;&gt;&lt;img class=&quot;aligncenter size-thumbnail wp-image-2410&quot; title=&quot;nggshow.php&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/02/nggshow.php_-150x150.png&quot; alt=&quot;&quot; width=&quot;150&quot; height=&quot;150&quot; srcset=&quot;http://www.dovyski.com/wp-content/uploads/2010/02/nggshow.php_-150x150.png 150w, http://www.dovyski.com/wp-content/uploads/2010/02/nggshow.php_.png 280w&quot; sizes=&quot;(max-width: 150px) 100vw, 150px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes the first option is your best shot, but for casual online games the second one is more suitable. Multiple loadings in AS3 can be a pain, because there are several file types to load (wave, JPG, mp3, GIF, swf, etc) and there is no single way to load them all.&lt;/p&gt;

&lt;p&gt;So far my best approach to solve this problem is called &lt;a href=&quot;http://code.google.com/p/bulk-loader/&quot;&gt;BulkLoader&lt;/a&gt;, a library for managing multiple loadings with AS3. It is licensed under the &lt;a rel=&quot;nofollow&quot; href=&quot;http://www.opensource.org/licenses/mit-license.php&quot;&gt;MIT License&lt;/a&gt; and has amazing features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Connection pooling.&lt;/li&gt;
  &lt;li&gt;Unified interface for different loading types.&lt;/li&gt;
  &lt;li&gt;Unified progress notification.&lt;/li&gt;
  &lt;li&gt;Events for individual items and as groups.&lt;/li&gt;
  &lt;li&gt;Priority&lt;/li&gt;
  &lt;li&gt;Stop and resuming individually as well as in bulk.&lt;/li&gt;
  &lt;li&gt;Cache management.&lt;/li&gt;
  &lt;li&gt;Statistics about loading (latency, speed, average speed).&lt;/li&gt;
  &lt;li&gt;Various kinds on progress indication: ratio (items loaded / items to load), bytes , and weighted percentage.&lt;/li&gt;
  &lt;li&gt;Configurable number of retries.&lt;/li&gt;
  &lt;li&gt;Configurable logging.&lt;/li&gt;
  &lt;li&gt;Various assest types (XML, NetStreams, Swfs, Images, Sound, Text Files)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Design goals:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Minimal imports.&lt;/li&gt;
  &lt;li&gt;Few method to learn.&lt;/li&gt;
  &lt;li&gt;Consistent interface, regardless of content type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BulkLoader gracefully handles progress notification in these use cases:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Few connections to open: bytes total can be used instantly.&lt;/li&gt;
  &lt;li&gt;Many connections opened: progress by ratio&lt;/li&gt;
  &lt;li&gt;Many connections opened for data of widely varying sizes: progress by weight.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the things I like the most is that this project was created by a Brazilian fellow named &lt;a href=&quot;http://www.stimuli.com.br/about/&quot; target=&quot;_blank&quot;&gt;Arthur Debert&lt;/a&gt; :). Thanks for this great tool!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mrdoob stats &amp;#8211; Actionscript performance monitor</title>
   <link href="https://www.fernandobevilacqua.com/2010/03/mrdoob-stats-actionscript-performance-monitor/"/>
   <updated>2010-03-05T00:14:16+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/03/mrdoob-stats-actionscript-performance-monitor</id>
   <content type="html">&lt;p&gt;Create and develop a game is hard task, but optimize one is even harder. You can ruin a perfect game design and a beautiful artset by filling the source code with useless and/or unnecessary stuff. In order to keep things in control a performance monitor comes in handy.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.dovyski.com/wp-content/uploads/2010/02/Anatoly-Zenkov-Portrait-of-Mr.-Doob.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-2404&quot; title=&quot;Anatoly Zenkov - Portrait of Mr. Doob&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/02/Anatoly-Zenkov-Portrait-of-Mr.-Doob.jpg&quot; alt=&quot;&quot; width=&quot;180&quot; height=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/mrdoob/&quot;&gt;Mrdoob stats&lt;/a&gt; provides a simple info box that will help you monitor your code performance. It can tell you the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;FPS&lt;/strong&gt; Frames per second, how many frames were rendered in 1 second. The higher the number, the better.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MS&lt;/strong&gt; Milliseconds needed to render a frame. The lower number, the better.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MEM&lt;/strong&gt; Memory your code is using, if it increases per frame is VERY wrong.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;MAX&lt;/strong&gt; Maximum memory the application reached.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is another great tool to know what is happing under the hood.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Isometric AS3 game engines</title>
   <link href="https://www.fernandobevilacqua.com/2010/02/isometric-as3-game-engines/"/>
   <updated>2010-02-27T00:07:38+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/02/isometric-as3-game-engines</id>
   <content type="html">&lt;p&gt;After &lt;a href=&quot;http://www.facebook.com/apps/application.php?id=57132175859&quot; target=&quot;_blank&quot;&gt;Happy Farm&lt;/a&gt; and &lt;a href=&quot;http://www.farmville.com/&quot; target=&quot;_blank&quot;&gt;FarmVille&lt;/a&gt; attracted millions of user there is a lot of talking about isometric games. I’ve played several games featuring an isometric view then I’ve spent some thoughts around the idea of creating my own isometric game (or one for my company, developed during my &lt;span style=&quot;text-decoration: line-through;&quot;&gt;inexistent&lt;/span&gt; free time).&lt;/p&gt;

&lt;p&gt;Looking for isometric game engines, I found three great projects: &lt;a href=&quot;http://www.ffilmation.org&quot;&gt;FFilmation&lt;/a&gt;, &lt;a href=&quot;http://code.google.com/p/as3isolib/&quot;&gt;As3isolib&lt;/a&gt; and &lt;a href=&quot;http://www.openspace-engine.com/&quot; target=&quot;_blank&quot;&gt;OpenSpace&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/ffilmation/&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-2395&quot; title=&quot;picture-1&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/02/picture-1-300x93.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;93&quot; srcset=&quot;http://www.dovyski.com/wp-content/uploads/2010/02/picture-1-300x93.png 300w, http://www.dovyski.com/wp-content/uploads/2010/02/picture-1.png 799w&quot; sizes=&quot;(max-width: 300px) 100vw, 300px&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.ffilmation.org&quot;&gt;FFilmation&lt;/a&gt; (&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.opensource.org/licenses/mit-license.php&quot;&gt;MIT License&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Have a programming interface as small and easy as possible, no matter how complex the internal code is;&lt;/li&gt;
  &lt;li&gt;Rendering performance is a major concern when designing all the algorythms;&lt;/li&gt;
  &lt;li&gt;Graphic designers are able to work on the application’s ( game or not ) environments without any programming skills, visually, and with almost immediate previews of what they are doing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/as3isolib/&quot;&gt;As3isolib&lt;/a&gt; (&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.opensource.org/licenses/mit-license.php&quot;&gt;MIT License&lt;/a&gt;):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;Simple scene creation; &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;3 primitive types;&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;Base class for displaying user-created conten; &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;Plenty of styling option on vector based primitive; &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;Integrates well with a variety of tween engine; &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;Improved 3D isometric positional sortin; &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;Scene &amp;amp; view renderer classes geared towards performance optimizatio; &lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a name=&quot;current_features&quot;&gt;Performance caching of static and animated sprite asset. &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://www.openspace-engine.com/&quot; target=&quot;_blank&quot;&gt;OpenSpace&lt;/a&gt; (commercial, part of the &lt;a href=&quot;http://www.smartfoxserver.com/&quot; target=&quot;_blank&quot;&gt;SmartFoxServer&lt;/a&gt; platform for multiplayer games):&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Engine and framework for rapid development of multi-user virtual worlds and MMO communities;&lt;/li&gt;
  &lt;li&gt;Customizable tiles’ aspect ratio;&lt;/li&gt;
  &lt;li&gt;Tiles Elevation&lt;/li&gt;
  &lt;li&gt;2D objects in a 2.5D world&lt;/li&gt;
  &lt;li&gt;Backgrounds and foregrounds&lt;/li&gt;
  &lt;li&gt;Scrolling&lt;/li&gt;
  &lt;li&gt;Advanced pathfinding&lt;/li&gt;
  &lt;li&gt;Powerful avatar management&lt;/li&gt;
  &lt;li&gt;Advanced map interaction system&lt;/li&gt;
  &lt;li&gt;Exhaustive documentation&lt;/li&gt;
  &lt;li&gt;Complete Map Editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you were planning to develop an isometric game, you just found your first step.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Improve your game with particles</title>
   <link href="https://www.fernandobevilacqua.com/2010/02/improve-your-game-with-particles/"/>
   <updated>2010-02-13T06:08:37+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/02/improve-your-game-with-particles</id>
   <content type="html">&lt;p&gt;When I play a game, I like to see all those flying particles popping up on the screen. Casual games make heavy use of this resource, sometimes more than what is considered healthy.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/sparkler.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-2364&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/sparkler.jpg&quot; alt=&quot;&quot; width=&quot;150&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A particle system adds dynamism to the game and makes it feel alive. Where is the fun of blowing up an enemy base and see just a few flames as a reward? Players want to see lots of things flying around and sparkles shinning towards the camera. Flash gamers are no exception. In order to add particles to your game, you can use two free particle systems (both use &lt;a href=&quot;http://www.opensource.org/licenses/mit-license.php&quot; target=&quot;_blank&quot;&gt;MIT license&lt;/a&gt;): &lt;a href=&quot;http://flintparticles.org&quot; target=&quot;_blank&quot;&gt;Flint&lt;/a&gt; and &lt;a href=&quot;http://code.google.com/p/stardust-particle-engine/&quot; target=&quot;_blank&quot;&gt;Stardust&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://flintparticles.org&quot; target=&quot;_blank&quot;&gt;Flint&lt;/a&gt; is an open-source project to create a versatile particle system in Actionscript 3. The aim is to create a system that handles the common functionality for all particle systems, has methods for common particle behaviour, and lets developers extend it easily with their own custom behaviours without needing to touch the core code.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://code.google.com/p/stardust-particle-engine/&quot; target=&quot;_blank&quot;&gt;Stardust&lt;/a&gt; was inspired by &lt;a href=&quot;http://flintparticles.org&quot; target=&quot;_blank&quot;&gt;Flint&lt;/a&gt;, but it has its own set features:&lt;/p&gt;

&lt;div&gt;
  &lt;ul&gt;
    &lt;li&gt;
      Supports 2D and 3D particle effects.
    &lt;/li&gt;
    &lt;li&gt;
      Easy to extend for custom initializers, actions, fields, deflectors, clocks, and 2D/3D renderers.
    &lt;/li&gt;
    &lt;li&gt;
      Includes 3D extensions for ZedBox, Papervision3D, and ND3D.
    &lt;/li&gt;
    &lt;li&gt;
      Includes a native 3D renderer.
    &lt;/li&gt;
    &lt;li&gt;
      Supports particle masking (particles can be masked out for actions).
    &lt;/li&gt;
    &lt;li&gt;
      Uses linked lists and object pools to improve performance.
    &lt;/li&gt;
    &lt;li&gt;
      Gravity and deflector simulation.
    &lt;/li&gt;
    &lt;li&gt;
      Action triggers (for creating complex conditional particle behaviors).
    &lt;/li&gt;
    &lt;li&gt;
      XML serialization.
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>QuickBox2D: AS3 physics engine</title>
   <link href="https://www.fernandobevilacqua.com/2010/02/quickbox2d-as3-physics-engine/"/>
   <updated>2010-02-08T09:54:33+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/02/quickbox2d-as3-physics-engine</id>
   <content type="html">&lt;p&gt;The first time I saw a really convincing physics engine working on a PC game was during a &lt;a href=&quot;http://orange.half-life2.com/hl2.html&quot; target=&quot;_blank&quot;&gt;Half Life 2&lt;/a&gt; session. All that &lt;a href=&quot;http://en.wikipedia.org/wiki/Havok_%28software%29&quot; title=&quot;Havok (software)&quot;&gt;Havok physics&lt;/a&gt; created an unique game experience. Luckily the use of physics inside games has grown and now we have a wide range of tool to use, even in Flash games.&lt;a href=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/poly_editor.gif&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-2353&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/poly_editor-300x224.gif&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;224&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://actionsnippet.com/?page_id=1391&quot; target=&quot;_blank&quot;&gt;QuickBox2D&lt;/a&gt; is one of them. It is a mini-library created to work with &lt;a href=&quot;http://sourceforge.net/projects/box2dflash/&quot; target=&quot;_blank&quot;&gt;Box2DFlashAS3&lt;/a&gt;, which is an AS3 port of the famous &lt;a href=&quot;http://box2d.org&quot; target=&quot;_blank&quot;&gt;Box2D&lt;/a&gt; C++ physics engine. The main purpose of this library is to significantly simplify instantiation of rigid bodies and provide a simple way to bind them with custom graphics.&lt;/p&gt;

&lt;p&gt;You can start with &lt;a href=&quot;http://actionsnippet.com/?page_id=1391&quot; target=&quot;_blank&quot;&gt;QuickBox2D&lt;/a&gt; by reading this &lt;a href=&quot;http://active.tutsplus.com/tutorials/effects/introduction-to-quickbox2d-part-1/&quot; target=&quot;_blank&quot;&gt;great kick off tutorial&lt;/a&gt;. It explains the engine itself and demonstrate how to use some of it’s features.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>OnePress Community</title>
   <link href="https://www.fernandobevilacqua.com/2010/02/onepress-community/"/>
   <updated>2010-02-03T07:23:30+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/02/onepress-community</id>
   <content type="html">&lt;p&gt;I see lots of open source projetcs using &lt;a href=&quot;http://wordpress.org&quot; target=&quot;_blank&quot;&gt;Worpress&lt;/a&gt; as a blog platform, &lt;a href=&quot;http://phpbb.com&quot; target=&quot;_blank&quot;&gt;phpBB&lt;/a&gt; as a forum solution and &lt;a href=&quot;http://www.mediawiki.org&quot; target=&quot;_blank&quot;&gt;Mediawiki&lt;/a&gt; as a wiki. I like them all, but maintaining them separately with no integrations is a pain. It’s great when you register to a website and you can use the same fresh new account to comment on the blog, reply to a forum thread and/or contribute to a wiki page.&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  &lt;a href=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/OnePressCommunityLogo.png&quot;&gt;&lt;img class=&quot;size-medium wp-image-2344 aligncenter&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/OnePressCommunityLogo-300x81.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;81&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  Excluding the wiki part, there is a tool that makes it all possible. &lt;a title=&quot;OnePress&quot; href=&quot;http://onepresscommunity.com/&quot; target=&quot;_blank&quot;&gt;OnePress&lt;/a&gt; &lt;em&gt;&lt;/em&gt;is an integrated website and forum solution. It is, simply, a &lt;strong&gt;WordPress theme&lt;/strong&gt; to serve as the foundation and framework for your web site and online  community.
&lt;/p&gt;

&lt;p&gt;Some of it´s cool features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Seamless integration with phpBB, complete with unified login and widgets to display forum posts on site.&lt;/li&gt;
  &lt;li&gt;Widgetized WordPress layout with drag and drop interface to quickly build site.&lt;/li&gt;
  &lt;li&gt;Professional featured content widgets to display important posts with prominence.&lt;/li&gt;
  &lt;li&gt;Easy to use backend enhancements for editing OnePress widget content.&lt;/li&gt;
  &lt;li&gt;Highly optimized page rendering process for optimal performance.&lt;/li&gt;
  &lt;li&gt;Built with WordPress 2.7 and child themes in mind.  Flexible hook system for full theme customization.&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>AS3 game engines</title>
   <link href="https://www.fernandobevilacqua.com/2010/01/as3-game-engines/"/>
   <updated>2010-01-30T09:10:08+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2010/01/as3-game-engines</id>
   <content type="html">&lt;p&gt;I like to write my code from scratch, but it does not  mean I want to reinvent the wheel every single day. This is one of the reasons why I like to use engines to code games.&lt;/p&gt;

&lt;p&gt;Sometimes the project has it´s own specific features and it requires a completly customized code, but most of the time it´s all about the same things: test input, check collisions, update a bunch of elements and finally render them all. Looking for a tool to do those tasks for me, I found two free and open source game engines: &lt;a title=&quot;PushButton Engine&quot; href=&quot;http://pushbuttonengine.com/&quot; target=&quot;_blank&quot;&gt;PushButton &lt;/a&gt;and &lt;a title=&quot;Flixel engine&quot; href=&quot;http://flixel.org/&quot; target=&quot;_blank&quot;&gt;Flixel&lt;/a&gt;.&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  &lt;a title=&quot;PushButton Engine&quot; href=&quot;http://pushbuttonengine.com/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;size-medium wp-image-2336 aligncenter&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/pushbutton-engine-300x79.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;79&quot; srcset=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/pushbutton-engine-300x79.png 300w, http://www.dovyski.com/wp-content/uploads/2010/01/pushbutton-engine.png 343w&quot; sizes=&quot;(max-width: 300px) 100vw, 300px&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  &lt;a title=&quot;PushButton Engine&quot; href=&quot;http://pushbuttonengine.com/&quot; target=&quot;_blank&quot;&gt;PushButton&lt;/a&gt; is a very modular game engine licensed under the &lt;a title=&quot;MIT license&quot; href=&quot;http://en.wikipedia.org/wiki/MIT_License&quot; target=&quot;_blank&quot;&gt;MIT license&lt;/a&gt;. It has core functionality as resource manager, logger, debug monitoring, serialization, time management, globally named objects, etc. It also has a set of &lt;a title=&quot;PushButton components&quot; href=&quot;http://pushbuttonengine.com/store/&quot; target=&quot;_blank&quot;&gt;components &lt;/a&gt;that make the engine even better:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Physics based on &lt;a title=&quot;Box2D&quot; href=&quot;http://www.box2d.org/&quot; target=&quot;_blank&quot;&gt;Box2D&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;Gameplay components: health, teams, state machines;&lt;/li&gt;
  &lt;li&gt;Sprite-based and SWF-based 2D rendering;&lt;/li&gt;
  &lt;li&gt;Tilemap system;&lt;/li&gt;
  &lt;li&gt;Pathfinding library;&lt;/li&gt;
  &lt;li&gt;Basic networking. Pass events to/from your servers, do XMLRPC/JSON Web API requests, etc;&lt;/li&gt;
  &lt;li&gt;Awesome UI capabilities via Flash – localizable, stylable/themable, internationalizable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a title=&quot;Flixel engine&quot; href=&quot;http://flixel.org/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;size-full wp-image-2335 alignright&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2010/01/flixel.png&quot; alt=&quot;&quot; width=&quot;64&quot; height=&quot;128&quot; /&gt;Flixel&lt;/a&gt; is collection of AS3 files that helps organize, automate, and optimize Flash games. It is also licensed under the &lt;a title=&quot;MIT license&quot; href=&quot;http://en.wikipedia.org/wiki/MIT_License&quot; target=&quot;_blank&quot;&gt;MIT license&lt;/a&gt; and has a great set of features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Really fast renderer (5000+ sprites on modern PCs);&lt;/li&gt;
  &lt;li&gt;Tilemaps;&lt;/li&gt;
  &lt;li&gt;Particle systems;&lt;/li&gt;
  &lt;li&gt;Global sound system with volume hotkeys, looping, panning, etc;&lt;/li&gt;
  &lt;li&gt;Parallax scrolling (free/multi-directional);&lt;/li&gt;
  &lt;li&gt;Built-in 2D box-based game physics (not &lt;a title=&quot;Box2D&quot; href=&quot;http://www.box2d.org/&quot; target=&quot;_blank&quot;&gt;Box2D&lt;/a&gt;);&lt;/li&gt;
  &lt;li&gt;Fast text rendering;&lt;/li&gt;
  &lt;li&gt;Retro style zoomed rendering options (2x pixels, 3x pixels, etc);&lt;/li&gt;
  &lt;li&gt;Works great with non-pixel art too, with support for rotation, scaling;&lt;/li&gt;
  &lt;li&gt;Composite multiple sprites using blending modes to create sweet lighting effects;&lt;/li&gt;
  &lt;li&gt;Does not require the Flash IDE, works best with free tools like FlashDevelop;&lt;/li&gt;
  &lt;li&gt;Organizational classes like game states;&lt;/li&gt;
  &lt;li&gt;Simple buttons;&lt;/li&gt;
  &lt;li&gt;Utilities for looping music and playing sound FX;&lt;/li&gt;
  &lt;li&gt;Simple special effects like screen flashes and fades;&lt;/li&gt;
  &lt;li&gt;Save game data between sessions using a local shared object.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reading about them gave me the idea of writing my &lt;a title=&quot;Dovyski&apos;s projects&quot; href=&quot;http://dovyski.com/projects&quot; target=&quot;_blank&quot;&gt;own game engine&lt;/a&gt; someday. Maybe some raining day I give it a try &lt;img src=&quot;http://www.dovyski.com/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; style=&quot;height: 1em; max-height: 1em;&quot; /&gt;&lt;/p&gt;

&lt;div style=&quot;overflow: hidden; width: 1px; height: 1px;&quot;&gt;
  • Really fast renderer (5000+ sprites on modern PCs)&lt;br /&gt; • Tilemaps&lt;br /&gt; • Particle systems&lt;br /&gt; • Global sound system with volume hotkeys, looping, panning, etc&lt;br /&gt; • Parallax scrolling (free/multi-directional)&lt;br /&gt; • Built-in 2D box-based game physics (&lt;em&gt;not&lt;/em&gt; Box2D…yet, anyways)&lt;br /&gt; • Fast text rendering&lt;br /&gt; • Retro style zoomed rendering options (2x pixels, 3x pixels, etc)&lt;br /&gt; • Works great with non-pixel art too, with support for rotation, scaling&lt;br /&gt; • Composite multiple sprites using blending modes to create sweet lighting effects&lt;br /&gt; • Does not require the Flash &lt;span class=&quot;caps&quot;&gt;IDE&lt;/span&gt;, works best with free tools like FlashDevelop&lt;br /&gt; • Organizational classes like game states&lt;br /&gt; • Simple buttons&lt;br /&gt; • Utilities for looping music and playing sound FX&lt;br /&gt; • Simple special effects like screen flashes and fades&lt;br /&gt; • Save game data between sessions using a local shared object
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Simple and powerful intranet</title>
   <link href="https://www.fernandobevilacqua.com/2009/10/simple-and-powerful-intranet/"/>
   <updated>2009-10-18T00:10:56+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/10/simple-and-powerful-intranet</id>
   <content type="html">&lt;p&gt;These days I was looking for intranet solutions and I luckily found &lt;a href=&quot;http://openatrium.com/&quot; target=&quot;_blank&quot;&gt;Open Atrium&lt;/a&gt;, an intranet in a box that has group spaces to allow different teams to have their own conversations.&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;http://openatrium.com/&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;aligncenter&quot; title=&quot;OpenAtrium&quot; src=&quot;http://openatrium.com/sites/openatrium.com/files/openatrium_logo.png&quot; alt=&quot;&quot; width=&quot;265&quot; height=&quot;80&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;OpenAtrium is built on top of &lt;a href=&quot;http://drupal.org/&quot; target=&quot;_blank&quot;&gt;Drupal&lt;/a&gt;, has a nice design and a useful set of features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Blog&lt;/strong&gt;: A classic blog for each group that has commenting, file attachments on both the post and comments, and granular notifications.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Calendar&lt;/strong&gt;: A calendar that lets you quickly add events, suck in iCal and other calendar feeds, and support single or multi-day events.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Group Dashboard&lt;/strong&gt;: Mini widgets give you a snapshot of all the activity happening across your groups.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Documents&lt;/strong&gt;: A simple online handbook that lets you collaborate on documents, store and compare revisions, attach files, and once you’re done print out the final copy.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Shoutbox&lt;/strong&gt;: Kind of like a private twitter, the shoutbox lets you share short messages, links, and information with just the people in your group.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Case Tracker&lt;/strong&gt;: A full ticketing system that lets you assign to do’s and create unlimited projects within each of your groups. The case tracker also lets you classify the to do, give it a priority, and manage its status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For small companies, it is an efficient tool to create/maintain an intranet.&lt;/p&gt;

&lt;table border=&quot;0&quot; width=&quot;100%&quot;&gt;
  &lt;tr&gt;
    &lt;td align=&quot;center&quot;&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
</content>
 </entry>
 
 <entry>
   <title>Flash instead of Powerpoint?</title>
   <link href="https://www.fernandobevilacqua.com/2009/10/flash-instead-of-powerpoint/"/>
   <updated>2009-10-16T00:20:24+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/10/flash-instead-of-powerpoint</id>
   <content type="html">&lt;p style=&quot;text-align: left;&quot;&gt;
  Probably I&amp;#8217;ve spent several hours editing and arranging pictures to create a nice Powerpoint presentation. Even though the Microsoft product is a great tool, I do not like the final result. It seems unfashionable, too poor and/or simple.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  This is one of the reasons why I like image sliders developed using Flash. I look at them and imagine how wonderful life would be if I could easily use it and some lines of text in a .txt file to create a presentation. Nice graphics, beautiful font rendering, smooth effects (including blur and glow) and maybe some &lt;a href=&quot;http://box2dflash.sourceforge.net/&quot; target=&quot;_blank&quot;&gt;physics&lt;/a&gt;, why not?
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  Trying to make my dream come true, I found two amazing image/content sliders in Flash: &lt;a title=&quot;MagaZine 3&quot; href=&quot;http://megazine.mightypirates.de/&quot;&gt;MegaZine 3&lt;/a&gt; and &lt;a title=&quot;cu3er&quot; href=&quot;http://www.progressivered.com/cu3er/&quot;&gt;CU3ER&lt;/a&gt;. The first one is an open source pageflip/flashbook engine, written completely in AS3.
&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;img class=&quot;aligncenter&quot; title=&quot;Pageflip&quot; src=&quot;http://megazine.mightypirates.de/img/content/demo.png&quot; alt=&quot;&quot; width=&quot;272&quot; height=&quot;189&quot; /&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  The other one is a content slider with 3D transition effects, such as spinning.
&lt;/p&gt;

&lt;p style=&quot;text-align: center;&quot;&gt;
  &lt;img class=&quot;size-medium wp-image-2215      aligncenter&quot; title=&quot;cu3er&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2009/10/cu3er-300x100.png&quot; alt=&quot;cu3er&quot; width=&quot;300&quot; height=&quot;100&quot; /&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  Certainly those two projects have lots of cool features and they can perfectly fit into a wide range of uses. If I have the change to save some time for my personal projects, such as my &lt;a href=&quot;http://www.dovyski.com/projects/&quot; target=&quot;_blank&quot;&gt;own Flash slide presentation&lt;/a&gt;, I will use &lt;a title=&quot;MagaZine 3&quot; href=&quot;http://megazine.mightypirates.de/&quot;&gt;MegaZine 3&lt;/a&gt; and &lt;a title=&quot;cu3er&quot; href=&quot;http://www.progressivered.com/cu3er/&quot;&gt;CU3ER&lt;/a&gt; for sure.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>SWFConsole: enhance the power of your Flash games</title>
   <link href="https://www.fernandobevilacqua.com/2009/07/swfconsole-enhance-the-power-of-your-flash-games/"/>
   <updated>2009-07-10T22:51:03+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/07/swfconsole-enhance-the-power-of-your-flash-games</id>
   <content type="html">&lt;p&gt;&lt;img class=&quot;alignright size-full wp-image-2077&quot; title=&quot;Terminal&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2009/07/Terminal.png&quot; alt=&quot;Terminal&quot; width=&quot;177&quot; height=&quot;169&quot; /&gt;Sometime ago I was working on a Flash game and I had to output some information to the console. That’s a very easy task when you use &lt;em&gt;trace()&lt;/em&gt; and the Flash IDE, but things get a little harder when you need to output text inside the browser.&lt;/p&gt;

&lt;p&gt;Looking for a tool that could help me output text, I found &lt;a title=&quot;SWFConsole&quot; href=&quot;http://rohanlatimer.com.au/swfconsole/&quot; target=&quot;_blank&quot;&gt;SWFConsole&lt;/a&gt;.  It is a free developer tool for Flash AS3 projects that gives you output in all environments, not just the IDE. You can type commands in order  to manipulate Movieclips in the stage,  such as &lt;strong&gt;myMovieclip.alpha = 0.3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a title=&quot;SWFConsole&quot; href=&quot;http://rohanlatimer.com.au/swfconsole/&quot; target=&quot;_blank&quot;&gt;SWFConsole&lt;/a&gt; also has a built in resource monitor that shows FPS and memory usage, pretty useful for game developers. I miss some features as listeners to handle custom commands and a method to “enable/disable” the console instead of  showing or hiding  it, but it does not make  the tool less useful.&lt;/p&gt;

&lt;p&gt;If you are a Flash game developer, SWFConsole can make your life easier!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PHP and PDF in pure Javascript</title>
   <link href="https://www.fernandobevilacqua.com/2009/06/php-and-pdf-in-pure-javascript/"/>
   <updated>2009-06-03T23:55:23+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/06/php-and-pdf-in-pure-javascript</id>
   <content type="html">&lt;p&gt;Javacript is the very first base stone concerning web 2.0. In the past, I always heard bad things about Javascript, but I guess all of them were said because Javascript was being used by the wrong people, in the wrong place and at the wrong time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;img class=&quot;alignleft&quot; style=&quot;margin: 5px;&quot; title=&quot;PHP.JS&quot; src=&quot;http://phpjs.org/img/phpjs.png&quot; alt=&quot;&quot; width=&quot;114&quot; height=&quot;60&quot; /&gt;&lt;/strong&gt;A lot of sites use huge Javacript libs, each one performing nice things, such as HTTP requests, animation effects, generation of RIA content, etc. Javascript is so famous now that several things have been ported to it, such as encryption algorithms.&lt;/p&gt;

&lt;p&gt;I have found two of those Javascript ports that can be really useful, specially if you are a PHP developer (just like me): &lt;a title=&quot;PHP.JS&quot; href=&quot;http://phpjs.org/&quot; target=&quot;_blank&quot;&gt;PHP.JS&lt;/a&gt; and &lt;a title=&quot;jsPDF&quot; href=&quot;http://code.google.com/p/jspdf/&quot; target=&quot;_blank&quot;&gt;jsPDF&lt;/a&gt;.&lt;img class=&quot;alignright&quot; title=&quot;jsPDF&quot; src=&quot;http://www.iadis.org/ijcsis/images/PDF_icon.jpg&quot; alt=&quot;&quot; width=&quot;74&quot; height=&quot;74&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PHP.JS&lt;/strong&gt; is an open source project in which you can use PHP functions client-side, in pure JavaScript. &lt;strong&gt;jsPDF&lt;/strong&gt; is an open-source library for generating PDF documents using nothing but Javascript.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>FlashDevelop: a powerfull and free AS3 development tool</title>
   <link href="https://www.fernandobevilacqua.com/2009/05/flashdevelop-a-powerfull-and-free-as3-development-tool/"/>
   <updated>2009-05-31T16:22:10+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/05/flashdevelop-a-powerfull-and-free-as3-development-tool</id>
   <content type="html">&lt;p&gt;If you work with Flash like I do you probably have said a bunch of bad words while you were coding AS3 using the native Flash IDE AS editor. I like Adobe, I really do, Flash can do amazing things and the IDE is getting more and more powerfull, however as a AS3 project manager, the Flash IDE sucks.&lt;/p&gt;

&lt;p&gt;I could have saved tons of working hours if Flash IDE had some sort of smart code completion, or if it had a better project manager panel (a simple one that hides the SVN directories, for instance). The logical choise for me would be change to another IDE or methodology, such as &lt;a title=&quot;Flex Builder&quot; href=&quot;http://www.adobe.com/products/flex/&quot; target=&quot;_blank&quot;&gt;Flex Buider&lt;/a&gt;, but sometimes I’m binded to the Flash IDE because I can’t use a different approach.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;alignleft&quot; style=&quot;margin: 5px;&quot; title=&quot;FlashDevelop&quot; src=&quot;http://www.flashdevelop.org/community/styles/avalonfd/imageset/site_logo.png&quot; alt=&quot;&quot; width=&quot;168&quot; height=&quot;70&quot; /&gt;Tired of wasting my time coding like that, I’ve decided to search for a better AS3 development tools. Thanks to the open source community, I’ve found FlashDevelop, a  free and open source ActionScript 2/3 and web development environment.  It seemlessly integrates with &lt;a href=&quot;http://www.adobe.com/products/flash/&quot;&gt;Adobe Flash IDE&lt;/a&gt;{.postlink}, &lt;a href=&quot;http://opensource.adobe.com/wiki/display/flexsdk&quot;&gt;Adobe Flex SDK&lt;/a&gt;{.postlink}, &lt;a href=&quot;http://mtasc.org/&quot;&gt;Mtasc&lt;/a&gt;{.postlink}, &lt;a href=&quot;http://haxe.org/&quot;&gt;Haxe&lt;/a&gt;{.postlink} and &lt;a href=&quot;http://www.swfmill.org/&quot;&gt;Swfmill&lt;/a&gt;{.postlink}.&lt;/p&gt;

&lt;p&gt;Some of the features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.flashdevelop.org/wikidocs/index.php?title=Features:Interface&quot;&gt;AS2 Project management&lt;/a&gt;{.postlink} with seamless Swfmill and Mtasc integration (using a portable standalone command line tool).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.flashdevelop.org/wikidocs/index.php?title=Features:Completion&quot;&gt;Advanced ActionScript 2 and ActionScript 3 completion &amp;amp; code exploration&lt;/a&gt;{.postlink} with automatic classpath detection (even without project).&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.flashdevelop.org/wikidocs/index.php?title=Features:Generation&quot;&gt;Smart contextual Actionscript code generators.&lt;/a&gt;{.postlink}&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.flashdevelop.org/wikidocs/index.php?title=Features:Exploration&quot;&gt;SWF and SWC classes and symbols exploration.&lt;/a&gt;{.postlink}&lt;/li&gt;
  &lt;li&gt;Test movie in Adobe Flash IDE and with clickable error results (Flash CS3).&lt;/li&gt;
  &lt;li&gt;MTASC compilation/code checking with clickable error results.&lt;/li&gt;
  &lt;li&gt;Types Explorer.&lt;/li&gt;
  &lt;li&gt;Automatically cleans ASO files of modified AS2 classes.&lt;/li&gt;
  &lt;li&gt;Files explorer (can create Flash 8 Trust Files for you).&lt;/li&gt;
  &lt;li&gt;Automatic JavaDoc creation from methods.&lt;/li&gt;
  &lt;li&gt;Smart Actionscript help websearch on F1.&lt;/li&gt;
  &lt;li&gt;Jump to class/member declaration on F4.&lt;/li&gt;
  &lt;li&gt;XML, HTML/PHP, JS, CSS code highlighting.&lt;/li&gt;
  &lt;li&gt;Multibyte character encoding.&lt;/li&gt;
  &lt;li&gt;Program menu customization with XML files.&lt;/li&gt;
  &lt;li&gt;as2api GUI for documentation generation.&lt;/li&gt;
  &lt;li&gt;Snippets, lines bookmarks, code folding and zoom.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FlashDevelop has enhanced my production cycle and I think it can do the same for you. &lt;a title=&quot;Download FlashDevelop&quot; href=&quot;http://www.flashdevelop.org/community/viewforum.php?f=11&quot; target=&quot;_blank&quot;&gt;Download&lt;/a&gt; it now and enjoy!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Webapps brought to the Desktop</title>
   <link href="https://www.fernandobevilacqua.com/2009/05/webapps-brought-to-the-desktop/"/>
   <updated>2009-05-17T12:00:27+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/05/webapps-brought-to-the-desktop</id>
   <content type="html">&lt;p style=&quot;text-align: left;&quot;&gt;
  Some years ago, the only thing that came to my mind when I heard the word &amp;#8220;web&amp;#8221; was &amp;#8220;very simple websites&amp;#8221;, a bunch of bytes available for browing. Google was not even born at that time and everyhing was focused on desktop applications. If your application was able to connect to the web, then it could update itself in a easy way, nothing else.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  The main flow was to bring every single business plan into the desktop world: office stuff (such as Microsoft Office), e-mail (Outlook), image, music, movies, etc. In the web world at that time, Javascript was an ugly word to be fired and Flash was just a way to make things look a little bit better.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  The world is different now and ironically it seems to be the opposite of what it was in the past. Instead of bringing things into the desktop, the idea is to take them to the cloud, make them available on the web. This is happening very fast, but sometimes it&amp;#8217;s useful to have some desktop behavior in a web app, such as offline access to your e-mails.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  &lt;img class=&quot;aligncenter size-full wp-image-153&quot; title=&quot;webappers&quot; src=&quot;http://www.dovyski.com/wp-content/uploads/2009/05/webappers.png&quot; alt=&quot;webappers&quot; width=&quot;550&quot; height=&quot;130&quot; /&gt;
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  Why can&amp;#8217;t we use the best things of those two words (web and the desktop)? Even better, why can&amp;#8217;t we use our web development knowledge to create hybrid apps that work in those two worlds? In fact, we can, and a lot of people have noticed that.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  The first one I can recall is Adobe with &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_(Adobe)&quot; target=&quot;_blank&quot;&gt;Apollo&lt;/a&gt;, on March 19, 2007. Apollo, after named to &lt;strong&gt;Adobe Integrated Runtime&lt;/strong&gt; (&lt;a href=&quot;http://www.adobe.com/products/air/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;AIR&lt;/strong&gt;&lt;/a&gt;), is a cross-platform runtime environment for building rich Internet applications using Flash, HTML or Ajax, that can be deployed as a desktop application. A very powerful tool able to create nice apps featuring half desktop half web blood.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  Right after Adobe, Mozilla started working on a similtar idea and on October, 2007, &lt;strong&gt;&lt;a href=&quot;http://labs.mozilla.com/2007/10/prism/&quot; target=&quot;_blank&quot;&gt;Prism&lt;/a&gt;&lt;/strong&gt; was born. It is open source, like all the things Mozilla does, and it splits web applications out of the browser and run them directly on the desktop. Prism development is not fast as Adobe&amp;#8217;s AIR is, but they are &lt;a href=&quot;http://labs.mozilla.com/2009/05/prism-10-launches-with-new-website/&quot; target=&quot;_blank&quot;&gt;moving forward&lt;/a&gt;.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  These days I&amp;#8217;ve found a brand new tool like those previous ones: &lt;strong&gt;&lt;a href=&quot;http://titaniumapp.com/&quot; target=&quot;_blank&quot;&gt;Appcelerator Titanium&lt;/a&gt;&lt;/strong&gt;. As far as I could see, it works just like AIR, but it is open source. I read a few forum threads at Titanium forum and some developers said their Titanium apps were running faster then their AIR versions. Another very nice thing is you can use sevel languages to code your application, such as PHP and Phyton instead of only HTML and Javascript.
&lt;/p&gt;

&lt;p style=&quot;text-align: left;&quot;&gt;
  If you were thinking about developing an desktop-and-web application in a easy way, take a look at those options above. I&amp;#8217;m sure you will have a lot of heavy weapons available to make your ideas to come true.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IE6 has already fulfilled its destiny, it&amp;#8217;s time to upgrade!</title>
   <link href="https://www.fernandobevilacqua.com/2009/04/ie6-has-already-fulfilled-its-destiny-its-time-to-upgrade/"/>
   <updated>2009-04-28T23:02:46+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/04/ie6-has-already-fulfilled-its-destiny-its-time-to-upgrade</id>
   <content type="html">&lt;p&gt;One of the most annoying thing I did during the development of our web projects was to keep our apps running smooth in a wide range of old browsers. Not too many years ago, there was only one “king” in the browser’s kingdom: &lt;a title=&quot;Internet Explorer&quot; href=&quot;http://en.wikipedia.org/wiki/Internet_Explorer&quot; target=&quot;_blank&quot;&gt;Microsoft Internet Explorer&lt;/a&gt;. &lt;em&gt;King&lt;/em&gt; is a little bit unappropriated, however on February, 2005, IE 6 was pumping the web engines with a market share of &lt;strong&gt;82.79%&lt;/strong&gt;, what is a quite impressive number.&lt;/p&gt;

&lt;p&gt;Excluding the security problems, the non W3C compliant behavior and other issues, IE6 as the only major browser would be a great deal to all web developers. The existence of  just one browser means few environments to test and few compatibility if/elses. The web-developers burden, however, was far from being released.&lt;/p&gt;

&lt;p&gt;In 1996, &lt;a title=&quot;Opera&quot; href=&quot;http://en.wikipedia.org/wiki/Opera_(web_browser)&quot; target=&quot;_blank&quot;&gt;Opera&lt;/a&gt; was first released publicly with version 2.0. Coming next, Apple first released &lt;a title=&quot;Safari&quot; href=&quot;http://en.wikipedia.org/wiki/Safari_(web_browser)&quot; target=&quot;_blank&quot;&gt;Safari&lt;/a&gt; as a public beta on January 7, 2003. Following the flow, in November 9, 2004, &lt;a title=&quot;Firefox&quot; href=&quot;http://en.wikipedia.org/wiki/Firefox&quot; target=&quot;_blank&quot;&gt;Mozilla&lt;/a&gt; came up with &lt;a title=&quot;Firefox&quot; href=&quot;http://en.wikipedia.org/wiki/Firefox&quot; target=&quot;_blank&quot;&gt;Firefox&lt;/a&gt; 1.0. The last one to join the party was Google &lt;a title=&quot;Chrome&quot; href=&quot;http://en.wikipedia.org/wiki/Google_Chrome&quot; target=&quot;_blank&quot;&gt;Chrome&lt;/a&gt;, released as a public beta on September 2, 2008. With the built-in markup madness that HTML allows and with no clear rules for how a browser should behave, the web development became a nightmare.&lt;/p&gt;

&lt;p&gt;Luckly things got better and the development of major browsers started to have its foundations over W3C standards and &lt;a href=&quot;http://www.tgdaily.com/content/view/37904/113/&quot; target=&quot;_blank&quot;&gt;performance worries&lt;/a&gt;. Every new version of each browser introduced a set of brand new stuffs, including security improvements and higher &lt;a title=&quot;Acid test&quot; href=&quot;http://www.acidtests.org/&quot; target=&quot;_blank&quot;&gt;Acid&lt;/a&gt; scores. Everything would be great, except for one huge problem: IE6, an old and obsolete browser, is still widely used!&lt;/p&gt;

&lt;p&gt;That problem drastically increases the complexity of web apps, because developers, in order to ensure the website will look fine, have to workaround all the stupid things IE6 does. As the &lt;a title=&quot;Wordpress&quot; href=&quot;http://www.wordpress.org&quot; target=&quot;_blank&quot;&gt;WordPress&lt;/a&gt; guys usually say, “code is poetry”; in my opinion IE6 compatibility code is classified as a bunch of ugly words within a rhyme. It’s time to move on, let IE6 go!&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://ie6-upgrade-warning.googlecode.com/svn/trunk/example.png&quot;&gt;&lt;img class=&quot;aligncenter&quot; title=&quot;IE6 upgrade warning&quot; src=&quot;http://ie6-upgrade-warning.googlecode.com/svn/trunk/example.png&quot; alt=&quot;&quot; width=&quot;607&quot; height=&quot;292&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To tell that to your users, a good approach is the &lt;a href=&quot;http://code.google.com/p/ie6-upgrade-warning/&quot; target=&quot;_blank&quot;&gt;ie6 upgrade warning&lt;/a&gt;. It is a little script (7.9kb) that displays a warning message politely informing the user to upgrade the browser to a newer version (links to newest IE, Firefox, Opera, Safari, Chrome are provided).&lt;/p&gt;

&lt;p&gt;Make the Internet a better place, let old things in the past and move on to the new ones. Upgrade your browser.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Profiling and debugging PHP</title>
   <link href="https://www.fernandobevilacqua.com/2009/04/profiling-and-debugging-php/"/>
   <updated>2009-04-26T01:59:19+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/04/profiling-and-debugging-php</id>
   <content type="html">&lt;p&gt;&lt;small&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;Reviewing the code is an important task every programmer must (or should) perform. Sometimes the program you have just coded looks nice and fast, because all the tests you have performed using your well-controlled devel0pment sandbox showed no errors.&lt;/p&gt;

&lt;p&gt;Unless you are a god when programming, you may have left some little performance tweaks behind. Most of the time you can replace several method calls with the returned value stored in a variable, or avoiding nested for/whiles, or freeing a result set in order to save some memory, etc. In the end, all those tweaks can make the difference between a smooth user experience and an extremely painful development problem.&lt;/p&gt;

&lt;p&gt;If you are a PHP developer, you can use the free &lt;a href=&quot;http://particletree.com/features/php-quick-profiler/&quot; title=&quot;PHP Quick Profiler&quot;&gt;PHP Quick Profiler (PQP)&lt;/a&gt; to help profiling and debugging your code. No more echoing vars, objects or queries in order to find performance mistakes. Using an automated tool to show you what is going on, you can save a lot of time and ensure your app is stable and fast. I read about PQP at &lt;a href=&quot;http://www.webappers.com/2009/04/25/php-quick-profiler-firebug-for-php/&quot; target=&quot;_blank&quot;&gt;WebAppers&lt;/a&gt; these days. They also have a screenshot (below) and a &lt;a href=&quot;http://particletree.com/examples/pqp/&quot; target=&quot;_blank&quot;&gt;link for a demo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://particletree.com/features/php-quick-profiler/&quot; title=&quot;PHP Quick Profiler&quot;&gt;&lt;img class=&quot;aligncenter&quot; src=&quot;http://www.webappers.com/img/2009/04/php-profiler.jpg&quot; alt=&quot;PHP Profiler&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want more options for profiling and debugging, I recommend &lt;a href=&quot;http://www.xdebug.org/&quot; target=&quot;_blank&quot;&gt;Xdebug&lt;/a&gt;, which is a very powerful tool. We have been using it at &lt;a href=&quot;http://www.decadium.com&quot; target=&quot;_blank&quot;&gt;Decadium&lt;/a&gt; for a long time.  Some of the features include stack traces and function traces in error messages (with full parameter display, function/file name and line indications), information about memory allocation and protection for infinite recursions.&lt;/p&gt;

&lt;p&gt;Xdebug is also free and has support for Windows and Linux.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Hello world!</title>
   <link href="https://www.fernandobevilacqua.com/2009/03/hello-world/"/>
   <updated>2009-03-27T20:48:47+00:00</updated>
   <id>https://www.fernandobevilacqua.com/2009/03/hello-world</id>
   <content type="html">&lt;p&gt;Welcome to my personal website! Here you can find some information about my work, about the stuff I’ve created and about the useful (and not so useful) texts I read every day. I hope you can find here something cool or, at least, something able to help you somehow.&lt;/p&gt;

&lt;p&gt;Feel free to mail me at any time for suggestions and enjoy the &lt;span style=&quot;text-decoration: line-through;&quot;&gt;lack of&lt;/span&gt; content!&lt;/p&gt;
</content>
 </entry>
 

</feed>
