<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Alex Brodt – Articles</title><description>Tech, career and life notes, the universe and everything else.</description><link>https://alexbrodt.com/</link><language>en-US</language><item><title>Saving the Fire, by Itamar Vieira Junior</title><link>https://alexbrodt.com/book-saving-the-fire-by-itamar-vieira-junior</link><guid isPermaLink="true">https://alexbrodt.com/book-saving-the-fire-by-itamar-vieira-junior</guid><description>A reading about family, land, faith and the invisible layers that sustain life.</description><pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I just finished another good book, thanks Jéssica for the recommendation. This time &lt;a href=&quot;https://amzn.to/3NKh7rs&quot; target=&quot;_blank&quot;&gt;Saving the Fire by the well known brazilian author Itamar Vieira Junior&lt;/a&gt;. The book goes beyond just a family drama, it talks about family, conflicts, complicated feelings, but at the same time it touches topics that feels very structural in Brazil, like religion, the role of the church in people lifes, the relation with land and work, that direct dependence of nature where there is not much space to romanticize, it is more about survival, what sustain and also limit people.&lt;/p&gt;
&lt;p&gt;And the setting is not just a beautiful background, it really has weight in the story, it affects decisions, the way people live, everything happens near the Paraguassu river, in a place where agriculture defines the rhythm of life, and you can feel that all the time, the environment is very well described.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-saving-the-fire-by-itamar-vieira-junior.png&quot; alt=&quot;Canvas book Saving the Fire, by Itamar Vieira Junior&quot;&gt;&lt;/p&gt;
&lt;p&gt;The way the author builds the characters is also very interesting, there is no character you can easily label, everyone has contradictions, silences, hard choices, and the structure of the book helps with that, since the narrative changes perspectives, sometimes the stories connect, sometimes they complete each other, and sometimes even contradict, which gives this feeling that the truth is never in only one place.&lt;/p&gt;
&lt;p&gt;Moisés starts the story bringing this first view of the family, the father, the sisters, and his own path that leads him to a monastery, and this already brings the religion layer that crosses everything, then comes Luzia, that for me is a very strong character, someone who does not fit what people expect and still goes on, kind of by force, and then Maria, that carries this idea of displacement, leaving physically but still somehow connected to the same reality that shaped who she is.&lt;/p&gt;
&lt;p&gt;Another thing I really liked is how the book works symbolic elements in a very natural way, especially the presence of the four elements, earth, water, fire and air, they appear kind of spread in the narrative without explanation, and together with that there is a layer that reminds brazilian folklore, a kind of subtle magic, not fantasy exactly, but also not totally rational, and it works very well.&lt;/p&gt;
&lt;p&gt;Until the middle of the book I was really into it, mainly because some things stay open, there are heavy topics like abuse, motherhood, belonging, but they are suggested, not explained, and this creates space for the reader to think and interpret, and for me this is one of the best parts of reading.&lt;/p&gt;
&lt;p&gt;But at some point this changes, things start to be explained more directly, like the book wants to answer everything, and in this movement it loses a bit of the strength that was coming from what was not said, from that silent tension that was being built.&lt;/p&gt;
&lt;p&gt;The first half pulls you in very easily, but from the middle to the end it feels like the book loses a bit the direction, like it needs to explain too much or close things that did not need, it does not ruin the book, but it really depends on each person experience.&lt;/p&gt;
&lt;p&gt;It is a very well written book, both because of the characters and the environment and also the story itself, in the end it was a good reading, with parts I liked more than others, but still worth the time.&lt;/p&gt;
</content:encoded></item><item><title>Jurerê Night Run – Hard Rock Café 2026</title><link>https://alexbrodt.com/race-jurere-night-run-hard-rock-2026</link><guid isPermaLink="true">https://alexbrodt.com/race-jurere-night-run-hard-rock-2026</guid><description>I wasn&apos;t even going to run. The bib came from Mateus, the plan was just to tag along, and the night turned into a birthday on the course.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s been a while since I wrote something about running here. I think the last one was the &lt;a href=&quot;/race-running-sc21k-half-marathon-2025&quot;&gt;SC21k 2025&lt;/a&gt;.&lt;br&gt;To be honest, in the beginning of 2026 I kind of put running a little aside and didn’t even sign up for the usual races of the year.&lt;/p&gt;
&lt;p&gt;Then March came and with it the traditional Jurerê Night Run by Hard Rock Cafe. The last time I did this one was in &lt;a href=&quot;/race-jurere-night-run-hard-rock&quot;&gt;2024&lt;/a&gt;. I was not signed up this time as well. My friend Mateus Nava was going to run, but he got injured and couldn’t go, so he passed the entry to me. Zero training, really improvised, from one day to another.&lt;/p&gt;
&lt;p&gt;And different from other races, this one I didn’t prepare at all. So no goal, no strategy… to be honest, not much of a plan. The only plan was to run with my friends Mauricio Tognon and Regis Leandro.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/Foto-corrida-jurere-night-run-hard-rock-cafe-2026.jpeg&quot; alt=&quot;Photo during Jurerê Night Run Hard Rock Café 2026&quot;&gt;&lt;/p&gt;
&lt;p&gt;Jurerê at night has a really nice vibe. It’s not that quiet early training feeling, and it’s not that pressure of a race where you want to perform. It feels lighter, almost like a meeting, a small celebration. And there was a nice coincidence… both of my friends were having birthday exactly that day.&lt;/p&gt;
&lt;p&gt;We started without rush, talking more than running. No concern about pace at all. It was more about staying together and just letting the run happen. This changed everything, the whole race felt very light.&lt;/p&gt;
&lt;p&gt;A big part of the course is on the sand, with the dark ocean on the side, lights reflecting on the water, the sound of the event mixing with conversations and laughs. You could feel this mix between race and event, but for me it looked like most people were more focused on enjoying than really performing.&lt;/p&gt;
&lt;p&gt;Maybe that’s what made this race different. We spend a lot of time trying to control running… training plans, pace, progress, goals. And yes, all of this makes sense. I like it too. But sometimes, when you remove this layer, what is left is something simpler and maybe more real.&lt;/p&gt;
&lt;p&gt;Just running.&lt;/p&gt;
&lt;p&gt;Running just for running, &lt;a href=&quot;/not-everything-has-to-be-productive&quot;&gt;not everything needs a goal&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Not always the races you plan are the ones you remember. Sometimes it’s the one that appears in the middle of the way, no warning, no preparation, just the intention to enjoy and be there with friends.&lt;/p&gt;
&lt;p&gt;Thanks to Mateus for the entry. And to Mauricio and Regis… happy birthday running!&lt;/p&gt;
</content:encoded></item><item><title>Back to the classroom, master&apos;s degree mode</title><link>https://alexbrodt.com/back-to-the-classroom</link><guid isPermaLink="true">https://alexbrodt.com/back-to-the-classroom</guid><description>Notes from the first class of the course Social Network Analysis and Applied Artificial Intelligence at the PPG in Engineering, Knowledge Management and Media (UFSC).</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I had the first class of my master&amp;#39;s degree. It is funny how some sensations come back very fast. The university campus, the different rhythm of conversations, the professor organizing ideas in the &lt;del&gt;board&lt;/del&gt; projector, students from completely different areas sharing the same classroom. After three MBAs and the graduation I started back in 2007, entering again in a classroom has a certain taste of nostalgia.&lt;/p&gt;
&lt;p&gt;But at the same time the feeling is also very different. In the time of my first classes in university the internet was still consolidating itself as basic infrastructure of society. Today the discussion goes around artificial intelligence, gigantic data networks and models capable of interpreting human language.&lt;/p&gt;
&lt;p&gt;I am doing my master&amp;#39;s at the Graduate Program in Engineering and Knowledge Management at UFSC. The program studies how knowledge is created, structured and shared when people, technology and organizations meet. For me this connects a lot with what I already do at work. My daily routine is very much leading innovation initiatives and development of digital products. In some way, the master&amp;#39;s became a way to look with more method and depth to themes that already exist in my daily life like artificial intelligence, information networks and digital transformation.&lt;/p&gt;
&lt;p&gt;This beginning is happening in the course Social Network Analysis and Applied Artificial Intelligence. The idea is to understand how digital methods and artificial intelligence can be used to analyze data and networks in different contexts. Not only as tools to produce content, but as methodological instruments to analyze large volumes of information.&lt;/p&gt;
&lt;p&gt;Very early in the class appeared an interesting question: what is a unit of information? It can be a text, an image, a video, a tweet, a comment, a profile. Basically any element that can be transformed into data and analyzed computationally.&lt;/p&gt;
&lt;p&gt;The goal of the course is not to create programmers or machine learning specialists. The focus is more in understanding the concepts and learning how to use tools that allow collecting data, organizing information and extracting patterns.&lt;/p&gt;
&lt;p&gt;In many moments the class passed through graph theory, which is a mathematical base to understand networks. A graph is a simple structure composed by nodes and edges. Nodes represent entities and edges represent relations between them.&lt;/p&gt;
&lt;p&gt;When we think about digital social networks this becomes very intuitive. People are nodes, interactions are connections. Likes, comments, mentions and shares become metrics inside this network.&lt;/p&gt;
&lt;p&gt;The interesting part is that this structure allows us to see patterns that would be invisible if we look at the data individually. A graph can reveal who are the central actors, which groups are connected between themselves and how information circulates inside a system.&lt;/p&gt;
&lt;p&gt;Professor Rita showed a very interesting research example done during the pandemic. She analyzed the communication of the Health Ministries of Canada and Brazil on Twitter during forty days. From the data collection it was possible to build graphs that showed how information was spreading and which profiles were more influential in that network.&lt;/p&gt;
&lt;p&gt;In this kind of visualization something curious appears. A big circle in the center represents the profile with the highest centrality. In this case, the Ministry of Health itself. Around it appear smaller nodes representing users interacting with that account. Thicker lines indicate more frequent connections.&lt;/p&gt;
&lt;p&gt;Another part of the class discussed digital methods as a set of tools to analyze communication phenomena. This involves everything from data collection to visualization and interpretation. Four important elements were highlighted for any research using these approaches.&lt;/p&gt;
&lt;p&gt;First, understanding the context of the phenomenon being studied. Without that any analysis risks interpreting data outside of reality. Then the available infrastructure. Not every platform allows easy access to data. Some require paid APIs or restrict completely the data collection.&lt;/p&gt;
&lt;p&gt;The third point is the minimum technical knowledge. It is not necessary to be a programmer, but understanding basic concepts of tools and languages helps a lot. And finally the interpretative logic. Data by itself does not say too much. Analysis requires critical reading and theoretical understanding.&lt;/p&gt;
&lt;p&gt;Professor Alexandre went a bit deeper into the functioning of modern artificial intelligence. He explained how language models transform words into numerical vectors and how this allows comparing semantic contexts.&lt;/p&gt;
&lt;p&gt;When we type a question in a model like ChatGPT, it does not &amp;quot;understand&amp;quot; the sentence the same way humans understand. It transforms that text into mathematical representations and searches patterns inside a gigantic network of relations learned during training. These vector representations allow measuring similarity between contents. It is the same logic used in search engines, recommendation systems and many data analysis tools.&lt;/p&gt;
&lt;p&gt;While I was in the class I kept thinking how this kind of approach connects directly with what I do at work. In the world of technology and digital products we are constantly dealing with data, patterns and human behavior mediated by platforms. It would be great if the corporate world had more time to observe these phenomena with more attention.&lt;/p&gt;
&lt;p&gt;At the end of the class I had that good feeling of the beginning of a journey. The feeling that there is a big territory to explore, especially related to communication methodologies and research areas that are a bit outside of my purely technical work in management or IT.&lt;/p&gt;
&lt;p&gt;Communication today happens inside gigantic digital systems. Platforms, algorithms, data, networks. Understanding these structures maybe is one of the most interesting ways to study contemporary society.&lt;/p&gt;
&lt;p&gt;Stay hungry, stay foolish.&lt;/p&gt;
</content:encoded></item><item><title>Demon Copperhead – Barbara Kingsolver</title><link>https://alexbrodt.com/book-demon-copperhead-barbara-kingsolver</link><guid isPermaLink="true">https://alexbrodt.com/book-demon-copperhead-barbara-kingsolver</guid><description>A David Copperfield for today&apos;s America, poverty, opioids, and a boy trying to survive the system.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently I finished reading &lt;a href=&quot;https://amzn.to/3Ndp2gU&quot; target=&quot;_blank&quot;&gt;Demon Copperhead by Barbara Kingsolver&lt;/a&gt;. When I started the book I honestly didn’t know it was a kind of reinterpretation of David Copperfield from Dickens. I discovered this only while I was already reading. Even like this the book doesn’t feel like a copy, it has a very strong style of its own.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-demon-copperhead-barbara-kingsolver.png&quot; alt=&quot;Canvas - Book - Demon Copperhead - Barbara Kingsolver&quot;&gt;&lt;/p&gt;
&lt;p&gt;The story is narrated by Demon, a boy who is born in rural Virginia, in a trailer. His mother is a teenager and his father already died before he was born. The nickname Demon comes from his red hair. His life basically becomes a sequence of losses. He loses his mother, he loses the place where he lives, and slowly he also loses the trust in any adult. He moves between foster homes, families that explore child labor, people that should take care but clearly they don’t.&lt;/p&gt;
&lt;p&gt;In the middle of all this he grows up. Adolescence arrives and together comes the discovery of drugs. It starts with pain medication after an injury, something that at first looks normal. But little by little it becomes addiction and opens the door for other things.&lt;/p&gt;
&lt;p&gt;One thing I really liked in the book is the way of narration. Demon tells the story with a mix of anger and humor. He is not the kind of narrator that explains everything to the reader. It feels more like someone trying to understand what is happening while life keeps happening.&lt;/p&gt;
&lt;p&gt;You follow a boy being thrown from one place to another, losing family, losing friends, sometimes being used by adults. And even like this he keeps going forward, mostly because there is not really another option.&lt;/p&gt;
&lt;p&gt;There is also an interesting point in the book. It doesn’t try to put the blame in one big villain. There is no single bad guy. It feels more like a broken system around him. Poverty, abandonment, drugs, lack of structure… everything a bit mixed together.&lt;/p&gt;
&lt;p&gt;It is a heavy book. Not exactly the type of reading to escape the world for a moment. But at the same time it is very engaging. You want to continue reading just to see how far things go, or if at some moment life becomes a little better for him.&lt;/p&gt;
&lt;p&gt;I recommend mainly for people who like more raw and dramatic fiction. It is not exactly a comfortable story, but it is a very well told one.&lt;/p&gt;
</content:encoded></item><item><title>Not everything has to be productive</title><link>https://alexbrodt.com/not-everything-has-to-be-productive</link><guid isPermaLink="true">https://alexbrodt.com/not-everything-has-to-be-productive</guid><description>A reflection about hobbies, curiosity and the right to do things just for fun.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Some days I realize how everything in my routine needs to have a function, especially my free time. It feels like nothing can simply exist. Everything needs to serve a purpose.&lt;/p&gt;
&lt;p&gt;Reading becomes &amp;quot;self-growth&amp;quot;, running becomes a &amp;quot;performance plan&amp;quot;, English becomes a &amp;quot;career advantage&amp;quot;. Even resting needs a purpose, with hours tracked on the smartwatch, as if the only valid rest is the one that prepares you to produce more later.&lt;/p&gt;
&lt;p&gt;I admit that I fall into this trap sometimes. Running started as health and became a spreadsheet. Pace, heart rate, long progressive runs, strategy not to break at km 15, pressure from my running coach. English started as the desire to speak a second language and became a goal, a routine, daily consistency and also a corporate need. Books became a list, a ranking, a strategic reading order.&lt;/p&gt;
&lt;p&gt;I am a person who likes structure. I like to see evolution. I like to measure progress. I think I work better this way. But when the result becomes the only reason, something feels empty. It misses that inner desire to do something just because you want to.&lt;/p&gt;
&lt;p&gt;Recently I started a vinyl collection. I already bought more than 60 records. Jazz, Brazilian music, some risky choices that I bought just out of curiosity. There are records that I studied the price, compared pressings, even thought about resale. But most of the time, I just put one on and listen. I sit there looking at the cover while the music plays. &lt;a href=&quot;/getting-back-to-truly-listening-to-music&quot;&gt;I rediscovered how to really listen to music&lt;/a&gt;. It is soooo different from just opening Spotify and doing something else at the same time.&lt;/p&gt;
&lt;p&gt;The fact is that nobody ever asked me &amp;quot;what is the return of this?&amp;quot; or &amp;quot;what are you going to gain with this old stuff?&amp;quot;&lt;/p&gt;
&lt;p&gt;But when I say that I take English classes almost every day, the question always comes: &amp;quot;Is it for work?&amp;quot; Sometimes it is. Many times it is not. Sometimes it is just because I like to practice. There is no fluency deadline. It is just curiosity and the desire to learn another language. And curiosity alone is already enough for me.&lt;/p&gt;
&lt;p&gt;The same happens with Home Assistant, my homelab, or chess. Some things really solve problems. Automating lights, air conditioning, making life easier. But many things are just the pleasure of experimenting. That late-night engineering that starts simple and ends with you restarting the server at 2 a.m., hoping it will boot again without reinstalling everything. It is not about efficiency. It is about the joy of technology.&lt;/p&gt;
&lt;p&gt;If it does not help your career, your money, your health… something &amp;quot;useful&amp;quot;, it feels like a waste. But sometimes it is just part of life.&lt;/p&gt;
</content:encoded></item><item><title>Getting Back to Truly Listening to Music</title><link>https://alexbrodt.com/getting-back-to-truly-listening-to-music</link><guid isPermaLink="true">https://alexbrodt.com/getting-back-to-truly-listening-to-music</guid><description>About building a simple vinyl setup, slowing down, and turning music into a real ritual.</description><pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently I realized there is a big difference between listening to music and really hearing music. It sounds obvious, but I had never stopped to think about it calmly. For years I “listened” to music all day. Spotify open, infinite playlists, skipping songs after 20 seconds if they didn’t match my mood, letting it play while I worked, answered messages, solved problems.&lt;/p&gt;
&lt;p&gt;Music was always there, but not really with me.&lt;/p&gt;
&lt;p&gt;Last month I decided to start a vinyl hobby. I bought an Aiwa PX-850 turntable, simple but honest, Japanese equipment with solid construction from the early 90s. I connected it to an Edifier R1280 speaker. I did some research before buying, of course, but I had no intention of becoming an audiophile or being obsessed with technical details. I just wanted a good and honest system to sit down and listen.&lt;/p&gt;
&lt;p&gt;What I did not expect was how this would change my behavior. With vinyl, you don’t choose a song, you choose an album. You stand up, take the record, look at the cover, read the insert, see who produced it and who played on it. You put it on the turntable, place the needle, and sit down. And when you sit, it is to really listen.&lt;/p&gt;
&lt;p&gt;The first time I played A Arte de Tom Jobim from beginning to end, I realized it had been a long time since I listened to a full album without doing something else at the same time. In streaming, everything is easy and fast. If the song doesn’t catch you in the first seconds, you change it. If the mood changes, you change it. With vinyl, you accept the album as it is.&lt;/p&gt;
&lt;p&gt;My collection is getting interesting, maybe a little chaotic. There is Moreira da Silva, Dilermando Reis with Gotas de Lágrimas, which makes the living room feel calmer. There is the box A Obra de Chico Buarque, four records that feel almost like a historical document. Gilberto Gil with Realce. Milton Nascimento with Caçador de Mim, which asks for lower lights and a quieter house.&lt;/p&gt;
&lt;p&gt;There is also jazz. Night Train by The Oscar Peterson Trio completely changes the atmosphere. Milt Jackson playing Ellington has a kind of elegance that I really enjoy. I learned that I like this “New York hotel lobby” sound. But I also have Elton John, The Cure, Paul McCartney, Roupa Nova, Planet Hemp, and in the middle of all that, Mamonas Assassinas in the Brazilian pressing from 1995, because a collection is also about memories.&lt;/p&gt;
&lt;p&gt;It is a mix of MPB, samba, jazz, 80s pop, movie soundtracks, sertanejo, things I bought out of curiosity and others because of pure nostalgia.&lt;/p&gt;
&lt;p&gt;In the end, I discovered that vinyl has a ritual. I take a drink, sit in the armchair, and let the album play. I don’t skip tracks, I don’t divide my attention with ten other things. I listen to the whole side A, then I stand up, turn the record, and listen to side B. Sometimes a song that I would probably ignore on Spotify becomes the one that touches me the most, simply because it is part of that moment.&lt;/p&gt;
&lt;p&gt;For me, it is not just nostalgia, not a trend, and not about some supposed superior sound quality. It has been a new way of relating to music. Vinyl forced me to choose with more intention and to stay until the end.&lt;/p&gt;
&lt;p&gt;It also created a very nice moment at home. My wife and I stop everything to really listen to music together. It became our small connection. Even my daughter is learning the ritual. She already has some records from Barbie, Turma da Mônica, and Carrossel.&lt;/p&gt;
&lt;p&gt;In the end, this rediscovery has been a beautiful and enjoyable family moment. I really recommend it.&lt;/p&gt;
</content:encoded></item><item><title>The Psychology of Money by Morgan Housel</title><link>https://alexbrodt.com/book-the-psychology-of-money-morgan-housel</link><guid isPermaLink="true">https://alexbrodt.com/book-the-psychology-of-money-morgan-housel</guid><description>A simple book about money, behavior and time.</description><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently I finished reading &lt;a href=&quot;https://amzn.to/4s1z6Z5&quot; target=&quot;_blank&quot;&gt;The Psychology of Money by Morgan Housel&lt;/a&gt;. To be honest, I was expecting something more technical. Maybe more numbers, more theory, more deep behavioral economics. But the book does not go in this direction and in the end this is exactly why I think it is good.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-the-psychology-of-money-morgan-housel.png&quot; alt=&quot;Canvas - Book - The Psychology of Money by Morgan Housel&quot;&gt;&lt;/p&gt;
&lt;p&gt;It does not teach which stock you should buy, or how to beat the market. There is no magic formula to get rich. It talks about behavior. And if you really stop to think, behavior is what influences your financial life the most.&lt;/p&gt;
&lt;p&gt;The first thing that caught my attention is that finance is not a hard science. Success is not only intelligence. Luck matters. Context matters. Timing can be decisive. Accepting this makes you less arrogant and more realistic.&lt;/p&gt;
&lt;p&gt;The book talks a lot about time. Time is the biggest asset in investing. This is where compound interest lives and patience is fundamental. Staying in the game for a long time solves many things. The problem is that most people cannot stay.&lt;/p&gt;
&lt;p&gt;There is one idea that I found very interesting: rich is what you see, wealthy is what you don’t see. Wealth is invisible. It is the money you did not spend. Saving is the distance between your ego and your income.&lt;/p&gt;
&lt;p&gt;He also explains that you can be wrong many times and still do well. A small part of decisions creates most of the results. So looking investment by investment is a mistake. What really matters is the whole picture. The long-term view. Accepting that many things will go wrong along the way.&lt;/p&gt;
&lt;p&gt;Another important point is avoiding extremes. Liking risk is necessary because risk pays in the long run. But you need to fear ruin. If you break, you are out of the game. And without time, there is no compound interest that can save you.&lt;/p&gt;
&lt;p&gt;There is one simple question that summarizes the book: does this help me sleep at night? Some people sleep better taking more risk. Others only rest when they are more conservative. There is no single rule.&lt;/p&gt;
&lt;p&gt;I also liked the part about showing off. No one cares about your possessions as much as you think. Many times what we really want is respect, not the object. And respect does not come from an expensive car.&lt;/p&gt;
&lt;p&gt;It is a simple book and yes, many people may say it is too basic. But it brings a much more human view about money, and this is what makes it interesting. It reminds you that you are not a spreadsheet. You are a person.&lt;/p&gt;
</content:encoded></item><item><title>The work was never just code</title><link>https://alexbrodt.com/the-work-was-never-just-code</link><guid isPermaLink="true">https://alexbrodt.com/the-work-was-never-just-code</guid><description>A practical and market view about how AI is changing software development, the role of people and where technical leadership really matters.</description><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I complete 16 years working at &lt;a href=&quot;https://air-company.ai/&quot; target=&quot;_blank&quot;&gt;AI/R&lt;/a&gt;. In this time I already saw the company reinvent itself at least five times, always following the changes in technology. I&amp;#39;ve been working with software development since 2003 and this made me stop and reflect about the cycles I already crossed, promises of transformation and real changes in the way we build software. This current moment, with AI everywhere, is one more of these cycles. Ok, it&amp;#39;s not just one more. It is by far, the most transformative and impactful of all.&lt;/p&gt;
&lt;p&gt;It is almost impossible to talk about software development today without falling into the AI discussion. How many lines of code it generates, how much time it saves, how many people it &amp;quot;replaces&amp;quot;. This kind of debate is understandable, but it already starts looking to the wrong place.&lt;/p&gt;
&lt;p&gt;After so many years working with software development, the feeling I have is that AI is not changing the essence of the work. It is showing, in a very open and clear way, what was always fragile in the way we build software.&lt;/p&gt;
&lt;p&gt;The market always liked easy metrics. Lines of code, velocity, story points, commits. Remember &amp;quot;function points&amp;quot;? Yeah… AI just gave a new life to this behavior, now with nicer charts. But productivity is very different from quantity or volume. What really moves the needle is better product, less rework, more conscious technical decisions, teams less reactive and more questioning. This is still true, with or without AI.&lt;/p&gt;
&lt;p&gt;What really changes is where human effort makes difference. Coding was never the hardest part. Hard is to decide what to code, why to code, and when not to code. Last week, in a bar talk with some friends, we said that today we can build almost anything and launch products in just one week. AI accelerates execution, but it does not replace perception and judgment about when and what to do. On the contrary, it increases the cost of bad decisions. Making mistakes fast became cheap, but fixing poorly thought decisions in corporate environments is still expensive.&lt;/p&gt;
&lt;p&gt;I also see a lot of anxiety about reducing team size. But we already saw parts of this movie before. Whenever a technology makes something more efficient, the total usage tends to increase. With AI, the capacity to explore ideas, hypothesis and solutions grows a lot. This results in more product, more tests, more experiments, but also, many times, more organizational complexity. The bottleneck stops being code production and becomes alignment, architecture, long term vision and management.&lt;/p&gt;
&lt;p&gt;In this scenario, the role of technical leadership changes a lot. It requires less control of details, less line by line review, and more definition of standards, limits and principles. The tech lead stops being the &amp;quot;best programmer in the room&amp;quot; and becomes the person who helps the team ask better questions, interpret answers and make coherent decisions in a bigger context. Yes, today more than ever, the tech lead needs to understand business and the impact that each implementation from the team brings to the company.&lt;/p&gt;
&lt;p&gt;Architecture also becomes relevant again. Not as pretty diagrams, but as a decision tool. AI generates plausible solutions all the time, it makes everything work. But does this implementation really talk to the architecture? This is the filter that separates what is plausible from what is sustainable. Companies that don&amp;#39;t have this become hostage of solutions that work today and cost a lot tomorrow, now in a much bigger scale.&lt;/p&gt;
&lt;p&gt;Another point that is not much talked about is maturity. AI does not level teams up automatically. It amplifies what already exists. Mature teams become faster and more consistent. Immature teams become faster to produce misalignment. The difference is not the tool, but the clarity of processes, quality criteria and technical responsibility.&lt;/p&gt;
&lt;p&gt;The market will be less obsessed with &amp;quot;how much code was generated&amp;quot; and more focused on who can transform this capacity into real product. Companies that know how to use AI to reduce noise, increase clarity and strengthen decisions will stand out. The others will just deliver the same pains, only faster.&lt;/p&gt;
&lt;p&gt;In the end, AI does not reduce the importance of people, it increases it. Because when execution becomes easy, thinking well becomes the most scarce asset.&lt;/p&gt;
</content:encoded></item><item><title>East of Eden by John Steinbeck</title><link>https://alexbrodt.com/book-east-of-eden-john-steinbeck</link><guid isPermaLink="true">https://alexbrodt.com/book-east-of-eden-john-steinbeck</guid><description>A big book, with many characters and side stories, but surprisingly easy to read. A modern retelling of Cain and Abel, about choice, love, hate and everything in between.</description><pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading &lt;a href=&quot;https://amzn.to/4aG2iyL&quot; target=&quot;_blank&quot;&gt;East of Eden by John Steinbeck&lt;/a&gt; yesterday. It is a big book, but surprisingly the reading is not heavy. Actually, the story flows slowly, like it has patience with the reader.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-east-of-eden-john-steinbeck.png&quot; alt=&quot;Canvas Book East of Eden by John Steinbeck&quot;&gt;&lt;/p&gt;
&lt;p&gt;Right in the beginning, Steinbeck makes very clear the background of everything, which is the biblical story of Cain and Abel. Basically, everything starts from there. &lt;a href=&quot;https://amzn.to/4aG2iyL&quot; target=&quot;_blank&quot;&gt;East of Eden&lt;/a&gt; is a modern retelling of this idea. Are we responsible for each other? Are we prisoners of who we are, of what we inherit, of what people did to us? Or do we have choice?&lt;/p&gt;
&lt;p&gt;The story follows two families, the Hamiltons and the Trasks, but it is with the Trasks that the Cain and Abel parallel is very clear. And not only once. Steinbeck repeats this conflict in different generations, almost forcing us to see that this is not coincidence, it is a parable. Charles and Adam. Caleb and Aron. C and A. There is not much subtlety here.&lt;/p&gt;
&lt;p&gt;Steinbeck gets a lot of criticism. People say he is too simple, too direct, too &amp;quot;easy&amp;quot;. I like exactly that. His writing is clean, no fancy stuff. He does not try to sound smarter than he is. And he describes places like few writers can. Even with this simple writing, the characters are very complex. I never really knew who to root for. For me, this is a sign of good characters.&lt;/p&gt;
&lt;p&gt;In the center of the story we have Adam Trask and Samuel Hamilton. Adam comes from the East, leaves his brother Charles behind, and carries a guilt that never really goes away. He marries Cathy. Cathy is not ambiguous. She is evil. Period. Steinbeck does not try to save her at any moment. She is almost the image of evil, and still it works.&lt;/p&gt;
&lt;p&gt;The book goes on without hurry. Characters appear, disappear, die. Some side stories look important and then are just gone. This bothered me a little. There are parts that could be cut. The book could be shorter without losing strength. But at the same time, this loose structure fits the main idea. Life is not organized. People don’t close perfect arcs. Some just pass through our lives and that’s it.&lt;/p&gt;
&lt;p&gt;The book is very brutal in many moments. Physical and psychological violence, suicide, murder, abuse. And sex. More explicit than I expected for a book published in 1952.&lt;/p&gt;
&lt;p&gt;Another thing that bothered me was the narrator. He says he rebuilds the story from diaries, memories and reports. Ok. But sometimes he knows things he could not possibly know. This broke a bit my immersion. Even so, the book works. Because deep down it talks about something very simple and very human: choice.&lt;/p&gt;
&lt;p&gt;The idea of timshel. You may. You can. The past hurts, leaves marks, but it does not decide everything. The whole book turns around this. Hurt people can heal. Or they can harden. They can repeat the cycle. Or break it.&lt;/p&gt;
&lt;p&gt;One idea stayed a lot with me: the most hurt people are also the ones who have the biggest capacity to heal. But they don’t always choose that. Sometimes a hurt heart does not heal, it becomes indifferent.&lt;/p&gt;
&lt;p&gt;Even with all the evil, violence and cynicism, the book is not only darkness. There is hope there. A broken hope, imperfect, but real. Love appears as something fragile and dangerous. To love makes you vulnerable, but also gives you choice.&lt;/p&gt;
&lt;p&gt;In the end, what I liked most about &lt;a href=&quot;https://amzn.to/4aG2iyL&quot; target=&quot;_blank&quot;&gt;East of Eden&lt;/a&gt; is exactly this idea: we are not only what people did to us. We are, in some way, what we choose to do after that. And there is always a chance to change this choice.&lt;/p&gt;
&lt;p&gt;A big book, sometimes excessive, but very human and very well written. I recommend it.&lt;/p&gt;
</content:encoded></item><item><title>When code stops being the center</title><link>https://alexbrodt.com/when-code-stops-being-the-center</link><guid isPermaLink="true">https://alexbrodt.com/when-code-stops-being-the-center</guid><description>A personal reflection about AI, software development, control, and the silent discomfort that comes with this change.</description><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The change is happening. Not from today. But now it is impossible to ignore.&lt;/p&gt;
&lt;p&gt;This change is not about AI writing code faster. Not about a new tool, hype, or another product promising to revolutionize the market using AI. The point is that who is creating software has changed. And yes, this brings way more impact than it looks at first sight.&lt;/p&gt;
&lt;p&gt;When people that are not &amp;quot;from the area&amp;quot; start to create prototypes that work, integrate systems, and solve real problems, the shock is not technical. It is emotional. It is identity. It gives a strange feeling of losing territory.&lt;/p&gt;
&lt;p&gt;For a long time, writing code was the center. That was where the value was. The power. The control. But this was already being diluted for years. Frameworks, libs, abstractions, copy paste, stack overflow… AI only accelerated something that was already happening for a long time. Code became a commodity.&lt;/p&gt;
&lt;p&gt;The discomfort appears when the focus leaves the code and goes to another layer. Understand the problem. Explain context. Validate answers. Think about impact, architecture, security. This requires another type of skill. And it takes us out of a comfortable place. Specially people that always worked executing well defined tasks, detailed tickets, closed scope. When the answer does not come ready, when you need to ask better instead of typing more, fear appears. The feeling of losing control.&lt;/p&gt;
&lt;p&gt;The future that starts to appear is not the end of technical skill, but its evolution. Low-code and no-code tools did not die. They are being swallowed by AI, becoming something much more powerful. Maybe we stop choosing language, framework, frontend or backend for simple things. Maybe the choice becomes an assistant. One single interaction point where the interface is built on the fly to solve a specific pain.&lt;/p&gt;
&lt;p&gt;At the same time, this does not mean everything becomes simple. The opposite. Creating a draft is easy, but keeping a system alive is where the game separates the &amp;quot;men&amp;quot; from the &amp;quot;boys&amp;quot;. Trusting the generated logic is still hard. Integrating without breaking, scaling when volume grows, guaranteeing security and not letting technical debt bury the project… none of this disappears magically. The role of the specialist does not end, it just levels up. He becomes the guardian of quality in a sea of automatically generated code.&lt;/p&gt;
&lt;p&gt;Maybe this role changes faster than we would like. Developer, builder, product owner, architect, the name does not really matter. Less mechanical execution, more decisions. Less typing, more thinking. Less control over each line, more responsibility for the whole system.&lt;/p&gt;
&lt;p&gt;Maybe this future does not arrive all at once. Maybe it comes little by little. Maybe we are living exactly the transition, where knowing how to do things still matters, but knowing what and why to do becomes the real differential.&lt;/p&gt;
&lt;p&gt;In the end, what bothers the most is not losing a job, or a profession. It is losing the feeling of control. The clarity of where our role starts and ends in a world where the machine writes, but only the human is responsible for the mistake.&lt;/p&gt;
&lt;p&gt;Accepting this is not easy. But ignoring it feels worse.&lt;/p&gt;
</content:encoded></item><item><title>The weight of the dead bird – Aline Bei</title><link>https://alexbrodt.com/book-the-weight-of-the-dead-bird-aline-bei</link><guid isPermaLink="true">https://alexbrodt.com/book-the-weight-of-the-dead-bird-aline-bei</guid><description>An intense, sad and fragmented reading that made me think about pain, choices and the limit of sensitivity.</description><pubDate>Sat, 24 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading The weight of the dead bird by Aline Bei and I was left with a kind of heavy feeling, a bit uncomfortable. It is a sad book. Really sad. Not that beautiful and poetic melancholy, but a sadness that keeps growing, event after event, like there is not much space to breathe.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-the-weight-of-the-dead-bird-aline-bei.png&quot; alt=&quot;Canvas book The Weight of the Dead Bird - Aline Bei&quot;&gt;&lt;/p&gt;
&lt;p&gt;In the end, the idea feels almost too simple: life is a breath. It goes fast, it escapes from our hands. Along with that, a thought came to me that I couldn&amp;#39;t ignore. The character, in many moments, seems to like suffering. Or maybe not like it, but accept it. She does very little to change the direction of her life. From very early, she starts drawing all the paths that lead to this suffering.&lt;/p&gt;
&lt;p&gt;I must say I didn&amp;#39;t like the poetic style. Too many line breaks, too much fragmented text. In some moments, when the book takes a break and longer sentences appear, complete ones, I felt a relief. Reading full sentences calms my eyes, my head.&lt;/p&gt;
&lt;p&gt;At the beginning I thought it was amazing. It makes a lot of sense as the portrait of a child writing, thinking, feeling. I even imagined that this style would change with time, that the writing would grow together with the character. Ok, I was naive. Poetry is the book. It&amp;#39;s part of the concept. I understand that. I just don&amp;#39;t like it. For me it becomes too fragmented, tiring, exhausting.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s impossible to deny that this format helps to soften the impact of what is being said. Maybe if it was a more traditional prose, some parts would be unbearable. Even so, the reading hits like a punch in the stomach. The kind that leaves you without air for a while. It&amp;#39;s a book to read fast, in one go, because stopping in the middle feels worse. A very positive point is that the author doesn&amp;#39;t stretch the story just to create more pages. No filler, it feels well measured.&lt;/p&gt;
&lt;p&gt;The book overflows with feeling all the time, it&amp;#39;s very sensitive. But it&amp;#39;s also a sequence of sadness. Tragedy after tragedy. I had the feeling of crossing pages and pages made only of pain. It left me feeling down during the whole reading.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a book that makes you feel and think a lot. It&amp;#39;s intense, sad and unique. In the end, you just want to hug your parents, hug your dog. Besides the line breaks, I really liked the author&amp;#39;s writing style. It&amp;#39;s not a book that makes me want to reread it, but it&amp;#39;s definitely a book that I will remember.&lt;/p&gt;
</content:encoded></item><item><title>It&apos;s All River (and almost nothing goes deep)</title><link>https://alexbrodt.com/book-its-all-river-carla-madeira</link><guid isPermaLink="true">https://alexbrodt.com/book-its-all-river-carla-madeira</guid><description>I finished reading It&apos;s All River. Heavy themes, a writing style that tries to be poetic, but everything feels too shallow. A book that promised a lot, had potential, but did not deliver.</description><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading &lt;a href=&quot;https://amzn.to/49CyrHd&quot; target=&quot;_blank&quot;&gt;It&amp;#39;s All River by Carla Madeira&lt;/a&gt;. A friend recommended it to me, so I searched about the book and found many very positive reviews. People saying it was &amp;quot;beautiful&amp;quot;, &amp;quot;powerful&amp;quot;, &amp;quot;breathtaking&amp;quot;. I did a mistake, I created expectations.&lt;/p&gt;
&lt;p&gt;My wife had already warned me. She tried to read it and gave up, said the book did not grab her and she stopped in the middle. I still don&amp;#39;t have the detachment to abandon books halfway, maybe another mistake. I went until the end and yes, I was disappointed.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-its-all-river-carla-madeira.png&quot; alt=&quot;Canvas of the book It&apos;s All River by Carla Madeira&quot;&gt;&lt;/p&gt;
&lt;p&gt;The book talks about prostitution, domestic violence, abuse, pain, emotional misery. This exists. It exists much more than we like to admit. I don&amp;#39;t mind heavy books or uncomfortable stories. That is not the problem. The problem is that everything feels shallow. This river does not have the depth that the themes deserve.&lt;/p&gt;
&lt;p&gt;These are complex subjects, but they are treated in a superficial way. The book touches the topic, uses a strong sentence, and moves on. It does not sustain the discussion. It does not face what it puts on the table.&lt;/p&gt;
&lt;p&gt;In my view, if you choose to bring themes this big, you need to carry them until the end. You need to treat them with the seriousness and depth they demand. Here, the feeling is that it could have been a great book, but it wasn&amp;#39;t.&lt;/p&gt;
&lt;p&gt;The writing tries to be poetic all the time. It feels like every sentence was made to cause impact. Metaphor after metaphor: water, river, flow, liquid pain, suffering that runs. For me, it feels forced. Cliché. Too sweet. The beauty of the text dies in the excess.&lt;/p&gt;
&lt;p&gt;The chapters are very short and the reading becomes too fragmented. The language tries to mix impact, poetry, and shock, but many times this hurts more than it helps.&lt;/p&gt;
&lt;p&gt;Dalva and Venâncio do not work as a couple. There is no chemistry, and the dialogues are often confusing. The relationships between characters demand extra effort from the reader, without giving depth in return.&lt;/p&gt;
&lt;p&gt;In the end, &lt;a href=&quot;https://amzn.to/49CyrHd&quot; target=&quot;_blank&quot;&gt;IIt&amp;#39;s All River&lt;/a&gt; feels like a book made to cause impact and emotion, not real reflection. The themes are big, but the treatment is shallow.&lt;/p&gt;
</content:encoded></item><item><title>Does staycation really exist?</title><link>https://alexbrodt.com/does-staycation-really-exist</link><guid isPermaLink="true">https://alexbrodt.com/does-staycation-really-exist</guid><description>A small reflection about vacation at home, English words, curious terms and this moment to slow down without going anywhere.</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Right now I am on vacation. At least, officially.&lt;/p&gt;
&lt;p&gt;This week I was having an English class and at some moment of the conversation, I told my teacher that I was &lt;em&gt;on vacation&lt;/em&gt;. He made that classic pause, looked at the screen, noticed that I was exactly in the same home office as always, same background, same chair, same picture on the wall… and he not only corrected my word choice, but also used the moment to teach me a term that, honestly, I thought was a joke: &lt;strong&gt;staycation&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;At that moment I laughed. I thought it was some modern joke, one of those invented words that appear in ultra mega blaster business LinkedIn posts. But very calmly, he shared the screen and opened the Cambridge Dictionary. And to my total surprise… the word really exists.&lt;/p&gt;
&lt;p&gt;Staycation is literally vacation at home. Vacation without traveling. You take time off work, but you don&amp;#39;t take a plane, you don&amp;#39;t pack a suitcase, you don&amp;#39;t face airport lines, you don&amp;#39;t sleep in a strange mattress. You stay. At home.&lt;/p&gt;
&lt;p&gt;I found this very curious, because I always learned that “férias” in English was &lt;em&gt;vacation&lt;/em&gt;. Simple like that. One single word. And suddenly there is a specific term for when you are on vacation, but you don&amp;#39;t travel.&lt;/p&gt;
&lt;p&gt;This made me think if this word is really common in the daily life of native speakers or if it is more contextual, used only in some situations. I also ask myself if it is an old term or if it appeared with the pandemic, when many people started to redefine what rest really means.&lt;/p&gt;
&lt;p&gt;In my case, it makes total sense. I will not travel. I will stay here. I will &lt;em&gt;staycation&lt;/em&gt;. Enjoy the house, the pool, the beach, my wife and my daughter. Ok, I live in Florianópolis and this helps a lot, but no big plans.&lt;/p&gt;
&lt;p&gt;And of course, like always, there will be space for books, runs, some chess games and those Home Assistant experiments that start simple and finish at two in the morning, praying to not break anything after a restart and needing to &lt;a href=&quot;/how-to-rename-localtuya-entities-home-assistant-after-reinstall&quot;&gt;reinstall everything &lt;del&gt;like I did last week&lt;/del&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For me, vacations were never really about going to some place. It is more about leaving the autopilot for a while. Even if it means staying exactly where I already am.&lt;/p&gt;
</content:encoded></item><item><title>The Book Thief</title><link>https://alexbrodt.com/book-the-book-thief</link><guid isPermaLink="true">https://alexbrodt.com/book-the-book-thief</guid><description>Personal thoughts on The Book Thief, by Markus Zusak. A fast read, painful, beautiful, and hard to forget.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&amp;quot;Here is a small fact: you are going to die.&amp;quot;&lt;/p&gt;
&lt;p&gt;That&amp;#39;s how &lt;a href=&quot;https://amzn.to/3LM9S1b&quot; target=&quot;_blank&quot;&gt;The Book Thief&lt;/a&gt;, written by Markus Zusak, begins. And right from the start you can feel this is not a normal read. It&amp;#39;s a warning that stays with you the whole time, even when the story feels lighter.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-livro-a-menina-que-roubava-livros-markus-zusak.png&quot; alt=&quot;Canvas book The Book Thief - Markus Zusak&quot;&gt;&lt;/p&gt;
&lt;p&gt;The story is set in Nazi Germany, starting in 1939, and it&amp;#39;s narrated by Death. Yes, Death. This could easily go wrong, but it doesn&amp;#39;t. Actually, it works really well. I honestly loved this choice. Death has personality. He is ironic, tired, sometimes almost kind. He looks at humans with a mix of curiosity and sadness, trying to understand how people can be so good and so cruel at the same time.&lt;/p&gt;
&lt;p&gt;We follow Liesel Meminger, a girl who loses her brother at the beginning of the story and is sent to live with foster parents. There she creates a deep bond with her foster father, Hans, probably one of the most kind and lovable characters in the whole book, and with Rudy, her best friend. Loyal, impulsive, and impossible not to like.&lt;/p&gt;
&lt;p&gt;Books enter Liesel&amp;#39;s life almost by accident. She steals her first book without even knowing how to read. Over time, learning to read becomes a way to survive. Maybe even a way to escape the life she is living.&lt;/p&gt;
&lt;p&gt;At some point, the family hides Max, a Jewish man, in the basement. From there, the book becomes much heavier. The constant fear, the silence, the inspections, the feeling that any small mistake could cost everyone their lives. All of this is shown through the eyes of a child, who doesn&amp;#39;t fully understand the political context, but feels all the anguish and injustice of what is happening.&lt;/p&gt;
&lt;p&gt;One of the things that marked me the most is the theme of words. Their power. Hitler controls people through words, propaganda, speeches, symbols. Liesel and Max also resist with words. Through reading, stories, and writing. It&amp;#39;s beautiful and cruel at the same time, because we know how it ends, even when the book pretends we don&amp;#39;t.&lt;/p&gt;
&lt;p&gt;The reading in the shelter during the bombings really stayed with me. Just like the marches of Jews through the town. Hans offering bread and being beaten for it. These scenes are simple, but very strong.&lt;/p&gt;
&lt;p&gt;The ending… well, the ending I was already expecting. Death warned us at the beginning. Dark times that the world lived through, and if we stop to think, some places still live through today.&lt;/p&gt;
&lt;p&gt;After finishing the book, I watched the movie with my wife, and I was really glad I had read the book first. I thought the movie was quite weak, far from what the book delivers. If I had started with the movie, I would probably have lost the impact that only reading can give.&lt;/p&gt;
&lt;p&gt;The book is not perfect. Far from being the best book I&amp;#39;ve ever read. Even so, it&amp;#39;s very good. A book about death that, deep down, talks about humanity. About how even in one of the worst periods of history, there were still small acts of kindness, friendship, and courage.&lt;/p&gt;
&lt;p&gt;I recommend it.&lt;/p&gt;
</content:encoded></item><item><title>How to integrate Alexa with Home Assistant the &quot;raw&quot; way (Skill + Lambda + IAM + Alexa Media Player)</title><link>https://alexbrodt.com/alexa-home-assistant-from-scratch-skill-lambda-iam</link><guid isPermaLink="true">https://alexbrodt.com/alexa-home-assistant-from-scratch-skill-lambda-iam</guid><description>A complete (and no-magic) step-by-step guide to make Alexa control Home Assistant using a Smart Home Skill, AWS Lambda, IAM, account linking and, as a bonus, Alexa Media Player for TTS and announcements.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Integrating Alexa with Home Assistant using the &amp;quot;official and complete&amp;quot; path is the kind of thing that works really well… after you get punched a few times along the way.&lt;/p&gt;
&lt;p&gt;Here I’m going to leave the full step-by-step, from zero. The boring parts (Skill, Lambda, IAM, correct region), the critical parts (HTTPS/443 and account linking), and the fun part (Alexa Media Player to make your house talk).&lt;/p&gt;
&lt;p&gt;&lt;Notice type=&quot;info&quot;&gt;This is the Home Assistant &amp;quot;Smart Home Skill&amp;quot; path. It&amp;#39;s more work, but it&amp;#39;s what gives you the real smart home experience, like saying &amp;quot;Alexa, turn off the lights&amp;quot; without having to mention any skill name. The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/&quot;&gt;official HA docs&lt;/a&gt; describe this flow and its requirements, including the need for valid HTTPS/443 and a trusted certificate.&lt;/Notice&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h6&gt;Prerequisites you need to have sorted out first&lt;/h6&gt;
&lt;p&gt;&lt;Notice type=&quot;warning&quot;&gt;Your Home Assistant must be accessible from the internet over HTTPS, using a valid certificate (&lt;a href=&quot;https://letsencrypt.org/&quot;&gt;Let&amp;#39;s Encrypt&lt;/a&gt; is fine) and, ideally, on port 443. Self-signed certificates do not work for account linking.&lt;/Notice&gt;&lt;/p&gt;
&lt;p&gt;That usually means one of these options (pick your poison):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/home-assistant-https-with-own-domain&quot;&gt;reverse proxy + 443 pointing to HA&lt;/a&gt; (custom domain + Let&amp;#39;s Encrypt)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/home-assistant-remote-access-with-cloudflare-tunnel&quot;&gt;Cloudflare Tunnel&lt;/a&gt; (works well and is my current setup)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.duckdns.org/&quot;&gt;DuckDNS&lt;/a&gt; + Let&amp;#39;s Encrypt (the classic)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;I won&amp;#39;t go too deep here, because every setup is its own universe. Just keep this rule in mind: Alexa account linking gets very picky if you move away from &amp;quot;valid HTTPS on port 443&amp;quot;. The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#requirements&quot;&gt;Home Assistant docs&lt;/a&gt; repeat this a lot.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h6&gt;Step 1. Create the Smart Home Skill in Alexa Developer Console&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;Go to the &lt;a href=&quot;https://developer.amazon.com/alexa/console/ask&quot;&gt;Alexa Developer Console&lt;/a&gt; and create a new skill.&lt;/li&gt;
&lt;li&gt;Choose &amp;quot;Smart Home&amp;quot; and &amp;quot;Provision your own&amp;quot;.&lt;/li&gt;
&lt;li&gt;Make sure it&amp;#39;s using payload v3 and take note of the Skill ID. You&amp;#39;ll need it for Lambda.&lt;/li&gt;
&lt;/ol&gt;
&lt;Notice type=&quot;tip&quot;&gt;
Use the same Amazon account you use in the Alexa app and on your Echo devices. Otherwise you’ll create a beautiful skill that never shows up where it matters.
&lt;/Notice&gt;

&lt;hr&gt;
&lt;h6&gt;Step 2. Create the IAM Role (so Lambda can run)&lt;/h6&gt;
&lt;p&gt;In the &lt;a href=&quot;https://console.aws.amazon.com/iam/&quot;&gt;AWS IAM Console&lt;/a&gt;, create a Role for the &amp;quot;Lambda&amp;quot; service.
Attach the &lt;code&gt;AWSLambdaBasicExecutionRole&lt;/code&gt; policy.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s it. Don&amp;#39;t overthink this part.&lt;/p&gt;
&lt;p&gt;The Home Assistant docs describe exactly this path, including citing the policy.&lt;/p&gt;
&lt;hr&gt;
&lt;h6&gt;Step 3. Create the Lambda function (and pick the right region)&lt;/h6&gt;
&lt;Notice type=&quot;warning&quot;&gt;
Here’s a common trap: the Lambda region must be compatible with the skill locale, not where you physically live.
&lt;/Notice&gt;

&lt;p&gt;For en-US (and also pt-BR), Home Assistant recommends &lt;strong&gt;US East (N. Virginia)&lt;/strong&gt;. If you create the Lambda in another region, the setup may look finished but the skill simply won’t work, with no obvious error.&lt;/p&gt;
&lt;p&gt;So:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;In &lt;a href=&quot;https://console.aws.amazon.com/lambda/&quot;&gt;AWS Lambda Console&lt;/a&gt;: Create function → Author from scratch&lt;/li&gt;
&lt;li&gt;Runtime: Python 3.x (use the latest available)&lt;/li&gt;
&lt;li&gt;Execution role: use the role you created earlier&lt;/li&gt;
&lt;li&gt;Add trigger: &amp;quot;Alexa Smart Home&amp;quot;&lt;/li&gt;
&lt;li&gt;Paste your Skill ID&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h6&gt;Step 4. Lambda code (the proxy to &lt;code&gt;/api/alexa/smart_home&lt;/code&gt;)&lt;/h6&gt;
&lt;p&gt;At the end of the day, this Lambda does one thing only: it receives what Alexa sends and forwards it straight to Home Assistant’s &lt;code&gt;/api/alexa/smart_home&lt;/code&gt; endpoint. No real magic here.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#smart-home-skill-api&quot;&gt;Home Assistant docs&lt;/a&gt; tell you to copy a Python script from a &lt;a href=&quot;https://gist.github.com/keatontaylor/alexa-home-assistant&quot;&gt;specific gist&lt;/a&gt;, already adapted for some scenarios like proactive events.&lt;/p&gt;
&lt;p&gt;Below is a clean, formatted version of &lt;code&gt;lambda_function.py&lt;/code&gt;, based on that gist and working well in practice:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;&amp;quot;&amp;quot;&amp;quot;
Alexa Smart Home Skill Adapter for Home Assistant
Based on the community gist referenced by Home Assistant documentation.

Env vars:
- BASE_URL (required): https://your-domain (no trailing slash)
- NOT_VERIFY_SSL (optional): True to ignore SSL issues (not recommended)
- DEBUG (optional): True for verbose logs and token fallback
- LONG_LIVED_ACCESS_TOKEN (optional): debug/testing only
&amp;quot;&amp;quot;&amp;quot;
import json
import logging
import os
from typing import Any, Dict

import urllib3

_debug = bool(os.environ.get(&amp;quot;DEBUG&amp;quot;))

_logger = logging.getLogger(&amp;quot;HomeAssistant-SmartHome&amp;quot;)
_logger.setLevel(logging.DEBUG if _debug else logging.INFO)

logging.getLogger(&amp;quot;urllib3&amp;quot;).setLevel(logging.INFO)


def _mk_error(error_type: str, message: str) -&amp;gt; Dict[str, Any]:
    return {
        &amp;quot;event&amp;quot;: {
            &amp;quot;payload&amp;quot;: {
                &amp;quot;type&amp;quot;: error_type,
                &amp;quot;message&amp;quot;: message,
            }
        }
    }


def lambda_handler(event: Dict[str, Any], context: Any) -&amp;gt; Dict[str, Any]:
    _logger.info(&amp;quot;Processing Alexa request&amp;quot;)

    base_url = os.environ.get(&amp;quot;BASE_URL&amp;quot;)
    if not base_url:
        _logger.error(&amp;quot;BASE_URL environment variable not set&amp;quot;)
        return _mk_error(&amp;quot;INVALID_REQUEST&amp;quot;, &amp;quot;BASE_URL environment variable must be set&amp;quot;)

    base_url = base_url.rstrip(&amp;quot;/&amp;quot;)

    directive = event.get(&amp;quot;directive&amp;quot;)
    if not directive:
        return _mk_error(&amp;quot;INVALID_REQUEST&amp;quot;, &amp;quot;Request missing directive&amp;quot;)

    payload_version = directive.get(&amp;quot;header&amp;quot;, {}).get(&amp;quot;payloadVersion&amp;quot;)
    if payload_version != &amp;quot;3&amp;quot;:
        return _mk_error(&amp;quot;INVALID_REQUEST&amp;quot;, f&amp;quot;Only payloadVersion 3 is supported, got {payload_version}&amp;quot;)

    scope = (
        directive.get(&amp;quot;endpoint&amp;quot;, {}).get(&amp;quot;scope&amp;quot;)
        or directive.get(&amp;quot;payload&amp;quot;, {}).get(&amp;quot;grantee&amp;quot;)
        or directive.get(&amp;quot;payload&amp;quot;, {}).get(&amp;quot;scope&amp;quot;)
    )

    if not scope or scope.get(&amp;quot;type&amp;quot;) != &amp;quot;BearerToken&amp;quot;:
        return _mk_error(&amp;quot;INVALID_REQUEST&amp;quot;, &amp;quot;Request missing BearerToken scope&amp;quot;)

    token = scope.get(&amp;quot;token&amp;quot;)

    if not token and _debug:
        token = os.environ.get(&amp;quot;LONG_LIVED_ACCESS_TOKEN&amp;quot;)

    if not token:
        return _mk_error(&amp;quot;INVALID_AUTHORIZATION_CREDENTIAL&amp;quot;, &amp;quot;Authentication token is required&amp;quot;)

    verify_ssl = not bool(os.environ.get(&amp;quot;NOT_VERIFY_SSL&amp;quot;))
    http = urllib3.PoolManager(
        cert_reqs=&amp;quot;CERT_REQUIRED&amp;quot; if verify_ssl else &amp;quot;CERT_NONE&amp;quot;,
        timeout=urllib3.Timeout(connect=2.0, read=10.0),
    )

    try:
        resp = http.request(
            &amp;quot;POST&amp;quot;,
            f&amp;quot;{base_url}/api/alexa/smart_home&amp;quot;,
            headers={
                &amp;quot;Authorization&amp;quot;: f&amp;quot;Bearer {token}&amp;quot;,
                &amp;quot;Content-Type&amp;quot;: &amp;quot;application/json&amp;quot;,
            },
            body=json.dumps(event).encode(&amp;quot;utf-8&amp;quot;),
        )

        if resp.status &amp;gt;= 400:
            body = resp.data.decode(&amp;quot;utf-8&amp;quot;)
            _logger.error(&amp;quot;Home Assistant returned %s: %s&amp;quot;, resp.status, body)

            error_type = &amp;quot;INVALID_AUTHORIZATION_CREDENTIAL&amp;quot; if resp.status in (401, 403) else &amp;quot;INTERNAL_ERROR&amp;quot;
            return _mk_error(error_type, body)

        return json.loads(resp.data.decode(&amp;quot;utf-8&amp;quot;))

    except Exception as e:
        _logger.exception(&amp;quot;Unexpected error: %s&amp;quot;, str(e))
        return _mk_error(&amp;quot;INTERNAL_ERROR&amp;quot;, &amp;quot;An unexpected error occurred&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After pasting the code, click &lt;strong&gt;Deploy&lt;/strong&gt;.&lt;/p&gt;
&lt;h6&gt;Step 5. Lambda environment variables (don&amp;#39;t skip this)&lt;/h6&gt;
&lt;p&gt;In the Lambda configuration, go to &lt;strong&gt;Configuration -&amp;gt; Environment variables&lt;/strong&gt; and add:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;BASE_URL&lt;/code&gt; = your public Home Assistant URL (no trailing slash)&lt;br&gt;Example: &lt;code&gt;https://home.yourdomain.com&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Optional, if needed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DEBUG&lt;/code&gt; = &lt;code&gt;True&lt;/code&gt; (for testing and logs)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LONG_LIVED_ACCESS_TOKEN&lt;/code&gt; = debug/testing only, remove later&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NOT_VERIFY_SSL&lt;/code&gt; = &lt;code&gt;True&lt;/code&gt; (only for temporary testing if you really know what you&amp;#39;re doing)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;Notice type=&quot;warning&quot;&gt;The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#smart-home-skill-api&quot;&gt;official Home Assistant docs&lt;/a&gt; describe these variables and also warn about the risk of leaving tokens in there.&lt;/Notice&gt;&lt;/p&gt;
&lt;h6&gt;Step 6. Configure the Smart Home Skill endpoint (Lambda ARN)&lt;/h6&gt;
&lt;p&gt;Back in &lt;a href=&quot;https://developer.amazon.com/alexa/console/ask&quot;&gt;Alexa Developer Console&lt;/a&gt;:
&lt;strong&gt;Build -&amp;gt; Smart Home -&amp;gt; Endpoint&lt;/strong&gt; (Smart Home service endpoint)&lt;/p&gt;
&lt;p&gt;Paste your Lambda ARN as the Default endpoint.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#smart-home-skill-api&quot;&gt;HA docs&lt;/a&gt; describe this exact step.&lt;/p&gt;
&lt;h6&gt;Step 7. Account Linking (where most people get stuck)&lt;/h6&gt;
&lt;p&gt;&lt;Notice type=&quot;warning&quot;&gt;In &lt;a href=&quot;https://developer.amazon.com/alexa/console/ask&quot;&gt;Alexa Developer Console&lt;/a&gt;: Build -&amp;gt; Account Linking&lt;/Notice&gt;&lt;/p&gt;
&lt;p&gt;Set it up like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Authorization URI:&lt;/strong&gt; &lt;code&gt;https://YOUR_HA/auth/authorize&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access Token URI:&lt;/strong&gt; &lt;code&gt;https://YOUR_HA/auth/token&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;Notice type=&quot;warning&quot;&gt;If your HA is not reachable over clean HTTPS (preferably 443), this becomes a frustration factory.&lt;/Notice&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#account-linking&quot;&gt;HA docs&lt;/a&gt; also list the Client IDs for &amp;quot;Login with Amazon&amp;quot; (pitangui/layla) and mention that Let&amp;#39;s Encrypt is accepted.&lt;/p&gt;
&lt;p&gt;Important details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Do NOT enable&lt;/strong&gt; &amp;quot;linking from within your application&amp;quot;, because that forces a redirect URI that doesn&amp;#39;t work with HA&amp;#39;s flow&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Authentication Scheme:&lt;/strong&gt; &amp;quot;Credentials in request body&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope:&lt;/strong&gt; create &amp;quot;smart_home&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;Step 8. Home Assistant configuration (configuration.yaml)&lt;/h6&gt;
&lt;p&gt;Inside Home Assistant, add at least:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;alexa:
  smart_home:
    locale: en-US
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you stop here, Alexa will try to expose everything, which usually turns into a mess.&lt;/p&gt;
&lt;p&gt;I strongly recommend filtering:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;alexa:
  smart_home:
    locale: en-US
    filter:
      include_domains:
        - light
        - switch
        - cover
        - climate
      include_entity_globs:
        - binary_sensor.*_motion
      exclude_entities:
        - switch.something_you_dont_want
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#filtering-entities&quot;&gt;HA docs&lt;/a&gt; have filter examples and explain the order of application of includes/excludes.&lt;/p&gt;
&lt;p&gt;&lt;Notice type=&quot;tip&quot;&gt;Restart Home Assistant.&lt;/Notice&gt;&lt;/p&gt;
&lt;h6&gt;Step 9. Enable the skill and discover devices&lt;/h6&gt;
&lt;p&gt;In the &lt;a href=&quot;https://alexa.amazon.com/&quot;&gt;Alexa app&lt;/a&gt; (or mobile app):
&lt;strong&gt;More -&amp;gt; Skills &amp;amp; Games -&amp;gt; Your Skills -&amp;gt; Dev&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Enable your skill.&lt;/p&gt;
&lt;p&gt;It will open Home Assistant login (account linking). If everything worked, discovery starts right away.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#discovering-devices&quot;&gt;HA docs&lt;/a&gt; describe this flow and &amp;quot;Discover devices&amp;quot; as well.&lt;/p&gt;
&lt;h6&gt;Testing the Lambda first (optional, but I like it)&lt;/h6&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#testing-the-lambda-function&quot;&gt;HA docs&lt;/a&gt; suggest creating a Discovery test event in the &lt;a href=&quot;https://console.aws.amazon.com/lambda/&quot;&gt;Lambda console&lt;/a&gt;.
If you enabled DEBUG and added LONG_LIVED_ACCESS_TOKEN, this test is easy.&lt;/p&gt;
&lt;p&gt;Example test payload (Discovery) that the HA docs use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &amp;quot;directive&amp;quot;: {
    &amp;quot;header&amp;quot;: {
      &amp;quot;namespace&amp;quot;: &amp;quot;Alexa.Discovery&amp;quot;,
      &amp;quot;name&amp;quot;: &amp;quot;Discover&amp;quot;,
      &amp;quot;payloadVersion&amp;quot;: &amp;quot;3&amp;quot;,
      &amp;quot;messageId&amp;quot;: &amp;quot;1bd5d003-31b9-476f-ad03-71d471922820&amp;quot;
    },
    &amp;quot;payload&amp;quot;: {
      &amp;quot;scope&amp;quot;: {
        &amp;quot;type&amp;quot;: &amp;quot;BearerToken&amp;quot;
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It explains that without a token, Lambda will only work if you&amp;#39;re in DEBUG mode with LONG_LIVED_ACCESS_TOKEN configured.&lt;/p&gt;
&lt;hr&gt;
&lt;h6&gt;Exposing scripts and making Alexa run them&lt;/h6&gt;
&lt;p&gt;Scripts are supported by the &lt;a href=&quot;https://www.home-assistant.io/integrations/alexa/#supported-domains&quot;&gt;Alexa Smart Home integration&lt;/a&gt;, but they don&amp;#39;t always show up nicely.&lt;/p&gt;
&lt;p&gt;In practice, what works best:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;expose the script&lt;/li&gt;
&lt;li&gt;put it as an action in a Routine (when the app shows it)&lt;/li&gt;
&lt;li&gt;or create an input_boolean/switch and use automation to trigger the script (this almost always shows up well in Alexa)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;Notice type=&quot;tip&quot;&gt;I use the input_boolean approach a lot. It&amp;#39;s predictable.&lt;/Notice&gt;&lt;/p&gt;
&lt;h6&gt;Create a script in Home Assistant (real example)&lt;/h6&gt;
&lt;p&gt;Example script that speaks a basic house status. I&amp;#39;ll keep it simple, but you can see the idea.&lt;/p&gt;
&lt;p&gt;Put it in &lt;code&gt;scripts.yaml&lt;/code&gt; (or create via UI and adjust if you want):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;house_status:
  alias: &amp;quot;House Status&amp;quot;
  sequence:
    - variables:
        lights_on: &amp;quot;{{ states.light | selectattr(&amp;#39;state&amp;#39;,&amp;#39;eq&amp;#39;,&amp;#39;on&amp;#39;) | list | length }}&amp;quot;
    - service: notify.alexa_media_echo_living_room
      data:
        message: &amp;gt;
          {% if lights_on == 0 %}
            All lights are off.
          {% else %}
            There are {{ lights_on }} lights on.
          {% endif %}
        data:
          type: announce
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Important notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I&amp;#39;m using &lt;code&gt;notify.alexa_media_echo_living_room&lt;/code&gt;, which comes from Alexa Media Player (we&amp;#39;ll install it soon)&lt;/li&gt;
&lt;li&gt;I&amp;#39;m using announce to play as an announcement&lt;/li&gt;
&lt;li&gt;If you tried using &lt;code&gt;tts.google_translate_say&lt;/code&gt; and got an error, that&amp;#39;s because you don&amp;#39;t have that service/config (and honestly, with Alexa Media Player you don&amp;#39;t need it)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;Make sure the script appears in Alexa (via filter)&lt;/h6&gt;
&lt;p&gt;In &lt;code&gt;configuration.yaml&lt;/code&gt;, include this script explicitly so it doesn&amp;#39;t depend on &amp;quot;include_domains&amp;quot;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;alexa:
  smart_home:
    locale: en-US
    filter:
      include_entities:
        - script.house_status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restart HA, and tell Alexa to &amp;quot;Discover devices&amp;quot;.&lt;/p&gt;
&lt;h6&gt;Plan B that always works: create a &amp;quot;button&amp;quot; (input_boolean) and an automation&lt;/h6&gt;
&lt;p&gt;Create a helper input_boolean:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;input_boolean:
  trigger_house_status:
    name: &amp;quot;Trigger House Status&amp;quot;
    icon: mdi:home-analytics
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Expose this input_boolean to Alexa:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;alexa:
  smart_home:
    locale: en-US
    filter:
      include_entities:
        - input_boolean.trigger_house_status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And create an automation that, when turned on, triggers the script and turns the boolean back off:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;automation:
  - alias: &amp;quot;Alexa - Run House Status&amp;quot;
    trigger:
      - platform: state
        entity_id: input_boolean.trigger_house_status
        to: &amp;quot;on&amp;quot;
    action:
      - service: script.house_status
      - service: input_boolean.turn_off
        target:
          entity_id: input_boolean.trigger_house_status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In Alexa, this appears as a switch. Then you can create Routines, voice commands, whatever you want.&lt;/p&gt;
&lt;p&gt;&lt;Notice type=&quot;tip&quot;&gt;Is it ugly? Yes. But it&amp;#39;s the ugly that works.&lt;/Notice&gt;&lt;/p&gt;
&lt;h6&gt;Step 10. Installing Alexa Media Player (TTS, announcements, Echo control)&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Alexa Smart Home Skill&lt;/strong&gt; is for controlling HA entities.&lt;br&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/custom-components/alexa_media_player&quot;&gt;Alexa Media Player&lt;/a&gt;&lt;/strong&gt; is for controlling Alexa devices from Home Assistant and making them speak.&lt;/p&gt;
&lt;p&gt;&lt;Notice type=&quot;warning&quot;&gt;It&amp;#39;s a custom component (usually via &lt;a href=&quot;https://hacs.xyz/&quot;&gt;HACS&lt;/a&gt;) and uses an unofficial API, so yes, it can break if Amazon changes something. The repository itself makes this warning clear.&lt;/Notice&gt;&lt;/p&gt;
&lt;p&gt;The recommended installation is via HACS.&lt;/p&gt;
&lt;h6&gt;Install via HACS (Easy Mode)&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings -&amp;gt; Devices &amp;amp; Services -&amp;gt; Add Integration -&amp;gt; Alexa Media Player&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Log in and configure 2FA with Authenticator App Key (yes, this is important).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/custom-components/alexa_media_player/wiki&quot;&gt;project wiki&lt;/a&gt; explains the 2FA flow and how to get the &amp;quot;Enter your key&amp;quot; (the secret) on Amazon&amp;#39;s approval page.&lt;/p&gt;
&lt;p&gt;After configuring, you&amp;#39;ll get:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;entities &lt;code&gt;media_player.echo_*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;services &lt;code&gt;notify.alexa_media_*&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;speak/announce actions (depending on version)&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;Ready-to-use examples I use a lot with Alexa Media Player&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Announce on a specific Echo&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;service: notify.alexa_media_echo_living_room
data:
  message: &amp;quot;Front door opened.&amp;quot;
  data:
    type: announce
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Speak as normal TTS (not announce)&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;service: notify.alexa_media_echo_living_room
data:
  message: &amp;quot;Good night. Lights off.&amp;quot;
  data:
    type: tts
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Announcement on multiple Echos (group)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;You can call more than one &lt;code&gt;notify.*&lt;/code&gt; in sequence, or create a &amp;quot;broadcast&amp;quot; script:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;script:
  announce_to_all:
    alias: &amp;quot;Announce to all Echos&amp;quot;
    fields:
      msg:
        description: &amp;quot;Message&amp;quot;
        example: &amp;quot;Test&amp;quot;
    sequence:
      - service: notify.alexa_media_echo_living_room
        data:
          message: &amp;quot;{{ msg }}&amp;quot;
          data:
            type: announce
      - service: notify.alexa_media_echo_bedroom
        data:
          message: &amp;quot;{{ msg }}&amp;quot;
          data:
            type: announce
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h6&gt;Troubleshooting: when &amp;quot;nothing appears&amp;quot; in Alexa&lt;/h6&gt;
&lt;Accordion client:load title=&quot;Quick troubleshooting checklist&quot;&gt;

&lt;p&gt;If you tell Alexa to &amp;quot;Discover devices&amp;quot; and it says it found nothing, it&amp;#39;s usually one of these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HA is not accessible externally with valid HTTPS (account linking fails or works &amp;quot;halfway&amp;quot;)&lt;/li&gt;
&lt;li&gt;Lambda in the wrong region for the skill locale (en-US usually is N. Virginia)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;BASE_URL&lt;/code&gt; in Lambda is wrong (with trailing slash, or pointing to internal URL)&lt;/li&gt;
&lt;li&gt;you forgot to restart HA after editing &lt;code&gt;configuration.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;filter is excluding everything by accident (start by exposing 1 entity and grow)&lt;/li&gt;
&lt;li&gt;you enabled the skill in another Amazon account that&amp;#39;s not the one on your Echos (classic)&lt;/li&gt;
&lt;/ul&gt;
&lt;/Accordion&gt;

&lt;hr&gt;
&lt;p&gt;After the initial pain, this setup is rock solid. Native voice control through Smart Home Skill for &amp;quot;doing things&amp;quot;, and Alexa Media Player for making the house talk.&lt;/p&gt;
&lt;p&gt;Once it&amp;#39;s done, you don&amp;#39;t really want to go back.&lt;/p&gt;
</content:encoded></item><item><title>How to rename LocalTuya entities in Home Assistant after reinstalling everything (without losing your mind)</title><link>https://alexbrodt.com/how-to-rename-localtuya-entities-home-assistant-after-reinstall</link><guid isPermaLink="true">https://alexbrodt.com/how-to-rename-localtuya-entities-home-assistant-after-reinstall</guid><description>A real-world story of how I fixed the mess of generic LocalTuya entity_ids after reinstalling Home Assistant, using a Python script and a bit of patience.</description><pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;This week I was doing some tests in Home Assistant and, because of a stupid mistake, I restarted it without validating the structure of the files I had changed. Home Assistant didn’t come back up. I tried restoring files, tried restoring backups, tried a few other desperate things… nothing worked.
In the end, I had to reinstall everything from scratch.&lt;/p&gt;
&lt;p&gt;And if you use LocalTuya and have ever had to reinstall Home Assistant, you know exactly what I’m talking about.
Everything works again, but the names… my friend… the names turn into pure chaos.&lt;/p&gt;
&lt;p&gt;Suddenly your whole house looks like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;switch.local_71706185e868e755df28_1
switch.local_22230844e868e7828084_1
light.local_eb0siq_1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Before that, everything was nicely organized. Decent names, readable automations, a clean Lovelace dashboard.
After the reinstall, it feels like someone threw all the &lt;code&gt;entity_id&lt;/code&gt;s into a blender.&lt;/p&gt;
&lt;p&gt;The first reaction is: “ok, I’ll just rename them by hand.”
The second reaction, after about 10 devices, is giving up on life.&lt;/p&gt;
&lt;p&gt;That’s when I decided to do it the right way.&lt;/p&gt;
&lt;p&gt;It’s not the simplest path, but it’s the one that actually works, and you only need to do it once.&lt;/p&gt;
&lt;h6&gt;The real problem (without too much theory)&lt;/h6&gt;
&lt;p&gt;In Home Assistant there are two different things that a lot of people mix up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;entity_id&lt;/code&gt; is the technical identifier&lt;/li&gt;
&lt;li&gt;&lt;code&gt;friendly_name&lt;/code&gt; is just the nice label shown in the UI&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Changing &lt;code&gt;friendly_name&lt;/code&gt; is easy.
Changing &lt;code&gt;entity_id&lt;/code&gt; is not.&lt;/p&gt;
&lt;p&gt;What really controls &lt;code&gt;entity_id&lt;/code&gt;s is the &lt;strong&gt;Entity Registry&lt;/strong&gt;, that hidden file at &lt;code&gt;.storage/core.entity_registry&lt;/code&gt;.
If you don&amp;#39;t touch that, Home Assistant will always prefer those ugly LocalTuya-generated names.&lt;/p&gt;
&lt;p&gt;And yes: &lt;code&gt;customize.yaml&lt;/code&gt; alone doesn&amp;#39;t solve this. It helps, but it doesn&amp;#39;t fix the root of the problem.&lt;/p&gt;
&lt;h6&gt;The approach that worked for me&lt;/h6&gt;
&lt;p&gt;The idea was simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;use &lt;code&gt;ui-lovelace.yaml&lt;/code&gt; as the source of truth&lt;/li&gt;
&lt;li&gt;if an &lt;code&gt;entity_id&lt;/code&gt; exists in Lovelace, that&amp;#39;s the correct name&lt;/li&gt;
&lt;li&gt;everything else needs to adapt to that&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So I wrote a Python script that basically does three things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reads &lt;code&gt;ui-lovelace.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;opens &lt;code&gt;core.entity_registry&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;updates both &lt;code&gt;entity_id&lt;/code&gt; and &lt;code&gt;name&lt;/code&gt; for all LocalTuya entities in one go&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No UI clicking, no editing 80 screens, no pain.&lt;/p&gt;
&lt;h6&gt;First things first: stop Home Assistant and make a backup&lt;/h6&gt;
&lt;p&gt;Don&amp;#39;t skip this part. Seriously.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ha core stop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or if you&amp;#39;re running Docker:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker stop homeassistant
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Backup:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp /config/.storage/core.entity_registry /config/.storage/core.entity_registry.backup
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now you&amp;#39;re safe to mess around.&lt;/p&gt;
&lt;h6&gt;The script that saves your sanity&lt;/h6&gt;
&lt;p&gt;This is the main script I use.
It&amp;#39;s not pretty, it&amp;#39;s not generic, but it works. And it works really well.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;import json
import yaml
import re

ENTITY_REGISTRY_PATH = &amp;quot;.storage/core.entity_registry&amp;quot;
LOVELACE_PATH = &amp;quot;ui-lovelace.yaml&amp;quot;

def load_desired_entity_ids():
    with open(LOVELACE_PATH, &amp;quot;r&amp;quot;) as f:
        content = yaml.safe_load(f)

    found = set()
    text = json.dumps(content)

    for match in re.findall(r&amp;quot;(switch|light)\.[a-zA-Z0-9_]+&amp;quot;, text):
        found.add(match)

    return sorted(found)

def generate_friendly_name(entity_id):
    name = entity_id.split(&amp;quot;.&amp;quot;, 1)[1]
    name = name.replace(&amp;quot;_&amp;quot;, &amp;quot; &amp;quot;).title()
    return name

with open(ENTITY_REGISTRY_PATH, &amp;quot;r&amp;quot;) as f:
    registry = json.load(f)

desired_entity_ids = load_desired_entity_ids()

print(f&amp;quot;Found {len(desired_entity_ids)} entity_ids in Lovelace&amp;quot;)

for entity in registry[&amp;quot;data&amp;quot;][&amp;quot;entities&amp;quot;]:
    unique_id = entity.get(&amp;quot;unique_id&amp;quot;, &amp;quot;&amp;quot;)
    if not unique_id.startswith(&amp;quot;local_&amp;quot;):
        continue

    for desired in desired_entity_ids:
        domain = desired.split(&amp;quot;.&amp;quot;)[0]
        if entity[&amp;quot;entity_id&amp;quot;].startswith(domain):
            print(f&amp;quot;Updating {entity[&amp;#39;entity_id&amp;#39;]} -&amp;gt; {desired}&amp;quot;)
            entity[&amp;quot;entity_id&amp;quot;] = desired
            entity[&amp;quot;name&amp;quot;] = generate_friendly_name(desired)
            desired_entity_ids.remove(desired)
            break

with open(ENTITY_REGISTRY_PATH, &amp;quot;w&amp;quot;) as f:
    json.dump(registry, f, indent=2)

print(&amp;quot;Entity Registry updated successfully&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What this script does, in plain English:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it scans Lovelace and figures out which &lt;code&gt;entity_id&lt;/code&gt;s you actually use&lt;/li&gt;
&lt;li&gt;it walks through the Entity Registry looking for LocalTuya entities&lt;/li&gt;
&lt;li&gt;when it finds one with the same domain (&lt;code&gt;switch&lt;/code&gt; or &lt;code&gt;light&lt;/code&gt;), it replaces the &lt;code&gt;entity_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;it also sets a decent name at the same time&lt;/li&gt;
&lt;li&gt;then it saves everything back to the registry&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nothing magical. Just straight to the point.&lt;/p&gt;
&lt;p&gt;####### &amp;quot;But how does it know which switch is which?&amp;quot;&lt;/p&gt;
&lt;p&gt;It doesn&amp;#39;t. Not 100%. And that&amp;#39;s important to understand.&lt;/p&gt;
&lt;p&gt;This script assumes your Lovelace is already organized in a logical way.
If you have some weird edge cases, you fix those later. It&amp;#39;s still way better than starting from scratch and clicking around in the UI for hours.&lt;/p&gt;
&lt;h6&gt;After that, I still generate a customize.yaml&lt;/h6&gt;
&lt;p&gt;It&amp;#39;s not mandatory, but I like having it.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;with open(&amp;quot;customize.yaml&amp;quot;, &amp;quot;w&amp;quot;) as f:
    for eid in desired_entity_ids:
        f.write(f&amp;quot;{eid}:\n&amp;quot;)
        f.write(f&amp;quot;  friendly_name: \&amp;quot;{generate_friendly_name(eid)}\&amp;quot;\n\n&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just an extra safety net.&lt;/p&gt;
&lt;h6&gt;Time to start everything again&lt;/h6&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ha core start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or Docker:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker start homeassistant
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first startup might take a bit longer. That&amp;#39;s normal.&lt;/p&gt;
&lt;p&gt;When the UI loads… everything is back to normal.
Correct &lt;code&gt;entity_id&lt;/code&gt;s, proper names, automations working, Lovelace intact.&lt;/p&gt;
&lt;h6&gt;A few things I learned the hard way&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;entity_id&lt;/code&gt; is not just cosmetic&lt;/li&gt;
&lt;li&gt;the Entity Registry is sacred&lt;/li&gt;
&lt;li&gt;&lt;code&gt;customize.yaml&lt;/code&gt; helps, but it&amp;#39;s not magic&lt;/li&gt;
&lt;li&gt;always back up first&lt;/li&gt;
&lt;li&gt;an ugly script that works beats a perfect solution that never ships&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Today I keep these scripts as part of my Home Assistant setup.
If I ever need to reinstall everything again, in five minutes my house speaks human language again, not hexadecimal.&lt;/p&gt;
&lt;p&gt;If you made it this far, you’ve probably been angry about this too.
Hope this saves you a few hours (and a few swear words).&lt;/p&gt;
&lt;p&gt;And if I ever forget how I did this… this post is also for future me.&lt;/p&gt;
</content:encoded></item><item><title>Thinking, Fast and Slow – Daniel Kahneman</title><link>https://alexbrodt.com/book-thinking-fast-and-slow-daniel-kahneman</link><guid isPermaLink="true">https://alexbrodt.com/book-thinking-fast-and-slow-daniel-kahneman</guid><description>A book that does not impress at first, but stays in your mind and slowly changes how you see your own decisions.</description><pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading Thinking, Fast and Slow and it was not one of those books that you close thinking “wow, this is amazing”. To be honest, the feeling was a bit strange. Not bad, but also not exciting. The interesting part is that after some time, the book keeps coming back to your mind, and this says more than it looks.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-thinking-fast-and-slow-daniel-kahneman.png&quot; alt=&quot;Canvas Book Thinking Fast and Slow - Daniel Kahneman&quot;&gt;&lt;/p&gt;
&lt;p&gt;The main idea is simple. We like to believe that we make decisions in a logical and rational way, but in real life most of the time we are just reacting. The so called System 1 does almost all the work, fast, intuitive, full of shortcuts. System 2 exists, but it gives work, it is tiring, and we use it much less than we think.&lt;/p&gt;
&lt;p&gt;This division is easy to understand and easy to remember. After reading the book, you start catching yourself thinking “ok, I was on automatic mode here” in many daily situations. Small choices, bigger decisions, judgments about people, everything goes through these mental shortcuts.&lt;/p&gt;
&lt;p&gt;The book is full of experiments, examples and studies to prove these ideas. In many moments it works very well. In others, honestly, it gets a bit tiring. Not everything convinces, some parts feel too long and there are sections that really ask for patience. It is not a book to read fast.&lt;/p&gt;
&lt;p&gt;For me, the beginning is clearly the strongest part. That is where everything fits better and makes more sense. Later the book becomes more technical and a bit repetitive in some points, and then it depends a lot on your mood as a reader. If you try to rush, it easily becomes just another boring book full of theory.&lt;/p&gt;
&lt;p&gt;In the end, I don’t think this is a book for everyone. But it is a reading that makes you more aware of your own decisions, the shortcuts you use without noticing, and this comfortable illusion that we are always rational. Just that already makes the book worth reading, even with its flaws.&lt;/p&gt;
</content:encoded></item><item><title>Piranesi - Susanna Clarke</title><link>https://alexbrodt.com/book-piranesi-susanna-clarke</link><guid isPermaLink="true">https://alexbrodt.com/book-piranesi-susanna-clarke</guid><description>A strange, slow and deeply atmospheric novel, that is more about questions than answers.</description><pubDate>Fri, 02 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading Piranesi with a hard to explain feeling. It was without a doubt one of the books that left me most disoriented after reading the last page. It is not confusing in the sense of being poorly written or disorganized, but because it simply does not follow a traditional narrative path. Who enters expecting a story with a beginning, middle and well defined end probably will be frustrated.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-piranesi-susanna-clarke.png&quot; alt=&quot;Canvas of the book Piranesi - Susanna Clarke&quot;&gt;&lt;/p&gt;
&lt;p&gt;It is a slow book, very slow. This is not a defect, it&amp;#39;s part of the book&amp;#39;s proposal. Piranesi does not want to tell you a closed story, he wants to be felt. The reading is more contemplative than narrative, more about feeling, contemplation and observation than about action or great events.&lt;/p&gt;
&lt;p&gt;The House with its infinite salons, statues and tides turned almost into characters. Everything there has symbolic weight, but nothing is delivered in an obvious way. The book lives much more in questions than in explanations. Who is Piranesi for real? What is the House? What is real and what is memory or imagination? Many of these questions never receive a clear answer, and this can be quite uncomfortable.&lt;/p&gt;
&lt;p&gt;At the same time, it is precisely this that makes the book memorable. It continues making you think after reading. You close the book, but it stays with you. Ideas stay around, scenes return, some phrases reappear in the head...&lt;/p&gt;
&lt;p&gt;Absolutely, it is not a book for everyone. Who likes fast-paced, clear explanations or well-tied stories probably will hate it. But for those who accept to lose a bit, read without haste and let the book work more in the field of sensation and reflection, Piranesi can be a nice experience. It&amp;#39;s not a book that I would say is my favorite reading, but it&amp;#39;s a book that left its mark.&lt;/p&gt;
</content:encoded></item><item><title>The books I read in 2025</title><link>https://alexbrodt.com/books-i-read-in-2025</link><guid isPermaLink="true">https://alexbrodt.com/books-i-read-in-2025</guid><description>The books that followed me through 2025, with a highlight on my top 3</description><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;2025 was a more consistent reading year for me. I kept the habit of reading every day. I tried to choose books that made sense for my mood and for the moment I was living. Some books went fast, others took a looooong time. It was also the year I read a fiction book in English, a small big achievement.&lt;/p&gt;
&lt;h5&gt;My favorite books of 2025:&lt;/h5&gt;
&lt;h6&gt;1º - &lt;strong&gt;&lt;a href=&quot;/book-flowers-for-algernon-daniel-keyes&quot;&gt;Flowers for Algernon&lt;/a&gt;&lt;/strong&gt; – Daniel Keyes&lt;/h6&gt;
&lt;p&gt;This was the book of the year for me. Short, direct, and emotionally heavy. The character’s curve is brutal and very quiet. I finished it with that rare feeling of needing to stop for a few minutes before moving on with the day. Highly recommended.&lt;/p&gt;
&lt;h6&gt;2º - &lt;strong&gt;&lt;a href=&quot;/book-the-shadow-of-the-wind-carlos-ruiz-zafon&quot;&gt;The Shadow of the Wind&lt;/a&gt;&lt;/strong&gt; – Carlos Ruiz Zafón&lt;/h6&gt;
&lt;p&gt;A book that slows time down. This is the kind of reading you do without rush. It invites you to stay, to enter the story. One of those books that makes you want to reread it in another phase of life.&lt;/p&gt;
&lt;h6&gt;3º - &lt;strong&gt;&lt;a href=&quot;/book-madame-bovary-gustave-flaubert&quot;&gt;Madame Bovary&lt;/a&gt;&lt;/strong&gt; – Gustave Flaubert&lt;/h6&gt;
&lt;p&gt;A classic that is more uncomfortable than pleasant. Emma’s character construction is impressive and still feels very current. It&amp;#39;s a book that provokes reflection, both because of its structure and because of when it was written.&lt;/p&gt;
&lt;h5&gt;Other books read in 2025&lt;/h5&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/book-carandiru-station-varella&quot;&gt;Carandiru Station&lt;/a&gt; – Drauzio Varella  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-ayrton-the-hero-revealed-ernesto-rodrigues&quot;&gt;Ayrton: The Revealed Hero&lt;/a&gt; – Ernesto Rodrigues  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-never-lie-freida-mcfadden&quot;&gt;Never Lie&lt;/a&gt; – Freida McFadden  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-a-short-history-of-the-world-geoffrey-blainey&quot;&gt;A Short History of the World&lt;/a&gt; – Geoffrey Blainey  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-verity-colleen-hoover&quot;&gt;Verity&lt;/a&gt; – Colleen Hoover  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-the-wedding-people-espach&quot;&gt;The Wedding People&lt;/a&gt; – Alison Espach  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-good-strategy-bad-strategy&quot;&gt;Good Strategy Bad Strategy: The Difference and Why It Matters&lt;/a&gt; – Richard P. Rumelt  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-how-to-talk-to-anyone-leil-lowndes&quot;&gt;How to Talk to Anyone&lt;/a&gt; – Leil Lowndes  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-the-posthumous-memoirs-of-bras-cubas-machado-de-assis&quot;&gt;The Posthumous Memoirs of Brás Cubas&lt;/a&gt; – Machado de Assis  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-how-to-win-friends-and-influence-people-dale-carnegie&quot;&gt;How to Win Friends and Influence People&lt;/a&gt; – Dale Carnegie  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-dhammapada-the-teachings-of-buddha&quot;&gt;Dhammapada: The Teachings of Buddha&lt;/a&gt; – José Carlos Calazans  &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/book-the-creative-act-rubin&quot;&gt;The Creative Act: A Way of Being&lt;/a&gt; – Rick Rubin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all, it was a good year. Some books passed without much impact, some stayed longer, and a few really made a mark.&lt;/p&gt;
</content:encoded></item><item><title>How to Win Friends and Influence People - Dale Carnegie</title><link>https://alexbrodt.com/book-how-to-win-friends-and-influence-people-dale-carnegie</link><guid isPermaLink="true">https://alexbrodt.com/book-how-to-win-friends-and-influence-people-dale-carnegie</guid><description>A classic book about human relationships, with many practical and interesting examples.</description><pubDate>Tue, 30 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&amp;#39;ve just finished How to Win Friends and Influence People and honestly I had that feeling of &amp;quot;ok, now I get why this book is a classic&amp;quot;. Overall, I think it&amp;#39;s a good book, easy to read, with lots of practical examples and real stories that help explain the ideas. You can clearly see it was written to be used in real life, especially at work and in professional relationships.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-how-to-win-friends-and-influence-people-dale-carnegie.png&quot; alt=&quot;Canvas of the book How to Win Friends and Influence People - Dale Carnegie&quot;&gt;&lt;/p&gt;
&lt;p&gt;The book is divided into very clear parts. First, it talks about basic principles of human relationships. Then it moves into how to make people like you, how to influence others without creating conflict, and in the end, how to lead and change people’s behavior without resistance. The structure is simple, almost like a manual, with short and direct chapters, which makes the reading flow better.&lt;/p&gt;
&lt;p&gt;One thing the book really insists on is listening more, criticizing less, and trying to understand the other person’s point of view before anything else. It sounds obvious, but in real life almost nobody does this. The idea of showing genuine interest in people, giving sincere praise, and avoiding direct confrontation makes a lot of sense, especially in corporate environments.&lt;/p&gt;
&lt;p&gt;On the other hand, I felt the book goes a bit too far with the number of examples and different characters. At some points I got confused, trying to remember who was who and which story matched which principle. I think the same message could be delivered with fewer stories. Also, some situations feel very dated and strongly connected to American culture at that time, which makes it harder to relate today.&lt;/p&gt;
&lt;p&gt;Another thing that bothered me a little was how superficial it can feel sometimes. The principles are good, but often it sounds like “do this and people will like you”. Real life is much more complex than that. Deep and real relationships don’t come from techniques, they come from respect, time and reciprocity. No method can guarantee that.&lt;/p&gt;
&lt;p&gt;I see this book more as a guide for social and professional behavior, mainly at work, than a manual to create real friendships. It works well as a reminder of basic things people forget all the time, and I really mean basic stuff: be polite, listen more, don’t run over people, recognize when someone does a good job. It’s obvious, but in practice it makes a difference. It’s not a life-changing book, and it’s not revolutionary, but it’s an honest and useful read, especially for people starting to think more seriously about communication, leadership and human relationships.&lt;/p&gt;
&lt;p&gt;In short, it&amp;#39;s a good book, with useful ideas, some excesses, but still worth reading.&lt;/p&gt;
</content:encoded></item><item><title>How to Talk to Anyone - Leil Lowndes</title><link>https://alexbrodt.com/book-how-to-talk-to-anyone-leil-lowndes</link><guid isPermaLink="true">https://alexbrodt.com/book-how-to-talk-to-anyone-leil-lowndes</guid><description>A practical book about social communication, networking and first impressions, with some good ideas and others quite superficial.</description><pubDate>Mon, 29 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I started reading How to Talk to Anyone expecting something broader, almost a guide to improve everyday conversations. But as I moved forward, it became clear that the book is much more focused on networking, professional environments, interviews and sales. That&amp;#39;s not really a problem, but it&amp;#39;s good to set expectations, because this is not exactly a universal guide for casual conversations.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-how-to-talk-to-anyone-leil-lowndes.png&quot; alt=&quot;Canvas of the book How to Talk to Anyone - Leil Lowndes&quot;&gt;&lt;/p&gt;
&lt;p&gt;The book is organized in short chapters, basically a sequence of quick tips, almost like small social tricks. Each chapter brings one specific idea, usually based on body language, tone of voice, posture, word choice and attention to the other person. It&amp;#39;s an easy and fast read, very straightforward, with little theory behind it. Sometimes it feels like a checklist of social behaviors.&lt;/p&gt;
&lt;p&gt;What caught my attention the most was the strong focus on nonverbal communication. The book insists a lot on how posture, eye contact, body direction and even the timing of a smile can matter more than what you actually say. Some of these tips really make sense when you stop and watch people who are naturally good at conversations in real life. Small details, like fully turning your body to the person you&amp;#39;re talking to or keeping full attention on them, are simple things that many people ignore.&lt;/p&gt;
&lt;p&gt;I also liked the parts about keeping the conversation &amp;quot;spotlight&amp;quot; on the other person. Listening carefully, picking up clues from what they say and asking follow-up questions is basic stuff, but the book reinforces it well. It&amp;#39;s nothing revolutionary, but it works. Instead of trying to impress, the idea is to make the other person feel interesting.&lt;/p&gt;
&lt;p&gt;On the other hand, a lot of the content feels superficial or even a bit forced. Some tips give a strange feeling of over-rehearsed behavior, like following a social script. Timing your smile, calculating compliments, repeating the other person&amp;#39;s words in a strategic way… in some moments it sounds artificial and not very natural, especially if you take it too literally. It feels more like a manual on how to look interesting, not necessarily how to be genuine.&lt;/p&gt;
&lt;p&gt;Another thing that bothered me a little is that many tips are very obvious for anyone who already has some social or professional experience. These are things you naturally learn over time, but the book presents them as big insights. That said, for someone who is shy, socially insecure or just starting their professional life, it may actually help to see all of this clearly organized and explained.&lt;/p&gt;
&lt;p&gt;Overall, I think it&amp;#39;s an ok book, easy to read and with a few good insights, especially at the beginning. It&amp;#39;s not deep and it won&amp;#39;t change how you relate to people, but it works as a practical reminder of simple behaviors that can really help in professional interactions. It&amp;#39;s more a boost of awareness than a big new learning.&lt;/p&gt;
</content:encoded></item><item><title>A Short History of the World – Geoffrey Blainey</title><link>https://alexbrodt.com/book-a-short-history-of-the-world-geoffrey-blainey</link><guid isPermaLink="true">https://alexbrodt.com/book-a-short-history-of-the-world-geoffrey-blainey</guid><description>An accessible and balanced overview of human history, ideal for readers who want to understand the big picture before going deeper.</description><pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Reading A Short History of the World by Geoffrey Blainey felt like taking a step back to see the full picture of human history. The book does not try to be definitive or to explore each period in deep detail. Its goal is different, and this is clear from the beginning: to offer a broad view that connects events, eras, and transformations over thousands of years.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/canvas/canvas-book-a-short-history-of-the-world-geoffrey-blainey.png&quot; alt=&quot;Canvas of the book A Short History of the World - Geoffrey Blainey&quot;&gt;&lt;/p&gt;
&lt;p&gt;Blainey manages to bring together a huge amount of information in a light, direct, and surprisingly fluid text. Even when dealing with complex topics, the book is easy to read and does not require previous knowledge of history. On the contrary, it works very well as an entry point for readers who want to start understanding how we arrived where we are today as a society.&lt;/p&gt;
&lt;p&gt;One aspect that stands out is the author’s concern with balance and impartiality. The topics are presented in a careful way, without simple or biased judgments about historical events. It is clear that Blainey tries to explain contexts and consequences instead of judging people or civilizations with a modern perspective.&lt;/p&gt;
&lt;p&gt;The reading is fast and engaging. Many times, I felt like highlighting entire passages because the book helps organize historical periods that are often seen in a fragmented way in other materials. It shows how different elements connect over time, such as economy, religion, wars, technology, and culture.&lt;/p&gt;
&lt;p&gt;At the same time, it is important to set expectations. The book is intentionally superficial in many topics. It does not go deep into historical debates or complex analysis. The feeling at the end is that it makes you want to read other authors and more specific books about the periods that caught your attention the most.&lt;/p&gt;
&lt;p&gt;In my opinion, this is an excellent book for readers who want a simple, accessible, and well-written first step into global history.&lt;/p&gt;
</content:encoded></item><item><title>How I organize my thoughts, studies, and notes with Obsidian</title><link>https://alexbrodt.com/how-i-organize-my-thoughts-studies-and-notes-with-obsidian</link><guid isPermaLink="true">https://alexbrodt.com/how-i-organize-my-thoughts-studies-and-notes-with-obsidian</guid><description>How I built my file structure in Obsidian, the logic behind each directory, and how it became a functional system for work, personal life, and writing.</description><pubDate>Tue, 23 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After some time using Obsidian, it became clear to me that it would not work with any ready-made structure or predefined intranet model. If I made it too complex, usage would become heavy and I would eventually stop using it. If I made it too simple, it would turn into just another note-taking app. Obsidian lives somewhere else. It feels closer to an operating system for thinking. And that completely changes how you organize files. It is not about creating the perfect taxonomy, but about reducing friction, preserving context, and allowing ideas to mature over time.&lt;/p&gt;
&lt;p&gt;The structure I use today was built out of necessity. Nothing was designed upfront. Every directory exists because some kind of discomfort appeared before. When something starts to take too much effort, that is usually a signal that it needs to become structure.&lt;/p&gt;
&lt;p&gt;At the beginning, this was confusing. I had to organize myself inside something that is not a traditional notes app and not just a simple file directory either. That ambiguity makes organization and taxonomy less obvious, and it can feel unnecessarily complex at first. My system starts with 00_Inbox. This directory exists so I do not have to think. Anything that comes up quickly — a loose idea, a call note, a random thought during the day — goes straight there. No template, no rules, no guilt. The Inbox is not a place to stay, it is a place to pass through. It drastically reduces the friction of capturing information, which for me is the most critical part of any system.&lt;/p&gt;
&lt;p&gt;The 01_Work directory concentrates everything related to work. Here, the hierarchy is a bit stronger, because work has real dependencies, deadlines, people, and decisions. Inside it, I separate the AIR context and, from there, clients. Each client ends up becoming almost a small logical vault.&lt;/p&gt;
&lt;p&gt;In some active opportunities, for example, the structure reflects the real lifecycle of complex work. RFPs are organized in their own directory, with separate files for overview, scope, risks, and Q&amp;amp;A. This avoids a single massive document that mixes everything and becomes impossible to review. Meetings have their own directory, always named with the date at the beginning, which helps both ordering and chronological retrieval. Analyses are separated into commercial risks, technical risks, and go/no-go decisions. Proposals have their own artifacts, such as technical narrative and assumptions. I also use a _CLIENT_NAME_Index, which works as a client map, a single entry point that connects everything without relying on folder navigation.&lt;/p&gt;
&lt;p&gt;This pattern repeats because it reflects how my brain already works outside Obsidian. Obsidian simply mirrors that in a more organized way. That is exactly what I recommend. Do not try to invent a hyper-complex system. Just reflect your own thinking reality.&lt;/p&gt;
&lt;p&gt;The 02_Personal directory is where things get more interesting. It is not just a place for “personal notes”, but a space for building identity, habits, and continuous learning. English, for example, is not treated as something loose. There is a clear structure. Classes are registered chronologically, always with date, teacher, and focus. Separate from that, there are structural notes like Vocabulary, Mistakes_Patterns, and Speaking_Feedback. These notes act as consolidation layers. Classes feed these notes.&lt;/p&gt;
&lt;p&gt;This approach solved a very common study problem for me: accumulating content without turning it into learning. When I notice a recurring mistake, it goes into Mistakes_Patterns. When a new word appears and needs practice, it goes into Vocabulary. The system starts working through recurrence, not volume.&lt;/p&gt;
&lt;p&gt;Still inside Personal, there are areas like Health, Journal, Reading, Running, and Writing. All of them start simple, with a README explaining the purpose of that area. This prevents them from becoming a graveyard of loose notes. Writing, for example, already starts with a clear separation between drafts and published, and also concentrates structural documents like Personal_Principles, Life_Constraints, Decision_Filter, Professional_Identity, and What_I_Am_Building. These files are anchors. They are not final texts, but living documents that I use as decision tools. I return to them whenever I need to say more “no” than “yes”.&lt;/p&gt;
&lt;p&gt;The 03_Reference directory is the closest thing to a traditional knowledge base. It contains reusable checklists, technical concepts, comparisons, templates, and models. Nothing here is temporal. If something depends heavily on context or date, it does not belong here. Templates like Blog_Post, Meeting_Notes, RFP_Analysis, and Risk_Assessment exist to speed things up, not to create bureaucracy. As I said before, if it becomes too complex, it stops being used.&lt;/p&gt;
&lt;p&gt;Finally, there is 04_Archive, which exists to close cycles. Finished projects, decisions that no longer matter day to day, materials that no longer need to stay active. Archiving is not deleting. It is removing things from the visual field without losing history. This keeps the vault light and usable.&lt;/p&gt;
&lt;p&gt;Some technical decisions help everything work better. I use underscores in file names for consistency and lower technical friction. All notes are already in markdown, so I never have to think about that. Links matter more than directories. Directories help navigation. Links help thinking and context recovery.&lt;/p&gt;
&lt;p&gt;Maybe the most important lesson was accepting that this system is not static. It changes as my life changes. New directories will appear, others will disappear. That is not a planning failure, it is a sign of real usage.&lt;/p&gt;
&lt;p&gt;Today, Obsidian is not where I store answers. It is where I place questions so I can think more clearly. It does not solve my mental mess, but it helps me see the bigger picture. And, interestingly, that is often enough to make better decisions.&lt;/p&gt;
&lt;p&gt;If this structure looks different in a year, that is great. It means I am evolving too.&lt;/p&gt;
</content:encoded></item><item><title>The Posthumous Memoirs of Brás Cubas - Machado de Assis</title><link>https://alexbrodt.com/book-the-posthumous-memoirs-of-bras-cubas-machado-de-assis</link><guid isPermaLink="true">https://alexbrodt.com/book-the-posthumous-memoirs-of-bras-cubas-machado-de-assis</guid><description>A fundamental read for its writing and social criticism, even if the story itself does not always match the brilliance of its form.</description><pubDate>Wed, 17 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Posthumous Memoirs of Brás Cubas is one of those books whose importance is unquestionable. Machado de Assis narrative innovation, the quality of his writing, and his subtle, sharp irony remain strikingly relevant more than a century later. Reading Brás Cubas is coming face to face with an author who deeply understands human behavior, social games, vanity, and hypocrisy disguised as morality.&lt;/p&gt;
&lt;p&gt;The premise itself is brilliant. Brás Cubas decides to write his memoirs after his death, when he no longer needs to please anyone and can, at least in theory, tell the truth more freely. This starting point opens space for a narrative filled with direct addresses to the reader, interruptions, digressions, and a humor that is often carefully crafted. There are passages that, on their own, already justify reading the book.&lt;/p&gt;
&lt;p&gt;Beyond the story itself, what stood out to me the most was the critique of nineteenth-century Rio de Janeiro society. Machado exposes the world of appearances, the weight of public opinion on private life, political opportunism, and the idea that money can buy almost everything, including morality. The creation of Humanitism, embodied by Quincas Borba, works as a sharp irony aimed at the scientific theories of the time, especially social interpretations of Darwin’s theory of evolution, here transformed into a justification for the law of the strongest.&lt;/p&gt;
&lt;p&gt;Even so, despite deeply admiring the writing and the intelligence behind the book, the central story did not engage me as much as I had expected. I gradually built the expectation of a more intense, more compelling protagonist. At first, Brás Cubas appears as a typical nineteenth-century bon vivant: wealthy, carefree, and somewhat cynical. But as the narrative unfolds, what remains is the feeling of a relatively predictable life and, at times, even a slightly dull one.&lt;/p&gt;
&lt;p&gt;The romance between Brás Cubas and Virgília, which occupies a significant portion of the book, did not strike me as particularly interesting. The relationship exists, but it does not evolve in a way that creates strong emotional impact. In several moments, I admit I felt the urge to skim through a few paragraphs.&lt;/p&gt;
&lt;p&gt;In the end, I was left with the impression that the true strength of The Posthumous Memoirs of Brás Cubas lies much more in its form than in its content. The writing is brilliant, playful, and intelligent. The social criticism is sharp and still resonates today. The story itself, however, did not leave the mark I had anticipated.&lt;/p&gt;
&lt;p&gt;I also do not believe this is a book that should be taught in schools. The reading demands maturity, cultural background, and patience. The language carries structures and expressions that are no longer part of everyday usage, which makes comprehension even harder for very young readers.&lt;/p&gt;
&lt;p&gt;Schools should encourage the habit of reading with simpler books, texts that are more direct and capable of awakening curiosity and pleasure. Reading needs to come first as desire, not as obligation. Forcing dense classics too early often produces the opposite effect and pushes readers away.&lt;/p&gt;
&lt;p&gt;As much as I see this work in a very positive light, it is not for every reader, let alone for teenagers. When I was in school, The Posthumous Memoirs of Brás Cubas was mandatory reading in literature classes, and the &amp;quot;trauma&amp;quot; still lingers for many people. It is almost like trying to teach differential and integral calculus to elementary school students: some content requires maturity to be properly absorbed. This book is one of those cases.&lt;/p&gt;
&lt;p&gt;Still, it is Machado de Assis. And that alone is reason enough to read him, at the right time. Even when he does not fully captivate us, he provokes, unsettles, and makes us think. And very few authors do that with such elegance and irony.&lt;/p&gt;
</content:encoded></item><item><title>The Shadow of the Wind - Carlos Ruiz Zafón</title><link>https://alexbrodt.com/book-the-shadow-of-the-wind-carlos-ruiz-zafon</link><guid isPermaLink="true">https://alexbrodt.com/book-the-shadow-of-the-wind-carlos-ruiz-zafon</guid><description>An immersive read, filled with memory and a deep respect for books.</description><pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading The Shadow of the Wind with that rare feeling you get when a book truly delivers on what it promises. It doesn&amp;#39;t just tell a good story, it builds a world so vivid that, more than once, you feel completely inside the narrative.&lt;/p&gt;
&lt;p&gt;Carlos Ruiz Zafón writes in a very distinctive way. His descriptions are so rich that they go far beyond the visual. You can almost smell the places, feel the dampness of Barcelona&amp;#39;s streets, and sense the weight of silence in certain scenes. It&amp;#39;s a book that slows time down, not because it&amp;#39;s slow, but because it makes you want to stay there a little longer. I&amp;#39;ll admit that near the end I deliberately took my time, just to avoid finishing it.&lt;/p&gt;
&lt;p&gt;The story feels complete. There&amp;#39;s romance, humor in the right measure, drama, and moments that are genuinely moving. All of this is woven together by a mystery that unfolds gradually, without rushing, always respecting the rhythm of the characters. In many passages, I found myself fully immersed, imagining the scenes as if I were watching a film, but with a depth that only literature can really provide.&lt;/p&gt;
&lt;p&gt;One of the aspects that struck me the most is how the story treats books as something alive, loaded with memory and meaning. Forgotten stories, authors erased by time, and readers who bring those works back to life create a layer that feels almost magical, yet deeply human. It&amp;#39;s hard not to relate, especially if you see books not just as objects, but as experiences that stay with us and shape who we become.&lt;/p&gt;
&lt;p&gt;The Shadow of the Wind is one of those books that works equally well for anyone looking for a great story and for those who appreciate writing that&amp;#39;s carefully crafted and effortlessly engaging. It doesn&amp;#39;t try to be bigger than it is. It&amp;#39;s simply well written, absorbing, and honest with the reader.&lt;/p&gt;
&lt;p&gt;A five-star read, without any doubt.&lt;/p&gt;
</content:encoded></item><item><title>Verity - Colleen Hoover</title><link>https://alexbrodt.com/book-verity-colleen-hoover</link><guid isPermaLink="true">https://alexbrodt.com/book-verity-colleen-hoover</guid><description>My thoughts on Verity, by Colleen Hoover.</description><pubDate>Mon, 01 Dec 2025 21:45:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading Verity yesterday. It was a recommendation from my wife, and after I closed the book, I kept thinking about it for a while. It&amp;#39;s a story that pulls you in from the first pages and makes you read fast, always wanting to understand what is happening. It creates that feeling that something is wrong and that you need to discover the truth soon.&lt;/p&gt;
&lt;p&gt;The writing is simple and direct, and the tension works very well. Every time I read a new part of Verity’s secret autobiography, I didn&amp;#39;t know what to believe. Sometimes it felt impossible, and sometimes it felt completely real. This mix keeps the story interesting and makes you want to continue reading.&lt;/p&gt;
&lt;p&gt;But even with all this tension and mystery, I felt that the ending was not strong enough. The book is intense from the beginning, with many uncomfortable moments, so I expected a bigger and more powerful finale. The final twist is surprising, but it didn&amp;#39;t feel as big as the rest of the story.&lt;/p&gt;
&lt;p&gt;Still, Verity is a good book, especially for readers who enjoy suspense. It&amp;#39;s fast, engaging, and it makes you question everything. I created many theories in my head, but I didn&amp;#39;t guess the truth. Just don&amp;#39;t expect a perfect and complete ending. For me, it seemed like the author could have gone a bit further.&lt;/p&gt;
&lt;p&gt;Rating: 4.&lt;/p&gt;
</content:encoded></item><item><title>Running - Half Marathon - SC21K Floripa 2025</title><link>https://alexbrodt.com/race-running-sc21k-half-marathon-2025</link><guid isPermaLink="true">https://alexbrodt.com/race-running-sc21k-half-marathon-2025</guid><description>A short report of my participation in the SC21K in Florianópolis.</description><pubDate>Sun, 23 Nov 2025 08:43:00 GMT</pubDate><content:encoded>&lt;p&gt;Floripa has this unique power of turning any race into something almost intimate with the city. The SC21K course goes right across the most iconic postcard around here, the Hercílio Luz Bridge. Rain was in the forecast for days, and during the early hours before the start it poured heavily. By the time the race began, the sky was completely grey. Last year the strong sun made things harder, but this time the weather was perfect for running. Cloudy, light drizzle, cool temperature. Ideal.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sc21k-2025-foto.png&quot; alt=&quot;Photo, SC21K 2025&quot;&gt;&lt;/p&gt;
&lt;p&gt;The start was set for 5:30 AM. I left home at 4:30, which should&amp;#39;ve been enough, but wasn&amp;#39;t. It&amp;#39;s a 30 km drive from where I live and traffic was heavy. When I got close to the venue, all access roads were blocked, making the arrival chaotic. Perfect scenario for the private parking guys to make some profit. I had no choice but to pay R$ 40,00 and leave the car there. I rushed to the start line and got there just in time.&lt;/p&gt;
&lt;p&gt;Once the race began, things settled quickly. The first kilometers came naturally, letting the body wake up and find a rhythm. By the time I checked the watch, 3 km had passed. At 5 km everything felt aligned.&lt;/p&gt;
&lt;p&gt;After the 10 km mark the race became that usual mental battle we all know. I kept my pace between 5:20 and 5:30 almost the entire time, controlling the effort well. At km 17 I felt that familiar moment I&amp;#39;ve been working on in training, the point where the legs start questioning all my life decisions. This time I managed it better, recovered around km 18 and got to the finish without actually breaking.&lt;/p&gt;
&lt;p&gt;I finished in 1:55:34 for 21.47 km recorded. Average pace 5:23. Total elevation 122 m. The biggest win was how stable I felt through almost the entire race. And of course, the curious moment: km 8 showing a 2:26 pace. Classic GPS distortion inside the tunnel, not a sudden burst of superpowers.&lt;/p&gt;
&lt;p&gt;Splits&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;KM&lt;/th&gt;
&lt;th&gt;Pace&lt;/th&gt;
&lt;th&gt;GAP&lt;/th&gt;
&lt;th&gt;Elev&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;6:10 /km&lt;/td&gt;
&lt;td&gt;6:10 /km&lt;/td&gt;
&lt;td&gt;-1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;5:36 /km&lt;/td&gt;
&lt;td&gt;5:36 /km&lt;/td&gt;
&lt;td&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;5:18 /km&lt;/td&gt;
&lt;td&gt;5:18 /km&lt;/td&gt;
&lt;td&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5:31 /km&lt;/td&gt;
&lt;td&gt;5:29 /km&lt;/td&gt;
&lt;td&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5:51 /km&lt;/td&gt;
&lt;td&gt;5:32 /km&lt;/td&gt;
&lt;td&gt;15 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;5:24 /km&lt;/td&gt;
&lt;td&gt;5:35 /km&lt;/td&gt;
&lt;td&gt;-19 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;5:36 /km&lt;/td&gt;
&lt;td&gt;5:36 /km&lt;/td&gt;
&lt;td&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;2:26 /km&lt;/td&gt;
&lt;td&gt;2:30 /km&lt;/td&gt;
&lt;td&gt;-5 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;5:16 /km&lt;/td&gt;
&lt;td&gt;5:16 /km&lt;/td&gt;
&lt;td&gt;7 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;5:24 /km&lt;/td&gt;
&lt;td&gt;5:25 /km&lt;/td&gt;
&lt;td&gt;-2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;5:33 /km&lt;/td&gt;
&lt;td&gt;5:30 /km&lt;/td&gt;
&lt;td&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;5:34 /km&lt;/td&gt;
&lt;td&gt;5:34 /km&lt;/td&gt;
&lt;td&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;5:35 /km&lt;/td&gt;
&lt;td&gt;5:35 /km&lt;/td&gt;
&lt;td&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;5:40 /km&lt;/td&gt;
&lt;td&gt;5:38 /km&lt;/td&gt;
&lt;td&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;5:37 /km&lt;/td&gt;
&lt;td&gt;5:37 /km&lt;/td&gt;
&lt;td&gt;-1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;5:56 /km&lt;/td&gt;
&lt;td&gt;5:54 /km&lt;/td&gt;
&lt;td&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;4:34 /km&lt;/td&gt;
&lt;td&gt;4:41 /km&lt;/td&gt;
&lt;td&gt;-18 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;4:16 /km&lt;/td&gt;
&lt;td&gt;4:09 /km&lt;/td&gt;
&lt;td&gt;16 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;5:53 /km&lt;/td&gt;
&lt;td&gt;5:51 /km&lt;/td&gt;
&lt;td&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;6:15 /km&lt;/td&gt;
&lt;td&gt;5:52 /km&lt;/td&gt;
&lt;td&gt;17 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td&gt;5:56 /km&lt;/td&gt;
&lt;td&gt;5:45 /km&lt;/td&gt;
&lt;td&gt;-17 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0.47&lt;/td&gt;
&lt;td&gt;5:22 /km&lt;/td&gt;
&lt;td&gt;5:20 /km&lt;/td&gt;
&lt;td&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/strava-mapa-sc21k-2025.png&quot; alt=&quot;Map, SC21K 2025&quot;&gt;&lt;/p&gt;
&lt;p&gt;It was another well-executed half marathon. Nothing epic, nothing dramatic, just that good feeling of progress, training consistency and a bit more experience added to the stack. In the end, that&amp;#39;s probably what I&amp;#39;m really looking for with these races. Consistency, a clear mind, and a reason to keep moving this eighty-kilo machine that insists on liking this sport.&lt;/p&gt;
</content:encoded></item><item><title>Flowers for Algernon - Daniel Keyes</title><link>https://alexbrodt.com/book-flowers-for-algernon-daniel-keyes</link><guid isPermaLink="true">https://alexbrodt.com/book-flowers-for-algernon-daniel-keyes</guid><description>One of the most emotional and human books ever written. A reflection on intelligence, empathy, and the true essence of happiness.</description><pubDate>Sun, 09 Nov 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Flowers for Algernon is a fantastic book. You start thinking it&amp;#39;s a story about science, and end up staring at a mirror, questioning what it really means to be human.&lt;/p&gt;
&lt;p&gt;The story is told through a series of progress reports written by Charlie Gordon, a man with an intellectual disability who undergoes a scientific experiment to increase his intelligence. In the beginning, his writings are full of spelling and grammar mistakes, which immediately connects us to his purity and innocence. But as the procedure begins to take effect, the texts start to change, the sentences gain structure, the vocabulary expands, and we can clearly see Charlie&amp;#39;s mind growing and evolving.&lt;/p&gt;
&lt;p&gt;What first seems like a story about success quickly becomes one of self-discovery and loss. Charlie becomes brilliant, but at the same time starts to see the cruelty of the world he once couldn&amp;#39;t perceive. He realizes the prejudice he suffered, how he was used, and how intelligence itself can become a form of isolation.&lt;/p&gt;
&lt;p&gt;Daniel Keyes builds this story with rare sensitivity. There are no villains, only human beings dealing with their fears, limitations, and egos. The contrast between Charlie&amp;#39;s initial innocence and his later lucidity is devastating. It&amp;#39;s impossible not to feel empathy, anger, and sadness all at once.&lt;/p&gt;
&lt;p&gt;This book goes far beyond science fiction, it&amp;#39;s a deep portrait of human judgment, loneliness, and the search for acceptance. It reminds us that knowledge without compassion can make us colder and more distant, and that true wisdom may lie in the simplicity and empathy we lose when trying to be &amp;quot;superior&amp;quot;.&lt;/p&gt;
&lt;p&gt;A touching, profound, and unforgettable novel. Highly recommended!&lt;/p&gt;
</content:encoded></item><item><title>Ayrton: The Hero Revealed - Ernesto Rodrigues</title><link>https://alexbrodt.com/book-ayrton-the-hero-revealed-ernesto-rodrigues</link><guid isPermaLink="true">https://alexbrodt.com/book-ayrton-the-hero-revealed-ernesto-rodrigues</guid><description>An emotional and comprehensive biography of Ayrton Senna that goes beyond the racetrack to reveal the man behind the myth.</description><pubDate>Sun, 02 Nov 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I received Ayrton: The Hero Revealed as a gift from a dear friend, &lt;a href=&quot;https://mateusnava.com&quot;&gt;Mateus Nava&lt;/a&gt;, and I have to say it was a remarkable present.&lt;br&gt;I&amp;#39;ve always admired Senna, even though I&amp;#39;m not a big Formula 1 fan. But reading this book was a completely different experience. With each chapter, it felt like I was getting to know more of the idol and even more of the man behind the helmet.&lt;/p&gt;
&lt;p&gt;Ernesto Rodrigues delivers a biography that&amp;#39;s both deep and sensitive. It&amp;#39;s not just a chronological list of victories, but a true immersion into Ayrton&amp;#39;s life, starting from his childhood, his early steps in karting, his natural talent, inner battles, triumphs, losses, and, of course, his eternal legacy. The narrative flows naturally yet intensely, the kind of writing that grips you through emotion and humanity as much as through action.&lt;/p&gt;
&lt;p&gt;The author doesn&amp;#39;t stick to the myth. He unveils the man.&lt;br&gt;He shows us the Ayrton who doubted himself, who sought perfection almost as a spiritual mission, who felt loneliness even when surrounded by crowds. It&amp;#39;s in that contrast that the book truly shines, the unbeatable racer on the track and the vulnerable human being outside of it.&lt;/p&gt;
&lt;p&gt;The level of detail is astonishing. You can almost picture yourself in each race, hear the engines roaring, and feel the weight of responsibility that Senna carried on his shoulders. The part describing his death is especially moving, I knew what was coming, of course, yet I still found myself with tears in my eyes. It&amp;#39;s written with such respect and emotion that it feels like a personal farewell.&lt;/p&gt;
&lt;p&gt;I finished the book with the feeling that I had finally met Ayrton, not the distant idol from Sunday broadcasts, but the man himself, intense, demanding, and profoundly human.  &lt;/p&gt;
&lt;p&gt;For Senna fans, this book is a must-read. For those who aren&amp;#39;t, it&amp;#39;s an opportunity to understand why he became such a symbol, someone who could unite an entire nation.&lt;br&gt;And for anyone who loves powerful stories that inspire, move, and make you reflect, Ayrton: The Hero Revealed is truly unforgettable.&lt;/p&gt;
&lt;p&gt;A gift that left a mark and one I wholeheartedly recommend.&lt;/p&gt;
</content:encoded></item><item><title>Race - Jurerê Marathon 2025</title><link>https://alexbrodt.com/race-run-jurere-marathon-2025</link><guid isPermaLink="true">https://alexbrodt.com/race-run-jurere-marathon-2025</guid><description>Race report of the 10 km at Jurerê Marathon, held on 11/01/2025.</description><pubDate>Sat, 01 Nov 2025 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Jurerê Marathon has a unique vibe. Beach, sun, that postcard visual, and an energy that seems to push us forward. I was originally registered for the 21 km, but a few weeks before the race, I already felt that I hadn&amp;#39;t managed to train as I should have. The half marathon would require significant wear and tear, and I felt it wasn&amp;#39;t worth it. I chose to switch to the 10 km, a choice that turned out to be very wise.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/maratona-jurere-2025-foto.jpg&quot; alt=&quot;Photo, Jurerê Marathon 2025&quot;&gt;&lt;/p&gt;
&lt;p&gt;The start, always with a light atmosphere, and the flat course of Jurerê Internacional make this race special. Even so, the result was a little below what I expected, but it counts. I started with a relatively constant pace, without pushing too hard, just trying to maintain control and enjoy the day. I finished with an average pace of &lt;strong&gt;5:29 min/km&lt;/strong&gt;, completing the course with a sense of accomplishment.&lt;/p&gt;
&lt;p&gt;The course passed through the main sections of Jurerê, always flat, fast, and with plenty of sun.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/strava-mapa-maratona-jurere-2025.png&quot; alt=&quot;Map of Jurerê Marathon 2025&quot;&gt;&lt;/p&gt;
&lt;h6&gt;Splits (Strava)&lt;/h6&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lap&lt;/th&gt;
&lt;th&gt;Distance&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Pace&lt;/th&gt;
&lt;th&gt;GAP&lt;/th&gt;
&lt;th&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:31&lt;/td&gt;
&lt;td&gt;5:31/km&lt;/td&gt;
&lt;td&gt;5:30/km&lt;/td&gt;
&lt;td&gt;141 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:22&lt;/td&gt;
&lt;td&gt;5:22/km&lt;/td&gt;
&lt;td&gt;5:23/km&lt;/td&gt;
&lt;td&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:18&lt;/td&gt;
&lt;td&gt;5:18/km&lt;/td&gt;
&lt;td&gt;5:19/km&lt;/td&gt;
&lt;td&gt;162 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:26&lt;/td&gt;
&lt;td&gt;5:26/km&lt;/td&gt;
&lt;td&gt;5:25/km&lt;/td&gt;
&lt;td&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:26&lt;/td&gt;
&lt;td&gt;5:26/km&lt;/td&gt;
&lt;td&gt;5:25/km&lt;/td&gt;
&lt;td&gt;167 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:31&lt;/td&gt;
&lt;td&gt;5:31/km&lt;/td&gt;
&lt;td&gt;5:31/km&lt;/td&gt;
&lt;td&gt;169 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:34&lt;/td&gt;
&lt;td&gt;5:34/km&lt;/td&gt;
&lt;td&gt;5:33/km&lt;/td&gt;
&lt;td&gt;173 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:39&lt;/td&gt;
&lt;td&gt;5:39/km&lt;/td&gt;
&lt;td&gt;5:38/km&lt;/td&gt;
&lt;td&gt;174 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:34&lt;/td&gt;
&lt;td&gt;5:34/km&lt;/td&gt;
&lt;td&gt;5:33/km&lt;/td&gt;
&lt;td&gt;176 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;1.00 km&lt;/td&gt;
&lt;td&gt;5:25&lt;/td&gt;
&lt;td&gt;5:25/km&lt;/td&gt;
&lt;td&gt;5:24/km&lt;/td&gt;
&lt;td&gt;180 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;0.03 km&lt;/td&gt;
&lt;td&gt;0:07&lt;/td&gt;
&lt;td&gt;3:25/km&lt;/td&gt;
&lt;td&gt;4:05/km&lt;/td&gt;
&lt;td&gt;183 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Running is like that, not every day goes as planned, not every race can we execute as we trained. My biggest lesson is always to listen to my own body and not push myself too hard. Running is an experience that leads us to many lessons and helps us to know ourselves, but it needs to be light; if there is too much pressure, it loses its charm. We keep going!&lt;/p&gt;
</content:encoded></item><item><title>Never Lie - Freida McFadden</title><link>https://alexbrodt.com/book-never-lie-freida-mcfadden</link><guid isPermaLink="true">https://alexbrodt.com/book-never-lie-freida-mcfadden</guid><description>A gripping psychological thriller full of twists that keep you guessing until the very end.</description><pubDate>Sun, 19 Oct 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Never Lie by Freida McFadden, was quite a surprise. I started reading expecting a light suspense, and ended up completely hooked by a story that keeps the tension and curiosity alive from beginning to end. The author has an impressive ability to keep readers on edge, every chapter brings a new detail, a new question, a new reason to keep going.&lt;/p&gt;
&lt;p&gt;The pacing is fast, the chapters are short and intense, and the book masterfully plays with the idea that no one is exactly who they seem to be. You&amp;#39;re always one step away from uncovering something, yet never fully sure what&amp;#39;s true. And just when you think you&amp;#39;ve figured it out, the plot twist hits and it truly catches you off guard.&lt;/p&gt;
&lt;p&gt;I have mixed feelings about the ending. On one hand, I loved how unpredictable and bold it was, Freida avoids the cliché and takes the story somewhere unexpected. On the other hand, it felt a bit disjointed, like some of the puzzle pieces didn&amp;#39;t quite fit together. Still, it&amp;#39;s the kind of book that leaves you thinking for a while after finishing it.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s definitely worth reading, especially if you enjoy thrillers that play with perception and explore the psychological side of their characters. Never Lie might not be flawless, but it perfectly shows why Freida McFadden has become such a popular name in the genre, she knows exactly how to build tension and keep you guessing.&lt;/p&gt;
&lt;p&gt;A gripping, fast-paced thriller full of twists that make you question everything, even what you thought you knew.&lt;/p&gt;
</content:encoded></item><item><title>Madame Bovary - Gustave Flaubert</title><link>https://alexbrodt.com/book-madame-bovary-gustave-flaubert</link><guid isPermaLink="true">https://alexbrodt.com/book-madame-bovary-gustave-flaubert</guid><description>My first old classic read with true interest, maybe the most beautifully written book I&apos;ve ever read.</description><pubDate>Thu, 16 Oct 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Madame Bovary was the first old classic I read with genuine curiosity. I finished it feeling like it might be the most beautifully written book I&amp;#39;ve ever read. Flaubert&amp;#39;s level of detail is insane, you can almost smell the rooms, see the facial expressions, and imagine the tone of each character&amp;#39;s voice.&lt;/p&gt;
&lt;p&gt;The story follows Emma Bovary, a woman trapped between the boredom of provincial life and her longing for something grand. She&amp;#39;s restless, contradictory, sometimes selfish, sometimes naive, and that&amp;#39;s exactly what makes her so human.&lt;/p&gt;
&lt;p&gt;Flaubert explores themes like desire, frustration, social appearances, adultery, loneliness, and the emptiness that comes from always chasing something more. His writing feels simple at first, but it&amp;#39;s razor-sharp in precision. Nothing is there by accident.&lt;/p&gt;
&lt;p&gt;The pacing is slow, but never dull, it&amp;#39;s intense in its own way. There are parts where you just have to keep going to see what happens next.&lt;/p&gt;
&lt;p&gt;In the end, it&amp;#39;s a story about the weight of illusions, the danger of dreaming too much and the cost of not accepting reality. Highly recommended.&lt;/p&gt;
</content:encoded></item><item><title>Why Don’t We Have Super Apps in Brazil?</title><link>https://alexbrodt.com/why-dont-we-have-super-apps-in-brazil</link><guid isPermaLink="true">https://alexbrodt.com/why-dont-we-have-super-apps-in-brazil</guid><description>While Brazil is still debating whether Rappi is a super app or not, people in China are already paying for the bus, filing taxes, and buying coffee without leaving WeChat. But could that ever happen here?</description><pubDate>Sun, 12 Oct 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There was a time when &amp;quot;Super App&amp;quot; was the big buzzword in Brazil, you know, that idea of having one app to do it all. Well, in China, that&amp;#39;s not hype, it&amp;#39;s everyday life. While we&amp;#39;re still debating whether Rappi is or isn&amp;#39;t a super app, the Chinese are paying for the bus, ordering food, booking hotels, and even filing taxes without leaving the same app. All inside WeChat or Alipay.&lt;/p&gt;
&lt;p&gt;But what most people don&amp;#39;t know is how this actually works. Unlike Brazilian companies, who keep trying to stuff more and more features into their apps, the secret in China isn&amp;#39;t about cramming everything together. It&amp;#39;s about Mini Apps, small third-party apps that live inside the super app, like tiny shops inside a digital mall.&lt;br&gt;No downloads, no new accounts, no switching screens.&lt;/p&gt;
&lt;p&gt;Want a coffee? Mini App from the café. Need a ride? Mini App from DiDi. Want to pay bills, book a doctor, or buy tickets? There&amp;#39;s a Mini App for that too. And it all happens inside a platform that already knows who you are, where you live, and which card you&amp;#39;ll use. Convenient? Absolutely. A bit Black Mirror? Also yes.&lt;/p&gt;
&lt;p&gt;In China, a super app isn&amp;#39;t just an app on steroids, it’s a well-built ecosystem.
It has a clear business model, open technology, a smooth UX, and partners who actually play as a team. It&amp;#39;s the classic win-win scenario, and that&amp;#39;s why it works.&lt;/p&gt;
&lt;p&gt;China skipped the desktop phase and was born mobile-first. No Google, WhatsApp, or Facebook. WeChat became practically the country&amp;#39;s digital ID. QR code payments were the norm before they became a trend. And both government and private companies opened APIs and made integrations easy.&lt;/p&gt;
&lt;p&gt;Combine all that with a culture less obsessed with privacy, and you get an ecosystem where the app is almost an extension of real life. Meanwhile, here in Brazil… the story&amp;#39;s a bit different.&lt;/p&gt;
&lt;p&gt;Every company wants to be the market leader. On top of that, regulation is tough, we&amp;#39;ve got LGPD, the Central Bank, CADE. If an app starts doing too much, it becomes a target. The market is fragmented, with hundreds of apps competing in transport, banking, delivery even parking. And the Brazilian user? Already used to the chaos.&lt;/p&gt;
&lt;p&gt;At the end of the day, we adapted to our own microapp ecosystem. One app to order food, another to get a ride, another to check your balance, another to buy movie tickets, another for your doctor&amp;#39;s appointment… Habit won over convenience.&lt;/p&gt;
&lt;p&gt;And here&amp;#39;s the irony, it&amp;#39;s not like we lack technology. In banking and payments, we&amp;#39;ve got Open Finance, Pix, and open APIs ready to go. The only thing missing is alignment and of course, someone willing to share the controller.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s another thing, Brazil&amp;#39;s market is so competitive that everyone already has their own throne. The app that rules food, the one that dominates retail, the one that owns finance… trying to put all that in a single app would be like building a condo where every neighbor wants to be the manager.&lt;/p&gt;
&lt;p&gt;What&amp;#39;s left for us is the Brazilian-style super app. Maybe the future of super apps here isn&amp;#39;t a single app at all, but a network of experiences that connect each doing its thing, but communicating properly.
Kind of like a smart condo, everyone takes care of their own house, but the street is shared.&lt;/p&gt;
&lt;p&gt;In the end a true super app isn&amp;#39;t about putting everything in one place. It&amp;#39;s about building an ecosystem where everyone wins the user, the company, the developer, and yes, even the government.&lt;/p&gt;
&lt;p&gt;For now everyone still wants to be the super. Maybe once the market matures and partnerships get smarter, things will move forward.&lt;/p&gt;
&lt;p&gt;Until then, we&amp;#39;ll keep juggling 47 apps on our phones… and still forget where we saved the condo bill.&lt;br&gt;Digital life goes on...&lt;/p&gt;
</content:encoded></item><item><title>Dhammapada: The Teachings of Buddha</title><link>https://alexbrodt.com/book-dhammapada-the-teachings-of-buddha</link><guid isPermaLink="true">https://alexbrodt.com/book-dhammapada-the-teachings-of-buddha</guid><description>A simple and direct book, yet with a depth that unfolds slowly with each reading.</description><pubDate>Fri, 10 Oct 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Dhammapada is one of those books that seem simple at first glance but surprise you with their depth.
Each verse is short and direct, but if you read it again after some time, you&amp;#39;ll notice it changes. Or rather, you change, your understanding of what you read changes.&lt;/p&gt;
&lt;p&gt;Buddha&amp;#39;s words here don&amp;#39;t try to convince anyone or promise anything. They simply point the way, and it&amp;#39;s curious how this act of showing is exactly the opposite of imposing.&lt;/p&gt;
&lt;p&gt;Even though it&amp;#39;s an old translation, the reading flows easily. You can feel the essence of the teachings, focused on mindfulness, compassion, and detachment. Three pillars that sound simple until you actually try to apply them in daily life.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s the kind of book to keep by your bedside, open at any page, and read one teaching a day.&lt;/p&gt;
</content:encoded></item><item><title>Good Strategy, Bad Strategy - Richard Rumelt</title><link>https://alexbrodt.com/book-good-strategy-bad-strategy</link><guid isPermaLink="true">https://alexbrodt.com/book-good-strategy-bad-strategy</guid><description>A clear and honest book about what strategy really is (and what it isn&apos;t). Rumelt breaks corporate clichés and reminds us that good thinking is rare.</description><pubDate>Mon, 06 Oct 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In the last few weeks, I decided to challenge myself and read Good Strategy, Bad Strategy by Richard Rumelt in English. Unlike my &lt;a href=&quot;/book-the-wedding-people-espach&quot;&gt;previous book&lt;/a&gt;, which was fiction and used simpler words, this one brings a more corporate tone but it&amp;#39;s still very readable. It&amp;#39;s one of the most quoted books in MBAs, but rarely put into practice. Rumelt talks about strategy in a way that makes many corporate plans full of fancy phrases look like random words written to impress a CEO or investor.&lt;/p&gt;
&lt;p&gt;One of the main ideas is that a good strategy is not about saying you want to &amp;quot;be a market leader&amp;quot;, &amp;quot;change the future&amp;quot; or &amp;quot;inspire the world&amp;quot;. That&amp;#39;s just a wish. Real strategy means identifying a specific problem, understanding what really blocks progress, and building a clear and coherent plan to fix it. It sounds obvious, but as the author says, the obvious is often ignored.&lt;/p&gt;
&lt;p&gt;Rumelt mixes war stories, company turnarounds and unexpected decisions to show that good strategy comes from focus. It&amp;#39;s about choosing what not to do, cutting the noise, aiming at one target and using the little you have to create the biggest impact. He talks about finding the &amp;quot;leverage point&amp;quot;, that single decision that can change everything without needing an army of resources. Or as my great friend and client Emílio used to say: &amp;quot;take action to move the needle&amp;quot;.&lt;/p&gt;
&lt;p&gt;Another strong point is that advantage is not an accident. It&amp;#39;s built over time with decisions that reinforce each other, like placing a pawn behind a knight in chess, where every piece helps the other become stronger. Growth for example, is not good if it&amp;#39;s not organized. Growing just to grow only inflates the ego (or the spreadsheet). Growth should have purpose, structure and timing when the context allows.&lt;/p&gt;
&lt;p&gt;He also talks about inertia, that heavy force that makes companies repeat the same moves for years. Instead of fighting it, a good strategist learns to use it. You change what needs to change, but keep what still works.&lt;/p&gt;
&lt;p&gt;At the end, Rumelt shows the other side of the coin, bad strategy. The kind made to fit on a slide, full of buzzwords but empty of action. The one everyone claps for in a meeting and forgets about the next day.&lt;/p&gt;
&lt;p&gt;Reading this book made me realize how powerful the basics are when done right. A good strategy doesn&amp;#39;t need fancy terms, it needs clarity and courage to choose. Rumelt doesn&amp;#39;t romanticize the topic, he reminds us that thinking takes effort and that the biggest enemy of strategy is often the laziness to think.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a straightforward, no-nonsense book that makes you look at your own plans and ask: is this real strategy or just a well-formatted wish?&lt;/p&gt;
&lt;p&gt;Highly recommended.&lt;/p&gt;
</content:encoded></item><item><title>Home Assistant – Remote Access with Cloudflare (DNS vs Tunnel)</title><link>https://alexbrodt.com/home-assistant-remote-access-with-cloudflare-tunnel</link><guid isPermaLink="true">https://alexbrodt.com/home-assistant-remote-access-with-cloudflare-tunnel</guid><description>Two ways to expose Home Assistant outside your network: using Cloudflare as DNS only (open port) or via Cloudflare Tunnel (secure and without opening anything).</description><pubDate>Tue, 30 Sep 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When we talk about smart home/home automation, we can&amp;#39;t ignore the convenience of accessing everything while away from home. Imagine being on a trip and wanting to open the door for someone, or adjusting the air conditioning before arriving home, checking cameras, or simply turning off the light you forgot on. All of this seems simple, but there&amp;#39;s a complication when using Home Assistant, as by default it only works within the local network.&lt;/p&gt;
&lt;p&gt;There are several ways to solve this. The most traditional is to open a port on the router and use DuckDNS (if you don&amp;#39;t have a fixed IP) with Let&amp;#39;s Encrypt. It works, but there are two downsides to all this: first, it&amp;#39;s less secure and won&amp;#39;t work if your ISP uses CGNAT. Another option is to use VPN. Great security, but not practical, you always need to connect manually. The simplest option in this case would be Nabu Casa, many people end up choosing it, but it costs US$65/year. The good side is that it supports the developers, it&amp;#39;s a good alternative, but it&amp;#39;s not free.&lt;/p&gt;
&lt;p&gt;And that&amp;#39;s where other solutions come in, such as Cloudflare Tunnel. It creates a secure tunnel, without needing to open ports on the router and integrates with Google and Alexa. Best of all, you can use it for free.&lt;/p&gt;
&lt;p&gt;Using Cloudflare brings two options, one that is traditional, pointing only the DNS and the other using tunnel.&lt;/p&gt;
&lt;h6&gt;Option 1 – Cloudflare as DNS only&lt;/h6&gt;
&lt;p&gt;In practice, it&amp;#39;s creating an &lt;strong&gt;A&lt;/strong&gt; record in Cloudflare pointing to your home&amp;#39;s public IP:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/cloudflare-dns.png&quot; alt=&quot;A record in Cloudflare pointing to public IP&quot;&gt;&lt;/p&gt;
&lt;p&gt;The next step is to open ports on the modem/router (443 to 8123) and redirect to the machine running Home Assistant. It works, but has limitations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If your ISP uses CGNAT, it won&amp;#39;t work.&lt;/li&gt;
&lt;li&gt;You&amp;#39;re exposing your network directly, which opens security vulnerabilities.&lt;/li&gt;
&lt;li&gt;You need to keep the port open and hope that nobody decides to try to invade your network.&lt;/li&gt;
&lt;/ul&gt;
&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/images/posts/udm-se-invasion.png&quot; alt=&quot;Image of UDM-SE blocking access attempts&quot;&gt;
&lt;/p&gt;

&lt;p&gt;As you can see, despite being the most old-school way, it&amp;#39;s not very secure and recommended. Constantly my UDM-SE blocks various access attempts and scans.&lt;/p&gt;
&lt;h6&gt;Option 2 – Cloudflare Tunnel&lt;/h6&gt;
&lt;p&gt;Here&amp;#39;s the modern magic. Instead of opening ports, Home Assistant creates an outbound tunnel with Cloudflare. The setup process is simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create an account and add your domain to Cloudflare&lt;/strong&gt;
As I mentioned, you can create your account for free and put your domain on Cloudflare, as well as buy one directly through Cloudflare&amp;#39;s domain system. In fact, it was one of the most affordable options I found for .com domains, prices vary but seemed more affordable than on other registration sites.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/images/posts/dominio-cloudflare.png&quot; alt=&quot;Adding or creating domain in Cloudflare&quot;&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install the Cloudflared add-on in Home Assistant&lt;/strong&gt;
Here&amp;#39;s the key to all this magic. The Cloudflared plugin.
To &lt;a href=&quot;https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fbrenner-tobias%2Fha-addons&quot;&gt;install the plugin access this link&lt;/a&gt; it will make you add the &lt;a href=&quot;https://github.com/brenner-tobias/addon-cloudflared&quot;&gt;repository&lt;/a&gt; automagically and install it in your Home Assistant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configure the addon and authorize the tunnel&lt;/strong&gt;
After installing the addon, you need to go to the settings and add your domain.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/images/posts/configurar-cloudflared.png&quot; alt=&quot;Configure the addon, adding your domain/subdomain to access Home Assistant&quot;&gt;
&lt;/p&gt;

&lt;p&gt;After saving, run the addon, check the logs, as it will have the link to authorize the tunnel. When accessing the URL, you will be directed to authorize your domain to the Cloudflare tunnel.&lt;/p&gt;
&lt;p align=&quot;center&quot;&gt;
  &lt;img src=&quot;/images/posts/autorizar-dominio-cloudflare.png&quot; alt=&quot;Authorizing domain in cloudflare&quot;&gt;
&lt;/p&gt;


&lt;p&gt;The add-on automatically creates a CNAME (e.g. &lt;code&gt;homeassistant.yourdomain.com&lt;/code&gt;) that points to the tunnel.&lt;/p&gt;
&lt;p&gt;Example of add-on logs during configuration:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[16:06:47] INFO: Checking add-on config...
[16:06:47] NOTICE: No certificate found
[16:06:47] INFO: Creating new certificate...
...
Created tunnel homeassistant with id eb621545-4ced-5527-6615-399c029ce985
[16:07:59] INFO: Finished setting up the Cloudflare Tunnel
[16:07:59] INFO: Connecting Cloudflare Tunnel...
2025-09-30T19:08:01Z INF Registered tunnel connection location=gru18 protocol=quic
2025-09-30T19:08:04Z INF Registered tunnel connection location=gru07 protocol=quic
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now it&amp;#39;s time to make a small configuration in &lt;code&gt;configuration.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http:
  use_x_forwarded_for: true
  trusted_proxies:
    - 172.30.33.0/24
    - 192.168.2.0/24
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the end, your domain (&lt;code&gt;homeassistant.yourdomain.com&lt;/code&gt;) already points to the tunnel and is configured, ready for testing.
Check internal and external access to make sure everything went well.&lt;/p&gt;
&lt;h6&gt;Comparing the two options&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;DNS + Port Forwarding
Simple to understand
Direct exposure of IP and ports
Depends on not being behind CGNAT
More vulnerable&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cloudflare Tunnel
Doesn&amp;#39;t open ports on the router
Works even with CGNAT
More secure (outbound-only traffic, encrypted)
Free (only pay for the domain)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the idea is convenience and security, the Tunnel is the natural path. The pure DNS mode only makes sense if you already have everything configured and understand the risks well. To avoid IP and port exposure, I recently migrated from the traditional DNS model to the tunnel, everything has gone well so far!&lt;/p&gt;
</content:encoded></item><item><title>The Wedding People - Alison Espach</title><link>https://alexbrodt.com/book-the-wedding-people-espach</link><guid isPermaLink="true">https://alexbrodt.com/book-the-wedding-people-espach</guid><description>My impressions of Alison Espach&apos;s novel mixing weddings, irony, and human relationships.</description><pubDate>Sun, 14 Sep 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently finished The Wedding People by Alison Espach, which was my number one fiction read of 2024. I enjoyed the flow of the book a lot, but in the end, I felt it was somewhat lukewarm, it lacked a closing with greater impact.&lt;/p&gt;
&lt;p&gt;This was the first non-technical book I read entirely in English. In Portuguese, it&amp;#39;s called Como Arruinar Um Casamento. It&amp;#39;s a novel that starts from an apparently banal event, a wedding, to talk about loneliness, social expectations, and what it really means to connect with someone. The book has sharp moments, smart observations, and dialogues that sometimes feel so real they pull you into the story.&lt;/p&gt;
&lt;p&gt;What worked for me was this mix of subtle humor with melancholy. The author manages to show how a social moment can reveal insecurities and vulnerabilities in each character. In some sections, I felt the narrative could speed up, but perhaps that slowness is part of the style.&lt;/p&gt;
&lt;p&gt;In the end, I felt I had read something sincere and honest about ordinary people and their contradictions. It&amp;#39;s not jaw-dropping with a shocking finale, but it&amp;#39;s engaging and reflective.&lt;/p&gt;
</content:encoded></item><item><title>Floripa International Marathon, 2025</title><link>https://alexbrodt.com/floripa-international-marathon-2025</link><guid isPermaLink="true">https://alexbrodt.com/floripa-international-marathon-2025</guid><description>Week starts with a needle in the knee, ends with human statue at Beira-Mar. Cramps, unseasonable heat and a half marathon to learn (again) to respect the body.</description><pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The race was on Saturday. On Thursday the last trot of the week and the knee decides to ask for a break through a needle prick on the first step. I aborted the training, entered the protocol I call race kit, ice + anti-inflammatory + spray, kept hoping to be well until race day.&lt;/p&gt;
&lt;p&gt;Saturday, 4:30am, I was already on pilgrimage for a parking spot at Beira-Mar Norte. Big race is like that, the official warm-up starts in the car looking for parking.&lt;/p&gt;
&lt;p&gt;I met with the &lt;a href=&quot;https://www.instagram.com/cob_run&quot;&gt;COB Run&lt;/a&gt; crew, we did a warm-up and off to the start. I started with my mind in conservative mode, didn&amp;#39;t want to give up in the first km. I followed at a comfortable pace, until km 12 I could handle it well, from 15 onwards some calf cramp spoilers started. I would slow down, breathe, come back. Until, at km 19, came the most painful cramp of my life. I froze in the middle of the avenue. Right on Av. Beira-Mar Norte I became a living statue for a few seconds, letting the crowd pass while I negotiated peace with my legs.&lt;/p&gt;
&lt;p&gt;A few minutes later I managed to relax the calf and moved on, race walking mode activated. I tried to jog, the leg wouldn&amp;#39;t allow it. I crossed the finish line walking, whole and with the lesson learned. Many people reported cramps in this race, unseasonable muggy heat for August helped zero. Now it&amp;#39;s time to recover, focus on training and come back. 2025 still has 2 more 21K ahead. We continue.&lt;/p&gt;
&lt;p&gt;On the watch: 21.37 km in 2:23:54 (6:44/km, GAP 6:41/km), 96 m gain, average HR 157 bpm, cadence 162 spm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-maratona-internacional-floripa-2025-mapa.png&quot; alt=&quot;Map, Floripa 21K&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Laps&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;Lap&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Distance&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:35/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;144 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:54&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;161 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:59&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;161 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:46&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:46/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:52/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:51&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:51/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:51/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;162 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:59&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;162 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:55&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:55/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;162 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:05&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:05/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:06/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;164 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:04&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:04/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:02/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;164 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;11&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:03&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:03/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:03/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;12&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:11&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:11/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:10/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;13&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:02&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:02/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:32/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;164 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;14&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:09&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:09/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:24/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;163 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;15&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:03&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:03/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:51/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;161 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;16&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:39&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:39/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;157 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;17&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:30&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:30/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:30/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;18&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:03&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:03/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:04/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;155 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;19&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;8:26&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;8:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;8:06/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;148 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;20&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9:26&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;141 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9:05&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9:05/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;9:04/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;142 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;22&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.37 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3:21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;8:58/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;8:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;148 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The lesson remains. Let&amp;#39;s see if by next year I make peace with the Floripa International Marathon. The knee is already receiving treatment to collaborate again in the next battles.&lt;/p&gt;
</content:encoded></item><item><title>Home Assistant in HTTPS with own domain</title><link>https://alexbrodt.com/home-assistant-https-with-own-domain</link><guid isPermaLink="true">https://alexbrodt.com/home-assistant-https-with-own-domain</guid><description>No more insecure connections: here I explain how I activated HTTPS in Home Assistant OS with own domain, fixed IP and Let&apos;s Encrypt via port 8080. Everything with automatic renewal and no hacks.</description><pubDate>Sun, 10 Aug 2025 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you have Home Assistant running at your house, accessing by IP or domain without HTTPS, you&amp;#39;ve probably already seen the insecure connection warning.&lt;/p&gt;
&lt;p&gt;In this post, I explain how I solved this without depending on DuckDNS, without running Certbot manually and without esoteric hacks.&lt;/p&gt;
&lt;hr&gt;
&lt;h6&gt;My structure (so you understand if this post serves you)&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;brodt.com.br&lt;/code&gt; as domain&lt;/li&gt;
&lt;li&gt;Residential fixed IP&lt;/li&gt;
&lt;li&gt;Home Assistant OS running on a dedicated mini-PC&lt;/li&gt;
&lt;li&gt;UDM-SE as router and firewall&lt;/li&gt;
&lt;li&gt;Port 8123 maintained for Home Assistant&lt;/li&gt;
&lt;li&gt;Let&amp;#39;s Encrypt as certificate issuer&lt;/li&gt;
&lt;li&gt;External access via HTTPS with 443 to 8123 redirection&lt;/li&gt;
&lt;li&gt;Automatic certificate renewal via automation&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;1. Install Let&amp;#39;s Encrypt via Add-on Store&lt;/h6&gt;
&lt;p&gt;Go to:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Settings &amp;gt; Add-ons &amp;gt; Add-on Store&lt;/strong&gt;, search for &amp;quot;Let&amp;#39;s Encrypt&amp;quot; and install.&lt;/p&gt;
&lt;p&gt;Don&amp;#39;t start yet, calm down. Let&amp;#39;s configure.&lt;/p&gt;
&lt;h6&gt;2. Configure the add-on to use port 8080&lt;/h6&gt;
&lt;p&gt;I needed to configure Let&amp;#39;s Encrypt HTTP for port 8080:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;email: your-email@example.com
domains:
 , yourdomain.com.br
certfile: fullchain.pem
keyfile: privkey.pem
challenge: http
http:
  port: 8080
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;3. Redirect the ports&lt;/h6&gt;
&lt;p&gt;Access your router panel, create two port forwarding rules:&lt;/p&gt;
&lt;p&gt;Rule 1, For certificate issuance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;External port: 8080 to internal port: 8080&lt;/li&gt;
&lt;li&gt;Protocol: TCP&lt;/li&gt;
&lt;li&gt;IP: of your HA (ex: 10.0.0.200)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rule 2, For final access to HA:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;External port: 443 to internal port: 8123&lt;/li&gt;
&lt;li&gt;Protocol: TCP&lt;/li&gt;
&lt;li&gt;IP: same scheme, the HA IP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now you access &lt;code&gt;https://yourdomain.com.br&lt;/code&gt; and everything is consumed from 8123.&lt;/p&gt;
&lt;h6&gt;4. Configure the &lt;code&gt;configuration.yaml&lt;/code&gt;&lt;/h6&gt;
&lt;p&gt;In my case, the block looked like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;http:
  server_port: 8123
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem
  cors_allowed_origins:
   , https://google.com
   , https://www.home-assistant.io
  use_x_forwarded_for: true
  trusted_proxies:
   , 10.0.0.200
   , 172.30.33.0/24
  ip_ban_enabled: true
  login_attempts_threshold: 5
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5. Restart and issue the certificate&lt;/h6&gt;
&lt;p&gt;Save everything, restart HA and then start the Let&amp;#39;s Encrypt add-on.
If everything is right, you&amp;#39;ll see the &lt;code&gt;/ssl/fullchain.pem&lt;/code&gt; and &lt;code&gt;/ssl/privkey.pem&lt;/code&gt; files created.&lt;/p&gt;
&lt;p&gt;Test now: &lt;code&gt;https://yourdomain.com.br&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Automation to renew the certificate&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings &amp;gt; Automations &amp;amp; Scenes &amp;gt; Create Automation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Start with an empty automation&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Trigger (When)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trigger type: &lt;code&gt;Time&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Time: &lt;code&gt;03:00:00&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Action (Then do)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Action type: &lt;code&gt;Call service&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Service: &lt;code&gt;hassio.addon_restart&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Data:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;addon: core_letsencrypt
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This restarts the add-on every day at 3 AM. If the certificate is close to expiring, it already renews. And you sleep peacefully.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTPS with own domain and fixed IP&lt;/li&gt;
&lt;li&gt;No DuckDNS, no external scripts&lt;/li&gt;
&lt;li&gt;Valid certificates renewing by themselves&lt;/li&gt;
&lt;li&gt;Home Assistant still on 8123&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Home Assistant, LocalTuya goodbye delay</title><link>https://alexbrodt.com/localtuya-auto-import</link><guid isPermaLink="true">https://alexbrodt.com/localtuya-auto-import</guid><description>No more delay and cloud dependency. With the right LocalTuya fork, your Tuya devices work fast, locally and without suffering. Here&apos;s how I did it.</description><pubDate>Tue, 22 Jul 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you use many Tuya devices in your Home Assistant this post is for you.&lt;/p&gt;
&lt;p&gt;Here at home I have more than 25 RGB spots, Wi-Fi switches, presence sensors, door sensors and the like. I&amp;#39;ve felt very frustrated when triggering a command and noticing a 2, 3 second delay for something to happen.&lt;/p&gt;
&lt;p&gt;In my case, this delay started to bother me mainly in scenarios involving multiple devices, like when an automation tries to turn everything on together, clearly, that classic situation where the internet goes down and your &amp;quot;smart&amp;quot; home stops being... so smart.&lt;/p&gt;
&lt;p&gt;The standard Tuya integration works. But it depends 100% on the internet. Everything goes through Tuya&amp;#39;s cloud servers, far away. And like everyone who has ordered pastel delivery knows, the farther away, the longer it takes. Besides, no internet = no automation.&lt;/p&gt;
&lt;p&gt;LocalTuya solves all this by connecting Home Assistant directly to the local network. Result is instant response, control even without internet, and automations that work when you need them (including at dawn, when you can&amp;#39;t go groping walls looking for the switch).&lt;/p&gt;
&lt;p&gt;But of course, not everything is roses. There&amp;#39;s always that annoying part. Or there was.&lt;/p&gt;
&lt;h6&gt;The ace up the sleeve, the fork with auto-import via API&lt;/h6&gt;
&lt;p&gt;Setting up the official LocalTuya can be quite annoying. You needed to discover &lt;code&gt;Device ID&lt;/code&gt;, &lt;code&gt;Local Key&lt;/code&gt;, IP, and still manually map the &lt;code&gt;DPIDs&lt;/code&gt;. For 1 device, fine. For 40... good luck buddy.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s when looking for alternative solutions I found the best possible fork.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://xzetsubou.github.io/hass-localtuya/usage/installation/&quot;&gt;https://xzetsubou.github.io/hass-localtuya/usage/installation/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This fork does what should be the standard of the official integration, pulls everything from the Tuya API.
It lists all devices, local key, IP, DPID, names, and already leaves everything organized in Home Assistant. With a few clicks, your devices appear magically. Or better, automagically.&lt;/p&gt;
&lt;h5&gt;How to configure&lt;/h5&gt;
&lt;h6&gt;1. Have HACS installed&lt;/h6&gt;
&lt;p&gt;If you don&amp;#39;t have it yet, take a look &lt;a href=&quot;/installing-hacs-home-assistant&quot;&gt;at this post here&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h6&gt;2. Add the fork repository to HACS&lt;/h6&gt;
&lt;p&gt;Use the link below to add the fork repository to HACS:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://my.home-assistant.io/redirect/hacs_repository/?category=integration&amp;repository=hass-localtuya&amp;owner=xZetsubou&quot;&gt;https://my.home-assistant.io/redirect/hacs_repository/?category=integration&amp;amp;repository=hass-localtuya&amp;amp;owner=xZetsubou&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to HACS &amp;gt; Integrations&lt;/li&gt;
&lt;li&gt;Click on &amp;quot;LocalTuya&amp;quot;&lt;/li&gt;
&lt;li&gt;Install the integration&lt;/li&gt;
&lt;li&gt;Restart Home Assistant&lt;/li&gt;
&lt;/ol&gt;
&lt;h6&gt;3. Create your Tuya IoT Platform account&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;Access: &lt;a href=&quot;https://iot.tuya.com&quot;&gt;https://iot.tuya.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Register as &amp;quot;Individual Developer&amp;quot;&lt;/li&gt;
&lt;li&gt;Go to &lt;em&gt;Cloud &amp;gt; Project &amp;gt; Create Cloud Project&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Name it whatever you want&lt;/li&gt;
&lt;li&gt;Choose &amp;quot;Smart Home&amp;quot; and &lt;strong&gt;America&lt;/strong&gt; region (or the closest to you)&lt;/li&gt;
&lt;li&gt;Check all API permissions&lt;/li&gt;
&lt;/ol&gt;
&lt;h6&gt;4. Link your Tuya / Smart Life app account&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;em&gt;Devices &amp;gt; Link devices by App Account&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Click &amp;quot;Add App Account&amp;quot;&lt;/li&gt;
&lt;li&gt;Scan the QR code with the Tuya app (in developer mode)&lt;/li&gt;
&lt;li&gt;Done! Your devices are now visible in the cloud project&lt;/li&gt;
&lt;/ol&gt;
&lt;h6&gt;5. Add the hub in Home Assistant&lt;/h6&gt;
&lt;p&gt;You have two ways to add the hub (the magic starts here):&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://my.home-assistant.io/redirect/config_flow_start/?domain=localtuya&quot;&gt;Add directly via MY&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Or go manually to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Settings &amp;gt; Devices and Services &amp;gt; + Add Integration &amp;gt; LocalTuya&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now you choose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use Cloud API&lt;/strong&gt;: if you did the process above, enter:
 , &lt;code&gt;Access ID&lt;/code&gt;
 , &lt;code&gt;Access Secret&lt;/code&gt;
 , Region (ex: &lt;code&gt;us&lt;/code&gt;, &lt;code&gt;eu&lt;/code&gt;, etc.)
 , Login type (email or phone)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Or continue in fully local mode: check the &amp;quot;Disable Cloud API&amp;quot; option and do everything in offline mode (less practical, but possible).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As soon as the hub is added, it will show all linked devices and their functions already mapped. Simple as that.&lt;/p&gt;
&lt;p&gt;After I configured everything using this method:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lights respond before I finish touching the button&lt;/li&gt;
&lt;li&gt;Automations run like clockwork, no delay, no failure&lt;/li&gt;
&lt;li&gt;Even without internet, the house continues working&lt;/li&gt;
&lt;li&gt;Zero manual mapping. Seriously, zero.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have many Tuya devices, this is the best way to have everything working for real.&lt;/p&gt;
&lt;p&gt;Zetsubou&amp;#39;s fork became my standard. I don&amp;#39;t intend to have to go back to the official integration.&lt;/p&gt;
&lt;p&gt;Direct link for you to start:
&lt;a href=&quot;https://xzetsubou.github.io/hass-localtuya/usage/installation/&quot;&gt;https://xzetsubou.github.io/hass-localtuya/usage/installation/&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Half Marathon 21 BPM SC North Island</title><link>https://alexbrodt.com/half-marathon-21bpm-sc-north-island</link><guid isPermaLink="true">https://alexbrodt.com/half-marathon-21bpm-sc-north-island</guid><description>Cold and clear morning on the north of the island. Start in Jurerê, round trip to Daniela and zigzag through the neighborhood. Controlled pace, drop at the end and one more half for the count.</description><pubDate>Mon, 21 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of those Sundays in Jurerê: open sky, low temperature, light wind. The race leaves the neighborhood, enters and returns through flat stretches, with a piece to Daniela and laps through the internal streets. It&amp;#39;s a good course to maintain pace and enjoy the race.&lt;/p&gt;
&lt;p&gt;I went with the strong training vibe, without forcing too much. The body responded well until the second half. I was running with &lt;a href=&quot;https://www.instagram.com/mateusnava&quot;&gt;Nava&lt;/a&gt; at a good pace, but at km 12 I felt I needed to slow down and told him to continue accelerated. I continued alone, performance dropped and I maintained what I could, until km 17 to 19, I felt even more, but needed to finish. I continued as I could. In the end, another half on the north of the island.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-meia-maratona-21bpm.jpg&quot; alt=&quot;Map, Half 21 BPM&quot;&gt;
&lt;small&gt;Photo by &lt;a href=&quot;https://www.instagram.com/jessicapuerari/&quot;&gt;Jéssica Puerari&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;On the watch: 21 km in 2:03:43 (5:52/km), elevation gain 22 m, average HR 156 bpm and cadence 169 spm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-meia-maratona-21bpm-mapa.png&quot; alt=&quot;Map, Half 21 BPM&quot;&gt;&lt;/p&gt;
&lt;h3&gt;Laps&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;Lap&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Distance&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;138 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:28&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:28/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:27/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;149 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:28&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:28/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:28/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:32&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:32/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:29&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:29/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:29/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;157 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;157 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:35&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:35/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;160 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;11&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:37&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;160 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;12&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:06&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:06/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:06/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;13&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:52&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:52/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:53/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;14&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:55&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:55/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:53/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;157 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;15&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:57&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:57/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:56/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;16&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:00&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:00/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:58/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;17&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:06&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:06/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:06/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;18&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:38&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:38/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;152 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;19&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:22&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:14/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;155 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;20&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:23&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:23/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:16/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;160 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:15&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:15/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6:18/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;155 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;22&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.54 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3:13&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:53/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;161 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content:encoded></item><item><title>Installing HACS in Home Assistant</title><link>https://alexbrodt.com/installing-hacs-home-assistant</link><guid isPermaLink="true">https://alexbrodt.com/installing-hacs-home-assistant</guid><description>Step by step to install HACS and unleash the power of community-created integrations. The reason? LocalTuya. The truth? Because life is too short for half-assed automation.</description><pubDate>Sat, 12 Jul 2025 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Straight to the point: if you use Home Assistant and haven&amp;#39;t installed HACS yet, you&amp;#39;re missing half the fun.&lt;/p&gt;
&lt;p&gt;In my case, I installed it because I needed LocalTuya. But there&amp;#39;s a whole new world of possibilities when using HACS.&lt;/p&gt;
&lt;h5&gt;Why install HACS?&lt;/h5&gt;
&lt;p&gt;HACS (Home Assistant Community Store) is like that parallel market where good things happen: new integrations, beautiful cards, elegant themes, bizarre automations that nobody asked for, but you&amp;#39;ll definitely want to test.&lt;/p&gt;
&lt;p&gt;In my case, the focus was to escape the Tuya cloud. LocalTuya gives me local control over my devices, without depending on the goodwill of servers on the other side of the planet.&lt;/p&gt;
&lt;p&gt;This change brings an absurd lag reduction effect in actions. Very noticeable when having actions on virtual parallel buttons, like for example turning on a light where the lamp feedback is on another switch, it becomes instantaneous.&lt;/p&gt;
&lt;p&gt;Grab your coffee, because nerdiness without coffee is a sin.&lt;/p&gt;
&lt;h5&gt;How to install HACS&lt;/h5&gt;
&lt;p&gt;There are three installation methods, depending on how your Home Assistant is running. Let&amp;#39;s break it down.&lt;/p&gt;
&lt;hr&gt;
&lt;h6&gt;Home Assistant OS / Supervised&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Access this link to add the HACS repository to your system:
&lt;a href=&quot;https://my.home-assistant.io/redirect/supervisor_addon/?addon=cb646a50_get&amp;repository_url=https%3A%2F%2Fgithub.com%2Fhacs%2Faddons&quot;&gt;Open in Home Assistant&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When the confirmation appears, click &lt;strong&gt;Open Link&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the missing repository dialog, click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;strong&gt;Supervisor &amp;gt; Add-on Store&lt;/strong&gt;, search for &lt;strong&gt;HACS&lt;/strong&gt; and install.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start the add-on and go to the logs. Follow the instructions that appear there.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Finishing:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restart Home Assistant.&lt;/li&gt;
&lt;li&gt;Go to Settings &amp;gt; Integrations and add HACS.&lt;/li&gt;
&lt;li&gt;Follow the steps for GitHub authentication.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h6&gt;Home Assistant in Container&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;Open the terminal of your host machine.&lt;/li&gt;
&lt;li&gt;Access the container with:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;docker exec -it container_name bash
&lt;/code&gt;&lt;/pre&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;Run the installation script:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wget -O, https://get.hacs.xyz | bash -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Finishing:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restart the HA container.&lt;/li&gt;
&lt;li&gt;Go to Settings &amp;gt; Integrations and add HACS.&lt;/li&gt;
&lt;li&gt;Authenticate with GitHub.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h6&gt;Home Assistant Core (manually installed)&lt;/h6&gt;
&lt;ol&gt;
&lt;li&gt;In the terminal, access the user that runs HA.&lt;/li&gt;
&lt;li&gt;Run the script:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;wget -O, https://get.hacs.xyz | bash -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Finishing:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Restart Home Assistant.&lt;/li&gt;
&lt;li&gt;Go to Settings &amp;gt; Integrations and add HACS.&lt;/li&gt;
&lt;li&gt;Authenticate with GitHub.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h6&gt;After installation...&lt;/h6&gt;
&lt;p&gt;Now the HACS menu will appear in your sidebar. And with it, the portal of possibilities:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you use Tuya, I already recommend: install LocalTuya.&lt;/li&gt;
&lt;li&gt;Explore cards like &lt;code&gt;button-card&lt;/code&gt;, &lt;code&gt;mini-graph-card&lt;/code&gt;, &lt;code&gt;weather-card&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Change the Lovelace theme and have total control of dashboards.&lt;/li&gt;
&lt;li&gt;Update everything right there, without having to download zip, copy folder, restart 17 times...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Installing HACS was like unlocking Home Assistant&amp;#39;s turbo mode.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s like unlocking a sea of possibilities, escaping the basics, testing new things and driving your wife crazy when something fails. And it will fail.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re still stuck only with official integrations, you&amp;#39;re missing the most fun part of the game. Go ahead and install it. Then tell me what you thought. Or better, don&amp;#39;t tell me anything... just show the beautiful graph that appeared on the dashboard.&lt;/p&gt;
&lt;p&gt;Follow me for more tips and questionable decisions in the name of technology.&lt;/p&gt;
</content:encoded></item><item><title>Home Assistant OS Installation</title><link>https://alexbrodt.com/home-assistant-os-installation</link><guid isPermaLink="true">https://alexbrodt.com/home-assistant-os-installation</guid><description>How I migrated from Home Assistant in Docker to Home Assistant OS, burning the image directly to SSD with Ubuntu Live. Simple, direct and updated guide.</description><pubDate>Thu, 10 Jul 2025 11:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After a period of forced inactivity in home automation due to &lt;del&gt;moving&lt;/del&gt; force majeure reasons, I returned to the fun. Since 4 years ago, I ran Home Assistant in Docker on Debian, however, now I decided to start from scratch and adopt Home Assistant OS. In December 2025 the Docker installation stops receiving updates, so it makes sense to migrate to the complete experience with supervisor and add-ons without headaches.&lt;/p&gt;
&lt;p&gt;I installed it on an HP ProDesk i5, dedicating an SSD just for the system. Before this same disk was used by the &lt;a href=&quot;/my-homelab-residential-rack&quot;&gt;UniFi controller&lt;/a&gt;, now the mini-pc became an automation appliance.&lt;/p&gt;
&lt;p&gt;HAOS delivers the purest experience, dedicated operating system, continuous updates and official add-ons. Ideal for those who want stability and less maintenance.&lt;/p&gt;
&lt;p&gt;What I used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x86_64 PC (I used an HP ProDesk i5)&lt;/li&gt;
&lt;li&gt;An 8 GB or more USB drive (thanks Lidinei, always saving me)&lt;/li&gt;
&lt;li&gt;A dedicated SSD for HAOS&lt;/li&gt;
&lt;li&gt;Balena Etcher to burn the Ubuntu ISO&lt;/li&gt;
&lt;li&gt;Home Assistant OS image for x86_64&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Step by step&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create the USB drive with Ubuntu Live
Download &lt;a href=&quot;https://ubuntu.com/download/desktop&quot;&gt;Ubuntu Desktop&lt;/a&gt; and burn the ISO to the USB drive with &lt;a href=&quot;https://etcher.balena.io/&quot;&gt;Balena Etcher&lt;/a&gt;. Plug it into the Home Assistant PC.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Boot in live mode (without installing)
In BIOS/UEFI, select boot from USB drive and when Ubuntu starts choose the Try Ubuntu option. This way you use the system without installing.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download the Home Assistant OS image
Open the browser inside Ubuntu Live and download the latest HAOS image (x86_64) &lt;a href=&quot;https://github.com/home-assistant/operating-system/releases/download/16.2/haos_generic-x86-64-16.2.img.xz&quot;&gt;Download Home Assistant OS&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restore the image using Disks
In Ubuntu Live, open the &amp;quot;Show Applications&amp;quot; menu at the bottom left.
Search for &lt;strong&gt;Disks&lt;/strong&gt; and open the application.
In the list on the left, select the &lt;strong&gt;internal SSD&lt;/strong&gt; where you want to install HAOS.
At the top, click the &lt;strong&gt;three dots&lt;/strong&gt; &lt;strong&gt;Restore Disk Image…&lt;/strong&gt;
Select the HAOS image you downloaded.
Click &lt;strong&gt;Start Restoring…&lt;/strong&gt; and confirm with &lt;strong&gt;Restore&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Important observations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you get error &amp;quot;Error unmounting filesystem / target is busy&amp;quot;, you probably booted from the internal disk. Restart and choose &lt;strong&gt;Try Ubuntu&lt;/strong&gt; from the USB drive.&lt;/li&gt;
&lt;li&gt;If the disk has an active Swap partition, select the Swap partition in Disks, click the stop button and try again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the partitions panel you&amp;#39;ll see the restoration progress bar. This process writes Home Assistant OS to your SSD.&lt;/p&gt;
&lt;ol start=&quot;5&quot;&gt;
&lt;li&gt;Finish and start Home Assistant
When restoration is complete, shut down the system and remove the USB drive (Ubuntu will warn when you can).
Configure BIOS to boot from SSD.
HAOS will boot and complete the installation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In a few minutes, you&amp;#39;ll be able to access via browser: &lt;a href=&quot;http://homeassistant.local:8123&quot;&gt;http://homeassistant.local:8123&lt;/a&gt; or directly by machine IP: http://&lt;ip&gt;:8123&lt;/p&gt;
&lt;p&gt;Post-installation
Create the administrator user, restore a backup if you have one and reactivate integrations and automations.&lt;/p&gt;
&lt;p&gt;Setup observations&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I used a dedicated SSD as I made the mini-pc dedicated to HAOS&lt;/li&gt;
&lt;li&gt;Keeping the system &amp;quot;appliance&amp;quot;, backups and updates become predictable&lt;/li&gt;
&lt;li&gt;If you were coming from Docker, I recommend reviewing device names, paths and secrets&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Next steps&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install essential integrations (UniFi, Zigbee, MQTT, Localtuya)&lt;/li&gt;
&lt;li&gt;Create a dashboard and &lt;del&gt;lose&lt;/del&gt; have fun for hours&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>My homelab, Residential Rack</title><link>https://alexbrodt.com/my-homelab-residential-rack</link><guid isPermaLink="true">https://alexbrodt.com/my-homelab-residential-rack</guid><description>After years of planning, I finally built my home network infrastructure. Unifi Dream Machine, Home Assistant, patch panel, cabling in all rooms and a proper rack.</description><pubDate>Thu, 10 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Since I started getting interested in technology and especially servers/networks, I had that &lt;del&gt;almost&lt;/del&gt; nerdy desire to build a complete rack at home... not just for the aesthetics, which I confess, always enchanted me, but mainly for the control it provides, connection stability, centralized management, security, efficient Wi-Fi coverage and space for home automation.&lt;/p&gt;
&lt;p&gt;I hadn&amp;#39;t had the opportunity for decent infrastructure to be able to set this up, so when we started the project to build a house I thought about this from the beginning. I designed the cabling project structuring walls and ceiling. Yes, even the ceiling, because access points on the ceiling are like stars in the sky, the more you have, the better the shine, I mean, the coverage. So, each area of the house like office, living room, gourmet area and suites received specific network points for devices like TV/Computer and access points.&lt;/p&gt;
&lt;p&gt;A few years ago I discovered Unifi (thanks Reiner) and was enchanted by the brand. I acquired access points and always used them managing everything via controller on Linux. This worked, but you know that feeling of kludge? So... With the new house the idea was to have a rack to keep everything in its proper place using the right devices.&lt;/p&gt;
&lt;p&gt;The orchestrator of all this is called Unifi Dream Machine. There are different versions of it, in my case I ended up choosing the Special Edition (UDM-SE), as it already provides PoE and thus I eliminate power cables from access points and cameras. The UDM acts as router, firewall, switch, access point controller, NVR and could even wash dishes if it had two little robotic arms.&lt;/p&gt;
&lt;p&gt;In this whole idea I mounted my wall-mounted rack. Did it look good? Yes. Is it useful? Very. Did I need it? definitely, I explained to my wife that the internet gets faster with the rack. Follow me for more tips.&lt;/p&gt;
&lt;p&gt;The process of organizing the cabling inside the rack is practically artisanal. You have to measure the cables, comb them as the specialists say. I installed an unloaded patch panel to facilitate possible keystone change needs. Everything labeled, organized. Only those who have suffered with network mess know the pleasure of seeing everything plugged in the right place.&lt;/p&gt;
&lt;p&gt;Also living in there is a Ragtech Quadri UPS, ensuring that everything continues alive even when the power decides to take a vacation. And to complete the team, an HP Prodesk i5 running Home Assistant OS, responsible for all home automation. This little guy takes care of lighting, sensors, cameras, voice assistants and eventually reminds me that I left the window open, but that&amp;#39;s talk for another post.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/2025-07-10-rack.jpeg&quot; alt=&quot;Residential rack assembled&quot;&gt;&lt;/p&gt;
&lt;p&gt;This project is more of a hobby that makes me learn useful things, I learned more about PoE, rack ventilation, load distribution, grounding and even about how to organize cables without crying. And let&amp;#39;s face it, seeing everything working without kludge, without adapter hanging, without router on top of the microwave... it&amp;#39;s almost therapeutic.&lt;/p&gt;
&lt;p&gt;Now I have total network control. I define VLANs, isolate equipment, generate alerts, create routines. Like when my daughter accesses YouTube when she shouldn&amp;#39;t, the router cuts and I receive a notification. Yes, modern dad.&lt;/p&gt;
&lt;p&gt;I still intend to further improve this homelab, adding a NAS switch for photo/video storage.&lt;/p&gt;
&lt;p&gt;In the next posts I want to talk more about the automation part with Home Assistant, how the integration with sensors, cameras, voice commands etc. works.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re also thinking about setting up something similar I can guarantee it&amp;#39;s worth every minute of dedication, besides the fun of course!&lt;/p&gt;
</content:encoded></item><item><title>Night Run Floripa Airport, 10K on the runway</title><link>https://alexbrodt.com/night-run-floripa-airport-10k</link><guid isPermaLink="true">https://alexbrodt.com/night-run-floripa-airport-10k</guid><description>Night race inside Floripa&apos;s international airport. Neon lights, DJ, careful organization and 10K to enjoy the ride.</description><pubDate>Sun, 06 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Night Run Floripa Airport. Sensational idea and very well executed: running inside the airport. The arrival was with first-class reception, warm-up in party atmosphere, neon everywhere and DJ doing well. Being a restricted area, zero access bottleneck everything flowed very well.&lt;/p&gt;
&lt;p&gt;Running on the airport runway was an incredible experience, there were planes taking off and everything, the course is obviously all flat, could have made a PR, but today the vibe was to enjoy the experience. Calm race, enjoying the different view and the event vibe.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-night-run-floripa-airport.jpeg&quot; alt=&quot;Night Run Floripa Airport&quot;&gt;&lt;/p&gt;
&lt;p&gt;On the watch: 10.01 km in 54:48 (5:28/km), 6 m gain, average HR 170 bpm and cadence 168 spm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-night-run-floripa-airport-mapa.png&quot; alt=&quot;Map, Night Run Floripa Airport&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;Lap&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Distance&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:32&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:32/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;151 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:31&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:31/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:30/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;170 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:22&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;173 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:15&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:15/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:17/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;175 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;173 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;173 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:35&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:35/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:33/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;174 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:30&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:30/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:29/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;174 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;11&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.01 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0:03&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4:42/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7:35/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;149 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Experience grade 10: nice staff, clear signage and activations that make a difference. Different to run with the runway lights as scenery. I&amp;#39;ll be back.&lt;/p&gt;
</content:encoded></item><item><title>Florianópolis International Half Marathon, 2025</title><link>https://alexbrodt.com/florianopolis-international-half-marathon-2025</link><guid isPermaLink="true">https://alexbrodt.com/florianopolis-international-half-marathon-2025</guid><description>I returned to the Floripa Half after missing the previous edition due to flu. Route through Beira-Mar Norte, return before the bridge and continues to Trindade. Big race, well organized and another PR.</description><pubDate>Tue, 06 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last year I had planned to run this race, but a flu knocked me down and I couldn&amp;#39;t do the race. This time everything worked out. Early start 5:15am, mild weather. The route starts from Beira-Mar Norte, does the stretch towards the bridge, returns and continues towards the Trindade neighborhood. Many people participating in the race, &lt;a href=&quot;https://www.instagram.com/cob_run&quot;&gt;COB RUN&lt;/a&gt; crew with stand supporting their athletes at the event, round organization.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-meia-maratona-internacional-floripa-2025.jpg&quot; alt=&quot;Florianópolis International Half Marathon 2025&quot;&gt;&lt;/p&gt;
&lt;p&gt;It was a day to run free. I felt the weight at km 17 and 18, gave a small hold and tried to resume after, it worked, &lt;strong&gt;another PR in the half&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;On the watch: &lt;strong&gt;21 km in 1:56:30 (5:31/km)&lt;/strong&gt;, &lt;strong&gt;67 m gain&lt;/strong&gt;, &lt;strong&gt;average HR 158 bpm&lt;/strong&gt; and &lt;strong&gt;cadence 169 spm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-meia-maratona-internacional-2025-mapa.png&quot; alt=&quot;Map, Florianópolis International Half Marathon 2025&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;Lap&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Distance&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Time&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.24 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1:25&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:42/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;118 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:29&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:29/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:29/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;147 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:27&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:27/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:23/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;153 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:24&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:24/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:22&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:17/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;157 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:17/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;157 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:24&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:24/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:24/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;157 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:22&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:23/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;11&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;12&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:31&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:31/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:30/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;13&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:27&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:27/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:27/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;14&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:28/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;15&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:50&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:50/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:51/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;16&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:23&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:23/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;17&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:54&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;18&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:47&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:47/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:47/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;19&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:42&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:42/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:41/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;161 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;20&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;21&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1.00 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;22&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0.97 km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:39&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:49/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;5:50/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;169 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Strava splits&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5K: &lt;strong&gt;26:51&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;10k: &lt;strong&gt;54:01&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;15K: &lt;strong&gt;1:21:49&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;20K: &lt;strong&gt;1:50:28&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Half: &lt;strong&gt;1:56:30&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bring on the next one!&lt;/p&gt;
</content:encoded></item><item><title>Track&amp;Field Run Series Villa Romana 10K</title><link>https://alexbrodt.com/track-field-run-series-villa-romana-10k</link><guid isPermaLink="true">https://alexbrodt.com/track-field-run-series-villa-romana-10k</guid><description>Back to Track&amp;Field in Floripa, now starting from Villa Romana. Entire race with friend Mateus Nava, high spirits and PR in 10K.</description><pubDate>Sun, 23 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another T&amp;amp;F race in Floripa. Start at Villa Romana Shopping, cloudy and humid weather, that early Sunday with energy up high. I ran the 10 km with &lt;a href=&quot;https://instagram.com/mateusnava&quot;&gt;Mateus Nava&lt;/a&gt;; good partnership, laughs as always and spirits up high. Pace on track from start to finish. I felt it a bit on the return and had to slow down, but got the &lt;strong&gt;PR in 10K&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-track-field-2025.jpg&quot; alt=&quot;T&amp;F Run Series Villa Romana Race&quot;&gt;&lt;/p&gt;
&lt;p&gt;On the watch: &lt;strong&gt;10 km in 52:52 (5:17/km, GAP 5:17/km)&lt;/strong&gt;, &lt;strong&gt;average HR 174 bpm&lt;/strong&gt; and &lt;strong&gt;cadence 169 spm&lt;/strong&gt;. Round race, energy up high and careful organization as always.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/strava-corrida-tf-villa-romana-2025-mapa.png&quot; alt=&quot;Map, T&amp;F Run Series Villa Romana&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:06/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:05/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:18/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:18/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:13/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:11/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:14/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:18/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:14/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:18/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:24/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:23/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.14&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;4:56/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;4:55/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Sunday the way we like it: partnership, legs responding and energy up high. Bring on the next ones.&lt;/p&gt;
</content:encoded></item><item><title>The Creative Act - Rick Rubin</title><link>https://alexbrodt.com/book-the-creative-act-rubin</link><guid isPermaLink="true">https://alexbrodt.com/book-the-creative-act-rubin</guid><description>My impressions of Rick Rubin&apos;s book that reflects on creativity as a way of life.</description><pubDate>Sun, 02 Feb 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On a friend&amp;#39;s recommendation, I read The Creative Act: A Way of Being by Rick Rubin. The book is not a technical manual on creativity. It&amp;#39;s more of a collection of reflections on how creativity can be cultivated in daily life. Rubin writes as if in conversation, sharing insights about attention, silence, discipline, and openness to the new.&lt;/p&gt;
&lt;p&gt;I especially liked the passages where he shows that creating is not about sudden genius, but about constant practice, about living in a way that allows ideas to flow. At times I felt some repetition, as if a few ideas were disguised and returned later.&lt;/p&gt;
&lt;p&gt;Even so, it&amp;#39;s the kind of reading that provokes thought. Not a book to devour, but to open at any page and reflect. It was worth it for the inspiration it brought.&lt;/p&gt;
</content:encoded></item><item><title>SUP to Campeche Island, sunrise and glasses for Iemanjá</title><link>https://alexbrodt.com/sup-to-campeche-island</link><guid isPermaLink="true">https://alexbrodt.com/sup-to-campeche-island</guid><description>Early morning paddle towards Campeche Island: stubborn surf, cinematic sunrise, coati hosts and a pair of glasses that chose marine life.</description><pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I woke up at 04:00, board already tied to the car and heading to the south of the island. The plan was simple: go to Campeche Island and back. This ride is never &amp;quot;just a stroll&amp;quot;, always has double dose of adventure and excitement.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/capa-sup-ilha-do-campeche2.png&quot; alt=&quot;Campeche Dawn&quot;&gt;&lt;/p&gt;
&lt;p&gt;Arriving at the beach I met the Floripa Stand Up Paddle crew and we fell into the water. Literally. The surf was absurdly nervous, the entry was car wash mode and with the right to some tumbles. A few gulps of water to wake up well and we continued. Past the impact zone, the sea became a mirror. The day hadn&amp;#39;t been born yet and, after a few minutes paddling, the sun began to appear. It was a breathtaking sunrise, made us stop paddling just to keep the scene.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-ilha-do-campeche-nascer-do-sol.jpeg&quot; alt=&quot;Sunrise Campeche Island&quot;&gt;&lt;/p&gt;
&lt;p&gt;On the island we always have the traditional reception committee with the coatis, official residents and guardians of Campeche Island. With them around blinking is losing food, glasses, cell phone, everything becomes potential souvenir. We took a quick break and went to the tip of the island. Magical place, one of those where the photo never translates.&lt;/p&gt;
&lt;p&gt;On the way back the sea decided to remind me who&amp;#39;s in charge. Already close to arriving at the beach, after crossing a bunch of waves well, I had one of those surprises that I didn&amp;#39;t even see where it came from, just had time to hear someone shout my name and say &amp;quot;watch the wave&amp;quot;, took a beautiful tumble about 30 meters from the sand. I was wearing glasses and well... they decided to become an offering. Iemanjá got a new gift. The gift created a new challenge: driving for about an hour, from south to north of the island without glasses. Everything worked out, but here&amp;#39;s the lesson. Next crossing will be with contact lenses.&lt;/p&gt;
&lt;p&gt;On the watch: 6.06 km in 1:46:57 of movement. Turbulent sea at the exit, generous on the way and that sunrise that&amp;#39;s worth waking up early.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-ilha-do-campeche-mapa.png&quot; alt=&quot;Campeche Island, Map&quot;&gt;&lt;/p&gt;
</content:encoded></item><item><title>Carandiru Station - Drauzio Varella</title><link>https://alexbrodt.com/book-carandiru-station-varella</link><guid isPermaLink="true">https://alexbrodt.com/book-carandiru-station-varella</guid><description>My impressions of Drauzio Varella&apos;s book, a raw portrait of life inside Brazil&apos;s largest prison.</description><pubDate>Thu, 16 Jan 2025 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I read Carandiru Station by Drauzio Varella. It&amp;#39;s a strong, impactful book that&amp;#39;s hard to put down.&lt;/p&gt;
&lt;p&gt;The author narrates his experience as a volunteer doctor inside the São Paulo House of Detention, which was once the largest prison in Latin America. What struck me was the mix of clinical eye with humanity. Varella doesn&amp;#39;t judge, he observes and describes, and in doing so, shows the brutality, personal stories, and contradictions of the prison system.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m a big fan of movies and documentaries set in prison environments, and this book delivered that same raw impact. It&amp;#39;s full of heavy stories, but ones that feel truthful, and it doesn&amp;#39;t fail to show human fragility. Many moments left me unsettled, and I think that&amp;#39;s precisely the book&amp;#39;s strength, it&amp;#39;s not meant to comfort, it&amp;#39;s meant to confront reality.&lt;/p&gt;
&lt;p&gt;The direct style helps. No embellishments, no artificial drama, just facts and experiences told clearly. That&amp;#39;s why the reading is so striking.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s not just good, it&amp;#39;s important. One of those books that keeps echoing long after you&amp;#39;ve closed the final page.&lt;/p&gt;
</content:encoded></item><item><title>Running: The Exercise, the City &amp; the Marathon Challenge - Drauzio Varella</title><link>https://alexbrodt.com/book-running-drauzio-varella</link><guid isPermaLink="true">https://alexbrodt.com/book-running-drauzio-varella</guid><description>My impressions of Drauzio Varella’s book about his journey into running and its meaning.</description><pubDate>Mon, 30 Dec 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I read Running: The Exercise, the City &amp;amp; the Marathon Challenge by Drauzio Varella. It&amp;#39;s a reflective journey of a physician diving into the world of running. The book goes beyond a simple narrative, bringing meaningful moments from Varella&amp;#39;s life.&lt;/p&gt;
&lt;p&gt;He narrates how he left a sedentary lifestyle, decided to train for his first marathon, and provides a historical panorama of running from ancient Greece to today. He doesn&amp;#39;t skip the medical aspects, physiology, injuries, and the balance between challenging oneself and staying safe.&lt;/p&gt;
&lt;p&gt;What struck me was the tone, intimate and explanatory at the same time. He shares doubts, physical struggles, and curiosity, how does the body adapt? how is discipline born? At times, it felt like a mix of memoir, manual, and philosophical reflection.&lt;/p&gt;
&lt;p&gt;I valued the sincerity and lessons. It&amp;#39;s especially useful for anyone thinking about starting to run, aware of the physical, mental, and social sides.&lt;/p&gt;
&lt;p&gt;If there&amp;#39;s a critique, it&amp;#39;s that some chapters felt like filler. But overall, it&amp;#39;s a motivating book to evolve and challenge yourself in running.&lt;/p&gt;
</content:encoded></item><item><title>SUP to Francês Island, snorkel, kayak and meeting triathletes</title><link>https://alexbrodt.com/sup-to-frances-island</link><guid isPermaLink="true">https://alexbrodt.com/sup-to-frances-island</guid><description>Morning paddle with Junior: him in kayak, me on the board. Snorkel to see schools of fish on the island, meeting with a group of triathletes and calm return to start the day energized.</description><pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Finally we paddled to Francês Island! This time accompanied by my friend Junior. We departed from Cachoeira do Bom Jesus, Junior went in the kayak and I on the board. Sea smooth enough to chat along the way, as always it&amp;#39;s a spectacle the view of this big sea early in the morning.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-ilha-do-frances-2024.jpeg&quot; alt=&quot;Francês Island Map&quot;&gt;&lt;/p&gt;
&lt;p&gt;Arriving at Francês Island, we stopped to explore. Junior&amp;#39;s snorkel was a hit and we could see lots of little fish enjoying life in the shallows. Next, curious scene: a triathlon group appeared swimming from Canasvieiras to Francês Island. What stamina, and respect.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-ilha-do-frances-2024-atletas.jpeg&quot; alt=&quot;Francês Island Map&quot;&gt;&lt;/p&gt;
&lt;p&gt;After a rest there, we returned calmly. Round paddle, clear head, and still with time to spare to enjoy the day with family.&lt;/p&gt;
&lt;p&gt;On the watch: 6.41 km in 40:40, average close to 6.5 km/h. Light SSW wind, calm water, zero rush. The way I like it.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-ilha-do-frances-2024-mapa.png&quot; alt=&quot;Francês Island Map&quot;&gt;&lt;/p&gt;
</content:encoded></item><item><title>What I Talk About When I Talk About Running - Haruki Murakami</title><link>https://alexbrodt.com/book-what-i-talk-about-when-running-murakami</link><guid isPermaLink="true">https://alexbrodt.com/book-what-i-talk-about-when-running-murakami</guid><description>My impressions of Murakami’s contemplative memoir linking running, life, and writing.</description><pubDate>Fri, 20 Dec 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What I Talk About When I Talk About Running by Haruki Murakami is a contemplative book, in the author&amp;#39;s minimalist style.&lt;/p&gt;
&lt;p&gt;Murakami shares how running is discipline and reflection, without big revelations. That&amp;#39;s both its strength and limitation. There are profound moments, but also long stretches of introspection that feel slow.&lt;/p&gt;
&lt;p&gt;I enjoyed passages where he compares physical fatigue to creative fatigue, how running endurance echoes writing endurance. Genuine metaphors. At the same time, I wished for more &amp;quot;story&amp;quot; or concrete lessons.&lt;/p&gt;
&lt;p&gt;Still, it&amp;#39;s a book to read slowly. A modest gem for those who appreciate introspection and for runners seeking more than physical conditioning.&lt;/p&gt;
</content:encoded></item><item><title>The Girl on the Cliffs - Lucinda Riley</title><link>https://alexbrodt.com/book-the-girl-on-the-cliffs-riley</link><guid isPermaLink="true">https://alexbrodt.com/book-the-girl-on-the-cliffs-riley</guid><description>My impressions of Lucinda Riley’s novel full of secrets and emotions.</description><pubDate>Tue, 10 Dec 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently finished a book recommended by my wife, The Girl on the Cliffs by Lucinda Riley. My rating was 4, a good score for a novel that mixes family secrets, love, and atmospheric settings. It was engaging, emotional, and at the same time light.&lt;/p&gt;
&lt;p&gt;The story alternates past and present, revealing secrets and regrets. The author describes passages with precision, the Irish coast, old mansions, intense emotions, making readers feel immersed in the scenes.&lt;/p&gt;
&lt;p&gt;For my taste, the rhythm was balanced, with revelations at the right moments. However, some characters felt archetypal, and certain &amp;quot;twists&amp;quot; were predictable. But nothing that ruined the immersion.&lt;/p&gt;
&lt;p&gt;I liked the read. Not a masterpiece, but a good book to relax with.&lt;/p&gt;
</content:encoded></item><item><title>My second Half Marathon SC21k</title><link>https://alexbrodt.com/my-second-half-marathon-sc21k</link><guid isPermaLink="true">https://alexbrodt.com/my-second-half-marathon-sc21k</guid><description>From Continental Beira-Mar to after the tunnel: fluid race, DJ animating in the noisiest stretch, partnership at the beginning with Mateus Nava and PR in 21 km.</description><pubDate>Sun, 24 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another half marathon! This time I went to the event with some friends who were also going to run. The atmosphere was fun from start to finish. How interesting to see the difference in people&amp;#39;s energy in the morning, while some are sleepy, others are in groups doing a warm-up that&amp;#39;s almost choreography, it gave us good laughs. This race&amp;#39;s start is at Continental Beira-Mar, the weather was a bit cloudy, which is great for running. This SC21k route starts on the continent and crosses the bridge, already on the island the course continues until after the tunnel. For me, this part is the most annoying, inside the tunnel the sound of cars echoes and bothers. This time they put a DJ in there, great idea. The music kept spirits up and made the noise seem smaller.&lt;/p&gt;
&lt;p&gt;From the beginning to about km 7.5 I ran with my friend &lt;a href=&quot;https://www.instagram.com/mateusnava&quot;&gt;Mateus Nava&lt;/a&gt;. He was doing the 15 km and we did this stretch together. Having company there helped to get in step and maintain constant pace. Nava is a great partner, besides being a great friend he has contagious humor, which helps keep energy up.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-sc21k.jpg&quot; alt=&quot;SC21k Floripa&quot;&gt;&lt;/p&gt;
&lt;p&gt;The rest of the race was very pleasant. Stable pace, good head and the feeling of doing my best. Speaking of best, I surpassed the mark of &lt;a href=&quot;/my-first-half-marathon&quot;&gt;my first half marathon&lt;/a&gt;, sign of evolution, PR in 21 km.&lt;/p&gt;
&lt;p&gt;On the watch: &lt;strong&gt;21.01 km in 1:56:58 (5:34/km, GAP 5:26/km)&lt;/strong&gt;, &lt;strong&gt;140 m gain&lt;/strong&gt; and &lt;strong&gt;average HR 167 bpm&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-sc21k-mapa.png&quot; alt=&quot;Map, SC21k Floripa&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:38/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;144 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:29/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:25/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:44/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:38/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;161 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:10/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:09/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-3 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;163 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:39/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;4:28/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;43 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:18/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:18/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-42 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:23/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;169 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;11&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:39/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;12&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:29/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;169 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;13&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;170 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;14&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:34/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:30/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;171 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;15&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:15/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;23 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;172 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;16&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:32/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-23 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;171 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;17&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;174 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;18&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:25/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:13/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;173 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;19&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-5 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;173 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;20&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:28/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:25/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;178 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;21&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:24/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;180 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Strava splits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10K: 56:21&lt;/li&gt;
&lt;li&gt;15K: 1:27:38&lt;/li&gt;
&lt;li&gt;20K: 1:51:12&lt;/li&gt;
&lt;li&gt;21.01K: 1:56:58&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Result: beautiful scenery, big race atmosphere and organization getting the details right. DJ in the tunnel, good partnership with Onhate and Nava and a PR to close the day with a smile.&lt;/p&gt;
</content:encoded></item><item><title>Surviving in Hell - Racionais MC’s</title><link>https://alexbrodt.com/book-surviving-in-hell-racionais</link><guid isPermaLink="true">https://alexbrodt.com/book-surviving-in-hell-racionais</guid><description>My impressions of the book version of the classic album by Racionais MC’s.</description><pubDate>Sat, 02 Nov 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Surviving in Hell, the book version of the landmark album by Racionais MC&amp;#39;s. I&amp;#39;m a big fan of Racionais, and for me this is another cultural work of impact, with emotional strength and sharp social critique.&lt;/p&gt;
&lt;p&gt;The book mixes lyrics, photos, and context. It&amp;#39;s more than a musical record, it&amp;#39;s testimony and art. The raw voice of the lyrics remains powerful on paper, and the metaphor of &amp;quot;hell&amp;quot; forces reflection.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s one of those books that any fan will enjoy reading.&lt;/p&gt;
</content:encoded></item><item><title>The Best Comedies of Private Life - Luis Fernando Veríssimo</title><link>https://alexbrodt.com/book-the-best-comedies-of-private-life-verissimo</link><guid isPermaLink="true">https://alexbrodt.com/book-the-best-comedies-of-private-life-verissimo</guid><description>My impressions of Veríssimo’s collection of humorous chronicles.</description><pubDate>Tue, 29 Oct 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading The Best Comedies of Private Life by Luis Fernando Veríssimo. The book gave me a few laughs and reflections.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a collection of short, humorous chronicles about everyday life. Veríssimo&amp;#39;s style is light but sharp, turning small contradictions and banal scenes into entertaining stories.&lt;/p&gt;
&lt;p&gt;What&amp;#39;s missing is depth, being short texts, they didn&amp;#39;t engage me much. Some pieces worked better than others, and the humor lacked continuity. Even so, it was an enjoyable read that fulfills its role of entertaining with intelligence.&lt;/p&gt;
</content:encoded></item><item><title>Nothing Will Be Like Before - Miguel Nicolelis</title><link>https://alexbrodt.com/book-nothing-will-be-like-before-nicolelis</link><guid isPermaLink="true">https://alexbrodt.com/book-nothing-will-be-like-before-nicolelis</guid><description>My impressions of Miguel Nicolelis’s book reflecting on change and uncertainty.</description><pubDate>Mon, 28 Oct 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nothing Will Be Like Before by Miguel Nicolelis is an ambitious but uneven book.&lt;/p&gt;
&lt;p&gt;As I &lt;a href=&quot;/book-the-true-creator-of-everything&quot;&gt;mentioned in another post&lt;/a&gt;, I&amp;#39;m a fan of Nicolelis. I admire him as a brilliant scientist. This time he moves away from the traditional scientific world to venture into a more reflective narrative, exploring scientific, cultural, and personal changes. Some parts are visionary and provocative, others meander a bit. This contrast is both the richness and the weakness of the book.&lt;/p&gt;
&lt;p&gt;I valued his courage to question certainties and speculate about possible futures. But I missed more concreteness, it felt a bit too open, especially at the end.&lt;/p&gt;
&lt;p&gt;Still, it left me with points to think about. Not a light read, but one that fulfills the role of provoking thought.&lt;/p&gt;
</content:encoded></item><item><title>South Run, Morro do Sertão 10K</title><link>https://alexbrodt.com/south-run-morro-do-sertao-10k</link><guid isPermaLink="true">https://alexbrodt.com/south-run-morro-do-sertao-10k</guid><description>Early Sunday at Morro do Sertão: varied terrain, strong climb, technical descents and a finish on the beach. 10 km to keep.</description><pubDate>Sun, 20 Oct 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/@southrun_&quot;&gt;South Run&lt;/a&gt; at Morro do Sertão getting better each year. Start with the day breaking. The course mixes dirt road, quick crossing through pavement and sand at Pântano do Sul. The main climb on the hill asks for patience, short step, breathing in rhythm, the descent demands attention, the view is absurdly beautiful. Good energy all the way.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/south-run-morro-do-sertao.jpg&quot; alt=&quot;Morro do Sertão&quot;&gt;&lt;/p&gt;
&lt;p&gt;Overcast and humid weather, legs responding well. On the watch 10.13 km in 57:38 (5:41/km, GAP 5:31/km), 123 m gain and average HR 164 bpm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/strava-south-run-morro-do-sertao-mapa.png&quot; alt=&quot;Map, South Run Morro do Sertão&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:35/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:31/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-5 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:28/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:18/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:27/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:24/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:41/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;11 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:24/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:04/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;26 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:43/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:04/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:43/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:04/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:37/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.12&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:48/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:00/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;One of the races with the most beautiful landscapes I&amp;#39;ve ever seen. I&amp;#39;ll come back whenever I can.&lt;/p&gt;
</content:encoded></item><item><title>Live Run XP Balneário Camboriú 2024, 10K</title><link>https://alexbrodt.com/live-run-xp-balneario-camboriu-10k</link><guid isPermaLink="true">https://alexbrodt.com/live-run-xp-balneario-camboriu-10k</guid><description>Family weekend in BC. Round race on Av. Atlântica, PR in 5K within the 10K and the joy of seeing Lara run in the kids race.</description><pubDate>Sun, 22 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I planned the weekend in Balneário Camboriú with the family and took advantage of the Live Run XP stage. Lara entered the kids race, beautiful experience to watch, and I went for the 10 km. Perfect morning on Av. Atlântica: calm sea, peaceful waterfront, 7am start with animated people and the city slowly waking up. It was one of those races where the body responds and the head enjoys the view. Even got a &lt;strong&gt;5K PR&lt;/strong&gt; along the way, within a 10K race.&lt;/p&gt;
&lt;p&gt;On the watch: &lt;strong&gt;9.84 km in 55:40 (5:39/km, GAP 5:35/km)&lt;/strong&gt;, &lt;strong&gt;83 m gain&lt;/strong&gt; and &lt;strong&gt;average HR 159 bpm&lt;/strong&gt;. Careful organization, hydration on point and very well set up structure. I finished happy and ran to the kids finish line to see little Lara participate.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/live-run-xp-bc.jpg&quot; alt=&quot;Photo, Live Run XP BC&quot;&gt;
&lt;img src=&quot;/images/posts/strava-live-run-xp-bc-mapa.png&quot; alt=&quot;Map, Live Run XP BC&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:32/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:28/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:25/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:24/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:33/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:26/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:36/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:41/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;11 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:44/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:45/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:40/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:46/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:53/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.84&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:52/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;BC is one of those cities that invite you to run. It was a great weekend with family together, round race and a PR to keep. I want to come back more times.&lt;/p&gt;
</content:encoded></item><item><title>The True Creator of Everything - Miguel Nicolelis</title><link>https://alexbrodt.com/book-the-true-creator-of-everything</link><guid isPermaLink="true">https://alexbrodt.com/book-the-true-creator-of-everything</guid><description>Impressions of Miguel Nicolelis&apos;s book about science, innovation, and the power of the mind.</description><pubDate>Wed, 04 Sep 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently finished reading The True Creator of Everything by Miguel Nicolelis. I&amp;#39;m a big fan of the author, a brilliant scientist who blends science, philosophy, and personal stories to talk about the human mind and the future of technology.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a dense but enriching read. Nicolelis challenges traditional models of artificial intelligence and science, highlighting the mind as the true center of innovation.&lt;/p&gt;
&lt;p&gt;It requires attention but greatly expands your worldview. For anyone who enjoys science and thinking about the future, this book is well worth it.&lt;/p&gt;
</content:encoded></item><item><title>My first half marathon, Floripa 21K</title><link>https://alexbrodt.com/my-first-half-marathon</link><guid isPermaLink="true">https://alexbrodt.com/my-first-half-marathon</guid><description>21K debut. Cloudy sky, wind on the bridge, knee complaining, head in place and the good feeling of crossing the line.</description><pubDate>Sun, 25 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The day hasn&amp;#39;t even dawned yet and Beira-Mar Norte in Floripa is packed. Many people came to enjoy the International Marathon. Expected 16 thousand people. The air is humid and the city is still waking up. My wife and daughter accompany me, which besides giving strength with cheering makes my life easier to park the car, which is always chaos in these big races.&lt;/p&gt;
&lt;p&gt;The start is early, 05:15 still has that silence in the city, but big race is excitement and noise. The course starts at Beira-Mar and goes to Estreito. Good pavement, side wind at some points and short climbs. It was my first half. The knee warned around the middle of the race, forced me to reduce the pace that wasn&amp;#39;t great anyway, and let&amp;#39;s face it, first half marathon has to be conservative. I shortened the stride and focused on keeping the best to finish.&lt;/p&gt;
&lt;p&gt;On the watch: 21.22 km in 2:08:59 (6:05/km, average GAP 5:55/km), elevation gain of 118 m and average frequency of 162 bpm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/floripa-meia-2023.png&quot; alt=&quot;Map, Floripa Half&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:30/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:20/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;143 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:01/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:03/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-6 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;153 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:09/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:58/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:00/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;158 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:50/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-9 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;156 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:50/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;159 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:51/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;160 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:52/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:47/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;160 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:58/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:57/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;162 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:49/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:48/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;163 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;11&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:55/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:52/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;164 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;12&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:19/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:03/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;7 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;164 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;13&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:16/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:11/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;165 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;14&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:54/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:56/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-6 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;160 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;15&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:23/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:12/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;48 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;166 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;16&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:38/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:38/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-12 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;163 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;17&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:07/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:12/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-34 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;167 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;18&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:18/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:15/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;19&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:20/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:19/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;20&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:56/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;168 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;21&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:49/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:47/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;174 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.21&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:41/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:38/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;177 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Strava splits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;15K in 1:30:27&lt;/li&gt;
&lt;li&gt;20K in 2:01:10&lt;/li&gt;
&lt;li&gt;21.22K in 2:08:59&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;21 km of overcoming. A year ago it seemed distant. With planning, focus and strengthening, it became possible. Thank you, Nilson Running, for the training and teachings. And thank you, Caroline, for the constant support (even waking up at 3 AM to face the logistics). For those who think it&amp;#39;s not possible, it is. With patience and consistency we go far.&lt;/p&gt;
</content:encoded></item><item><title>SUP to Naufragados, round trip that became one way</title><link>https://alexbrodt.com/sup-naufragados-boat-return</link><guid isPermaLink="true">https://alexbrodt.com/sup-naufragados-boat-return</guid><description>Paddle in the south of Floripa to Naufragados Beach. The plan was to go and return, but the weather closed with fog and the return was by boat. On the way, a penguin came to say hi.</description><pubDate>Sun, 28 Jul 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sunday morning, I wake up early (4:00am) and head south of the island. The board was already in the car, everything prepared the night before. After an hour driving, I arrive at the meeting point with the &lt;a href=&quot;https://floripastanduppaddle.com.br/&quot;&gt;Floripa Stand Up Paddle&lt;/a&gt; crew. We went towards Naufragados, the departure looks like a lagoon, well-behaved sea and that postcard view. The idea was simple, a round trip. The universe only read the first part.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-naufragados.jpeg&quot; alt=&quot;Naufragados&quot;&gt;&lt;/p&gt;
&lt;p&gt;Arriving at the beach, the sky closed so quickly that we didn&amp;#39;t even notice. We went to lunch to wait for the weather to clear again for our return. Thick fog, short visibility and that horror movie silence. Some of the adventurers still wanted to return paddling, but common sense entered the conversation and decreed: no paddling back without reference. We called for rescue and returned by boat, boards on board and guaranteed stories.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-naufragados-neblina.jpeg&quot; alt=&quot;Naufragados, Fog&quot;&gt;&lt;/p&gt;
&lt;p&gt;Morning bonus: a penguin crossed our route, curious and calm. Floripa has these surprises, especially in the south.&lt;/p&gt;
&lt;p&gt;On the watch: 3.38 km in 23:32, average of 8.6 km/h. Weak NNE wind, around 17°C. Short ride, long memory and the mental note to always respect the weather, it&amp;#39;s what commands the script.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-naufragados-mapa.png&quot; alt=&quot;Naufragados, Map&quot;&gt;&lt;/p&gt;
</content:encoded></item><item><title>Programming in the Age of Artificial Intelligence: Is It Still Worth Learning?</title><link>https://alexbrodt.com/programming-in-ai-era-still-worth-learning</link><guid isPermaLink="true">https://alexbrodt.com/programming-in-ai-era-still-worth-learning</guid><description>I was reflecting on how necessary and promising it is to study programming nowadays, given the advancement of technology, specifically artificial intelligence...</description><pubDate>Wed, 03 Jul 2024 20:08:00 GMT</pubDate><content:encoded>&lt;p&gt;I was reflecting on how necessary and promising it is to study programming nowadays, given the advancement of technology, specifically artificial intelligence. This made me remember when I was 10 years old and my mother enrolled me in a computer course.&lt;/p&gt;
&lt;p&gt;At the time it was called IPD, Introduction to Data Processing. It was an important milestone, where the change from Windows 95 to Windows 98 was beginning. The course still offered Office Package training modules and Computer Assembly and Maintenance.&lt;/p&gt;
&lt;p&gt;My mother said this was the future and that I should focus on &amp;quot;computer science&amp;quot; studies. Advancing through the course I was gifted with a computer, where I spent hours of entertainment on ICQ and mIRC. I had my first contact with programming at that time, where studying was a pastime and there I barely knew I was directing my professional future.&lt;/p&gt;
&lt;p&gt;When I started working professionally with programming 20 years ago, we had great difficulty in terms of information, documentation and access. This becomes even more evident if we look 40 years ago, where programming languages were more complex and required much more specialization.&lt;/p&gt;
&lt;p&gt;I clearly see that this entry barrier has decreased, everything is much more accessible, making programming more inclusive. Today many beginning programmers or anyone who is not in the technology field, can obtain complex code easily through AI assistants.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/62a5568b-f38f-4699-aca6-567b9569813a.jpeg&quot; alt=&quot;Programming and AI&quot;&gt;&lt;/p&gt;
&lt;p&gt;An interesting example of how AI is transforming programming is through tools like GitHub Co-Pilot, which greatly assist in the software development process, generating code, documentation, supporting automated test writing and much more. This shows how AI can facilitate the software development process, but also highlights the need for programming knowledge to understand and direct these tools effectively.&lt;/p&gt;
&lt;p&gt;NVIDIA CEO Jensen Huang spoke in a presentation that programming as we know it, may become unnecessary with AI advances, as technology is being developed so that no one needs to program anymore and programming language becomes more accessible to everyone.&lt;/p&gt;
&lt;p&gt;Although this vision may seem futuristic and promising, I believe that the study of programming continues to be necessary, especially its fundamentals.&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t believe that programming as we know it will change drastically in 5 years, but maybe in 20 we&amp;#39;ll have other forms of languages and devices for coding. AI will clearly be an accelerator in this area, despite being a fantastic assistant to help in debugging processes or even completing lines of code accelerating development, in terms of reliability curation by a programmer is still necessary.&lt;/p&gt;
&lt;p&gt;Therefore, with all technological advancement, and considering that AI will not replace programmers, but will assist them, making them super programmers, giving them more time for other tasks with human cognition to be executed, we should continue learning programming, even to continue the future of AI.&lt;/p&gt;
&lt;p&gt;My mother showed me years ago that studying &amp;quot;computer science&amp;quot; was investing in the future. Today at 80 years old, I understand that she continues to be right. Studying programming not only prepares professionals to work with new technologies, but also enables them to innovate and create new solutions.&lt;/p&gt;
&lt;p&gt;Just as she taught me the importance of technology, I want to pass this vision to my daughter, I believe that programming will continue to be a valuable skill for the future.&lt;/p&gt;
</content:encoded></item><item><title>Jurerê Night Run Hard Rock</title><link>https://alexbrodt.com/race-jurere-night-run-hard-rock</link><guid isPermaLink="true">https://alexbrodt.com/race-jurere-night-run-hard-rock</guid><description>Night race in Jurerê with a rock soundtrack, light rain and stretches of sand and mud. 10.37 km to enjoy the beach vibe with animated people.</description><pubDate>Sat, 16 Mar 2024 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Humid night in Jurerê, wet asphalt and music everywhere. The Jurerê Night Run has this party atmosphere with the start always full of energy. Along the way music, speakers scattered around, people dancing on the edge of the course and the sound of the sea composing the soundtrack. It rained from start to finish, but nobody got discouraged. It was a race to enjoy, not to fight with the watch.&lt;/p&gt;
&lt;p&gt;The 10km route makes two laps on the beach. When you get to the sand the game changes, stretches of soft sand and mud spots near the accesses. The stride gets short, the foot sinks a bit and cadence commands the rhythm.&lt;/p&gt;
&lt;p&gt;On the watch, I closed 10.37 km in 1:09:47, average pace of 6:43/km and average HR of 164 bpm. Between puddles and laughter, the good feeling remained of running listening to rock, feeling the sea breeze and sharing the path with an animated crowd.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:51/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:49/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:06/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:01/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:44/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:42/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:44/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:52/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:54/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:47/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:54/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:51/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:51/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:49/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:09/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:01/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:19/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:01/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:15/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:52/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.37&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:23/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:10/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/jurere-night-run.jpg&quot; alt=&quot;Map, Hard Rock Jurerê Night Run&quot;&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s the type of race to put on the calendar when the idea is to add experience, collect memories and good music.&lt;/p&gt;
</content:encoded></item><item><title>Track&amp;Field Run Series 2024, 10K Floripa</title><link>https://alexbrodt.com/track-field-run-series-2024-10k</link><guid isPermaLink="true">https://alexbrodt.com/track-field-run-series-2024-10k</guid><description>I returned to Track&amp;Field in Floripa, now for the 10 km. Entire race with light drizzle, wet asphalt and good weather to run.</description><pubDate>Sun, 25 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After the &lt;a href=&quot;/track-field-run-series-first-floripa-race&quot;&gt;debut in this race&lt;/a&gt;, I returned to repeat the dose and stretch to 10 km. Rainy weather, constant drizzle and that overcast sky that leaves the city silent. The start came out with the crowd animated, the race starts at Iguatemi shopping and continues until connecting to Beira-Mar Norte, round trip enjoying with my headphones, praying to finish with them working. Controlled pace from start to finish, being careful not to slip on the smooth parts.&lt;/p&gt;
&lt;p&gt;On the watch: 10.06 km in 1:03:02 (6:16/km, GAP 6:15/km), 30 m gain and average HR 160 bpm. It rained the whole time, but I managed to enjoy it, and even got a PR in 10 km.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/tf-run-2024-foto.jpg&quot; alt=&quot;Photo at the race, T&amp;F Run Series 2024&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:04/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:59/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:05/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:00/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:06/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:03/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:10/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:07/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:15/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:11/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:24/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:22/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:24/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:21/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;8&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:27/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:19/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;9&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:30/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:29/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;10&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:19/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:17/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content:encoded></item><item><title>SUP in Canasvieiras, flat-calm ocean</title><link>https://alexbrodt.com/sup-canasvieiras-calm-morning</link><guid isPermaLink="true">https://alexbrodt.com/sup-canasvieiras-calm-morning</guid><description>Early paddle in Canasvieiras, calm sea</description><pubDate>Sat, 24 Feb 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I woke up early, board in the water and the sea in Canasvieiras that way we like it: a mirror. Beach at this time (06:00) is calm, just the sound of the paddle cutting through the water.&lt;/p&gt;
&lt;p&gt;These SUP moments for me are therapy. Time to contemplate nature, enjoy the view and appreciate the beauty of the magic island!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-canasvieiras.jpeg&quot; alt=&quot;SUP in Canasvieiras&quot;&gt;&lt;/p&gt;
&lt;p&gt;5.17 km in 1:02:26, average speed around 5 km/h. Calm sea, light wind, zero rush, just contemplate and be grateful. And yes, SUP is training too, but today&amp;#39;s goal was to disconnect a bit. Batteries were recharged.&lt;/p&gt;
&lt;p&gt;Next goal is to stretch to the famous Francês island. Let&amp;#39;s see if courage comes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-canasvieiras-mapa.png&quot; alt=&quot;SUP map in Canasvieiras&quot;&gt;&lt;/p&gt;
</content:encoded></item><item><title>South Run Race, Açores Beach</title><link>https://alexbrodt.com/south-run-acores-beach</link><guid isPermaLink="true">https://alexbrodt.com/south-run-acores-beach</guid><description>7.78 km race on Pântano do Sul waterfront: beach view, coastlines covered with forest and a short up-and-down that makes the workout nice to do.</description><pubDate>Sun, 22 Oct 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Early Sunday, south of the island slowly waking up and me running on the Açores Beach waterfront. Calm sea, anchored boats, smell of salt and that frame of hills covered with Atlantic forest. The route follows the beach curve, going around the bay to the corner and returning the same way. Firm ground, friendly wind on the way and, on the return, a headwind that asks for patience. It&amp;#39;s the kind of place that reminds you why we get out of bed to run.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/south-run-praia-dos-acores.jpg&quot; alt=&quot;South Run Açores Beach&quot;&gt;&lt;/p&gt;
&lt;p&gt;The elevation has some short undulations that break the monotony and bring an extra challenge to the course. But without a doubt what takes your breath away in this race are the landscapes!
The watch closed 7.78 km in 52:27, average pace of 6:44/km and average HR of 161 bpm.&lt;/p&gt;
&lt;p&gt;Light-headed workout, leg doing the work and heart being grateful.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:07/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:05/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:22/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:15/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:19/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:13/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:11/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:07/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:22/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:08/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;6 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;6&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:41/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:45/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-9 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;7&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:52/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:49/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.78&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:03/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:40/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Here&amp;#39;s the record of one of Floripa&amp;#39;s most beautiful routes for light running. Beach on one side, coastline on the other, landscape that changes at every curve. Just adjust the pace, breathe deeply and let the island do the rest.&lt;/p&gt;
</content:encoded></item><item><title>Great by Choice - Jim Collins</title><link>https://alexbrodt.com/book-great-by-choice</link><guid isPermaLink="true">https://alexbrodt.com/book-great-by-choice</guid><description>Impressions of Jim Collins&apos;s book on companies that thrive amid chaos and uncertainty.</description><pubDate>Fri, 21 Apr 2023 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Great by Choice by Jim Collins shows how some companies managed to thrive even in chaotic and unpredictable environments.&lt;/p&gt;
&lt;p&gt;He uses research and real-world examples to demonstrate that success doesn&amp;#39;t come from luck, but from discipline, consistency, and preparation. The winning companies are led by people who make firm decisions even under uncertainty.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s an inspiring read for managers and entrepreneurs facing crises or highly competitive markets. Highly recommend it.&lt;/p&gt;
</content:encoded></item><item><title>Carnival Night Run Costão do Santinho</title><link>https://alexbrodt.com/carnival-night-run-costao-do-santinho</link><guid isPermaLink="true">https://alexbrodt.com/carnival-night-run-costao-do-santinho</guid><description>Night race of 5.93 km at Santinho, with carnival atmosphere, music and activations on the waterfront. Rain, heat and lots of happy people, more to enjoy than for the watch.</description><pubDate>Sat, 18 Feb 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Carnival Saturday, hot night at Santinho and the entire beach in party mood. Start with music, activations everywhere and that mix of lights, sea and animated people. It rained a bit, but nothing to end the party. It was one of those races to smile and enjoy the moment, more like a fast walk than serious training.&lt;/p&gt;
&lt;p&gt;The route is almost all flat, going around Santinho&amp;#39;s waterfront and climbing slightly towards the coast before returning. The view compensates: dark sea with reflection of lights, warm wind from the front in some stretches and the sound of waves as a metronome. The high humidity weighed, but the crowd&amp;#39;s energy pushed to the end.&lt;/p&gt;
&lt;p&gt;On the watch: 5.93 km in 39:45 (6:42/km), 25 m gain and average HR of 160 bpm.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/night-run-santinho.jpg&quot; alt=&quot;Map, Night Run Costão do Santinho&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:38/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:35/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:56/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:44/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:01/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:00/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:44/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:35/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;3 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:42/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;5:39/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-4 m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.92&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:12/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:09/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;It was rain on the head and lots of happy people running in this hot carnival weather.&lt;/p&gt;
</content:encoded></item><item><title>NRF 2023: what I saw and learned in New York</title><link>https://alexbrodt.com/nrf-2023-what-i-saw-and-learned-in-new-york</link><guid isPermaLink="true">https://alexbrodt.com/nrf-2023-what-i-saw-and-learned-in-new-york</guid><description>I was at NRF 2023 in New York: networking, trends and practical insights, self-checkout, autonomous stores, digital-first (phygital), data-driven and frictionless journeys.</description><pubDate>Mon, 23 Jan 2023 13:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Last week I had the opportunity to participate in &lt;a href=&quot;https://nrfbigshow.nrf.com/&quot;&gt;NRF (National Retail Federation 2023)&lt;/a&gt;, the world&amp;#39;s largest retail fair in New York!&lt;/p&gt;
&lt;p&gt;What an incredible event! I was able to meet extraordinary people, be together with clients and business partners with the common goal of absorbing innovation, new trends and preparing ourselves for the future.&lt;/p&gt;
&lt;p&gt;It was fantastic to be making our debut as exhibitors alongside so many good people, with admirable colleagues and professionals.
It was an intense week, with lots of networking, exchange and new learning that provided us with very valuable experiences, learning that we hope to soon be applying in so many new projects and initiatives with our partners and clients.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/nrf-2023-team.jpg&quot; alt=&quot;Compass Team NRF 2023&quot;&gt;&lt;/p&gt;
&lt;h4&gt;Some insights:&lt;/h4&gt;
&lt;p&gt;Self checkout: it&amp;#39;s no longer a trend but a reality. Based on the amount of demonstrations now using shopping carts with precision scales and tablets for checkout, I see this is the next trend in grocery.&lt;/p&gt;
&lt;p&gt;Autonomous store: Amazon brought us the technology 4 or 5 years ago and even so, it never stops innovating in this front. Payment and store access now relies on palm biometrics, we can already forget our cell phone at home when going shopping.&lt;/p&gt;
&lt;p&gt;Back to basics: I saw a lot of technological innovation, from holograms to hyper-realistic robots, but what caught my attention the most is the number of people commenting on &amp;quot;doing the basics well&amp;quot;. It&amp;#39;s time to revisit that &amp;quot;old hat&amp;quot; technology and make sure we&amp;#39;re using it correctly.&lt;/p&gt;
&lt;p&gt;Digital-first: The current strategy might be to prioritize digital, but contrary to what you might think, it&amp;#39;s not only digital or only physical, the perfect marriage is phygital. The pandemic showed us that as much as we can adapt quickly to digital, we are sociable, we like to relate and have experiences with our favorite brands, so it&amp;#39;s clear that digital doesn&amp;#39;t survive without physical, or at least it&amp;#39;s not exponentially enhanced.&lt;/p&gt;
&lt;p&gt;Data-driven: Another of the many concepts talked about for years, with more and more practical demonstrations of use and the power of when it&amp;#39;s done right. A data-driven culture to better know the customer and their desires makes any campaign with segmentation much more assertive, with personalization as a strong weapon, giving the customer the experience of being unique.&lt;/p&gt;
&lt;p&gt;Frictionless: For me this is the trend of the moment! All the technology and innovation in the world is useless if you don&amp;#39;t have a good conversion journey. A frictionless journey is what will make the difference, especially in checkout processes, where the final moments are the most impactful for customer loyalty.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/nrf-2023-team-basket.jpg&quot; alt=&quot;Compass Team NRF 2023&quot;&gt;&lt;/p&gt;
&lt;p&gt;Thank you &lt;a href=&quot;https://compass.uol&quot;&gt;Compass.uol&lt;/a&gt; for the opportunity and a HUGE thank you to our marketing team that organized everything with so much care!&lt;/p&gt;
&lt;p&gt;To those who want to exchange more experiences about the event, technology and innovation, I&amp;#39;ll be happy to receive your message!&lt;/p&gt;
</content:encoded></item><item><title>The Richest Man in Babylon - George S. Clason</title><link>https://alexbrodt.com/book-the-richest-man-in-babylon</link><guid isPermaLink="true">https://alexbrodt.com/book-the-richest-man-in-babylon</guid><description>Impressions of George Clason&apos;s classic on personal finance and prosperity.</description><pubDate>Fri, 14 Oct 2022 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I read the classic The Richest Man in Babylon by George S. Clason. It&amp;#39;s a timeless book on personal finance, written as parables set in ancient Babylon.&lt;/p&gt;
&lt;p&gt;What I liked most was the simplicity of the lessons, which remain valid today, spend less than you earn, invest part of your income, and seek financial wisdom. Even though it&amp;#39;s old, it&amp;#39;s still completely relevant.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s one of those books everyone should read at least once to understand the basic principles of prosperity.&lt;/p&gt;
</content:encoded></item><item><title>Rich Dad Poor Dad - Robert T. Kiyosaki</title><link>https://alexbrodt.com/book-rich-dad-poor-dad</link><guid isPermaLink="true">https://alexbrodt.com/book-rich-dad-poor-dad</guid><description>Impressions of Robert Kiyosaki&apos;s classic on financial education and wealth mindset.</description><pubDate>Fri, 30 Sep 2022 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Rich Dad Poor Dad by Robert Kiyosaki contrasts two worldviews about money, the &amp;quot;poor dad&amp;quot;, focused on job security, and the &amp;quot;rich dad&amp;quot; focused on investments and building assets.&lt;/p&gt;
&lt;p&gt;I found it interesting because it pushes you to rethink your relationship with work and money. Some ideas feel simplistic, but the impact comes from showing that it&amp;#39;s possible to think differently from the traditional model.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s inspiring and motivating, especially for those starting to explore financial education.&lt;/p&gt;
</content:encoded></item><item><title>How to Have a Good Day - Caroline Webb</title><link>https://alexbrodt.com/book-how-to-have-a-good-day</link><guid isPermaLink="true">https://alexbrodt.com/book-how-to-have-a-good-day</guid><description>Impressions of Caroline Webb&apos;s book on practical techniques to improve daily life personally and professionally.</description><pubDate>Sat, 14 May 2022 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading How to Have a Good Day by Caroline Webb. The book brings practical techniques from psychology, behavioral economics, and neuroscience to improve how we live and work.&lt;/p&gt;
&lt;p&gt;I liked it because it offers actionable tips for managing attention, dealing with stress, and prioritizing what matters. It&amp;#39;s practical and accessible.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s one of those books you can apply right away and feel the difference. Definitely worth reading for anyone looking for more productivity and balance.&lt;/p&gt;
</content:encoded></item><item><title>SAFe Agilist (SA) certification: my experience and how I prepared</title><link>https://alexbrodt.com/safe-agilist-certification-experience</link><guid isPermaLink="true">https://alexbrodt.com/safe-agilist-certification-experience</guid><description>Carnival with family, studies in the Scale Agile block and another achievement: SAFe Agilist (SA) certification. Why I got it, how I studied, materials and practical tips for those who want to certify.</description><pubDate>Tue, 01 Mar 2022 14:22:00 GMT</pubDate><content:encoded>&lt;p&gt;Carnival well enjoyed around here. Days dedicated to family and, still, time for studies in the Scale Agile block, closing with another certification: SAFe Agilist (SA). My thanks to Renato Scaglia Pacheco Almeida for SAFe teachings and valuable experience exchanges.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/SAFe.jpg&quot; alt=&quot;SAFe-SA Certification&quot;&gt;&lt;/p&gt;
&lt;p&gt;When I decided to get the certification, I already saw SAFe as a &amp;quot;system&amp;quot; for large initiatives, a way to connect strategy and execution without losing cadence. What made the most difference was facing the framework for what it really is: Lean-Agile principles and systems thinking applied at scale. Instead of memorizing artifacts, I tried to understand how flow improves when we limit WIP, reduce batch sizes and create predictability.&lt;/p&gt;
&lt;p&gt;I treated the preparation as a mini project. I defined a target date, studied a little each day and used the Big Picture intentionally, navigating through levels: from team to ART, from larger solutions to portfolio. To fix it, I created mind maps with principles, flow, WSJF, portfolio and metrics. In the end, I practiced questions, but always going back to the why of answers, flow economics, decision decentralization when it makes sense, and focus on value delivered now, not local optimizations that worsen the whole.&lt;/p&gt;
&lt;p&gt;The themes that repeated the most were those that sustain daily execution: SAFe principles and values, cadence and synchronization in ARTs, System Demo and Inspect &amp;amp; Adapt, Lean Portfolio Management with epics, guardrails and WSJF prioritization, plus continuous delivery pipeline with DevOps practices. Basically, the exam tests context, less &amp;quot;what definition&amp;quot; and more &amp;quot;what would you do to improve flow and reduce risk in this scenario&amp;quot;.&lt;/p&gt;
&lt;p&gt;If I had two or three weeks to recommend a path, I&amp;#39;d start with principles, Lean House and an overview of the Big Picture, advance to PI Planning and ART events, and close with LPM and situational exercises. You don&amp;#39;t need to become an expert in all layers, understanding relationships is already enough. At exam time, follow a simple line of thought: prefer alignment to heroism, maintain stable rhythm, decentralize with criteria and decide based on data. Results matter more than beautiful outputs in slides.&lt;/p&gt;
&lt;p&gt;The material that helped me most was the official Leading SAFe content, the Big Picture itself with its reference articles and my mind maps for quick review. The rest is practice and conversation with those who live this daily.&lt;/p&gt;
&lt;p&gt;If this is your next step, good journey. If I can help in any way, call me.&lt;/p&gt;
</content:encoded></item><item><title>Rebel Ideas - Matthew Syed</title><link>https://alexbrodt.com/book-rebel-ideas-matthew-syed</link><guid isPermaLink="true">https://alexbrodt.com/book-rebel-ideas-matthew-syed</guid><description>Impressions of Matthew Syed&apos;s book about thinking differently and innovating.</description><pubDate>Sun, 01 Aug 2021 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Rebel Ideas by Matthew Syed is an invitation to challenge traditional thinking and encourage new ways of looking at problems.&lt;/p&gt;
&lt;p&gt;I liked it because it shows how diversity of thought and the courage to think differently can lead to more creative and effective solutions. It&amp;#39;s straightforward and full of practical examples.&lt;/p&gt;
&lt;p&gt;A read that inspires not to settle and to keep seeking new paths. Highly recommend it.&lt;/p&gt;
</content:encoded></item><item><title>Powerful - Patty McCord</title><link>https://alexbrodt.com/book-powerful-paty-mccord</link><guid isPermaLink="true">https://alexbrodt.com/book-powerful-paty-mccord</guid><description>Impressions of Patty McCord&apos;s book about corporate culture and responsibility.</description><pubDate>Sat, 17 Jul 2021 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Powerful by Patty McCord, former Chief Talent Officer at Netflix, is about building a corporate culture based on freedom and responsibility.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s thought-provoking and challenges many myths of traditional HR. Patty advocates for transparency, maturity, and accountability instead of rigid controls.&lt;/p&gt;
&lt;p&gt;It makes you reflect on how to create more agile, adult, and innovative workplaces. For anyone interested in organizational culture, this book is a must-read.&lt;/p&gt;
</content:encoded></item><item><title>The Amazon Management System - Ram Charan</title><link>https://alexbrodt.com/book-the-amazon-management-system-ram-charan</link><guid isPermaLink="true">https://alexbrodt.com/book-the-amazon-management-system-ram-charan</guid><description>Impressions of Ram Charan&apos;s book analyzing Amazon&apos;s management and innovation model.</description><pubDate>Fri, 02 Jul 2021 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently read The Amazon Management System by Ram Charan, which explains how Amazon built a culture of innovation and customer focus that made it one of the biggest companies in the world.&lt;/p&gt;
&lt;p&gt;The book brings insights into its management model, strategic decisions, and disciplined execution.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s useful reading for anyone who wants to understand how to think big and maintain consistency at a global scale.&lt;/p&gt;
&lt;p&gt;Amazon is a reference for many companies, and it&amp;#39;s no accident, its management model and especially its culture are what took it from a &amp;quot;garage company&amp;quot; to global success. Recommended!&lt;/p&gt;
</content:encoded></item><item><title>Digital Minimalism - Cal Newport</title><link>https://alexbrodt.com/book-digital-minimalism-cal-newport</link><guid isPermaLink="true">https://alexbrodt.com/book-digital-minimalism-cal-newport</guid><description>Impressions of Cal Newport&apos;s book about focusing on what matters in a noisy digital world.</description><pubDate>Thu, 10 Jun 2021 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I read Digital Minimalism by Cal Newport. The book reflects on excessive technology use and how to adopt a more focused life.&lt;/p&gt;
&lt;p&gt;It shows practical strategies to reduce digital distractions and make better use of time and attention. Inspiring for rethinking the relationship with phones, social media, and the internet.&lt;/p&gt;
&lt;p&gt;I highly recommend it, a necessary read for anyone seeking more focus and clarity in today&amp;#39;s noisy digital world.&lt;/p&gt;
&lt;p&gt;This book even made me delete social media apps from my phone, let&amp;#39;s see how long that lasts.&lt;/p&gt;
</content:encoded></item><item><title>DASSM (Disciplined Agile Senior Scrum Master) certification: my experience and how I prepared</title><link>https://alexbrodt.com/dassm-certification-experience</link><guid isPermaLink="true">https://alexbrodt.com/dassm-certification-experience</guid><description>Direct guide about DASSM certification: why get it, how I prepared, materials and practical tips for you to achieve yours.</description><pubDate>Tue, 23 Mar 2021 11:31:00 GMT</pubDate><content:encoded>&lt;p&gt;Opening the toolbox…
Happy to share another great achievement: DASSM (Disciplined Agile Senior Scrum Master) certification!&lt;/p&gt;
&lt;p&gt;Disciplined Agile (DA) is a toolkit that brings together hundreds of agile and lean practices to help you choose the best way to work in your context. No ready recipe: context counts. Daily life asks for situational decisions, and DA guides the &amp;quot;best next step&amp;quot;.&lt;/p&gt;
&lt;p&gt;My heartfelt thanks to Adriano Tavares and Anderson Sales for the teachings, encouragement and support on this journey. Choose Your WoW!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/pmi-dassm.jpg&quot; alt=&quot;DASSM Certification&quot;&gt;&lt;/p&gt;
&lt;p&gt;DA has a very interesting pragmatic and multi-framework vision. Scrum, Kanban, XP, Lean, DevOps… it integrates everything and shows when and why to apply each thing. It focuses on flow and results, optimizing lead/cycle time, reducing WIP and continuously improving. And it prepares you to lead in complex contexts, coordinating teams, managing dependencies with light governance.&lt;/p&gt;
&lt;p&gt;If you already master the agile foundation and want to elevate team (and organization) maturity by choosing practices with intention, DASSM fits like a glove.&lt;/p&gt;
&lt;p&gt;What you need to know: it&amp;#39;s not a framework, it&amp;#39;s a toolkit with meta-principles (Delight Customers, Be Awesome, Pragmatism, Context Counts, Choice is Good, Optimize Flow, Enterprise Awareness). Always check current requirements at PMI/Disciplined Agile because they can change. The exam privileges situational questions, contextual decisions are more important than memorizing definitions.&lt;/p&gt;
&lt;p&gt;Rule of thumb: always choose the alternative that maximizes value now, maintains healthy flow, reduces risk and respects explicit policies with light organizational governance.&lt;/p&gt;
&lt;p&gt;I treated it as a real project:&lt;/p&gt;
&lt;p&gt;In summary, Planning, I defined target date and created short and consistent daily routine, Official base, I focused on &amp;quot;Choose Your WoW!&amp;quot; (DA Delivery Handbook), Disciplined Agile Mindset &amp;amp; Principles, and Process Goals with Decision Points (goal -&amp;gt; options -&amp;gt; trade-offs), Course with Adriano Tavares and Anderson Sales, consolidated situational and practical vision, Active review, I made mind maps of the most frequent processes (Explore Scope, Architecture, Quality, Coordination, Governance, DevOps/Release) and case studies analyzing scenario -&amp;gt; chosen option -&amp;gt; why (trade-offs) and Simulators, focus on context reasoning, explaining the choice aloud.&lt;/p&gt;
&lt;p&gt;Less noise, more depth: I focused on official material + few high-quality references.&lt;/p&gt;
&lt;p&gt;The domains that appear most: Mindset &amp;amp; DA Principles (context -&amp;gt; prescription), Process Goals (decisions and options), Flow/Lean &amp;amp; Kanban (WIP, explicit policies, metrics), Architecture/Quality, DevOps &amp;amp; Release, Team Coordination, and Light Governance &amp;amp; Enterprise Awareness.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re going to take it, I suggest 3-4 weeks: first week on DA mindset + principles and toolkit overview; second week on flow/lean &amp;amp; kanban, metrics and explicit policies; third week on architecture/quality + DevOps/release; last week on coordination/governance with simulators and error review.&lt;/p&gt;
&lt;p&gt;Context counts always, adapt response to scenario (constraints, risk, culture, compliance). Prefer stable flow over peaks, limit WIP and prefer short feedback. Light governance with outcome metrics is better than bureaucracy. Built-in quality (automation, DoD) is better than late inspection. Transparency + explicit policies always beat heroism and shortcuts.&lt;/p&gt;
&lt;p&gt;The materials that helped me most were &amp;quot;Choose Your WoW!&amp;quot; (DA Delivery Handbook), the course by Adriano Tavares and Anderson Sales, mind maps of process goals and decisions, and support readings like Scrum Guide, Kanban Guide, Lean principles and XP practices.&lt;/p&gt;
&lt;p&gt;Choose Your WoW!
Shall we go together? How can I help you?&lt;/p&gt;
</content:encoded></item><item><title>PMI-ACP® certification: my experience and how I prepared</title><link>https://alexbrodt.com/pmi-acp-certification-experience</link><guid isPermaLink="true">https://alexbrodt.com/pmi-acp-certification-experience</guid><description>Direct guide about PMI-ACP® certification: why get it, how I prepared, materials and practical tips for you to achieve yours.</description><pubDate>Tue, 09 Mar 2021 12:20:00 GMT</pubDate><content:encoded>&lt;p&gt;This achievement has a special taste. After a good period studying and applying in daily work, I conquered the PMI-ACP certification. I always wanted to face this exam because it doesn&amp;#39;t stick to a single method, tests agility foundation applied in real scenarios and moves through Lean, XP, Kanban, Crystal and Scrum in a practical way. It&amp;#39;s an assessment full of situational questions, focused on what you would do now to deliver value, improve flow and reduce risk.&lt;/p&gt;
&lt;p&gt;I leave my thanks to my wife and daughter, who accepted the odd hours and tight routine, and to Vitor Massari, whose book and course were decisive in the final stretch. Gratitude also to Compass.uol for constant encouragement.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/pmi-acp.jpg&quot; alt=&quot;PMI-ACP Certification&quot;&gt;&lt;/p&gt;
&lt;p&gt;For those eyeing the exam, it&amp;#39;s worth aligning some expectations. The scope is broad and the board expects decisions anchored in transparency, inspection and adaptation. When I took it, in March 2021, there were 120 questions in three hours, with some pilot items, all on computer. Eligibility asked for proven experience in projects and formal agile training, so it&amp;#39;s good to check current requirements directly with PMI. The response pattern privileges value delivery, short feedback, stakeholder collaboration and continuous improvement, and discourages excessive control, bureaucracy and choices without data.&lt;/p&gt;
&lt;p&gt;Domains appear with similar frequency, but I felt more weight in agile principles and mindset, value driven delivery, stakeholder engagement, team performance, adaptive planning, problem detection and resolution and continuous improvement in product, process and people. In language of those on the gemba, prioritize by value, use flow metrics like WIP, lead time and cycle time, read CFD regularly, conduct good risk conversations and maintain feedback cadence.&lt;/p&gt;
&lt;p&gt;My preparation, like in other certifications, was lean and organized as a project. I defined a target date, set up a short daily routine and focused on essentials. I studied PMI&amp;#39;s Agile Practice Guide with Agile Alliance, revisited Scrum Guide and Kanban Guide, reread Lean principles and noted XP practices like TDD, refactoring, pair and continuous integration. Vitor&amp;#39;s course and book helped consolidate situational reading. I did quality simulators and, when reviewing, explained aloud the reason for the correct alternative. I created flashcards with domains, cadences, flow metrics and anti-patterns, and closed with a light mind map that gathered concepts like DoD, DoR, relative estimation, agile contracts and risk burndown.&lt;/p&gt;
&lt;p&gt;If I had to suggest a four-week roadmap, I&amp;#39;d put the first for agile mindset, Manifesto, principles and Lean focusing on waste elimination. The second for Scrum and XP, roles, events, artifacts, DoD and DoR, plus technical practices. The third for Kanban and flow, explicit policies, WIP limits, lead and cycle time reading and Cumulative Flow Diagram interpretation, along with greater care with stakeholder engagement. The fourth for adaptive planning, incremental releases, relative estimation, agile risk and light governance, adding two or three complete simulators and an error-guided review. You can shorten the schedule if review is quality and understanding-based.&lt;/p&gt;
&lt;p&gt;At exam time, always choose the alternative that maximizes value now with lowest risk, support your decisions on flow data and user feedback, promote collaboration over rigid contracts, prefer short cycles with transparency and adaptation and avoid command and control and heavy documentation that doesn&amp;#39;t add value. The materials that helped me most were the Agile Practice Guide, Scrum and Kanban guides, Vitor&amp;#39;s course and book, plus my maps and flashcards. A good simulator serves to measure consistency and time.&lt;/p&gt;
&lt;p&gt;After the result, work continues. Certification validates the foundation, but what transforms is practicing with purpose. Take learning to the team, measure, adjust and keep improving. If I can help in any way on this journey, count on me.&lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s go to the next challenges, 2021 is just beginning!!
&lt;strong&gt;Shall we go together? How can I help you?&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>The Power of Habit - Charles Duhigg</title><link>https://alexbrodt.com/book-the-power-of-habit-charles-duhigg</link><guid isPermaLink="true">https://alexbrodt.com/book-the-power-of-habit-charles-duhigg</guid><description>Impressions of Charles Duhigg&apos;s book explaining how habits work and how we can transform them.</description><pubDate>Thu, 05 Nov 2020 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Power of Habit by Charles Duhigg clearly explains how habits are formed and how they can be changed.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s based on research but written in an accessible way, with examples from everyday life and major companies. It&amp;#39;s inspiring to realize that lasting change starts with small routines.&lt;/p&gt;
&lt;p&gt;One of those books you finish and immediately start observing your own habits.&lt;/p&gt;
</content:encoded></item><item><title>Professional Scrum Master I (PSM I) certification: my experience and how I prepared</title><link>https://alexbrodt.com/psm-1-certification-experience</link><guid isPermaLink="true">https://alexbrodt.com/psm-1-certification-experience</guid><description>Direct guide about PSM I certification: why get it, how I prepared, materials I used and practical tips for you to also achieve yours.</description><pubDate>Thu, 02 Jul 2020 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After some time away from exams, I decided to challenge myself again. That cold feeling in the stomach before clicking start is part of it, and seeing the approved on screen compensates. I leave my thanks to friends and colleagues with whom I exchange learning every day, and to Compass.uol for constant encouragement.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/psm-i.jpg&quot; alt=&quot;PSM-I Certification&quot;&gt;&lt;/p&gt;
&lt;p&gt;I chose PSM I from Scrum.org because it&amp;#39;s direct and respected. It validates Scrum&amp;#39;s foundation, empiricism theory, values and framework use to improve product and teams. There&amp;#39;s no trick, it&amp;#39;s fundamentals well understood and applied.&lt;/p&gt;
&lt;p&gt;Before facing the exam, it&amp;#39;s worth knowing there are no prerequisites. You register and take the online exam when you think you&amp;#39;re ready. The essential is mastering the Scrum Guide and Scrum Glossary, because questions test the essence. Understand the why of each event, responsibility and artifact, always with transparency, inspection and adaptation as north. If when reading a question you think &amp;quot;it depends&amp;quot;, go back to the Guide. Almost always the answer is in the framework&amp;#39;s simplicity.&lt;/p&gt;
&lt;p&gt;I treated preparation as a mini project. I defined a target date and a short daily routine. I read the Scrum Guide carefully, noting why each element exists. I went through the Glossary to align vocabulary. I did Scrum.org&amp;#39;s Open Assessments until getting consistent around 95 percent. I completed with good simulators, reviewing each mistake and explaining to myself the reason for the correct alternative. In the end, I made a light mind map with events, responsibilities, artifacts and commitments of the Increment and Definition of Done, Product Goal and Sprint Goal.&lt;/p&gt;
&lt;p&gt;About the exam, the format is objective and to the point. Themes like Sprint Goal, Definition of Done, responsibilities, timeboxes, inspection and adaptation and what Scrum is not appear a lot. The helpful look is that of flow facilitator and empiricism guardian, not process boss.&lt;/p&gt;
&lt;p&gt;The materials that helped me most were the Scrum Guide, Scrum Glossary, Open Assessments and my own notes. I kept focus on official content to reduce noise and gain depth.&lt;/p&gt;
&lt;p&gt;If you want a quick roadmap, in two or three weeks you can get there well. First, active reading of Guide and Glossary. Then, Open Assessments every day and error review directly in the Guide. Finally, some focused simulators and a light review of events, responsibilities, artifacts and commitments. You can accelerate, as long as review is quality. Understanding is worth more than memorizing.&lt;/p&gt;
&lt;p&gt;After approval, the most important part begins. Taking Scrum seriously is improving predictability, reducing waste and delivering value frequently. Share with the team, teach what you learned and keep evolving. If I can help in any way, just call.&lt;/p&gt;
&lt;p&gt;More will come soon.
&lt;strong&gt;Shall we go together? How can I help you?&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>You need to lead with your heart!</title><link>https://alexbrodt.com/lead-with-heart</link><guid isPermaLink="true">https://alexbrodt.com/lead-with-heart</guid><description>Academic education, professional experience and some certifications are not guarantees of a good manager. A study by Michael Page indicates that 80% of resignation requests are related to management...</description><pubDate>Sun, 14 Jun 2020 12:34:00 GMT</pubDate><content:encoded>&lt;p&gt;Academic education, professional experience and some certifications are not guarantees of a good manager. A study conducted by Michael Page, one of the world&amp;#39;s largest players in specialized recruitment, indicates that 80% of resignation requests are related to management, not work routine, meaning people don&amp;#39;t leave companies, they leave managers.&lt;/p&gt;
&lt;p&gt;Many managers are so focused on managing the business that they end up forgetting the basics, that business is done between people, not between companies.&lt;/p&gt;
&lt;p&gt;Today, more than ever, for businesses to have sustainability it&amp;#39;s necessary that people are the priority, it&amp;#39;s necessary to be close, even being physically distant. For this to be possible, communication needs to be empathetic and monitoring needs to be constant, the leader and led relationship needs to be one of proximity, built with transparency and commitment so that the result is a relationship of trust and not an authoritarian relationship based on command and control.&lt;/p&gt;
&lt;p&gt;&amp;quot;Leading&amp;quot; by position is very easy, however, using authority for tasks to be executed results in a cold and short-term relationship, makes the led person not feel engaged and collaborative but just a resource used to obtain a certain result.&lt;/p&gt;
&lt;p&gt;The challenge is to lead by example, generate trust and engagement. Leaders are challenged daily to gain and maintain their team&amp;#39;s trust. This trust that is not born overnight, it&amp;#39;s necessary to cultivate with each interaction. It&amp;#39;s essential that the led person trusts their leader and recognizes them as such genuinely.&lt;/p&gt;
&lt;p&gt;The leader must be available to their led people, easy access is fundamental for the led person to feel comfortable in contacting the leader when they feel the need. Not only when there&amp;#39;s this search, but in every interaction, it&amp;#39;s necessary to have active listening, demonstrate genuine interest, guide in a welcoming manner and demonstrate empathy, facilitating connection and not just communication.&lt;/p&gt;
&lt;p&gt;The quality of connection is determined by the ability to speak and listen, therefore, &amp;quot;listenership&amp;quot; becomes as important for a leader as oratory skills.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Management is efficiency in climbing the ladder of success; leadership determines whether the ladder is leaning against the right wall&amp;quot;., Stephen R Covey&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A study conducted by Harvard Business Review, presented at the Neuroleadership Summit, revealed research and discoveries that explain why leaders should develop the ability to build bonds and personal relationships.&lt;/p&gt;
&lt;p&gt;Leaders who demonstrate concern and interest in their led people&amp;#39;s lives create a healthy bond that strengthens the employee&amp;#39;s journey in the company. This study demonstrates that the same brain regions that respond to physical pain also respond to &amp;quot;social pain&amp;quot;, therefore, the absence of the feeling of connection with others creates pain.&lt;/p&gt;
&lt;p&gt;The study also reveals that having support figures present during critical and high-stress moments helps us stay more relaxed, which reinforces that strong bonds can help teams overcome challenges and crisis situations more easily, such as the dreaded war-rooms.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/inteligencia-emocional.png&quot; alt=&quot;Emotional Intelligence&quot;&gt;&lt;/p&gt;
&lt;p&gt;Therefore, be closer to your led people, be accessible, know how to listen, dialogue and keep active the connection that involves you. This will only be possible with constant communication, but it needs to be transparent and true, after all the interest must be genuine.&lt;/p&gt;
&lt;p&gt;Motivate intrinsically and stimulate challenges, give feedback, be flexible whenever possible and give up control to promote leadership and development opportunities, because the good leader is one who has the ability to form other leaders.&lt;/p&gt;
&lt;p&gt;Finally, be brave to lead with your heart and form new mentalities.&lt;/p&gt;
&lt;p&gt;If you want to deepen on the topic, I recommend reading &lt;a href=&quot;https://amzn.to/2UGlfKz&quot;&gt;the book Leading with the Heart, by Mike Krzyzewski&lt;/a&gt;.&lt;/p&gt;
</content:encoded></item><item><title>Agile Project Management - Vitor L. Massari</title><link>https://alexbrodt.com/book-agile-project-management-vitor-massari</link><guid isPermaLink="true">https://alexbrodt.com/book-agile-project-management-vitor-massari</guid><description>Impressions of the book that explains agile principles applied to project management.</description><pubDate>Tue, 02 Jun 2020 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently finished reading Agile Project Management by Vitor Massari. The book provides a solid introduction to the agile world applied to project management.&lt;/p&gt;
&lt;p&gt;I liked it because it&amp;#39;s direct, without unnecessary fluff, and brings examples that connect theory and practice. It shows how the agile mindset can transform the way we deal with uncertainty.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a good book for those starting out or wanting to reinforce the basics of agile in a project context, as well as for anyone aiming for the PMI-ACP certification, like me.&lt;/p&gt;
</content:encoded></item><item><title>Drive, Motivation 3.0 - Daniel Pink</title><link>https://alexbrodt.com/book-drive-motivation-3-0-daniel-pink</link><guid isPermaLink="true">https://alexbrodt.com/book-drive-motivation-3-0-daniel-pink</guid><description>I recently read the book Drive, Motivation 3.0 by Daniel Pink, it presents in a clear and well-synthesized way the phases of motivation and its three fundamental elements...</description><pubDate>Wed, 20 May 2020 08:57:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently read the book Drive, Motivation 3.0 by Daniel Pink, it presents in a clear and well-synthesized way the phases of motivation and its three fundamental elements to achieve better results being truly motivated.&lt;/p&gt;
&lt;p&gt;According to Pink, humanity throughout its existence that we know has gone through different phases of the motivation process.&lt;/p&gt;
&lt;p&gt;The first phase is Motivation 1.0: What motivated paleolithic man was his survival in his basic needs, shelter, hunger, thirst.&lt;/p&gt;
&lt;p&gt;In the second phase we have Motivation 2.0: It&amp;#39;s the model that most companies apply to this day, based on the carrot &amp;amp; stick theory, where on one side we have external rewards, prizes, bonuses, remuneration and when things don&amp;#39;t go well, we have the &amp;quot;stick&amp;quot;, losing the annual bonus, the job, benefits and other corporate punishments.&lt;/p&gt;
&lt;p&gt;This model made sense in the 20th century, but doesn&amp;#39;t work in the 21st century. In the past most work was algorithmic in nature, having a series of procedures and rules to be followed to obtain the result, purely focused on execution. In this type of work where little thinking and more execution is done, you receive by production, the more production, the better your remuneration.&lt;/p&gt;
&lt;p&gt;In the 21st century we saw that these repetitive jobs could be automated, they no longer needed to be done by humans. Thus, 21st century work ends up being heuristic in nature, where it requires thinking and reflection. We realize that for heuristic work the reward and punishment model doesn&amp;#39;t work. This is the problem we find in some company cultures today.&lt;/p&gt;
&lt;p&gt;We then arrive at the third phase where we have Motivation 3.0, which is sustained by three pillars:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Autonomy:&lt;/strong&gt; Human desire to be in control of one&amp;#39;s own life, freedom of schedule, freedom with whom you will work and freedom of the task performed, being responsible for what you produce. For there to be internal entrepreneurship, autonomy is necessary.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mastery:&lt;/strong&gt; Desire to become better at something relevant, it&amp;#39;s having the mindset of constant search for improvement, knowing that your skills are always susceptible to improvements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Purpose:&lt;/strong&gt; Desire to do what we do based on something much bigger than ourselves. Believing in what you do and understanding the real reasons that make you get out of bed to go to work.&lt;/p&gt;
&lt;p&gt;What motivates you? Do you get out of bed every morning excited because of your extrinsic or intrinsic desires? And how do you motivate your team? We are living in a V.U.C.A period, with high volatility, uncertainties, complexities and ambiguity, an increasingly accelerated world, with constant information and changes, it&amp;#39;s not enough to offer external stimuli to keep a team engaged and motivated. It&amp;#39;s necessary to go beyond, think disruptively to meet each person&amp;#39;s need and demand.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/livro-motivacao-3-0-mapa-mental.jpg&quot; alt=&quot;Book Drive Motivation 3.0, Mind Map&quot;&gt;&lt;/p&gt;
</content:encoded></item><item><title>Between paddles and silence: small breaks in difficult times</title><link>https://alexbrodt.com/between-paddles-and-silence</link><guid isPermaLink="true">https://alexbrodt.com/between-paddles-and-silence</guid><description>A simple record: SUP, chimarrão, hammock and the reminder that work, rest and learning are also privileges and responsibilities.</description><pubDate>Sun, 03 May 2020 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Labor Day long weekend. How good it is to be able to breathe new air. We tried to escape the routine a bit, found an enchanting place, feet in the sand and endless peace. I found a SUP board that&amp;#39;s part of this Airbnb&amp;#39;s amenities. Taking advantage of the place&amp;#39;s calmness I decided to try something new.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/sup-2020-05-03.png&quot; alt=&quot;First SUP attempt&quot;&gt;&lt;/p&gt;
&lt;p&gt;The calm sea without waves made me gain confidence. Without noticing I kept going sideways, the water pulled towards the corner of the beach, near the rocks, when I realized I was surrounded by rocks around me, my legs trembled, expected result from a bit of fear mixed with the new moment and lack of practice. Losing balance at that moment would be painful, I would have good bruises. I steadied myself as much as I could to stay upright, I didn&amp;#39;t fall. The return to the sand brought a big smile and that desire to repeat more times.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/chimarrao-amanhecer.png&quot; alt=&quot;Dawn with chimarrão by the water&quot;&gt;&lt;/p&gt;
&lt;p&gt;Between one paddle and another, there was book, there was chimarrão, there was hammock. Simple things that remind us of an uncomfortable truth: do you have work? You are privileged.
Our Brazil has a minimal percentage that can celebrate Labor Day.&lt;/p&gt;
&lt;p&gt;We recently discovered that the &amp;quot;invisible ones&amp;quot;, who aren&amp;#39;t even in social programs, are in greater quantity than we thought. The unemployment rate rises to 12.2%, affecting 12.9 million people.
Therefore, if you have a job, be grateful, celebrate, enjoy the day to do what gives you pleasure, read a book, play with the children, enjoy family or simply rest, and return on Monday with full energy!&lt;/p&gt;
&lt;p&gt;Are you unemployed? Have faith. Never give up. Life&amp;#39;s adversities make us grow, overcome our limits and come out stronger. It&amp;#39;s time to reinvent yourself. Use free time to improve your knowledge. Pay attention to webinars and social networks focused on work, networking is vital for relocation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/2020-05-03-rede-mar.png&quot; alt=&quot;Break in the hammock, view to the sea&quot;&gt;&lt;/p&gt;
&lt;p&gt;SUPpass yourself, in your time.&lt;/p&gt;
</content:encoded></item><item><title>Getting Past No - William Ury</title><link>https://alexbrodt.com/book-getting-past-no-william-ury</link><guid isPermaLink="true">https://alexbrodt.com/book-getting-past-no-william-ury</guid><description>Getting Past No by William Ury follows an approach that every negotiation needs to have a win-win outcome...</description><pubDate>Fri, 10 Apr 2020 17:15:00 GMT</pubDate><content:encoded>&lt;p&gt;Getting Past No by William Ury follows an approach that every negotiation needs to have a win-win outcome.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s clear in pointing out that emotions disrupt any negotiation and that we should be attentive and recognize our own feelings, especially negative ones, which can negatively compromise our results.&lt;/p&gt;
&lt;p&gt;Many points addressed that however obvious they may seem, make us reflect very well. It&amp;#39;s not an innovative book, its first publication is from 1991, however, it brings a five-step strategy that can be applied to any negotiation.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/livro-supere-o-nao.jpg&quot; alt=&quot;Book Getting Past No – William Ury&quot;&gt;
&lt;img src=&quot;/images/posts/livro-supere-o-nao-mapa-mental.jpg&quot; alt=&quot;Mind map: Getting Past No – William Ury&quot;&gt;&lt;/p&gt;
</content:encoded></item><item><title>Seasons Race 2020, Autumn Stage (5k)</title><link>https://alexbrodt.com/seasons-race-autumn-2020</link><guid isPermaLink="true">https://alexbrodt.com/seasons-race-autumn-2020</guid><description>Another 5k for the count on a Sunday of good choices. Run for health, for overcoming and for pleasure, just don&apos;t stop running!</description><pubDate>Sun, 15 Mar 2020 11:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Another 5k for the count!&lt;/p&gt;
&lt;p&gt;The start was without rush. I let the body warm up, breathing in place, and the 1st km came out at 6:34/km. The 2nd, 6:42/km. Up to here, everything in place. In the 3rd and 4th km the sun decided to participate in the race and the pace gave in a bit (7:00/km and 7:12/km). I closed with 7:02/km in the 5th.&lt;/p&gt;
&lt;p&gt;On the watch: 5 km in 34:13 (6:51/km).
Heart rate went up from 152 to 180 bpm from first to last kilometer (average 172 bpm).&lt;/p&gt;
&lt;p&gt;I started controlled, but couldn&amp;#39;t hold the pace, sun didn&amp;#39;t help, but what matters is the experience.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/corrida-estacoes-2020-outono.jpg&quot; alt=&quot;On the Avenue during the race&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:34/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:31/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;152 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:42/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:35/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;171 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:00/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:58/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;179 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:12/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:07/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;180 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:02/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:01/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;180 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</content:encoded></item><item><title>Do Mil ao Milhão - Thiago Nigro</title><link>https://alexbrodt.com/book-do-mil-ao-milhao-thiago-nigro</link><guid isPermaLink="true">https://alexbrodt.com/book-do-mil-ao-milhao-thiago-nigro</guid><description>Impressions of Thiago Nigro&apos;s book on personal finance and investments.</description><pubDate>Tue, 25 Feb 2020 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading Do Mil ao Milhão by Thiago Nigro. The book is focused on personal finance and investments, with the idea of consistently building wealth.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s practical and straightforward, though some tips feel repetitive. Motivating and helpful for organizing finances, but at times it felt like the author was stretching content to fill pages.&lt;/p&gt;
&lt;p&gt;I recommend it for those just starting to get interested in personal finance.&lt;/p&gt;
</content:encoded></item><item><title>Track and Field Run Series, First street race in Florianópolis</title><link>https://alexbrodt.com/track-field-run-series-first-floripa-race</link><guid isPermaLink="true">https://alexbrodt.com/track-field-run-series-first-floripa-race</guid><description>From desire to finish line: my first race in Florianópolis, at Beira-Mar Norte, and the motivation to see evolution return.</description><pubDate>Mon, 17 Feb 2020 00:32:06 GMT</pubDate><content:encoded>&lt;p&gt;Since I moved to Floripa, I wanted to participate in a street race here. The city &lt;strong&gt;breathes physical activity&lt;/strong&gt; and Beira-Mar Norte is an open invitation to go running.&lt;/p&gt;
&lt;p&gt;After some training, I finally faced my &lt;strong&gt;first race in Florianópolis&lt;/strong&gt;: the &lt;em&gt;Track&amp;amp;Field Run Series&lt;/em&gt;. The event was super organized and the crowd&amp;#39;s energy made all the difference.&lt;/p&gt;
&lt;p&gt;The best thing is to see the &lt;strong&gt;evolution&lt;/strong&gt; comparing with &lt;a href=&quot;my-first-street-race&quot;&gt;my first race&lt;/a&gt;. Even with a good period without training, noticing this small advance gives even more fuel to stay consistent and seek to improve each week.&lt;/p&gt;
&lt;p&gt;On the watch: 5.11 km in 36:30 (7:09/km).
Heart rate started at 152 bpm and reached 192 bpm (average 177 bpm).&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:26/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:24/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;152 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:03/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;6:01/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;179 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:13/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:15/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-3 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;182 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:48/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:44/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;183 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;5&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:33/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:32/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-2 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;184 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.11&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;13:14/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;13:09/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;0 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;192 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Event: Track&amp;amp;Field Run Series, Iguatemi Florianópolis.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/floripa-tf-run-mapa.png&quot; alt=&quot;Strava Map – Beira-Mar Norte&quot;&gt;&lt;/p&gt;
&lt;p&gt;Bring on the next one!! :-)&lt;/p&gt;
</content:encoded></item><item><title>Think and Grow Rich: The Legacy - Napoleon Hill</title><link>https://alexbrodt.com/book-think-and-grow-rich-the-legacy</link><guid isPermaLink="true">https://alexbrodt.com/book-think-and-grow-rich-the-legacy</guid><description>Impressions of the contemporary version of Napoleon Hill&apos;s classic.</description><pubDate>Sun, 02 Feb 2020 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I read Think and Grow Rich: The Legacy by Napoleon Hill. It&amp;#39;s a version that brings the classic into a more contemporary context.&lt;/p&gt;
&lt;p&gt;The central ideas remain the same faith, discipline, focus, and the importance of the mind in building success. The reading is inspiring, even if some parts feel dated.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a book that makes you reflect on how thoughts and attitudes shape results.&lt;/p&gt;
</content:encoded></item><item><title>Secrets of the Millionaire Mind - T. Harv Eker</title><link>https://alexbrodt.com/book-secrets-of-the-millionaire-mind</link><guid isPermaLink="true">https://alexbrodt.com/book-secrets-of-the-millionaire-mind</guid><description>Impressions of T. Harv Eker&apos;s book about financial beliefs and a wealth mindset.</description><pubDate>Sun, 19 Jan 2020 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Secrets of the Millionaire Mind by T. Harv Eker brings a practical view of how our beliefs shape our relationship with money.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s straightforward, full of punchy phrases and provocations. The author emphasizes that change begins with mindset, and that wealth is much more about discipline and consistency than luck.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s not an investment manual, but a reflection on how to think and act differently about money. Definitely worth reading to rethink habits and beliefs.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s the kind of book I know I&amp;#39;ll come back to from time to time.&lt;/p&gt;
</content:encoded></item><item><title>The Miracle Morning - Hal Elrod</title><link>https://alexbrodt.com/book-the-miracle-morning-hal-elrod</link><guid isPermaLink="true">https://alexbrodt.com/book-the-miracle-morning-hal-elrod</guid><description>Impressions of Hal Elrod&apos;s book that proposes a personal development method to start the day.</description><pubDate>Sun, 19 Jan 2020 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Miracle Morning by Hal Elrod is, for me, one of the best books I&amp;#39;ve read. Not just because it&amp;#39;s well written and structured, but because of the message and impact it had on my life.&lt;/p&gt;
&lt;p&gt;Since I started reading it, I adopted the morning routine focused on discipline, reading, meditation, and exercise, and it really worked for me.&lt;/p&gt;
&lt;p&gt;It shows how small changes at the beginning of the day can greatly impact productivity and life overall. Some parts may seem too simple, but they serve as triggers to rethink habits.&lt;/p&gt;
&lt;p&gt;I strongly recommend it for anyone looking to create a more intentional routine or who feels they need more time in their day.&lt;/p&gt;
</content:encoded></item><item><title>Outwitting the Devil - Napoleon Hill</title><link>https://alexbrodt.com/book-outwitting-the-devil</link><guid isPermaLink="true">https://alexbrodt.com/book-outwitting-the-devil</guid><description>Impressions of Napoleon Hill&apos;s book about fear, freedom, and success.</description><pubDate>Mon, 06 Jan 2020 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently finished reading Outwitting the Devil by Napoleon Hill. A provocative classic, full of metaphors and direct conversations with the &amp;quot;devil&amp;quot; as a way to expose the fears that hold us back.&lt;/p&gt;
&lt;p&gt;I liked this book a lot because it shows that many of our limits are in our own minds. It&amp;#39;s an intense read, with strong ideas and reflections about freedom and courage.&lt;/p&gt;
&lt;p&gt;It may divide opinions, but it certainly brings powerful insights. Highly recommend it.&lt;/p&gt;
</content:encoded></item><item><title>My first street race</title><link>https://alexbrodt.com/my-first-street-race</link><guid isPermaLink="true">https://alexbrodt.com/my-first-street-race</guid><description>Closing another challenge! Our debut in street races at UPF: 5 km of learning, energy and desire to keep running.</description><pubDate>Sat, 15 Dec 2018 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My wife and I debuted in street races at the University of Passo Fundo, a place that marked our academic life. We started with all the anxiety of runners in their first races.&lt;/p&gt;
&lt;p&gt;The 1st km came out at 7:17/km, the 2nd at 7:23/km, the 3rd weighed a bit and marked 7:51/km, I recovered on the 4th with 7:33/km, the final stretch was cut off on the watch, I swear it was 5km. Debut pace, heart in mouth but it made me want to repeat.&lt;/p&gt;
&lt;p&gt;On the watch: 4.29 km in 33:23 (7:48/km).
Heart rate was 146 bpm at the start and reached 162 bpm at the end (average 154 bpm).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/strava-minha-primeira-corrida.png&quot; alt=&quot;Race map at UPF&quot;&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th align=&quot;right&quot;&gt;KM&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;Pace&lt;/th&gt;
&lt;th align=&quot;left&quot;&gt;GAP&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;Elevation&lt;/th&gt;
&lt;th align=&quot;center&quot;&gt;HR&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;1&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:17/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:04/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;4 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;146 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;2&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:23/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:10/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-6 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;3&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:51/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:38/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;1 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;156 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;4&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:33/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;7:29/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;-12 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;154 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td align=&quot;right&quot;&gt;0.29&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;11:27/km&lt;/td&gt;
&lt;td align=&quot;left&quot;&gt;9:27/km&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;16 m&lt;/td&gt;
&lt;td align=&quot;center&quot;&gt;162 bpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Event: 4th Stage of Passo Fundo Municipal Circuit.&lt;/p&gt;
</content:encoded></item><item><title>The Intelligent Project Manager - Leandro Vignochi</title><link>https://alexbrodt.com/book-the-intelligent-project-manager</link><guid isPermaLink="true">https://alexbrodt.com/book-the-intelligent-project-manager</guid><description>Impressions of Leandro Vignochi&apos;s book that gathers real stories and project management practices.</description><pubDate>Sun, 25 Nov 2018 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I received The Intelligent Project Manager as a gift from my friend and inspiring professional Leandro Vignochi.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a light book, with real stories from people who live the daily challenges of project management.&lt;/p&gt;
&lt;p&gt;I liked it because it brings practical tips and experiences that you don&amp;#39;t often find around, especially the mistakes, few like to talk about those. Leandro shares both successes and failures from the field.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s valuable as inspiration and learning for anyone working or planning to work in project management.&lt;/p&gt;
&lt;p&gt;Thanks Leandro, and congratulations on this excellent book!&lt;/p&gt;
</content:encoded></item><item><title>Daddy is Pop - Marcos Piangers</title><link>https://alexbrodt.com/book-daddy-is-pop</link><guid isPermaLink="true">https://alexbrodt.com/book-daddy-is-pop</guid><description>Impressions of Marcos Piangers&apos;s book about fatherhood and everyday life.</description><pubDate>Fri, 28 Jul 2017 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I got Daddy is Pop by Marcos Piangers as a gift from my wife. It&amp;#39;s a simple, light book full of everyday stories of fatherhood.&lt;/p&gt;
&lt;p&gt;I recently became a father to a beautiful little girl, and it&amp;#39;s moving to read stories that highlight the importance of valuing simple moments with children and family.&lt;/p&gt;
&lt;p&gt;I strongly recommend it, especially for those who live or dream of the experience of being a parent.&lt;/p&gt;
&lt;p&gt;Thanks for the gift, my love!&lt;/p&gt;
</content:encoded></item><item><title>Project Management in Comics</title><link>https://alexbrodt.com/book-project-management-in-comics</link><guid isPermaLink="true">https://alexbrodt.com/book-project-management-in-comics</guid><description>My impressions after reading a light and fun book on project management, with comic strips that portray the day-to-day of the field alongside expert commentary.</description><pubDate>Mon, 10 Jul 2017 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It&amp;#39;s one of those books you pick up thinking it will just be lighthearted fun, but halfway through you realize that the life of a project manager is portrayed with such accuracy that it&amp;#39;s both funny and painfully real.  &lt;/p&gt;
&lt;p&gt;The protagonist is Rosalina, who faces situations anyone in the field has probably experienced, tight deadlines, scope changes, endless meetings, and that constant feeling that you need a touch of magic to deliver everything. After each comic strip, experts add commentary and context, offering both practical and theoretical perspectives on these everyday challenges.  &lt;/p&gt;
&lt;p&gt;What&amp;#39;s great is that the humor doesn&amp;#39;t take away from the seriousness of the lessons. On the contrary, it makes everything easier to digest. You laugh, but you also reflect on how much project management demands flexibility, technique, and a good dose of patience.  &lt;/p&gt;
&lt;p&gt;It&amp;#39;s light, quick to read, and at the same time full of insights that are valuable to any professional in the field.&lt;/p&gt;
</content:encoded></item><item><title>The Art of War - Sun Tzu</title><link>https://alexbrodt.com/book-the-art-of-war-sun-tzu</link><guid isPermaLink="true">https://alexbrodt.com/book-the-art-of-war-sun-tzu</guid><description>My impressions after rereading Sun Tzu&apos;s classic, The 13 Chapters, which for centuries has inspired leaders, strategists, and managers.</description><pubDate>Tue, 27 Jun 2017 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I went back to The Art of War – The 13 Chapters by Sun Tzu, that timeless classic that crosses generations and never gets old.&lt;br&gt;Even though it was written in an ancient Chinese military context, its lessons still apply today, whether in personal life, business, or team leadership.&lt;/p&gt;
&lt;p&gt;The text is concise and direct, with each chapter reading like a collection of aphorisms. Short phrases, but loaded with meaning. As you read, you realize it&amp;#39;s not just about winning battles, but about thinking strategically, anticipating moves, and often winning without fighting at all.&lt;/p&gt;
&lt;p&gt;What struck me most is the emphasis on knowing yourself and your enemy. This notion of clarity, preparation, and adaptability is universal. Just as the idea that victory doesn&amp;#39;t come from improvisation, but from discipline and careful planning.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s not a book you read only once. You can revisit it in different stages of life and always find something new, because every phrase leaves room for reflection.&lt;br&gt;Short and to the point, but with deep impact. More than just a read, it serves as a reference for decision-making in any field.&lt;/p&gt;
</content:encoded></item><item><title>Why project managers get fired?</title><link>https://alexbrodt.com/why-project-managers-get-fired</link><guid isPermaLink="true">https://alexbrodt.com/why-project-managers-get-fired</guid><description>There are several factors that coincide for a project manager&apos;s dismissal to occur. In times of crisis no one is safe and preventive actions must be executed...</description><pubDate>Sun, 25 Jun 2017 19:40:00 GMT</pubDate><content:encoded>&lt;p&gt;There are several factors for a project manager&amp;#39;s dismissal to occur.&lt;/p&gt;
&lt;p&gt;In times of crisis no one is safe and preventive actions, which avoid dismissal, must be executed and monitored.&lt;/p&gt;
&lt;p&gt;Among the factors that can trigger a dismissal, the main ones are:&lt;/p&gt;
&lt;h6&gt;1 – Behavioral&lt;/h6&gt;
&lt;p&gt;Attitudes in a professional environment can elevate or denigrate your image before the organization.&lt;/p&gt;
&lt;p&gt;A project manager without an adequate posture is a shot in the foot for any company. Just as it&amp;#39;s possible, through motivation, to make a team produce and deliver quality, it&amp;#39;s also possible that lack of sensitivity, empathy and the most aggravating, immaturity, make the team plummet 30 floors without safety equipment.&lt;/p&gt;
&lt;p&gt;The behavioral factor is the most relevant aspect in a professional, I dare say it&amp;#39;s even more important than technical skills.&lt;/p&gt;
&lt;p&gt;When I&amp;#39;m conducting a selection process, I look for candidates who demonstrate the behavioral factor that best fits the organization&amp;#39;s profile, who show commitment, proactivity, willingness to work in the proposed position and also desire to be part of the organization.&lt;/p&gt;
&lt;p&gt;Technical skills can and should be trained and evolved as the employee&amp;#39;s career develops. Character and behavioral profile are more difficult to be molded according to the employer&amp;#39;s expectations.&lt;/p&gt;
&lt;p&gt;This behavioral factor fits any position, however, when it comes to a management position, the behavioral becomes even more evident, with a project manager&amp;#39;s soft skills being the most used tools in their day-to-day, such as communication, leadership, conflict resolution, positive attitude, etc.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s important to be constantly reviewing your behavioral profile, getting feedback from management is a great way to prevent the worst from happening.&lt;/p&gt;
&lt;h6&gt;2 – Project Manager Training&lt;/h6&gt;
&lt;p&gt;The lack of technical knowledge is another aggravating factor for the project manager. It often makes actions not taken with the wisdom they should have. Even with experience, in the medium and long term, a solid foundation will be missing for the professional to have a more acute critical vision.&lt;/p&gt;
&lt;p&gt;Experience alone will not guarantee competence for success. Theoretical knowledge is needed, knowledge base at an administrative level. Best practices are hidden in books, training and workshops. It&amp;#39;s necessary to be open to reinventing yourself, seeking information and not being afraid to face the new.&lt;/p&gt;
&lt;p&gt;Taking an MBA in project management is a great option. In addition to the theoretical knowledge obtained, you can do excellent networking and exchange great experiences with teachers, who are mostly market professionals, who have practical experience and theoretical knowledge, making them a great source of knowledge.&lt;/p&gt;
&lt;p&gt;Obtaining high-level certifications like PMP® or ASM® are also great options. In addition to having the credential of a renowned institute, you will obtain an excellent level of theoretical knowledge in preparing to obtain the certification. In times when companies are increasingly focusing on standards, whether traditional or agile management, obtaining a certification is a great differential.&lt;/p&gt;
&lt;h6&gt;3 – Organizational structure&lt;/h6&gt;
&lt;p&gt;Organizations with low maturity level end up making there no adequate structure for project management. The non-existence of a PMO also makes it difficult for the project manager to perform their function with support and standardization.&lt;/p&gt;
&lt;p&gt;The fact is that in Brazil, the vast majority of companies are in transition, from a world where project management is treated without due importance, to a world where the power of using a management methodology is seen.&lt;/p&gt;
&lt;p&gt;The point here is up to the project manager together with the organization, to structure or restructure the management area, focusing on good practices and current methodologies. The so-called &amp;quot;2.0&amp;quot; makeovers are trends in various organizations of different sizes.&lt;/p&gt;
&lt;h6&gt;4 – Lack of executive support&lt;/h6&gt;
&lt;p&gt;Executive support in an organization is vital for several areas. When it comes to project management, sponsor support is vital, without this support, it will be an aggravating factor for the manager&amp;#39;s career decline. When there&amp;#39;s a lack of support structure, the project manager&amp;#39;s performance will not reach their cruising level.&lt;/p&gt;
&lt;p&gt;The project manager&amp;#39;s lack of authority is also a factor that causes their activities to be impacted, especially when we talk about non-projectized organizational structures.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s up to the project manager to try to obtain executive support, showing them the importance of project management in the organization and the benefits this will bring.&lt;/p&gt;
&lt;h6&gt;5 – Ethical preparation&lt;/h6&gt;
&lt;p&gt;Finally, the ethical issue is a factor that should always be taken into consideration. Often the project manager is not prepared to deal with a certain ethical issue. In some situations involving conflicts of interest, the project manager may not have a clear vision of the conduct they should adopt, ending up violating a certain code of ethics of the organization.&lt;/p&gt;
&lt;p&gt;Brazil has lived in recent years examples of lack of ethics on the part of our politicians, where politics itself ends up corrupting the vast majority of those around it. Project management in Brazil&amp;#39;s political environment is an immense war with ethics.&lt;/p&gt;
</content:encoded></item><item><title>Dream Big - Cristiane Correa</title><link>https://alexbrodt.com/book-dream-big-cristiane-correa</link><guid isPermaLink="true">https://alexbrodt.com/book-dream-big-cristiane-correa</guid><description>Impressions of the book that tells the story of the 3G Capital partners and their aggressive, efficient management style.</description><pubDate>Sat, 24 Jun 2017 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I finished reading Dream Big by Cristiane Correa. The book shows how Jorge Paulo Lemann, Marcel Telles, and Beto Sicupira built an empire through 3G Capital.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s an engaging read and highlights a management style extremely focused on meritocracy, efficiency, and cost reduction. Inspiring, but also controversial, some see it as a model of success, while others question the human impact of such an approach.&lt;/p&gt;
&lt;p&gt;For me it was interesting to see how discipline, vision, and boldness can create global businesses. At the same time, it also made me reflect on the limits of this way of managing.&lt;/p&gt;
&lt;p&gt;I recommend it both for those starting in leadership roles and for experienced managers or entrepreneurs.&lt;/p&gt;
</content:encoded></item><item><title>How to pass the PMP® certification exam</title><link>https://alexbrodt.com/how-to-pass-pmp-certification-exam</link><guid isPermaLink="true">https://alexbrodt.com/how-to-pass-pmp-certification-exam</guid><description>The decision to pursue a certification is a professional milestone and should be treated with due importance, especially when it comes to such a coveted certification as the PMP®...</description><pubDate>Sat, 27 May 2017 13:25:00 GMT</pubDate><content:encoded>&lt;p&gt;The decision to pursue a certification is a professional milestone and should be treated with due importance, especially when it comes to such a coveted certification as the PMP®.&lt;/p&gt;
&lt;p&gt;The Project Management Institute (&lt;a href=&quot;https://brasil.pmi.org/&quot;&gt;Project Management Institute&lt;/a&gt;, PMI), is one of the largest associations for project management professionals. It offers eight certifications that attest knowledge and competence, among which, the Project Management Professional PMP®, which has more than 370,000 certified professionals worldwide.&lt;/p&gt;
&lt;p&gt;Preparation for PMP® certification requires planning, discipline and focus to obtain expected results and achieve the goal. Therefore, it must be clear that there is no magic formula, it requires a lot of study and dedication.&lt;/p&gt;
&lt;p&gt;The PMP® certification is the most recognized and respected professional certification worldwide in the Project Management area. It attests to employers, clients and colleagues that a project manager has knowledge, experience and skills in project management so that projects are carried out successfully.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s necessary to treat PMP® certification as a project, and thus plan all steps, from the eligibility request stage, study plan and even logistics for taking the exam.&lt;/p&gt;
&lt;h2&gt;Investment Analysis&lt;/h2&gt;
&lt;p&gt;Prior planning of the investment needed to obtain a certification is essential. You need to analyze the costs you&amp;#39;ll have with certification voucher, travel, accommodation, food and even your time dedicated to studies.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re already a &lt;a href=&quot;http://www.pmi.org/membership/types&quot;&gt;PMI member&lt;/a&gt;, the voucher costs $405.00 dollars, otherwise, you&amp;#39;ll pay $555.00. Therefore, if you&amp;#39;re in doubt about becoming a member, go ahead, because the benefits compensate.&lt;/p&gt;
&lt;p&gt;Regarding logistics, to take the exam it&amp;#39;s necessary to travel to a Prometric Test Center.&lt;/p&gt;
&lt;p&gt;Currently in Brazil we have only 6 cities that are able to provide the computer exam: Belo Horizonte, Brasília, Curitiba, Recife, Rio de Janeiro or São Paulo.&lt;/p&gt;
&lt;p&gt;If you prefer to take the paper exam, you can take it in: Fortaleza, Manaus, Porto Alegre, Salvador, Sergipe and Vitória.&lt;/p&gt;
&lt;p&gt;After this feasibility analysis, you&amp;#39;ll be able to determine when you&amp;#39;ll have the necessary resources to take the exam.&lt;/p&gt;
&lt;h2&gt;Eligibility&lt;/h2&gt;
&lt;p&gt;PMP® certification has a series of requirements to allow a candidate to become eligible to take the exam. These requirements often end up inhibiting candidates, but they&amp;#39;re not a seven-headed beast, on the contrary, they&amp;#39;re necessary requirements to maintain an initial leveling of candidates.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Four-year degree&lt;/strong&gt; (bachelor&amp;#39;s or equivalent)&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;High school diploma&lt;/strong&gt; (high school or equivalent)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;Minimum of three years of project management experience&lt;/td&gt;
&lt;td&gt;Minimum of five years of project management experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Minimum of 4,500 hours of project leadership and direction&lt;/td&gt;
&lt;td&gt;Minimum of 7,500 hours of project leadership and direction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;35 hours of project management training&lt;/td&gt;
&lt;td&gt;35 hours of project management training&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;If you meet the requirements, I suggest four steps to obtain eligibility:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://brasil.pmi.org/brazil/CertificationsAndCredentials/~/media/2891229A671B42F7B32DF72B5C02CD99.ashx&quot;&gt;Read the certification manual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://marketplace.pmi.org/Pages/ProductDetail.aspx?GMProduct=00100147500&quot;&gt;Join PMI and the chapter in your region&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://certification.pmi.org/&quot;&gt;Submit the eligibility request&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://brasil.pmi.org/brazil/CertificationsAndCredentials/PMP/PMPExamPrepTips.aspx&quot;&gt;Read the preparatory&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pay attention to the fact that 10% of eligibility submissions end up in audit, so it&amp;#39;s recommended to prepare all necessary documentation, in case you have to send it to PMI.&lt;/p&gt;
&lt;h2&gt;My Study Plan&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.credly.com/badges/c8e506b1-a39b-419b-aa70-d1982191583c&quot;&gt;I got my PMP® certification in 2015&lt;/a&gt;, as it had been a few years since I had completed MBA in Project Management, I decided that my certification project would last 3 months, this would be enough time to resume studies and be ready to take the exam.&lt;/p&gt;
&lt;p&gt;Right after having done the economic feasibility and having become eligible to take the exam, I chose to schedule the date. This way I could no longer give up, or postpone taking the exam waiting to feel ready, because I would be committed. Therefore, I recommend this tactic to everyone who intends to take the exam, schedule before you even start studying.&lt;/p&gt;
&lt;p&gt;I gathered my study arsenal which I summarize as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PMBOK&lt;/li&gt;
&lt;li&gt;Rita Mulcahy&amp;#39;s book&lt;/li&gt;
&lt;li&gt;Rita Mulcahy&amp;#39;s Hot Topics&lt;/li&gt;
&lt;li&gt;Andriele Ribeiro Preparatory&lt;/li&gt;
&lt;li&gt;PM FASTrack Simulator&lt;/li&gt;
&lt;li&gt;PMTotal Simulator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I set up a study schedule from Monday to Saturday, for a period of 2h per day Monday to Friday and 4h on Saturday. Each week I studied a knowledge area and took the simulator of the area studied on Saturday.&lt;/p&gt;
&lt;p&gt;I maintained focus only on the material I had selected, without looking for extra material on the internet, as this could hurt more than help. I used the Cornell Notes methodology to study and this helped me a lot! If you don&amp;#39;t know this methodology I strongly recommend you get to know it, it&amp;#39;s a very simple and practical way, which will help you in any type of study.&lt;/p&gt;
&lt;p&gt;It was necessary to maintain study discipline during the period I planned, that is, the time determined for study was sacred, I needed to stay 100% focused, without interruptions, therefore, family support is fundamental for this achievement.&lt;/p&gt;
&lt;p&gt;I felt confident to take the exam when I managed to achieve 90% on the FASTrack simulator, this was the milestone to be calm and see that I was really prepared.&lt;/p&gt;
&lt;h2&gt;The Exam&lt;/h2&gt;
&lt;p&gt;The exam has a maximum duration of 4 hours and has 200 multiple choice questions, before the test you have a 15-minute period to read the instructions, take advantage of this time to write formulas and make some notes on the scratch paper, thus avoiding any &amp;quot;blank&amp;quot; that might occur in the middle of the exam.&lt;/p&gt;
&lt;p&gt;Most questions are very similar to the simulators, both FASTrack and PMTotal. Often it will seem like there&amp;#39;s more than one correct alternative and you&amp;#39;ll need to choose the most correct one, this makes you lose valuable time, so try to avoid any kind of interruption.&lt;/p&gt;
&lt;p&gt;After answering all questions and completing the submission, it will take about 30 seconds for the result to appear on the screen, the feeling of relief and ecstasy with approval is something indescribable, a mix of pride and gratitude.&lt;/p&gt;
&lt;p&gt;I hope this article has added value and inspired you to move forward to achieve your certification, I&amp;#39;m sure that with good planning, discipline, focus and dedication you&amp;#39;ll be able to enjoy this incredible feeling that approval provides.&lt;/p&gt;
&lt;p&gt;Good luck on your PMP certification journey.&lt;/p&gt;
</content:encoded></item><item><title>Scrum in practice: roles, events and artifacts that really matter</title><link>https://alexbrodt.com/scrum-in-practice-roles-events-artifacts</link><guid isPermaLink="true">https://alexbrodt.com/scrum-in-practice-roles-events-artifacts</guid><description>After years using Scrum in real projects, I explain in a simple way the roles, events and artifacts that make a difference in daily work.</description><pubDate>Thu, 25 May 2017 01:46:00 GMT</pubDate><content:encoded>&lt;p&gt;I&amp;#39;ve been working with Scrum for some years and I&amp;#39;ve seen teams that implement only the meetings thinking they&amp;#39;re being agile, and others that follow the framework religiously but forget the purpose. The truth is that Scrum is simple in theory, but needs to be well understood in practice.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll explain Scrum&amp;#39;s roles, events and artifacts based on my real experience implementing in different teams.&lt;/p&gt;
&lt;h6&gt;The 3 fundamental roles&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Product Owner&lt;/strong&gt; is who defines what should be built. It&amp;#39;s the person who understands business and user needs. In practice, it&amp;#39;s who prioritizes what the team will work on and says &amp;quot;yes, this meets&amp;quot; or &amp;quot;no, needs adjustment&amp;quot;.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve worked with excellent POs who had clarity about the value of each functionality. And also with POs who only passed demands without context, which made everything more difficult.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scrum Master&lt;/strong&gt; is not the team&amp;#39;s boss. It&amp;#39;s the facilitator, obstacle remover. When the team can&amp;#39;t access a test environment, when there are team conflicts, when events aren&amp;#39;t flowing well, it&amp;#39;s the Scrum Master who acts.&lt;/p&gt;
&lt;p&gt;A good Scrum Master questions impediments, facilitates difficult conversations and protects the team from external interruptions. It&amp;#39;s not a &amp;quot;meeting scheduler&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development Team&lt;/strong&gt; are the people who build the product. Developers, testers, designers, analysts. Ideally teams of 3 to 9 people who can deliver complete functionalities working together.&lt;/p&gt;
&lt;p&gt;The team is self-organized, meaning it decides internally how it will do the work. This doesn&amp;#39;t mean anarchy, it means autonomy to choose the best technical practices.&lt;/p&gt;
&lt;h6&gt;The artifacts that organize work&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Product Backlog&lt;/strong&gt; is the ordered list of everything that needs to be done in the product. It&amp;#39;s not a static document. It&amp;#39;s dynamic, always evolves as we learn more about the product and market.&lt;/p&gt;
&lt;p&gt;A well-managed Product Backlog has detailed items at the top (next Sprints) and more generic ones at the bottom (future vision). The PO spends time continuously refining this list.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sprint Backlog&lt;/strong&gt; are the items the team committed to deliver in the current Sprint. It&amp;#39;s the result of Sprint Planning, when the team analyzes the Product Backlog and says &amp;quot;we can deliver this in the next weeks&amp;quot;.&lt;/p&gt;
&lt;p&gt;During the Sprint, only the development team can change the Sprint Backlog. New urgent demands should be negotiated with the PO, not imposed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Definition of Done&lt;/strong&gt; is the agreement about when something is really ready. It seems obvious, but I&amp;#39;ve seen many discussions about &amp;quot;is this ready?&amp;quot; because there was no clarity on criteria.&lt;/p&gt;
&lt;p&gt;Practical example: developed, tested, reviewed, documented if necessary, deployed to staging environment. Everyone knows that without these steps, it&amp;#39;s not &amp;quot;Done&amp;quot;.&lt;/p&gt;
&lt;h6&gt;The events that keep everything working&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Sprint&lt;/strong&gt; is the main timebox, usually 2 to 4 weeks. It&amp;#39;s Scrum&amp;#39;s heart because it forces frequent deliveries and quick feedback. Very long sprints lose agility, very short ones generate overhead.&lt;/p&gt;
&lt;p&gt;In my experience, 2-week Sprints work well for most contexts. Gives time to develop significant functionalities but maintains constant feedback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sprint Planning&lt;/strong&gt; is when the team plans the next Sprint&amp;#39;s work. First part defines &amp;quot;WHAT&amp;quot; we&amp;#39;re going to do (PO presents priorities). Second part defines &amp;quot;HOW&amp;quot; we&amp;#39;re going to do it (team details tasks).&lt;/p&gt;
&lt;p&gt;Good Sprint Plannings result in a clear goal for the Sprint and team confidence that they can deliver what they committed to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Daily Scrum&lt;/strong&gt; is the 15-minute daily meeting to synchronize work. It&amp;#39;s not a status report meeting. It&amp;#39;s for the team to align and mainly identify and anticipate impediments.&lt;/p&gt;
&lt;p&gt;The three classic questions work well: &amp;quot;What did I do yesterday?&amp;quot;, &amp;quot;What am I going to do today?&amp;quot;, &amp;quot;Do I have any impediment?&amp;quot;. Long conversations stay for after the Daily.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sprint Review&lt;/strong&gt; is when we show what was delivered in the Sprint to stakeholders and collect feedback. It&amp;#39;s not a formal presentation, it&amp;#39;s a collaborative session to inspect the product and adapt the Product Backlog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sprint Retrospective&lt;/strong&gt; is when the team reflects on the process and defines improvements. It&amp;#39;s focused on &amp;quot;how we work together&amp;quot; and &amp;quot;what we can improve&amp;quot;. In my experience, teams that do good retrospectives evolve much faster.&lt;/p&gt;
&lt;h6&gt;What works in practice&lt;/h6&gt;
&lt;p&gt;Scrum is not about following rules rigidly, it&amp;#39;s about constantly inspecting and adapting. Mature teams adjust the framework to their context, but respect fundamental principles.&lt;/p&gt;
&lt;p&gt;Companies that benefit most from Scrum are those that invest time training people and creating a collaboration culture. Implementing only ceremonies without mindset change doesn&amp;#39;t work.&lt;/p&gt;
&lt;p&gt;What I see go wrong most is turning the Scrum Master into a traditional project manager, using the Daily as a control meeting, and not investing enough time in backlog refinement.&lt;/p&gt;
&lt;p&gt;Scrum is a powerful tool, but like any tool, it needs to be well used. The secret is understanding the purpose behind each role, event and artifact.&lt;/p&gt;
</content:encoded></item><item><title>Highly Effective Teams Unleash the Power of Exceptionally Cohesive Teams - Ricardo Vargas</title><link>https://alexbrodt.com/book-highly-effective-teams-unleash-the-power-of-exceptionally-cohesive-teams-ricardo-vargas</link><guid isPermaLink="true">https://alexbrodt.com/book-highly-effective-teams-unleash-the-power-of-exceptionally-cohesive-teams-ricardo-vargas</guid><description>My impressions after reading Ricardo Vargas&apos;s book on how to transform virtual teams into effective and cohesive professional networks.</description><pubDate>Sat, 29 Apr 2017 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently read Highly Effective Teams: Unleash the Power of Exceptionally Cohesive Teams by Ricardo Vargas. It&amp;#39;s an interesting read because it tackles a topic that is still very relevant today, how to make geographically dispersed teams truly work as one.&lt;/p&gt;
&lt;p&gt;The book is straightforward and practical, focusing on communication, alignment and trust. Vargas makes it clear that technology alone is not enough, you need to create an environment where people feel part of something bigger. That means clear roles, well-defined objectives, and above all, discipline in the way collaboration happens.&lt;/p&gt;
&lt;p&gt;One of the points that stood out to me is how strongly Vargas emphasizes that cohesion doesn&amp;#39;t just appear by itself. It&amp;#39;s built it requires intention and constant practice. It&amp;#39;s not only about virtual meetings, but about finding ways to maintain closeness even at a distance. The book includes examples that make it easier to picture how to apply these ideas in real situations.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a short, simple, and useful read. Not a heavy theoretical manual, but a set of clear guidelines that any manager can use as a starting point to improve team dynamics.  &lt;/p&gt;
&lt;p&gt;I especially recommend it to those leading distributed teams or facing the challenge of keeping motivation and collaboration alive in virtual environments.&lt;/p&gt;
</content:encoded></item><item><title>Project Management: the definitions everyone should know</title><link>https://alexbrodt.com/basic-project-management-definitions</link><guid isPermaLink="true">https://alexbrodt.com/basic-project-management-definitions</guid><description>After years dealing with projects, I share the basic definitions that really make a difference in daily work. A practical guide based on my experience.</description><pubDate>Mon, 10 Oct 2016 22:44:00 GMT</pubDate><content:encoded>&lt;p&gt;The project management area has many terms and concepts. PMBOK seems like an intimidating encyclopedia for those who read it for the first time, but over time I realized that some definitions are really fundamental in daily work.&lt;/p&gt;
&lt;p&gt;Today I want to share these definitions in a more practical way, based on my experience dealing with real projects.&lt;/p&gt;
&lt;h6&gt;What are constraints (and why they&amp;#39;ll chase you)&lt;/h6&gt;
&lt;p&gt;Constraints are those limitations you can&amp;#39;t negotiate. They&amp;#39;re the famous &amp;quot;no way around it&amp;quot; of the project. I learned this the hard way when a client said it had to be ready by Friday for Black Friday. It didn&amp;#39;t matter if it was technically viable or not.&lt;/p&gt;
&lt;p&gt;Constraints fall into 6 main groups. &lt;strong&gt;Time&lt;/strong&gt; is non-negotiable deadline (like Black Friday). &lt;strong&gt;Costs&lt;/strong&gt; is fixed budget that can&amp;#39;t be exceeded. &lt;strong&gt;Human Resources&lt;/strong&gt; is available team (or lack thereof). &lt;strong&gt;Quality&lt;/strong&gt; are minimum standards that can&amp;#39;t be compromised. &lt;strong&gt;Scope&lt;/strong&gt; is what must be included mandatorily. &lt;strong&gt;Risks&lt;/strong&gt; are exposure limitations to problems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real example&lt;/strong&gt;: In an e-commerce project, we had R$ 650,000 budget, 3 months deadline and a 6-person team. Simple as that, there was no way to negotiate.&lt;/p&gt;
&lt;h6&gt;Assumptions are the bets we make every day&lt;/h6&gt;
&lt;p&gt;Assumptions are those suppositions we make to be able to plan. It&amp;#39;s like saying &amp;quot;let&amp;#39;s assume this will work&amp;quot; knowing it might not.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The rule I learned&lt;/strong&gt; is that every assumption generates a risk. If I assume the client will deliver the layout on Tuesday, I need to have a plan B for when this doesn&amp;#39;t happen (and probably won&amp;#39;t).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Example I&amp;#39;ve lived&lt;/strong&gt;: The client will provide the layout (PSD) by 10/10/2016 to start HTML. Spoiler: arrived on the 15th, with half the project delayed.&lt;/p&gt;
&lt;h6&gt;Programs vs Portfolios, the difference that confuses everyone&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Program&lt;/strong&gt; is a set of related projects working together. Think about renewing a company&amp;#39;s visual identity: website, graphic material, signage, uniforms. They&amp;#39;re different projects, but need to be aligned.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Portfolio&lt;/strong&gt; is more strategic. It&amp;#39;s all projects and programs the company is running to achieve its objectives. It&amp;#39;s C-level vision about which projects will take us where we want to go.&lt;/p&gt;
&lt;h6&gt;The people behind projects&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Stakeholders&lt;/strong&gt; are everyone who can be affected by the project. From CEO to the doorman who will use the new access system. I learned that ignoring any of them can become a headache.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sponsor&lt;/strong&gt; is not necessarily who pays (although it can be). It&amp;#39;s your &amp;quot;political godfather&amp;quot; in the company. That person who will defend you in board meetings when things get tense.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Functional manager&lt;/strong&gt; is the boss of functional areas (HR, IT, Finance). When you need someone from their team, it&amp;#39;s with them you negotiate. Fundamental relationship!&lt;/p&gt;
&lt;h6&gt;PMO, the 3 types you&amp;#39;ll find around&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Support PMO&lt;/strong&gt; is the &amp;quot;self-service&amp;quot; of PM. Gives you templates, training, best practices. You use if you want.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Control PMO&lt;/strong&gt; besides support, demands you follow methodologies. &amp;quot;Where&amp;#39;s the updated schedule?&amp;quot; is a typical phrase.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Directive PMO&lt;/strong&gt; they manage projects directly. You report to them, not to functional manager.&lt;/p&gt;
&lt;h6&gt;The environment that influences everything&lt;/h6&gt;
&lt;p&gt;&lt;strong&gt;Organizational culture&lt;/strong&gt;, a startup vs a 50-year company have different speeds. &lt;strong&gt;Organizational structures&lt;/strong&gt; in strong matrix (PM commands), weak matrix (PM &amp;quot;asks please&amp;quot;) and functional (each in their square). &lt;strong&gt;Environmental factors&lt;/strong&gt; are regulations, available suppliers, existing technology.&lt;/p&gt;
&lt;h6&gt;The 5 process groups that rule your life&lt;/h6&gt;
&lt;p&gt;There will always be 5 phases every project will go through:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Initiation&lt;/strong&gt; is &amp;quot;Should we do this project?&amp;quot; Here you get authorization, identify stakeholders and are officially named PM.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Planning&lt;/strong&gt; is &amp;quot;How are we going to do it?&amp;quot; The most important phase in my opinion. Plan poorly, suffer later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Execution&lt;/strong&gt; is &amp;quot;Let&amp;#39;s get to work!&amp;quot; Where budget is spent and work actually happens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monitoring and Control&lt;/strong&gt; is &amp;quot;Is everything on track?&amp;quot; Monitor, measure, adjust. Happens in parallel with execution.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Closure&lt;/strong&gt; is &amp;quot;Mission accomplished!&amp;quot; Close contracts, document lessons learned, release team.&lt;/p&gt;
&lt;h6&gt;The structure behind everything&lt;/h6&gt;
&lt;p&gt;Every management process always has 3 components. &lt;strong&gt;Inputs&lt;/strong&gt; are what you need to do the work. &lt;strong&gt;Tools and techniques&lt;/strong&gt; are how you&amp;#39;re going to do it. &lt;strong&gt;Outputs&lt;/strong&gt; are what you&amp;#39;re going to deliver.&lt;/p&gt;
&lt;p&gt;It seems obvious, but this logic helped me a lot to understand PMBOK and pass the &lt;a href=&quot;/how-to-pass-pmp-certification-exam&quot;&gt;certification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These definitions are not just theory, they&amp;#39;re tools I use every day. When you understand these concepts well, it becomes much easier to navigate the project world and communicate with stakeholders.&lt;/p&gt;
&lt;p&gt;Do any of these definitions make more sense now? Or is there any term that always confuses you?&lt;/p&gt;
</content:encoded></item><item><title>What is project management in practice?</title><link>https://alexbrodt.com/what-is-project-management-in-practice</link><guid isPermaLink="true">https://alexbrodt.com/what-is-project-management-in-practice</guid><description>After years managing projects, I explain in a simple way what project management is and how it works in companies&apos; daily life.</description><pubDate>Sat, 30 Jul 2016 20:39:00 GMT</pubDate><content:encoded>&lt;p&gt;A project manager is responsible for making things come off paper and become reality, within expected time, budget and quality.&lt;/p&gt;
&lt;p&gt;But let&amp;#39;s start with the basics. To understand project management, I first need to explain what a project is.&lt;/p&gt;
&lt;h6&gt;What is a project anyway&lt;/h6&gt;
&lt;p&gt;A project is something temporary and unique that you do to create a specific result. Temporary because it has defined start and end. Unique because it&amp;#39;s not something you do every day the same way.&lt;/p&gt;
&lt;p&gt;Examples I&amp;#39;ve managed are mobile app development, implementing a new system in the company, building an e-commerce. Each of these had a clear objective, determined deadline and specific resources.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a difference between project and operation, which many end up confusing with project. Operation is what you do every day as routine (serving customers, producing products, processing orders). Project is that special initiative to create something new or improve something existing.&lt;/p&gt;
&lt;h6&gt;Project management is orchestrating all this&lt;/h6&gt;
&lt;p&gt;Project management is applying knowledge, skills and tools to make the project happen. It&amp;#39;s like being the conductor of an orchestra where each musician has an important part, but needs to play at the right time.&lt;/p&gt;
&lt;p&gt;In practice, it means I need to plan who will do what, when, with how much money, what risks can appear and how we&amp;#39;ll communicate during the whole process.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve worked on 3-month projects and others of 2 years. The size changes, but the essence is always the same: coordinating people, resources and expectations to deliver a result.&lt;/p&gt;
&lt;h6&gt;The 5 moments of every project&lt;/h6&gt;
&lt;p&gt;Every project goes through 5 phases, always. It can be a one-week project or two years, but these phases exist.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Initiation&lt;/strong&gt; is when we decide &amp;quot;let&amp;#39;s do this project&amp;quot;. Here we define what we want to achieve, who the stakeholders are and if it&amp;#39;s really worth doing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Planning&lt;/strong&gt; is the most critical phase in my experience. It&amp;#39;s when we detail how we&amp;#39;re going to do it, how much it will cost, how long it will take, who will participate. Plan poorly here, suffer later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Execution&lt;/strong&gt; is getting hands dirty. Where work actually happens.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monitoring and Control&lt;/strong&gt; happens together with execution. It&amp;#39;s keeping an eye on whether we&amp;#39;re on the right track, if budget is ok, if we&amp;#39;ll deliver on time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Closure&lt;/strong&gt; is finishing everything properly. Deliver to client, document what we learned, release the team, close contracts.&lt;/p&gt;
&lt;h6&gt;The 10 areas I need to master&lt;/h6&gt;
&lt;p&gt;PMBOK defines 10 knowledge areas that every project manager needs to know. In practice, they&amp;#39;re the aspects managed simultaneously.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Integration&lt;/strong&gt; is keeping everything connected and aligned. &lt;strong&gt;Scope&lt;/strong&gt; is controlling what&amp;#39;s included (and especially what&amp;#39;s not). &lt;strong&gt;Time&lt;/strong&gt; is managing schedules and deadlines. &lt;strong&gt;Costs&lt;/strong&gt; is controlling budget and expenses.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quality&lt;/strong&gt; is ensuring the result meets criteria. &lt;strong&gt;Human Resources&lt;/strong&gt; is managing the team. &lt;strong&gt;Communication&lt;/strong&gt; is keeping everyone informed. &lt;strong&gt;Risks&lt;/strong&gt; is anticipating and managing problems.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Procurement&lt;/strong&gt; is managing suppliers and contracts. &lt;strong&gt;Stakeholders&lt;/strong&gt; is managing expectations of all people involved.&lt;/p&gt;
&lt;p&gt;It seems like a lot, but in practice you develop these skills naturally as you gain experience.&lt;/p&gt;
&lt;p&gt;Poorly managed projects cost dearly. I&amp;#39;ve seen projects blow 200% of budget, delay months or be cancelled because they lost focus.&lt;/p&gt;
&lt;p&gt;With adequate management, you drastically increase success chances. Stakeholders stay informed, team knows what to do, risks are controlled and final result meets expectations.&lt;/p&gt;
&lt;p&gt;In my experience, the difference between a successful project and a disaster usually lies in planning quality and communication during execution.&lt;/p&gt;
&lt;p&gt;Project management is not bureaucracy, it&amp;#39;s a structured way to transform ideas into reality.&lt;/p&gt;
</content:encoded></item><item><title>Planning in 140 Tweets - Ricardo Vargas</title><link>https://alexbrodt.com/book-planning-in-140-tweets-ricardo-vargas</link><guid isPermaLink="true">https://alexbrodt.com/book-planning-in-140-tweets-ricardo-vargas</guid><description>My impressions after reading the book that brings short and practical ideas on planning.</description><pubDate>Thu, 16 Jun 2016 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I recently finished reading Planning in 140 Tweets by Ricardo Vargas. The purpose is simple, turn concepts and reflections on planning into short, tweet-sized messages.&lt;br&gt;This makes the book a quick and very engaging read. It&amp;#39;s full of small provocations that make you stop, think, and sometimes even smile at the sharper remarks. Ricardo Vargas was brilliant in many ways here.&lt;/p&gt;
&lt;p&gt;You can open the book at any page, read a single line, and already have something to reflect on or even apply in your daily work. It&amp;#39;s almost like having a coach in tweet format.&lt;/p&gt;
&lt;p&gt;What I found most interesting is how it breaks the stereotype of planning as something bureaucratic and distant. Vargas brings lightness to the subject while still being straight to the point.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s an agile, practical book, with quick and easy-to-digest insights. Not meant for deep study, but definitely for sparking reflection and inspiration.  &lt;/p&gt;
&lt;p&gt;I recommend it, short easy to read and full of insights for everyday life.&lt;/p&gt;
</content:encoded></item><item><title>The Servant - James C. Hunter</title><link>https://alexbrodt.com/book-the-servant</link><guid isPermaLink="true">https://alexbrodt.com/book-the-servant</guid><description>Impressions of the leadership fable and human values that became a worldwide reference.</description><pubDate>Thu, 17 Mar 2016 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Servant by James C. Hunter is easy to read and full of messages about servant leadership and human values.&lt;/p&gt;
&lt;p&gt;The key takeaway is that leading is not about commanding, but about serving and inspiring. Simple but powerful. It makes you reflect on how small changes in behavior can transform the way you lead.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s not a practical guide of tools, but a book of reflection. Worth reading, especially for those who want to develop leadership with purpose.&lt;/p&gt;
</content:encoded></item><item><title>A Brief History of Time - Stephen Hawking</title><link>https://alexbrodt.com/book-a-brief-history-of-time-stephen-hawking</link><guid isPermaLink="true">https://alexbrodt.com/book-a-brief-history-of-time-stephen-hawking</guid><description>My impressions after reading Stephen Hawking&apos;s classic — a journey through time, space, and humanity’s quest to understand the universe.</description><pubDate>Sun, 19 Jul 2015 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I read A Brief History of Time by Stephen Hawking. At first, I thought it was going to be one of those heavy theoretical physics books, but I was wrong. Hawking has this almost magical ability to translate things like black holes, relativity, and even the beginning of the universe into something any curious person can follow.&lt;/p&gt;
&lt;p&gt;Were there moments when I had to reread the same paragraph twice? Definitely. I went back a few times, but that&amp;#39;s part of the ride. It&amp;#39;s the kind of book that makes you feel small in the face of the universe immensity, yet curious eager to understand more.&lt;/p&gt;
&lt;p&gt;The book makes it clear how little we still know. With all of human intelligence and centuries of study, we still don’t have all the answers. And that&amp;#39;s not a problem, that&amp;#39;s the beauty of it.&lt;/p&gt;
&lt;p&gt;In the end, you&amp;#39;re left with the feeling that we&amp;#39;re passengers on something enormous, trying to decipher fragments of a story that began billions of years before us. A story that keeps unfolding and might never have a final answer and that&amp;#39;s perfectly fine.&lt;/p&gt;
</content:encoded></item><item><title>Oracle Linux 6 – Certified Implementation Specialist certification</title><link>https://alexbrodt.com/oracle-linux-certification</link><guid isPermaLink="true">https://alexbrodt.com/oracle-linux-certification</guid><description>On 06/30/2015 I achieved Oracle Linux 6 Certified Implementation Specialist certification. Journey record, materials and quick tips.</description><pubDate>Tue, 30 Jun 2015 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I obtained the &lt;strong&gt;Oracle Linux 6 – Certified Implementation Specialist (OCS)&lt;/strong&gt; certification. An important step in my technical path, consolidating experience with Linux administration in corporate environments and Oracle ecosystem.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/oracle-linux.png&quot; alt=&quot;Oracle Linux 6 Certificate, 2015&quot;&gt;&lt;/p&gt;
&lt;p&gt;Although I don&amp;#39;t specifically work with infrastructure, I&amp;#39;ve always been passionate about server administration and Linux environments. A few years ago I had the LPI certification as a goal, but due to changes in my work in recent years this ended up falling behind. Now I had the opportunity to obtain this certification and didn&amp;#39;t think twice about embracing the challenge.&lt;/p&gt;
&lt;h4&gt;Quick tips&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Review of official &lt;strong&gt;Oracle Linux 6&lt;/strong&gt; and &lt;strong&gt;UEK (Unbreakable Enterprise Kernel)&lt;/strong&gt; guides.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Laboratory practice with &lt;strong&gt;YUM/ULN&lt;/strong&gt;, &lt;strong&gt;Ksplice&lt;/strong&gt;, &lt;strong&gt;KVM&lt;/strong&gt;, &lt;strong&gt;LVM&lt;/strong&gt;, &lt;strong&gt;SELinux&lt;/strong&gt;, &lt;strong&gt;iptables&lt;/strong&gt; and &lt;strong&gt;networking&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kickstart&lt;/strong&gt; installation simulations and boot and services troubleshooting.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Focus on system administration&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Package and repository management&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kernel and modules&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Network services&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storage (LVM/FS)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security (SELinux/iptables)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set up a &lt;strong&gt;lab&lt;/strong&gt; and practice commands daily, manpages and &lt;code&gt;--help&lt;/code&gt; are your friends.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Know how to &lt;strong&gt;diagnose&lt;/strong&gt;: logs in &lt;code&gt;/var/log&lt;/code&gt;, &lt;code&gt;system-config-&lt;/code&gt;/&lt;code&gt;service&lt;/code&gt;/&lt;code&gt;chkconfig&lt;/code&gt; (OL6 context), &lt;code&gt;journal&lt;/code&gt; usage in newer versions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Understand &lt;strong&gt;repositories&lt;/strong&gt; (ULN/YUM), &lt;strong&gt;UEK kernel&lt;/strong&gt; vs. Red Hat Compatible Kernel and when to use each.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reread official exam &lt;strong&gt;objectives&lt;/strong&gt; and make a personal summary.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>My first drone (APM 2.5.2 + Dedalus)</title><link>https://alexbrodt.com/building-my-first-drone</link><guid isPermaLink="true">https://alexbrodt.com/building-my-first-drone</guid><description>Direct account of how I built my first quadcopter: parts, import hassles, assembly, calibrations and the first takeoffs.</description><pubDate>Sat, 21 Feb 2015 15:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&amp;#39;ve always liked &amp;quot;things that fly&amp;quot;. As a child, I spent hours flying kites on the street. Years later, I discovered something called aeromodeling, it&amp;#39;s hypnotic to see such realistic miniatures, with mechanics that seem to defy physics.&lt;/p&gt;
&lt;p&gt;In 2012 I imported an &lt;strong&gt;AR.Drone&lt;/strong&gt; via eBay. It flew via Wi-Fi and had a range of about 50 meters. It was fun... for a while. Soon I got the urge to go beyond: &lt;strong&gt;build my own drone from scratch&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/2015/frame-dedalus.png&quot; alt=&quot;Dedalus frame in assembly&quot;&gt;&lt;/p&gt;
&lt;p&gt;I started researching and found many people who had success in the project and helped me prepare, forums always save! The project took &lt;strong&gt;almost 12 months&lt;/strong&gt; to be ready. Most of the delay came from &lt;strong&gt;importing&lt;/strong&gt;: almost everything came from China. Generally, it&amp;#39;s 20–30 days to arrive in Brazil and &lt;strong&gt;+60 days&lt;/strong&gt; at Customs. Patience is part of the kit. The only national part was the &lt;strong&gt;Dedalus frame&lt;/strong&gt;, bought from Misiukas (dronehobbymodelismo.com.br).&lt;/p&gt;
&lt;p&gt;The process was quite a learning experience: &lt;strong&gt;soldering, ESC calibration, radio, compass, GPS, telemetry&lt;/strong&gt;... I did all tests first &lt;strong&gt;without propellers&lt;/strong&gt; (here&amp;#39;s a tip).&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/2015/bancada-eletrica.png&quot; alt=&quot;Bench tests: PDB, UBEC, GPS and telemetry&quot;&gt;&lt;/p&gt;
&lt;p&gt;Seeing the radio recognizing each channel and the controller arming for the first time starts giving a taste of hope, the feeling that what was a project is materializing.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/2015/tx-9xr.png&quot; alt=&quot;Turnigy 9XR configured with my model&quot;&gt;&lt;/p&gt;
&lt;p&gt;In the end, mounting everything on the frame, organizing the wiring, securing the battery at the center of gravity and hearing the four motors gaining rotation together is the feeling of victory.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/2015/montado.png&quot; alt=&quot;Finished quad with APM 2.5.2 + GPS&quot;&gt;&lt;/p&gt;
&lt;p&gt;Result: a &lt;strong&gt;Dedalus + APM 2.5.2 with GPS&lt;/strong&gt; quad, &lt;strong&gt;915 MHz&lt;/strong&gt; telemetry, &lt;strong&gt;Turnigy 9XR&lt;/strong&gt; with &lt;strong&gt;FrSky&lt;/strong&gt; module, Hobbywing 40A ESCs, 750KV motors and &lt;strong&gt;LiPo 3S 5000 mAh&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The first flight was in an open area, telemetry monitoring via laptop plugged on top of the car for data monitoring, important to verify information and calibrate.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/images/posts/2015/maiden-flight.png&quot; alt=&quot;First flight in open area&quot;&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;Parts list&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compass:&lt;/strong&gt; &lt;a href=&quot;http://www.ebay.com/itm/400362466832&quot;&gt;http://www.ebay.com/itm/400362466832&lt;/a&gt;, &lt;strong&gt;USD 2.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dedalus Frame:&lt;/strong&gt; &lt;a href=&quot;http://www.dronehobbymodelismo.com/#!product/zoom1tc2/1000529334/quadricoptero-dedalus&quot;&gt;http://www.dronehobbymodelismo.com/#!product/zoom1tc2/1000529334/quadricoptero-dedalus&lt;/a&gt;, &lt;strong&gt;R$ 430.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APM 2.5.2 + GPS controller board:&lt;/strong&gt; &lt;a href=&quot;http://www.goodluckbuy.com/apm2-5-2-apm-flight-controller-board-w-gps-for-multi-rotor-fixed-wing-copter.html&quot;&gt;http://www.goodluckbuy.com/apm2-5-2-apm-flight-controller-board-w-gps-for-multi-rotor-fixed-wing-copter.html&lt;/a&gt;, &lt;strong&gt;USD 111.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;APM case:&lt;/strong&gt; &lt;a href=&quot;http://www.goodluckbuy.com/protector-case-for-ardupilot-mega-apm2-52-apm-flight-controller-board.html&quot;&gt;http://www.goodluckbuy.com/protector-case-for-ardupilot-mega-apm2-52-apm-flight-controller-board.html&lt;/a&gt;, &lt;strong&gt;USD 8.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voltage regulator:&lt;/strong&gt; &lt;a href=&quot;http://www.ebay.com/itm/310732525391&quot;&gt;http://www.ebay.com/itm/310732525391&lt;/a&gt;, &lt;strong&gt;USD 11.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HobbyKing PDB:&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__23140__Hobby_King_Quadcopter_Power_Distribution_Board.html&quot;&gt;http://www.hobbyking.com/hobbyking/store/__23140__Hobby_King_Quadcopter_Power_Distribution_Board.html&lt;/a&gt;, &lt;strong&gt;USD 3.99&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hobbywing 40A ESCs (2–4S):&lt;/strong&gt; &lt;a href=&quot;http://www.ebay.com/itm/Hobbywing-2-4S-40A-Electric-Speed-Control-ESC-good-for-QuadCopter-Multi-copter-/150863761470&quot;&gt;http://www.ebay.com/itm/Hobbywing-2-4S-40A-Electric-Speed-Control-ESC-good-for-QuadCopter-Multi-copter-/150863761470&lt;/a&gt;, &lt;strong&gt;USD 53.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;915 MHz Telemetry:&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__42846__FPV_Radio_Telemetry_Kit_915Mhz.html&quot;&gt;http://www.hobbyking.com/hobbyking/store/__42846__FPV_Radio_Telemetry_Kit_915Mhz.html&lt;/a&gt;, &lt;strong&gt;USD 30.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;12x4.5 SF propellers (red):&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__25827&quot;&gt;http://www.hobbyking.com/hobbyking/store/__25827&lt;/a&gt;__, &lt;strong&gt;USD 27.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turnigy 9XR Radio:&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=31544&quot;&gt;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=31544&lt;/a&gt;, &lt;strong&gt;USD 50.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FrSky DJT module + RX V8FR-II:&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__14349__FrSky_DJT_2_4Ghz_Combo_Pack_for_JR_w_Telemetry_Module_V8FR_II_RX.html&quot;&gt;http://www.hobbyking.com/hobbyking/store/__14349__FrSky_DJT_2_4Ghz_Combo_Pack_for_JR_w_Telemetry_Module_V8FR_II_RX.html&lt;/a&gt;, &lt;strong&gt;USD 40.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AX 2810Q 750KV motors:&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__25556__AX_2810Q_750KV_Brushless_Quadcopter_Motor.html&quot;&gt;http://www.hobbyking.com/hobbyking/store/__25556__AX_2810Q_750KV_Brushless_Quadcopter_Motor.html&lt;/a&gt;, &lt;strong&gt;USD 20.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transmitter battery (3S 2200 mAh) 9XR:&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=31315&quot;&gt;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=31315&lt;/a&gt;, &lt;strong&gt;USD 13.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main LiPo Turnigy nano-tech 5000 mAh 3S 40–80C:&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=21943&quot;&gt;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=21943&lt;/a&gt;, &lt;strong&gt;USD 45.47&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XT60 connectors (black pairs):&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=44334&quot;&gt;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=44334&lt;/a&gt;, &lt;strong&gt;USD 4.00&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;XT60 female connectors (5 pcs):&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=18448&quot;&gt;http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=18448&lt;/a&gt;, &lt;strong&gt;USD 2.80&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HXT UBEC 5/6V (5.5–23V in):&lt;/strong&gt; &lt;a href=&quot;http://www.hobbyking.com/hobbyking/store/__3735__HXT_UBEC_5_6v_output_5_5_23v_Input.html&quot;&gt;http://www.hobbyking.com/hobbyking/store/__3735__HXT_UBEC_5_6v_output_5_5_23v_Input.html&lt;/a&gt;, &lt;strong&gt;USD 6.95&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Blue Ocean Strategy - W. Chan Kim</title><link>https://alexbrodt.com/book-blue-ocean-strategy-w-chan-kim</link><guid isPermaLink="true">https://alexbrodt.com/book-blue-ocean-strategy-w-chan-kim</guid><description>Impressions of the strategy classic that proposes creating new markets instead of competing in existing ones.</description><pubDate>Thu, 11 Apr 2013 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The first time I heard about Blue Ocean Strategy by W. Chan Kim was back in 2011 during an MBA class. A professor introduced the book and its concepts. At the time, I didn’t read it, but kept the recommendation in mind. Now I finally finished it.  &lt;/p&gt;
&lt;p&gt;The book brings the idea of leaving behind the bloody competition of the &amp;quot;red oceans&amp;quot; and creating new market spaces, the &amp;quot;blue oceans&amp;quot;.&lt;/p&gt;
&lt;p&gt;I found it inspiring because it shows practical cases of companies that innovated by creating markets where none existed before. It&amp;#39;s a vision that makes you think outside the box, not just compete in the same crowded space.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s essential reading for anyone interested in strategy and innovation. One of those books that changes the way you see business.&lt;/p&gt;
</content:encoded></item><item><title>My current development environment</title><link>https://alexbrodt.com/my-current-development-environment</link><guid isPermaLink="true">https://alexbrodt.com/my-current-development-environment</guid><description>Meet the 7 essential tools of my work environment: operating systems, IDEs, version control, communication and more.</description><pubDate>Mon, 27 Dec 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My work environment changed in the last year, consequently my development environment too. Daily I alternate between a MacBook and a Windows desktop, but still use Linux on servers. I spent years on Linux desktop; Slackware, Debian, then Ubuntu, I still like the flexibility, but found in macOS a good balance between Unix and an interface that is plug and play. Windows enters by client requirement and because of Oracle tools and corporate VPNs.&lt;/p&gt;
&lt;p&gt;I mainly program in PHP, Java and PL/SQL on the back-end, with JavaScript, HTML and CSS on the front. On Mac, NetBeans covers Java and PHP with debugging and integration with Git and SVN; TextMate stays for quick edits and Flex Builder still has space when ActionScript appears. On Windows, I usually use Notepad++, JDeveloper and SQL Developer in Oracle world and, when needed, Flex Builder for RIAs.&lt;/p&gt;
&lt;p&gt;I work a lot via SSH so the terminal is always in use. On Mac, keys configured and everything flows. For graphical SFTP I use Fugu. On Windows, PuTTY with Pageant solves connections and WinSCP helps with transfers. For versioning, I continue with SVN on some clients, using TortoiseSVN works well in Explorer and command line on the rest. When I need something more visual on Mac, I turn to Cornerstone.&lt;/p&gt;
&lt;p&gt;In support and workflow organization, I maintain a simple help desk for clients to register requests, use Bugzilla for bug tracking with history, and ClockingIT for deadlines, priorities and times. In communication the constant use here is GTalk and Skype for calls, corporate email we use Exchange and personal I use GAPPS. Browsers I use as needed: Firefox for development, Chrome for performance, Safari for testing in Apple ecosystem and Internet Explorer for compatibility.&lt;/p&gt;
&lt;p&gt;On the physical side, two screens make a real difference, comfortable keyboard and mouse that doesn&amp;#39;t tire the arm. In the background, the rule I most respect is simplicity. Tools are means, not ends. The less distraction and more predictability, the better the result will be.&lt;/p&gt;
</content:encoded></item><item><title>Tutorial, How to Jailbreak iPhone with Firmware 4.1 using Limera1n</title><link>https://alexbrodt.com/tutorial-jailbreak-iphone-firmware-4-1-limera1n</link><guid isPermaLink="true">https://alexbrodt.com/tutorial-jailbreak-iphone-firmware-4-1-limera1n</guid><description>Complete tutorial to jailbreak iPhone 4, 3GS and 3G with firmware 4.1 using Limera1n. Tool developed by Geohot with simple process.</description><pubDate>Wed, 13 Oct 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It was launched a few days ago, I don&amp;#39;t remember if it was October 9th or 10th, the &lt;strong&gt;Limera1n&lt;/strong&gt;, a sneaky little program that jailbreaks iPhones 4/3GS and 3G (plus iPods) with firmware 4.1.&lt;/p&gt;
&lt;p&gt;I tested it on my iPhone 4 and it worked perfectly, without any side effects (-:&lt;/p&gt;
&lt;h2&gt;What is Limera1n&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Limera1n&lt;/strong&gt; is a tool developed by &lt;strong&gt;George Hotz (Geohot)&lt;/strong&gt;, the same guy famous for making the first iPhone unlock in 2007 and breaking PlayStation 3 security.&lt;/p&gt;
&lt;p&gt;The cool thing about Limera1n is that it uses a hardware exploit (bootrom) that Apple can&amp;#39;t fix via software. It&amp;#39;s an untethered jailbreak, meaning you don&amp;#39;t need to reconnect to PC to restart. It works with iPhone 4, 3GS, 3G and iPod Touch, and the process is quite fast, about 5-10 minutes total.&lt;/p&gt;
&lt;h2&gt;Required downloads&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1] Limera1n Download&lt;/strong&gt;
Download &lt;strong&gt;&lt;a href=&quot;http://www.geohot.us/2010/10/download-limera1n-to-jailbreak-ios-41.html&quot;&gt;HERE&lt;/a&gt;&lt;/strong&gt; (For now only available for Windows)&lt;/p&gt;
&lt;p&gt;You&amp;#39;ll need Windows XP/Vista/7, iTunes installed and working, original iPhone USB cable, and about 5-10 minutes of available time.&lt;/p&gt;
&lt;h2&gt;Step by step tutorial&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;ALWAYS backup&lt;/strong&gt; before any modification! Connect iPhone to iTunes, right-click on device, select &amp;quot;Backup&amp;quot; and wait.&lt;/p&gt;
&lt;p&gt;Connect your iPhone to PC and open &lt;strong&gt;limera1n&lt;/strong&gt;, in my case I had to open iTunes too for recognition.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_xODgVRIsPR8/TLDoo-9u5MI/AAAAAAAACLs/_eIw2HQbA-k/s1600/MakeItRan.png&quot; alt=&quot;Limera1n Interface&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Click &amp;quot;make it ra1n&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;DFU Mode (the most important part!)&lt;/h2&gt;
&lt;p&gt;Now you must put iPhone in &lt;strong&gt;DFU mode&lt;/strong&gt;, for this you must hold Power + Home, according to the images below:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;First your iPhone will enter Recovery Mode:&lt;/strong&gt;
&lt;img src=&quot;http://3.bp.blogspot.com/_xODgVRIsPR8/TLDvSYr_SGI/AAAAAAAACL0/snvhRcEqjLI/s1600/DFU1.png&quot; alt=&quot;Recovery Mode&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now yes, you must hold Power + Home:&lt;/strong&gt;
&lt;img src=&quot;http://1.bp.blogspot.com/_xODgVRIsPR8/TLDvTPWzbuI/AAAAAAAACL4/bVgy6NAwJt8/s1600/DFU2.png&quot; alt=&quot;DFU Instructions&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When the image below appears, you must release Power and continue holding Home:&lt;/strong&gt;
&lt;img src=&quot;http://3.bp.blogspot.com/_xODgVRIsPR8/TLDvT-6DhvI/AAAAAAAACL8/VNr8hnddZK0/s1600/DFU3.png&quot; alt=&quot;DFU Release Power&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ready, now your iPhone will be in DFU MODE:&lt;/strong&gt;
&lt;img src=&quot;http://3.bp.blogspot.com/_xODgVRIsPR8/TLDvUULcejI/AAAAAAAACMA/YnWjvn15RoU/s1600/DFU4.png&quot; alt=&quot;DFU Active&quot;&gt;&lt;/p&gt;
&lt;p&gt;Once in DFU mode, Limera1n detects the device and injects the exploit automatically. Don&amp;#39;t disconnect USB cable, don&amp;#39;t interrupt the program, and wait patiently. iPhone may restart several times, this is normal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wait until DONE! appears in the program&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Your iPhone will continue performing jailbreak, when it &lt;strong&gt;TURNS OFF&lt;/strong&gt; it will be ready, just turn it on again and enjoy ;)&lt;/p&gt;
&lt;h2&gt;Cydia Installation&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;After turning iPhone on again, you&amp;#39;ll notice a new icon, limera1n, enter it to download Cydia.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tap the limera1n icon on SpringBoard, wait for loading, tap &amp;quot;Install Cydia&amp;quot;, wait for download and installation, and restart iPhone when prompted.&lt;/p&gt;
&lt;p&gt;Initial loading may take 5+ minutes. When opening for the first time, select &amp;quot;User&amp;quot; (for basic users).&lt;/p&gt;
&lt;h2&gt;If problems occur&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Limera1n doesn&amp;#39;t recognize iPhone&lt;/strong&gt;: Reinstall iTunes, update iPhone drivers through Device Manager, use original Apple cable, test different USB ports, or run as administrator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iPhone freezes on Apple logo&lt;/strong&gt;: Wait more time (first boot is slow), force restart (Power + Home for 10+ seconds), or try DFU again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DFU Mode doesn&amp;#39;t work&lt;/strong&gt;: Use precise timing (may need a stopwatch), may need several attempts, keep cable firm, and make sure iPhone is off before starting.&lt;/p&gt;
&lt;h2&gt;Carrier unlock&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;iPhone 4 doesn&amp;#39;t have unlock available yet&lt;/strong&gt; (October 2010), the baseband is new and there&amp;#39;s no exploit yet. Wait for ultrasn0w updates.&lt;/p&gt;
&lt;p&gt;For iPhone 3GS/3G, ultrasn0w is available on Cydia. Open Cydia, search for &amp;quot;ultrasn0w&amp;quot;, install package, restart iPhone, and wait for carrier recognition.&lt;/p&gt;
&lt;h2&gt;Essential apps&lt;/h2&gt;
&lt;p&gt;With Cydia you can install SBSettings (quick WiFi, 3G, Bluetooth toggles), Activator (custom gestures), WinterBoard (themes), iFile (file manager), OpenSSH (remote terminal), AppSync (install unsigned IPAs).&lt;/p&gt;
&lt;h2&gt;Important tips&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;NEVER update via iTunes&lt;/strong&gt; if you want to keep jailbreak&lt;/li&gt;
&lt;li&gt;If installing OpenSSH, &lt;strong&gt;change default passwords&lt;/strong&gt; (root and mobile: &amp;quot;alpine&amp;quot;)&lt;/li&gt;
&lt;li&gt;Use only trusted repositories on Cydia&lt;/li&gt;
&lt;li&gt;Always backup before modifications&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Limera1n is a fantastic tool that makes jailbreak much simpler. &lt;strong&gt;Geohot&amp;#39;s&lt;/strong&gt; work once again revolutionizes the jailbreak scene.&lt;/p&gt;
&lt;p&gt;Backup, be patient (may need some attempts), and have fun exploring the possibilities!&lt;/p&gt;
&lt;p&gt;[]s&lt;/p&gt;
</content:encoded></item><item><title>TextFree, Free SMS Worldwide on iPhone</title><link>https://alexbrodt.com/textfree-free-sms-worldwide-iphone</link><guid isPermaLink="true">https://alexbrodt.com/textfree-free-sms-worldwide-iphone</guid><description>Discover TextFree, app that allows sending free SMS to any mobile phone worldwide through iPhone. Previously cost $5.99, now it&apos;s free!</description><pubDate>Mon, 27 Sep 2010 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the most useful iPhone apps I discovered recently is &lt;strong&gt;TextFree&lt;/strong&gt;. With it you can send SMS for free to any mobile phone worldwide. Initially it cost $5.99 on iTunes Store and now it&amp;#39;s FREE. =)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://itunes.apple.com/us/app/textfree-unlimited-send-text/id305925151?mt=8&quot;&gt;Click here to download&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>Friendly URLs with Apache mod_rewrite, Complete SEO Guide</title><link>https://alexbrodt.com/friendly-urls-mod-rewrite-apache-seo</link><guid isPermaLink="true">https://alexbrodt.com/friendly-urls-mod-rewrite-apache-seo</guid><description>Complete tutorial on how to implement friendly URLs using Apache mod_rewrite to improve SEO and user experience.</description><pubDate>Tue, 21 Apr 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey &lt;strong&gt;Everyone&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Today a friend asked me about &lt;strong&gt;Friendly URLs&lt;/strong&gt;, so I decided to write this post!&lt;/p&gt;
&lt;p&gt;In &lt;strong&gt;SEO&lt;/strong&gt; techniques, one indisputable thing is &lt;strong&gt;friendly URLs&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;What are Friendly URLs?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Friendly URLs&lt;/strong&gt; are normally simple and short URLs, which become more &lt;strong&gt;readable&lt;/strong&gt; for search bots. Besides making understanding easier for users.&lt;/p&gt;
&lt;h3&gt;Practical Comparison&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Normal URL:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://www.xalexandre.com.br/index.php?menu=news&amp;amp;title=Friendly-Url&amp;amp;id=10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Friendly URL:&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://www.xalexandre.com.br/news/Friendly-Url/10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the example above, the variables &lt;code&gt;menu&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;id&lt;/code&gt; are unnecessary when using Apache &lt;strong&gt;mod_rewrite&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;What is Mod_Rewrite?&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Mod_rewrite&lt;/strong&gt; is a module written for the &lt;strong&gt;Apache&lt;/strong&gt; server, which has the function of &lt;strong&gt;rewriting URLs&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Apache Activation&lt;/h3&gt;
&lt;p&gt;To enable it you must first have access to the Apache server, or ask the Server Administrator to enable it.&lt;/p&gt;
&lt;p&gt;You should edit &lt;strong&gt;&lt;code&gt;httpd.conf&lt;/code&gt;&lt;/strong&gt; adding the following line:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-apache&quot;&gt;LoadModule rewrite_module modules/mod_rewrite.so
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just &lt;strong&gt;restart Apache&lt;/strong&gt; for the module to take action.&lt;/p&gt;
&lt;h2&gt;.htaccess Configuration&lt;/h2&gt;
&lt;p&gt;After Apache is correctly configured, you must create a &lt;strong&gt;&lt;code&gt;.htaccess&lt;/code&gt;&lt;/strong&gt; file to configure our Friendly URLs.&lt;/p&gt;
&lt;p&gt;Create a file called &lt;strong&gt;&lt;code&gt;.htaccess&lt;/code&gt;&lt;/strong&gt; (with the dot in front hidden).&lt;/p&gt;
&lt;h3&gt;Basic .htaccess Content&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-apache&quot;&gt;RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Directive Explanation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RewriteEngine on&lt;/code&gt;&lt;/strong&gt; → Enables the Rewrite module&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RewriteCond %{SCRIPT_FILENAME} !-f&lt;/code&gt;&lt;/strong&gt; → Checks if the typed URL is a file&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RewriteCond %{REQUEST_FILENAME} !-d&lt;/code&gt;&lt;/strong&gt; → Checks if the typed URL is a directory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;RewriteRule ^(.*)$ index.php&lt;/code&gt;&lt;/strong&gt; → Sends everything that&amp;#39;s not a file or directory to index.php&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Testing Configuration&lt;/h2&gt;
&lt;p&gt;Save the file and test accessing a non-existent URL:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;http://www.xalexandre.com.br/testing
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If it &lt;strong&gt;redirects to &lt;code&gt;index.php&lt;/code&gt;&lt;/strong&gt;, Mod_Rewrite is working correctly.&lt;/p&gt;
&lt;h2&gt;PHP Processing&lt;/h2&gt;
&lt;p&gt;Now let&amp;#39;s edit our &lt;strong&gt;&lt;code&gt;index.php&lt;/code&gt;&lt;/strong&gt; to process URLs:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
$url = explode(&amp;quot;/&amp;quot;, $_SERVER[&amp;quot;REQUEST_URI&amp;quot;]);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Practical Example&lt;/h3&gt;
&lt;p&gt;With URL: &lt;code&gt;http://www.xalexandre.com.br/news/Friendly-Url/10&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Our array will be:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
echo $url[0]; // news
echo $url[1]; // Friendly-Url
echo $url[2]; // 10
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Integration with Existing System&lt;/h2&gt;
&lt;p&gt;If you have a system that depends on variables &lt;code&gt;menu&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt; and &lt;code&gt;id&lt;/code&gt;, do the following:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
$menu = $url[0];
$title = $url[1];
$id = $url[2];
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Done!&lt;/strong&gt; Your system will be working the way it was programmed with &lt;strong&gt;Friendly URLs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Friendly URLs bring several advantages: better indexing by search engines, visible keywords in URL, clear hierarchical structure and better ranking in results. For users, they offer memorable and shareable URLs, intuitive navigation and enhanced experience.&lt;/p&gt;
&lt;p&gt;For more advanced configurations, you can use specific rules like:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-apache&quot;&gt;RewriteRule ^([^/]+)/([^/]+)/([0-9]+)/?$ index.php?menu=$1&amp;amp;title=$2&amp;amp;id=$3 [L,QSA]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And for debugging, visualize the URL array:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
print_r($url);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Remember to avoid accents and special characters in URLs, use hyphen instead of underscore, keep everything lowercase and remove unnecessary stopwords.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s all for today &lt;strong&gt;everyone&lt;/strong&gt;! Friendly URLs are &lt;strong&gt;essential&lt;/strong&gt; for a modern and SEO-optimized website. Questions, I&amp;#39;m available.&lt;/p&gt;
</content:encoded></item><item><title>Tip of the Time: DROPBOX! Virtual HD</title><link>https://alexbrodt.com/tip-of-the-time-dropbox-virtual-hd</link><guid isPermaLink="true">https://alexbrodt.com/tip-of-the-time-dropbox-virtual-hd</guid><description>Discover DropBox, service that offers 2GB of free space to sync files between computers. Complete Linux installation tutorial.</description><pubDate>Tue, 24 Mar 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;DropBox is software that aims to sync your files in a fast and easy way.
With versions available for Linux, Mac and Windows, DropBox is easily installed.&lt;/p&gt;
&lt;p&gt;DropBox provides 2GB of free space to each user, which can be expanded by buying a PRO account or referring DropBox to other people.
For each person who registers on DropBox through your referral, automatically you and this person get an additional 250MB of space.&lt;/p&gt;
&lt;p&gt;After installation, the program creates a directory called dropbox, where everything you drag into this directory is automatically synchronized with the DropBox server.&lt;/p&gt;
&lt;p&gt;The service has a Web interface, where it&amp;#39;s possible to download via HTTP the files you sent to the dropbox directory.&lt;/p&gt;
&lt;p&gt;Since synchronization is done automatically, you can use this service to sync files on two computers, easily dragging files to the dropbox directory.&lt;/p&gt;
&lt;p&gt;Create your account: &lt;a href=&quot;https://www.getdropbox.com/referrals/NTc4ODYyNTk&quot;&gt;https://www.getdropbox.com/referrals/NTc4ODYyNTk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Access: &lt;a href=&quot;https://www.getdropbox.com/downloading&quot;&gt;https://www.getdropbox.com/downloading&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Download the version indicated for your Operating System, in my case I downloaded the package for Linux, after installation I just restarted nautilus using the command: &lt;code&gt;killall nautilus&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After restarting nautilus, dropbox is automatically initialized and its icon stays in the systray, next to the clock.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
</content:encoded></item><item><title>Adding RINGTONES to iPhone, Call, SMS Tones</title><link>https://alexbrodt.com/adding-ringtones-iphone-calls-sms</link><guid isPermaLink="true">https://alexbrodt.com/adding-ringtones-iphone-calls-sms</guid><description>Learn to customize iPhone ringtones on Linux. Complete tutorial to convert and install custom tones for calls and SMS.</description><pubDate>Mon, 23 Mar 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey there!&lt;/p&gt;
&lt;p&gt;It seems complicated to customize iPhone ringtones using Linux Operating System, but it&amp;#39;s &lt;strong&gt;much easier&lt;/strong&gt; than you imagine.&lt;/p&gt;
&lt;p&gt;To include &lt;strong&gt;ringtone&lt;/strong&gt; (call tone) in iPhone, first you need to convert the chosen audio to &lt;strong&gt;m4r&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Required programs:&lt;/strong&gt; mplayer, faac&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linux Debian installation:&lt;/strong&gt; &lt;code&gt;apt-get install mplayer faac&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Converting:&lt;/strong&gt;
&lt;strong&gt;1]&lt;/strong&gt; &lt;code&gt;mplayer -ao pcm FILE.mp3 -ao pcm:file=&amp;quot;~temp.wav&amp;quot;&lt;/code&gt;
&lt;strong&gt;2]&lt;/strong&gt; &lt;code&gt;faac ~temp.wav -o FILE.m4r -w&lt;/code&gt;
&lt;strong&gt;3]&lt;/strong&gt; &lt;code&gt;rm -rf ~temp.wav&lt;/code&gt;
&lt;strong&gt;4]&lt;/strong&gt; Access your iPhone via SSH and place the FILE.m4r in &lt;code&gt;/Library/Ringtones&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Done!&lt;/strong&gt; Your file is converted and ready to be used as a ringtone.&lt;/p&gt;
&lt;p&gt;To put an audio file as &lt;strong&gt;New SMS tone&lt;/strong&gt;, you&amp;#39;ll need to modify an existing one.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Required Programs:&lt;/strong&gt; pacpl, sndfile-programs&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Linux Debian Installation:&lt;/strong&gt; &lt;code&gt;apt-get install sndfile-programs&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;For pacpl, download from:
&lt;code&gt;http://ftp.ussg.iu.edu/linux/ubuntu/pool/universe/p/pacpl/pacpl_4.0.3-2ubuntu1_all.deb&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Converting:&lt;/strong&gt;
&lt;strong&gt;1]&lt;/strong&gt; &lt;code&gt;pacl -to caf FILE.mp3&lt;/code&gt;
&lt;strong&gt;2]&lt;/strong&gt; Access your iPhone via SSH and place the FILE.caf in &lt;code&gt;/System/Library/Audio/UISounds&lt;/code&gt;
&lt;strong&gt;3]&lt;/strong&gt; Rename your FILE.caf to sms-receivedNUMBER.caf (Replace NUMBER with existing ringtone according to table below)&lt;/p&gt;
&lt;p&gt;sms-received1.caf -&amp;gt; Tri-tone
sms-received2.caf -&amp;gt; Chime
sms-received3.caf -&amp;gt; Glass
sms-received4.caf -&amp;gt; Horn
sms-received5.caf -&amp;gt; Bell
sms-received6.caf -&amp;gt; Electronic&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Done!&lt;/strong&gt; Your new RingTone is converted and ready to be used as a new SMS tone.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s it for today folks!
[]s&lt;/p&gt;
</content:encoded></item><item><title>Tip, Mount ISO Image on Linux</title><link>https://alexbrodt.com/tip-mount-iso-image-linux</link><guid isPermaLink="true">https://alexbrodt.com/tip-mount-iso-image-linux</guid><description>Useful tip to test ISO images without burning CD. Learn to mount ISO images directly on Linux using the mount command with loop.</description><pubDate>Mon, 16 Mar 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A very useful tip for anyone who wants to test an ISO image, but doesn&amp;#39;t want to burn the CD.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s quite practical for several reasons: doesn&amp;#39;t burn CDs unnecessarily, has instant access to content, doesn&amp;#39;t waste physical media, and is more ecological.&lt;/p&gt;
&lt;p&gt;You can use this to test Linux distributions before installing, verify content of downloaded ISOs, extract specific files from the image, or install software directly from the ISO.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Creating a directory for the content&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir /media/virtual_driver
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This directory will serve as a mount point for the ISO image.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;Mounting the image&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mount -o loop YOUR_IMAGE.iso /media/virtual_driver
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Done! Your image has been mounted in the specified directory.&lt;/p&gt;
&lt;p&gt;The loop device is a pseudo-device that allows treating a file as if it were a block device. Basically, the ISO becomes a &amp;quot;virtual disk&amp;quot;, you access it normally through the file browser, by default it&amp;#39;s read-only, and the Linux kernel already has native support.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;-o loop&lt;/code&gt; option specifies mount options, &lt;code&gt;loop&lt;/code&gt; uses loop device automatically, &lt;code&gt;ro&lt;/code&gt; is read-only (implicit for ISOs), and you can use &lt;code&gt;noexec&lt;/code&gt; to disable execution if you want.&lt;/p&gt;
&lt;p&gt;To mount an Ubuntu ISO:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir /media/ubuntu
mount -o loop ubuntu-20.04.3-desktop-amd64.iso /media/ubuntu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With specific options:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mount -o loop,ro,noexec fedora.iso /media/fedora
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;For temporary use:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo mkdir -p /tmp/iso
sudo mount -o loop file.iso /tmp/iso
# Use the content
sudo umount /tmp/iso
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Through terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ls /media/virtual_driver/
cd /media/virtual_driver/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Through file manager, just open Nautilus (Ubuntu), navigate to &lt;code&gt;/media/virtual_driver/&lt;/code&gt;, and explore normally like any folder.&lt;/p&gt;
&lt;p&gt;To copy files:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp /media/virtual_driver/file.txt ~/Desktop/
cp -r /media/virtual_driver/folder/ ~/Documents/
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;umount /media/virtual_driver
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To check active mounts:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mount | grep loop
df -h | grep loop
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you need to force:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;umount -f /media/virtual_driver  # Force unmount
umount -l /media/virtual_driver  # Lazy unmount
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Error &amp;quot;mount: wrong fs type&amp;quot;: Corrupted ISO or invalid format. Use &lt;code&gt;file file.iso&lt;/code&gt; to check type and &lt;code&gt;md5sum file.iso&lt;/code&gt; to verify integrity.&lt;/p&gt;
&lt;p&gt;Error &amp;quot;Device is busy&amp;quot;: Files in use at mount point. Use &lt;code&gt;lsof /media/virtual_driver&lt;/code&gt; to see processes using, &lt;code&gt;cd /&lt;/code&gt; to exit directory, and &lt;code&gt;umount /media/virtual_driver&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Error &amp;quot;Permission denied&amp;quot;: Lack of privileges. Use &lt;code&gt;sudo&lt;/code&gt; or configure fstab.&lt;/p&gt;
&lt;p&gt;On Ubuntu/GNOME, you can use Nautilus with double-click on ISO, or Disk Image Mounter which is an integrated tool.&lt;/p&gt;
&lt;p&gt;On KDE, Dolphin has native ISO support, and K3b serves to burn and mount.&lt;/p&gt;
&lt;p&gt;Via command line, you can use fuseiso:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt-get install fuseiso
fuseiso file.iso /media/mount_point
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Advantages: immediate access, doesn&amp;#39;t waste CDs, allows multiple mounts, and is sustainable.&lt;/p&gt;
&lt;p&gt;Limitations: read-only (doesn&amp;#39;t modify original ISO), loop devices consume resources, needs root to mount, and unmounts on reboot.&lt;/p&gt;
&lt;p&gt;Mounting ISO images directly on Linux is a very useful skill. This simple technique saves time, resources and offers flexibility in handling disk images.&lt;/p&gt;
&lt;p&gt;The essential commands are:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Mount
mkdir /media/point
mount -o loop file.iso /media/point

# Use
ls /media/point

# Unmount
umount /media/point
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Use this for testing distributions before installation, verifying ISO downloads, extracting specific files, and development with system images.&lt;/p&gt;
&lt;p&gt;This simple tip can save a lot of time and resources in your daily Linux work!&lt;/p&gt;
</content:encoded></item><item><title>Synchronize iPhone on Linux, Music with GtkPod</title><link>https://alexbrodt.com/synchronize-iphone-linux-music-gtkpod</link><guid isPermaLink="true">https://alexbrodt.com/synchronize-iphone-linux-music-gtkpod</guid><description>Learn to synchronize music on iPhone using Linux with GtkPod and ipod-convenience. Solution for users who don&apos;t want to depend on iTunes on Windows.</description><pubDate>Tue, 10 Mar 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey folks!&lt;/p&gt;
&lt;p&gt;Since I bought my iPhone, I&amp;#39;ve always synchronized music/videos through Linux, using &lt;strong&gt;GtkPod&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When &lt;strong&gt;firmware version 2.x&lt;/strong&gt; came out for iPhone, Apple changed the algorithm that updates the iTunes DB, so it stopped synchronizing music, and also caused synchronization conflicts with iTunes.&lt;/p&gt;
&lt;p&gt;Some time ago, I decided to look for a solution to be able to synchronize my music with iPhone again, and I got it; and &lt;strong&gt;it works perfectly&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Required&lt;/strong&gt;: wireless connection.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1] Editing the XML&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;First step is to edit an XML file, so synchronization can be done:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;vim /System/Library/Lockdown/Checkpoint.xml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In the example above I used VIM to edit the XML, you can use the Editor you prefer.
Locate the DBVersion node inside the XML, which value should be &amp;quot;4&amp;quot;, change it to &amp;quot;2&amp;quot;.
Save and close.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2] Installing ipod-convenience&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Second step is to install the ipod-convenience package, which is responsible for mounting the iPhone.
This package is available in the source:
&lt;code&gt;deb http://ppa.launchpad.net/ipod-touch/ubuntu gutsy main&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Installing the package: &lt;code&gt;apt-get install ipod-convenience&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After installation ipod-convenience will ask if you have an iPhone or iPod and the location where you&amp;#39;d like to mount your device, it will also ask for the IP your device uses.&lt;/p&gt;
&lt;p&gt;In my case:
iPhone mounted at: &lt;code&gt;/media/iphone&lt;/code&gt;
IP: &lt;code&gt;192.168.10.11&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3] Mounting the iPhone&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first time you mount the iPhone you should use the data cable to generate the iTunes DB hash of the device.&lt;/p&gt;
&lt;p&gt;Plug the cable into iPhone and computer, then open terminal and run: &lt;code&gt;iphone-mount&lt;/code&gt; (or &lt;code&gt;ipod-mount&lt;/code&gt;, if you have an iPod). It will ask for your SSH password, if you&amp;#39;ve never used SSH on the device look for: BSD Subsystem and OpenSSH, there are millions of tutorials out there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4] Transferring music&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After iPhone is mounted, you can transfer music/listen etc. I particularly prefer to use Amarok for this, but you can also use gtkpod.&lt;/p&gt;
&lt;p&gt;Installing Amarok: &lt;code&gt;apt-get install amarok&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;1] Open Amarok, click Settings and Configure Amarok
2] Choose Media Devices
3] Click Add Device
4] Select Apple iPod Media Device
5] Enter the name (iPhone or iPod)
6] And finally type the path where you mounted iPhone, in my case: &lt;code&gt;/media/iPhone&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On the left side of Amarok at the bottom, we have Devices, select your device and click Connect.&lt;/p&gt;
&lt;p&gt;After loading your music list you can make changes to your playlist! To send a song just drag and drop to Amarok, then click Transfer.&lt;/p&gt;
&lt;p&gt;That&amp;#39;s all folks, questions in comments.&lt;/p&gt;
</content:encoded></item><item><title>Introduction to Java, Programming Basic Concepts</title><link>https://alexbrodt.com/introduction-to-java-programming-basics</link><guid isPermaLink="true">https://alexbrodt.com/introduction-to-java-programming-basics</guid><description>Complete introduction tutorial to Java language: characteristics, basic syntax, variables, operators, control structures and practical examples.</description><pubDate>Fri, 06 Mar 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Java was born at Sun Microsystems in 1995 and quickly caught the attention of programmers at the time. It wasn&amp;#39;t just for being another language, but because it came with an entire execution environment and libraries, designed to be secure, stable and simple to distribute. The slogan &amp;quot;write once, run anywhere&amp;quot; appeared because code is compiled to bytecode and runs on top of the JVM. In other words, you compile once and execute wherever there&amp;#39;s a virtual machine available.&lt;/p&gt;
&lt;p&gt;Another point that always attracted me is object orientation treated as the language foundation. Except for primitive types, everything revolves around classes and objects. To start well, it&amp;#39;s worth understanding four ideas that come back all the time: abstraction to hide details that don&amp;#39;t matter, encapsulation to protect state and expose behavior, inheritance to reuse code when it makes sense and polymorphism to allow different objects to respond to the same message in their own ways.&lt;/p&gt;
&lt;p&gt;The syntax is less intimidating than it seems. Variable declaration follows the type and name pattern, with option to list several of the same type. It goes like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;int i;
float total, price;
byte mask;
double averageValue;
char option1, option2;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Comments can be inline or block. No mystery here.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;// inline comment

/*
block
comment
*/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Basic operators cover what you already expect in daily calculations, comparisons and boolean logic. I leave short tables for quick reference.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operator&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;Addition&lt;/td&gt;
&lt;td&gt;a + b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;,&lt;/td&gt;
&lt;td&gt;Subtraction&lt;/td&gt;
&lt;td&gt;a, b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;*&lt;/td&gt;
&lt;td&gt;Multiplication&lt;/td&gt;
&lt;td&gt;a * b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;Division&lt;/td&gt;
&lt;td&gt;a / b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%&lt;/td&gt;
&lt;td&gt;Integer division remainder&lt;/td&gt;
&lt;td&gt;a % b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;,&lt;/td&gt;
&lt;td&gt;Negative (unary)&lt;/td&gt;
&lt;td&gt;-a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;Positive (unary)&lt;/td&gt;
&lt;td&gt;+a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;++&lt;/td&gt;
&lt;td&gt;Increment&lt;/td&gt;
&lt;td&gt;++a or a++&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--&lt;/td&gt;
&lt;td&gt;Decrement&lt;/td&gt;
&lt;td&gt;--a or a--&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operator&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;==&lt;/td&gt;
&lt;td&gt;Equal&lt;/td&gt;
&lt;td&gt;a == b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;!=&lt;/td&gt;
&lt;td&gt;Different&lt;/td&gt;
&lt;td&gt;a != b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;&lt;/td&gt;
&lt;td&gt;Greater than&lt;/td&gt;
&lt;td&gt;a &amp;gt; b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;=&lt;/td&gt;
&lt;td&gt;Greater or equal&lt;/td&gt;
&lt;td&gt;a &amp;gt;= b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;&lt;/td&gt;
&lt;td&gt;Less than&lt;/td&gt;
&lt;td&gt;a &amp;lt; b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;=&lt;/td&gt;
&lt;td&gt;Less or equal&lt;/td&gt;
&lt;td&gt;a &amp;lt;= b&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operator&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&amp;amp;&amp;amp;&lt;/td&gt;
&lt;td&gt;Logical AND&lt;/td&gt;
&lt;td&gt;a &amp;amp;&amp;amp; b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;||&lt;/td&gt;
&lt;td&gt;Logical OR&lt;/td&gt;
&lt;td&gt;a || b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;!&lt;/td&gt;
&lt;td&gt;Negation&lt;/td&gt;
&lt;td&gt;!a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;For beginners, loops and decisions are what make the program come alive. The for is direct and works well for counts and simple iterations.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class ForExample {
  public static void main(String[] args) {
    for (int j = 0; j &amp;lt; 10; j++) {
      System.out.println(j);
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The if solves cases where you need to decide between paths and can be chained without complication.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class IfExample {
  public static void main(String[] args) {
    int j = 1;
    if (j == 1) {
      for (j = 0; j &amp;lt; 10; j++) {
        System.out.println(j);
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When choice depends on a specific value, switch keeps code clean and easy to read.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public class SwitchExample {
  public static void main(String[] args) {
    if (args.length &amp;gt; 0) {
      switch (args[0].charAt(0)) {
        case &amp;#39;a&amp;#39;:
        case &amp;#39;A&amp;#39;: System.out.println(&amp;quot;Vowel A&amp;quot;); break;
        case &amp;#39;e&amp;#39;:
        case &amp;#39;E&amp;#39;: System.out.println(&amp;quot;Vowel E&amp;quot;); break;
        case &amp;#39;i&amp;#39;:
        case &amp;#39;I&amp;#39;: System.out.println(&amp;quot;Vowel I&amp;quot;); break;
        case &amp;#39;o&amp;#39;:
        case &amp;#39;O&amp;#39;: System.out.println(&amp;quot;Vowel O&amp;quot;); break;
        case &amp;#39;u&amp;#39;:
        case &amp;#39;U&amp;#39;: System.out.println(&amp;quot;Vowel U&amp;quot;); break;
        default: System.out.println(&amp;quot;Not a vowel&amp;quot;);
      }
    } else {
      System.out.println(&amp;quot;No argument provided&amp;quot;);
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Part of Java&amp;#39;s appeal is in managed execution. The language has automatic garbage collection to handle memory, well-defined exception handling and a virtual machine that evolved a lot in performance with JIT and runtime optimizations. Add to this an extensive and cross-platform standard library and you have a set that serves from web applications to enterprise services.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re starting now, my advice is to practice a little every day. Play with examples, change values, create simple classes and make small programs that print something useful. Understanding flow, types and object model early makes everything that comes after easier.&lt;/p&gt;
</content:encoded></item><item><title>Sequential Time Friday 13th 2009, UNIX Timestamp 1234567890</title><link>https://alexbrodt.com/sequential-time-friday-13-2009-unix-timestamp</link><guid isPermaLink="true">https://alexbrodt.com/sequential-time-friday-13-2009-unix-timestamp</guid><description>The first Friday 13th of 2009 had a historic UNIX time: 1234567890 at 21:31:30, creating speculation about possible system problems.</description><pubDate>Sun, 08 Feb 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Friday the 13th are by culture days to be more attentive to everything and take care of possible troubles that may happen. This year 2009, the first Friday the 13th of the year happens in February. As if all the irrational belief we have regarding Friday the 13th wasn&amp;#39;t enough, on this February 13th, 2009 at 21:31:30 Brasília time, we&amp;#39;ll have a fantastic UNIX time!&lt;/p&gt;
&lt;p&gt;It&amp;#39;s about the long-awaited numerical sequence: 1234567890! This number represents the specific UNIX timestamp for that moment, counting the seconds elapsed since January 1st, 1970 at 00:00:00 UTC (known as Unix Epoch).&lt;/p&gt;
&lt;p&gt;The UNIX timestamp is a universal way to represent date and time as an integer. Used extensively in Unix/Linux systems, this format offers second-by-second precision and is a fundamental base for system synchronization around the world.&lt;/p&gt;
&lt;p&gt;The sequence 1234567890 is mathematically special for being a natural and ordered sequence of digits (1-9 followed by 0), something that is easily memorable and represents a single occurrence in this specific order. The next similar sequence will only happen in 2282, when the UNIX timestamp reaches 9876543210, curiously, also on a Friday.&lt;/p&gt;
&lt;p&gt;Crazy crazy crazy....&lt;/p&gt;
</content:encoded></item><item><title>FISL 10, 10th Edition of International Free Software Forum</title><link>https://alexbrodt.com/fisl-10-tenth-edition-international-free-software-forum</link><guid isPermaLink="true">https://alexbrodt.com/fisl-10-tenth-edition-international-free-software-forum</guid><description>Here comes the long-awaited International Free Software Forum, and this year it completes its 10th Edition! Latin America&apos;s largest free software event.</description><pubDate>Sat, 17 Jan 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;FISL completes 10 years! From a regional meeting of free software folks it became Latin America&amp;#39;s largest event in the area.&lt;/p&gt;
&lt;p&gt;The International Free Software Forum brings together developers, entrepreneurs, students and researchers from around the world. There are technical talks, practical workshops, round tables about trends, company fair and lots of networking.&lt;/p&gt;
&lt;p&gt;I keep up with the most current technologies, learn from real cases, make important professional contacts and discover innovative projects. It&amp;#39;s the chance to connect with international developers, meet cool companies and maybe find mentors.&lt;/p&gt;
&lt;p&gt;FISL influenced technology public policies in Brazil, was fundamental for free software adoption in government and helped train thousands of specialized developers.&lt;/p&gt;
&lt;p&gt;Porto Alegre offers perfect infrastructure, hosting facilities and ideal academic environment for learning. The region&amp;#39;s innovation culture combines perfectly with the event&amp;#39;s spirit.&lt;/p&gt;
&lt;p&gt;This edition promises heavyweight international speakers, highlight on emerging technologies, Brazilian cases of worldwide success and celebration of this decade of achievements.&lt;/p&gt;
&lt;p&gt;If you work with technology, FISL is a mandatory stop. More than an event, it&amp;#39;s a celebration of how free software transformed our field.&lt;/p&gt;
&lt;p&gt;More info: &lt;a href=&quot;http://fisl.softwarelivre.org/10/www/&quot;&gt;official site&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>PHP, Object-Oriented Programming [Part 4]</title><link>https://alexbrodt.com/php-object-oriented-programming-part-4</link><guid isPermaLink="true">https://alexbrodt.com/php-object-oriented-programming-part-4</guid><description>Part 4 of the PHP object-oriented series. Learn advanced object manipulation, functions for classes and methods with practical examples.</description><pubDate>Sun, 11 Jan 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Greetings Everyone!&lt;/p&gt;
&lt;p&gt;Continuing from the previous post &lt;a href=&quot;/php-object-oriented-programming-part-3&quot;&gt;PHP, Object-Oriented Programming, Part 3&lt;/a&gt;, from now on we&amp;#39;ll move to object-oriented introduction.&lt;/p&gt;
&lt;h2&gt;2.4] Object Manipulation&lt;/h2&gt;
&lt;h3&gt;get_class_methods&lt;/h3&gt;
&lt;p&gt;Returns an array with the names of methods from a specific class.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    function SetSalary()
    {
    }
    function GetSalary()
    {
    }
    function SetName()
    {
    }
    function GetName()
    {
    }
}
print_r(get_class_methods(&amp;#39;Employee&amp;#39;));

/*
Result:
Array
(
    [0] =&amp;gt; SetSalary
    [1] =&amp;gt; GetSalary
    [2] =&amp;gt; SetName
    [3] =&amp;gt; GetName
)
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;get_class_vars&lt;/h3&gt;
&lt;p&gt;Returns an array with the names of properties and contents of a specific class. Note that these are static values defined when creating the class.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    var $Code;
    var $Name;
    var $Salary = 586;
    var $Department = &amp;#39;Accounting&amp;#39;;

    function SetSalary()
    {
    }
    function GetSalary()
    {
    }
}
print_r(get_class_vars(&amp;#39;Employee&amp;#39;));

/*
Result:
Array
(
    [Code] =&amp;gt;
    [Name] =&amp;gt;
    [Salary] =&amp;gt; 586
    [Department] =&amp;gt; Accounting
)
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;get_object_vars&lt;/h3&gt;
&lt;p&gt;Returns an array with the names and contents of object properties. These are dynamic values that change according to the object&amp;#39;s lifecycle.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    var $Code;
    var $Name;
    var $Salary = 586;
    var $Department = &amp;#39;Accounting&amp;#39;;

    function SetSalary()
    {
    }
    function GetSalary()
    {
    }
}

$jose = new Employee;
$jose-&amp;gt;Code = 44;
$jose-&amp;gt;Name = &amp;#39;José da Silva&amp;#39;;
$jose-&amp;gt;Salary += 100;
$jose-&amp;gt;Department = &amp;#39;Finance&amp;#39;;
print_r(get_object_vars($jose));

/*
Result:
Array
(
    [Code] =&amp;gt; 44
    [Name] =&amp;gt; José da Silva
    [Salary] =&amp;gt; 686
    [Department] =&amp;gt; Finance
)
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;get_class&lt;/h3&gt;
&lt;p&gt;Returns the name of the class to which an object belongs.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    var $Code;
    var $Name;

    function SetSalary()
    {
    }
    function GetSalary()
    {
    }
}

$jose = new Employee;
echo get_class($jose);

/*
Result:
Employee
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;get_parent_class&lt;/h3&gt;
&lt;p&gt;Returns the name of the ancestor class (parent class). If the parameter is an object, returns the name of the ancestor class of the class to which the object belongs. If the parameter is a string, returns the name of the ancestor class of the class passed as parameter.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    var $Code;
    var $Name;
}

class Intern extends Employee
{
    var $Salary;
    var $Scholarship;
}

$jose = new Intern;
echo get_parent_class($jose);
echo &amp;quot;\n&amp;quot;;    // line break
echo get_parent_class(&amp;#39;intern&amp;#39;);

/*
Result:
Employee
Employee
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;is_subclass_of&lt;/h3&gt;
&lt;p&gt;Indicates if a specific object or class is derived from a specific class.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    var $Code;
    var $Name;
}

class Intern extends Employee
{
    var $Salary;
    var $Scholarship;
}

$jose = new Intern;
if (is_subclass_of($jose, &amp;#39;Employee&amp;#39;))
{
    echo &amp;quot;Jose object class is derived from Employee&amp;quot;;
}
echo &amp;quot;\n&amp;quot;;    // line break
if (is_subclass_of(&amp;#39;Intern&amp;#39;, &amp;#39;Employee&amp;#39;))
{
    echo &amp;quot;Intern class is derived from Employee&amp;quot;;
}

/*
Result:
Jose object class is derived from Employee
Intern class is derived from Employee
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;method_exists&lt;/h3&gt;
&lt;p&gt;Checks if a specific object has the described method. We can check for method existence before accidentally executing a non-existent method.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    var $Code;
    var $Name;

    function GetSalary()
    {
    }
    function SetSalary()
    {
    }
}

$jose = new Employee;
if (method_exists($jose, &amp;#39;SetName&amp;#39;))
{
    echo &amp;#39;Jose object has SetName() method&amp;#39;;
}
if (method_exists($jose, &amp;#39;SetSalary&amp;#39;))
{
    echo &amp;#39;Jose object has SetSalary() method&amp;#39;;
}

/*
Result:
Jose object has SetSalary() method
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;call_user_func&lt;/h3&gt;
&lt;p&gt;Executes a function or method of a class passed as parameter. To execute a function, just pass its name as a string, and to execute an object method, just pass the parameter as an array containing the object at position 0 and the method to be executed at position 1. To execute static methods, just pass the class name instead of the object at position 0 of the array.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
// simple call example
function myfunction()
{
    echo &amp;quot;my function! \n&amp;quot;;
}
call_user_func(&amp;#39;myfunction&amp;#39;);

// class declaration
class MyClass
{
    function MyMethod()
    {
        echo &amp;quot;My method! \n&amp;quot;;
    }
}

// static method call
call_user_func(array(&amp;#39;MyClass&amp;#39;, &amp;#39;MyMethod&amp;#39;));

// method call
$obj = new MyClass();
call_user_func(array($obj, &amp;#39;MyMethod&amp;#39;));

/*
Result:
my function!
My method!
My method!
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Advanced Introspection Functions&lt;/h2&gt;
&lt;h3&gt;class_exists&lt;/h3&gt;
&lt;p&gt;Checks if a class has been defined:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
if (class_exists(&amp;#39;Employee&amp;#39;)) {
    echo &amp;quot;Employee class exists&amp;quot;;
} else {
    echo &amp;quot;Employee class doesn&amp;#39;t exist&amp;quot;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;interface_exists&lt;/h3&gt;
&lt;p&gt;Checks if an interface has been defined:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
interface MyInterface
{
    public function requiredMethod();
}

if (interface_exists(&amp;#39;MyInterface&amp;#39;)) {
    echo &amp;quot;MyInterface interface exists&amp;quot;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;property_exists&lt;/h3&gt;
&lt;p&gt;Checks if a property exists in a class or object:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Employee
{
    public $name;
    private $salary;
}

$employee = new Employee();

var_dump(property_exists(&amp;#39;Employee&amp;#39;, &amp;#39;name&amp;#39;));     // true
var_dump(property_exists($employee, &amp;#39;salary&amp;#39;));   // true
var_dump(property_exists(&amp;#39;Employee&amp;#39;, &amp;#39;age&amp;#39;));     // false
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Reflection in PHP&lt;/h2&gt;
&lt;p&gt;Reflection allows examining classes, methods and properties at runtime.&lt;/p&gt;
&lt;h3&gt;ReflectionClass&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class User
{
    public $name;
    private $password;

    public function login($user, $password)
    {
        // login logic
    }

    private function encrypt($text)
    {
        // encryption logic
    }
}

$reflection = new ReflectionClass(&amp;#39;User&amp;#39;);

// Get class information
echo &amp;quot;Class name: &amp;quot; . $reflection-&amp;gt;getName() . &amp;quot;\n&amp;quot;;
echo &amp;quot;Is instantiable: &amp;quot; . ($reflection-&amp;gt;isInstantiable() ? &amp;#39;Yes&amp;#39; : &amp;#39;No&amp;#39;) . &amp;quot;\n&amp;quot;;

// List methods
echo &amp;quot;Methods:\n&amp;quot;;
foreach ($reflection-&amp;gt;getMethods() as $method) {
    echo &amp;quot;- &amp;quot; . $method-&amp;gt;getName() . &amp;quot; (&amp;quot; .
         ($method-&amp;gt;isPublic() ? &amp;#39;public&amp;#39; : &amp;#39;private&amp;#39;) . &amp;quot;)\n&amp;quot;;
}

// List properties
echo &amp;quot;Properties:\n&amp;quot;;
foreach ($reflection-&amp;gt;getProperties() as $property) {
    echo &amp;quot;- &amp;quot; . $property-&amp;gt;getName() . &amp;quot; (&amp;quot; .
         ($property-&amp;gt;isPublic() ? &amp;#39;public&amp;#39; : &amp;#39;private&amp;#39;) . &amp;quot;)\n&amp;quot;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;ReflectionMethod&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
$reflection = new ReflectionClass(&amp;#39;User&amp;#39;);
$method = $reflection-&amp;gt;getMethod(&amp;#39;login&amp;#39;);

echo &amp;quot;Method name: &amp;quot; . $method-&amp;gt;getName() . &amp;quot;\n&amp;quot;;
echo &amp;quot;Number of parameters: &amp;quot; . $method-&amp;gt;getNumberOfParameters() . &amp;quot;\n&amp;quot;;
echo &amp;quot;Required parameters: &amp;quot; . $method-&amp;gt;getNumberOfRequiredParameters() . &amp;quot;\n&amp;quot;;

// List parameters
foreach ($method-&amp;gt;getParameters() as $parameter) {
    echo &amp;quot;Parameter: &amp;quot; . $parameter-&amp;gt;getName();
    if ($parameter-&amp;gt;isOptional()) {
        echo &amp;quot; (optional)&amp;quot;;
    }
    echo &amp;quot;\n&amp;quot;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Practical Applications&lt;/h2&gt;
&lt;h3&gt;Factory Pattern with Reflection&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class UserFactory
{
    public static function create($type, $data = array())
    {
        $class = &amp;#39;User&amp;#39; . ucfirst($type);

        if (!class_exists($class)) {
            throw new Exception(&amp;quot;User type &amp;#39;$type&amp;#39; doesn&amp;#39;t exist&amp;quot;);
        }

        $reflection = new ReflectionClass($class);
        $object = $reflection-&amp;gt;newInstance();

        // Configure properties using reflection
        foreach ($data as $property =&amp;gt; $value) {
            if (property_exists($class, $property)) {
                $object-&amp;gt;$property = $value;
            }
        }

        return $object;
    }
}

class UserAdmin
{
    public $name;
    public $level = &amp;#39;admin&amp;#39;;
}

class UserCommon
{
    public $name;
    public $level = &amp;#39;common&amp;#39;;
}

// Usage
$admin = UserFactory::create(&amp;#39;admin&amp;#39;, [&amp;#39;name&amp;#39; =&amp;gt; &amp;#39;John&amp;#39;]);
$common = UserFactory::create(&amp;#39;common&amp;#39;, [&amp;#39;name&amp;#39; =&amp;gt; &amp;#39;Maria&amp;#39;]);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Automatic Validator&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class Validator
{
    public static function validate($object)
    {
        $reflection = new ReflectionClass($object);
        $errors = array();

        foreach ($reflection-&amp;gt;getProperties() as $property) {
            $name = $property-&amp;gt;getName();
            $value = $property-&amp;gt;getValue($object);

            // Validation based on property name
            if (strpos($name, &amp;#39;email&amp;#39;) !== false) {
                if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
                    $errors[] = &amp;quot;Invalid email: $name&amp;quot;;
                }
            }

            if (strpos($name, &amp;#39;required&amp;#39;) !== false &amp;amp;&amp;amp; empty($value)) {
                $errors[] = &amp;quot;Required field: $name&amp;quot;;
            }
        }

        return $errors;
    }
}

class ContactForm
{
    public $emailRequired;
    public $nameRequired;
    public $phone;
}

$form = new ContactForm();
$form-&amp;gt;emailRequired = &amp;#39;invalid-email&amp;#39;;
$form-&amp;gt;nameRequired = &amp;#39;&amp;#39;;
$form-&amp;gt;phone = &amp;#39;1234567890&amp;#39;;

$errors = Validator::validate($form);
foreach ($errors as $error) {
    echo $error . &amp;quot;\n&amp;quot;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Dynamic Plugin System&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
class PluginManager
{
    private $plugins = array();

    public function loadPlugin($className)
    {
        if (!class_exists($className)) {
            return false;
        }

        $reflection = new ReflectionClass($className);

        // Check if implements plugin interface
        if (!$reflection-&amp;gt;implementsInterface(&amp;#39;IPlugin&amp;#39;)) {
            throw new Exception(&amp;quot;$className must implement IPlugin&amp;quot;);
        }

        $plugin = $reflection-&amp;gt;newInstance();
        $this-&amp;gt;plugins[] = $plugin;

        return true;
    }

    public function executePlugins($event, $data = array())
    {
        foreach ($this-&amp;gt;plugins as $plugin) {
            $reflection = new ReflectionClass($plugin);

            if ($reflection-&amp;gt;hasMethod($event)) {
                $method = $reflection-&amp;gt;getMethod($event);
                $method-&amp;gt;invoke($plugin, $data);
            }
        }
    }
}

interface IPlugin
{
    public function onInit();
}

class LogPlugin implements IPlugin
{
    public function onInit()
    {
        echo &amp;quot;Log plugin started\n&amp;quot;;
    }

    public function onUserLogin($data)
    {
        echo &amp;quot;User logged in: &amp;quot; . $data[&amp;#39;name&amp;#39;] . &amp;quot;\n&amp;quot;;
    }
}

// Usage
$manager = new PluginManager();
$manager-&amp;gt;loadPlugin(&amp;#39;LogPlugin&amp;#39;);
$manager-&amp;gt;executePlugins(&amp;#39;onInit&amp;#39;);
$manager-&amp;gt;executePlugins(&amp;#39;onUserLogin&amp;#39;, [&amp;#39;name&amp;#39; =&amp;gt; &amp;#39;John&amp;#39;]);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Best Practices&lt;/h2&gt;
&lt;h3&gt;1. Use Reflection Moderately&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: Reflection is slower than direct access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Complexity&lt;/strong&gt;: Can make code hard to understand&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cache&lt;/strong&gt;: Cache reflection results when possible&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. Input Validation&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
function callMethod($object, $method, $parameters = array())
{
    if (!is_object($object)) {
        throw new InvalidArgumentException(&amp;#39;First parameter must be object&amp;#39;);
    }

    if (!method_exists($object, $method)) {
        throw new BadMethodCallException(&amp;quot;Method &amp;#39;$method&amp;#39; doesn&amp;#39;t exist&amp;quot;);
    }

    $reflection = new ReflectionMethod($object, $method);

    if (!$reflection-&amp;gt;isPublic()) {
        throw new BadMethodCallException(&amp;quot;Method &amp;#39;$method&amp;#39; is not public&amp;quot;);
    }

    return $reflection-&amp;gt;invokeArgs($object, $parameters);
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. Clear Documentation&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
/**
 * Utility class for object introspection
 *
 * Provides methods to examine object properties and methods
 * at runtime using PHP reflection
 */
class Introspector
{
    /**
     * Lists all public methods of an object
     *
     * @param object $object The object to be examined
     * @return array List of public method names
     * @throws InvalidArgumentException if parameter is not an object
     */
    public static function listPublicMethods($object)
    {
        if (!is_object($object)) {
            throw new InvalidArgumentException(&amp;#39;Parameter must be an object&amp;#39;);
        }

        $reflection = new ReflectionClass($object);
        $publicMethods = array();

        foreach ($reflection-&amp;gt;getMethods(ReflectionMethod::IS_PUBLIC) as $method) {
            $publicMethods[] = $method-&amp;gt;getName();
        }

        return $publicMethods;
    }
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;That&amp;#39;s all for today folks!&lt;/p&gt;
&lt;p&gt;Object manipulation functions in PHP are powerful tools that allow:&lt;/p&gt;
&lt;h3&gt;Resources Learned&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;get_class_methods&lt;/strong&gt;: List class methods&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;get_class_vars&lt;/strong&gt;: Get static properties&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;get_object_vars&lt;/strong&gt;: Get dynamic properties&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;method_exists&lt;/strong&gt;: Check method existence&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;call_user_func&lt;/strong&gt;: Execute methods dynamically&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reflection&lt;/strong&gt;: Advanced object introspection&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Practical Applications&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Factory Pattern&lt;/strong&gt;: Dynamic object creation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Automatic validation&lt;/strong&gt;: Based on conventions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Plugin systems&lt;/strong&gt;: Dynamic loading&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Flexible APIs&lt;/strong&gt;: Configurable methods&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Next Steps&lt;/h3&gt;
&lt;p&gt;In the next part we&amp;#39;ll cover more advanced object-oriented concepts, including inheritance, polymorphism and interfaces.&lt;/p&gt;
&lt;p&gt;The ability to examine and manipulate objects dynamically is one of the most powerful features of modern PHP!&lt;/p&gt;
&lt;p&gt;[]&amp;#39;s&lt;/p&gt;
</content:encoded></item><item><title>DoneDrinkn Game, Controlling the Drunk with Accelerometer</title><link>https://alexbrodt.com/donedrinkn-game-drunk-walking-accelerometer</link><guid isPermaLink="true">https://alexbrodt.com/donedrinkn-game-drunk-walking-accelerometer</guid><description>The famous flash game of the drunk person you control with mouse is now available for iPhone, using the device&apos;s accelerometer. Fun guaranteed!</description><pubDate>Thu, 08 Jan 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Those who lived through the Flash games era probably remember that classic where the mission was to make a drunk guy walk in a straight line. When I first tested my iPhone&amp;#39;s accelerometer, that&amp;#39;s what I thought of. The good news is that this idea got a version for the phone: DoneDrinkn.&lt;/p&gt;
&lt;p&gt;On iPhone the charm is in the sensors. Instead of the mouse, you tilt the device to keep the character standing. The physics is simple and sufficient to create the feeling of imbalance; each step seems like a small victory. It&amp;#39;s the type of game you open for a few minutes, laugh at the stumbles and try to beat your own record.&lt;/p&gt;
&lt;p&gt;The gameplay works better with short movements. Hold the iPhone horizontally, keep the character near the center and avoid sudden tilts that make you overcompensate. With sound on, the effects help get into the mood and stay alert to moments when things go wrong.&lt;/p&gt;
&lt;p&gt;Another positive point is the price. It used to cost a few dollars on the App Store, but today it&amp;#39;s available for free. Worth downloading, trying and deciding if it stays. If it&amp;#39;s not for you, just remove it and move on.&lt;/p&gt;
&lt;p&gt;As an adaptation, DoneDrinkn succeeds in translating a silly and fun concept to mobile use. The accelerometer gives a charm that the mouse didn&amp;#39;t have and the experience fits short intervals of the day. Light fun, with moderation in theme, of course.&lt;/p&gt;
</content:encoded></item><item><title>PHP, Object-Oriented Programming [Part 3]</title><link>https://alexbrodt.com/php-object-oriented-programming-part-3</link><guid isPermaLink="true">https://alexbrodt.com/php-object-oriented-programming-part-3</guid><description>Continuation of the PHP Object-Oriented series. Learn essential functions to manipulate strings: strtoupper, strtolower, substr, explode, implode and more.</description><pubDate>Wed, 07 Jan 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Greetings!&lt;/p&gt;
&lt;p&gt;Continuing from the previous post &lt;a href=&quot;http://www.xalexandre.com.br/Publicacoes/PHP-Programando-com-Orientacao-a-Objetos-Parte-2/Programacao/PHP/9310/&quot;&gt;PHP, Object-Oriented Programming, Part 2&lt;/a&gt;, I&amp;#39;ll follow the schedule.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2.3]&lt;/strong&gt; String Manipulation Functions&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;strtoupper&lt;/strong&gt;, The &amp;quot;strtoupper&amp;quot; function serves to transform all characters of a string to uppercase.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
	echo strtoupper(&amp;#39;today I had an avocado smoothie&amp;#39;);
	// Result: TODAY I HAD AN AVOCADO SMOOTHIE
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;strtolower&lt;/strong&gt;, The &amp;quot;strtolower&amp;quot; function does exactly the opposite of &amp;quot;strtoupper&amp;quot;, that is, transforms string characters to lowercase.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
	echo strtolower(&amp;#39;TODAY I HAD AN AVOCADO SMOOTHIE&amp;#39;);
	// Result: today i had an avocado smoothie
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;substr&lt;/strong&gt;, The &amp;quot;substr&amp;quot; function returns a certain amount of characters from a string.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
	$rest = substr(&amp;quot;Avocado&amp;quot;, 1);
	echo $rest . &amp;quot;\n&amp;quot;;
	$rest = substr(&amp;quot;Avocado&amp;quot;, 1, 3);
	echo $rest . &amp;quot;\n&amp;quot;;
	$rest = substr(&amp;quot;Avocado&amp;quot;, 0, -1);
	echo $rest . &amp;quot;\n&amp;quot;;
	$rest = substr(&amp;quot;Avocado&amp;quot;, -2);
	echo $rest . &amp;quot;\n&amp;quot;;
	/*
	Result:
	vocado
	voc
	Avocad
	do
	*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;str_repeat&lt;/strong&gt;, The &amp;quot;str_repeat&amp;quot; function repeats the string a certain number of times.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
	$txt = &amp;quot;.oO0Oo.&amp;quot;;
	print str_repeat($txt, 2);
	// Result: .oO0Oo..oO0Oo.
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;strlen&lt;/strong&gt;, The &amp;quot;strlen&amp;quot; function returns the number of characters in a string.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
	$txt = &amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;;
	print &amp;#39;The length is: &amp;#39; . strlen($txt) . &amp;quot;\n&amp;quot;;
	// Result: The length is: 43
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;str_replace&lt;/strong&gt;, The &amp;quot;str_replace&amp;quot; function replaces one string with another.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
$txt = &amp;quot;My car is a Civic&amp;quot;;
print str_replace(&amp;#39;Civic&amp;#39;, &amp;#39;Accord&amp;#39;, $txt);
// Result: My car is an Accord
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;explode&lt;/strong&gt;, The explode function transforms a string into an Array, separating elements through a separator.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
$data = &amp;quot;08/01/2009&amp;quot;;
var_dump(explode(&amp;quot;/&amp;quot;, &amp;quot;$data&amp;quot;));
/*
Result:
array(3) {
   [0]=&amp;gt;
   string(2) &amp;quot;08&amp;quot;
   [1]=&amp;gt;
   string(2) &amp;quot;01&amp;quot;
   [2]=&amp;gt;
   string(4) &amp;quot;2009&amp;quot;
}
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;implode&lt;/strong&gt;, The &amp;quot;implode&amp;quot; function transforms an array into string, separating elements through a separator.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
$pattern = array(&amp;#39;Maria&amp;#39;, &amp;#39;Paulo&amp;#39;, &amp;#39;José&amp;#39;);
$result = implode(&amp;#39; + &amp;#39;, $pattern);
var_dump($result);
// Result: string(20) &amp;quot;Maria + Paulo + José&amp;quot;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This was the last post of the PHP introduction, from now on the continuity of this Post will be the Object-Oriented approach.&lt;/p&gt;
&lt;p&gt;We&amp;#39;ll be back...
[]&amp;#39;s&lt;/p&gt;
</content:encoded></item><item><title>Auto Complete Tutorial: JavaScript, PHP and MySQL</title><link>https://alexbrodt.com/autocomplete-tutorial-javascript-php-mysql</link><guid isPermaLink="true">https://alexbrodt.com/autocomplete-tutorial-javascript-php-mysql</guid><description>Learn to create an auto complete system using jQuery, PHP and MySQL. Step-by-step tutorial with ready code to implement in your projects.</description><pubDate>Sat, 03 Jan 2009 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hello everyone!&lt;/p&gt;
&lt;p&gt;Today&amp;#39;s post is about Auto Complete.&lt;/p&gt;
&lt;p&gt;I use the jQuery library a lot for JavaScript. So in this small tutorial we&amp;#39;ll use JavaScript (jQuery), PHP, MySQL and CSS.&lt;/p&gt;
&lt;p&gt;When using Auto Complete in a Search field, it becomes much more practical for the user to find what they want, because when typing a word, or a piece of it, we return content in which the typed word is part of.&lt;/p&gt;
&lt;p&gt;Starting with JavaScript:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;function showSuggestions(search) {
	if(search.length == 0) {
		// Hide suggestions
		$(&amp;#39;#suggestions&amp;#39;).hide();
	} else {
		$.post(&amp;quot;http://www.xalexandre.com.br/autoSearch/ajaxSearch.php&amp;quot;, {queryString: &amp;quot;&amp;quot;+search+&amp;quot;&amp;quot;}, function(data){
			if(data.length &amp;gt;0) {
				$(&amp;#39;#suggestions&amp;#39;).show();
				$(&amp;#39;#suggestionsList&amp;#39;).html(data);
			}
		});
	}
}

function sendSuggestions(thisValue) {
	$(&amp;#39;#search&amp;#39;).val(thisValue);
	setTimeout(&amp;quot;$(&amp;#39;#suggestions&amp;#39;).hide();&amp;quot;, 200);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Well, summarizing the js above works as follows: in the &lt;strong&gt;showSuggestions&lt;/strong&gt; function, the first if tests if the characters of the search variable equals zero, if so it hides the &lt;strong&gt;suggestions&lt;/strong&gt; div. Logically, because if the user didn&amp;#39;t type anything, we don&amp;#39;t need to show the suggestions box.&lt;/p&gt;
&lt;p&gt;If this if is false, we&amp;#39;ll enter the else, then we call the ajaxSearch.php script, passing the search content to queryString, then another test is made, related to ajaxSearch, to know if the result of the returned query is greater than zero, if so it will show the results in a list.&lt;/p&gt;
&lt;p&gt;In the &lt;strong&gt;sendSuggestions&lt;/strong&gt; function, we just send the returned value from the list to the search field.&lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s move to PHP, the file has already been mentioned: &lt;strong&gt;ajaxSearch.php&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
	// Check if a string was sent in the search.
	if(isset($_POST[&amp;#39;queryString&amp;#39;])) {

		/*	You most likely have a file with the
			data that makes the connection to the database. If you have
			just call the file here inside, for example:
			require(&amp;quot;connection.php&amp;quot;);

			Below is an example for connection.
		*/
		$host = &amp;quot;localhost&amp;quot;;
		$usr = &amp;quot;USERNAME&amp;quot;;
		$pwd = &amp;quot;PASSWORD&amp;quot;;
		$bd = &amp;quot;DATABASE&amp;quot;;

		//DB Connection
		mysql_connect(&amp;quot;$host&amp;quot;,&amp;quot;$usr&amp;quot;,&amp;quot;$pwd&amp;quot;) or die
		(&amp;quot;ERROR: Could not connect to DB.&amp;quot;);
		mysql_select_db(&amp;quot;$bd&amp;quot;) or die
		(&amp;quot;ERROR: Could not open DB.&amp;quot;);

		$queryString = ($_POST[&amp;#39;queryString&amp;#39;]);

		// Check if the number of characters is greater than zero.
		if(strlen($queryString) &amp;gt;0) {

			/*	If the number of characters is greater than zero,
				we&amp;#39;ll enter here, where the SQL is executed.
			*/
			$query = mysql_query(&amp;quot;select FIELD from TABLE
			where FIELD like &amp;#39;%$queryString%&amp;#39; limit 20&amp;quot;);
			/*	Well, regarding the SQL above, change the FIELD and
				TABLE for your case.
				Note that $queryString is passed with percentage
				(%), so if the user types ava we&amp;#39;ll return
				&amp;quot;avocado, avatar&amp;quot;, if it&amp;#39;s in our table of course.
			*/
			if($query) {
				// If the query is executed correctly, we&amp;#39;ll enter
				this line below, where a repetition loop is made,
				assigning values to the $result variable.
				while ($result = mysql_fetch_array($query)) {
					/*	Below we&amp;#39;ll show the result in a list,
						again change where it says FIELD to the field
						of your table.
					*/
					echo &amp;#39;&amp;lt;li onClick=&amp;quot;receiveSuggestions(\&amp;#39;&amp;#39;.htmlentities($result[FIELD]).&amp;#39;\&amp;#39;);&amp;quot;&amp;gt;&amp;#39;.htmlentities($result[FIELD]).&amp;#39;&amp;lt;/li&amp;gt;&amp;#39;;
					/*
						In onClick a function: receiveSuggestions, which
						I mentioned earlier that serves to assign
						the result to the text field.
					*/
				}
			} else {
				echo &amp;#39;ERROR: A problem occurred with the query.&amp;#39;;
			}
		}
	} else {
		echo &amp;#39;Direct access to this script is not allowed.&amp;#39;;
	}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Well, the code above is all commented, but if any doubt arises leave a comment.&lt;/p&gt;
&lt;p&gt;Moving to CSS:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;&amp;lt;style&amp;gt;
	.suggestions {
		position: relative;
		left: 30px;
		margin: 10px 0px 0px 0px;
		width: 200px;
		background-color: #212427;
		-moz-border-radius: 7px;
		-webkit-border-radius: 7px;
		border: 2px solid #000000;
		color: #FFFFFF;
	}

	.suggestionsList {
		margin: 0px;
		padding: 0px;
	}

	.suggestionsList li {

		margin: 0px 0px 3px 0px;
		padding: 3px;
		cursor: pointer;
	}

	.suggestionsList li:hover {
		background-color: #659CD8;
	}
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And finally the HTML:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;form id=&amp;quot;searchForm&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;
	&amp;lt;input name=&amp;quot;search&amp;quot; id=&amp;quot;search&amp;quot; size=&amp;quot;25&amp;quot; type=&amp;quot;text&amp;quot; onkeyup=&amp;quot;showSuggestions(this.value);&amp;quot; onblur=&amp;quot;sendSuggestions();&amp;quot; /&amp;gt;
	&amp;lt;div class=&amp;quot;suggestions&amp;quot; id=&amp;quot;suggestions&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;
		&amp;lt;img src=&amp;quot;http://www.xalexandre.com.br/autoSearch/upArrow.png&amp;quot; style=&amp;quot;position: relative; top: -12px; left: 30px;&amp;quot; alt=&amp;quot;up arrow&amp;quot; /&amp;gt;
		&amp;lt;div class=&amp;quot;suggestionsList&amp;quot; id=&amp;quot;suggestionsList&amp;quot;&amp;gt;
			&amp;amp;nbsp;
		&amp;lt;/div&amp;gt;
	&amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;#39;s all folks! An example can be found here on the site, in the upper right corner. Questions, criticism or suggestions? Leave a comment.&lt;/p&gt;
&lt;p&gt;[]&amp;#39;s&lt;/p&gt;
</content:encoded></item><item><title>PHP, Object-Oriented Programming [Part 1]</title><link>https://alexbrodt.com/php-object-oriented-programming-part-1</link><guid isPermaLink="true">https://alexbrodt.com/php-object-oriented-programming-part-1</guid><description>Complete series on Object-Oriented Programming in PHP: basic concepts, variables, constants, operators and control structures.</description><pubDate>Tue, 23 Dec 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Greetings!&lt;/p&gt;
&lt;p&gt;It&amp;#39;s with great enthusiasm that I start a series of posts about Object-Oriented Programming with PHP.&lt;/p&gt;
&lt;p&gt;Recently I received from my wonderful girlfriend an excellent book: PHP, Programming with Object Orientation, by Pablo Dall&amp;#39;Oglio.&lt;/p&gt;
&lt;p&gt;The book is so fantastic that I devoured it in just 15 days. No, it&amp;#39;s not a small book! It has almost 600 pages in a very didactic way, always containing a practical example for each explanation.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll make a series of posts, featuring the book topics that I find most relevant. Of course I won&amp;#39;t make exact explanations like the book, but rather a broader approach.&lt;/p&gt;
&lt;p&gt;I recommend the book to all programmers, both beginners and more experienced. Without a doubt it&amp;#39;s a reading that&amp;#39;s very worthwhile.&lt;/p&gt;
&lt;h6&gt;1. What is PHP?&lt;/h6&gt;
&lt;p&gt;According to Wikipedia: The language emerged around 1994, as a package of CGI programs created by Rasmus Lerdorf, with the name Personal Home Page Tools, to replace a set of Perl scripts he used in developing his personal page.&lt;/p&gt;
&lt;h6&gt;PHP Evolution&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;1997: PHP/FI with Forms Interpreter&lt;/li&gt;
&lt;li&gt;PHP 3: First object orientation resource&lt;/li&gt;
&lt;li&gt;PHP 4: More power to the machine, more OOP resources&lt;/li&gt;
&lt;li&gt;PHP 5: Works with handlers, solves object copy problems&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;1.1 File Extensions&lt;/h6&gt;
&lt;p&gt;PHP files generally follow these patterns:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.php&lt;/code&gt;, File containing a PHP program&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.class.php&lt;/code&gt;, File containing a class in PHP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.inc.php&lt;/code&gt;, Files with configuration parameters&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;2. Code Delimiters&lt;/h6&gt;
&lt;p&gt;To write PHP code, we start with delimiters:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
CODE
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OR&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?php
CODE
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At the end of each command it&amp;#39;s finished with a semicolon &lt;code&gt;;&lt;/code&gt;.&lt;/p&gt;
&lt;h6&gt;3. Comments&lt;/h6&gt;
&lt;p&gt;Single Line Comments&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
// comment
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
# comment
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Block Comment&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
/* comments
   comments ..
*/
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;4. Output Commands&lt;/h6&gt;
&lt;p&gt;echo&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
// echo prints one or more variables
echo &amp;#39;Hello world&amp;#39;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;print&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
// print prints a string
print &amp;#39;Hello world&amp;#39;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;var_dump&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
// var_dump, widely used to debug an array
var_dump($array);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;print_r&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
/* print_r prints variables in an
explanatory way, but in a more readable manner
*/
print_r($array);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;5. Variables&lt;/h6&gt;
&lt;p&gt;Variables are identifiers with volatile and mutable values, which only exist during program execution. A variable is always preceded by the &lt;code&gt;$&lt;/code&gt; (dollar sign) character.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
$fruit = &amp;quot;Avocado&amp;quot;;
echo $fruit; //Result: Avocado
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;Best Practices for Naming&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;Use descriptive names: &lt;code&gt;$studentName&lt;/code&gt; instead of &lt;code&gt;$n&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Don&amp;#39;t start with numbers or special characters&lt;/li&gt;
&lt;li&gt;Use camelCase: &lt;code&gt;$productName&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;PHP is case-sensitive: &lt;code&gt;Avocado ≠ avocado&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;5.1 Variable Types&lt;/h6&gt;
&lt;p&gt;Boolean Type&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
// Variable receives true value
$showFruit = TRUE;
if($showFruit){
    echo &amp;#39;Avocado&amp;#39;;
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Numeric Type&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
// decimal number
$a = 1234;
// a negative number
$a = -123;
// octal number (equivalent to 83 in decimal)
$a = 0123;
// hexadecimal number (equivalent to 26 in decimal)
$a = 0x1A;
// floating point
$a = 1.234;
// scientific notation
$a = 4e23;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;String Type&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
$fruit = &amp;#39;Avocado&amp;#39;;
$fruit = &amp;quot;Avocado&amp;quot;;
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Array Type&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
$fruits = array(&amp;#39;Avocado&amp;#39;, &amp;#39;Pineapple&amp;#39;, &amp;#39;Plum&amp;#39;);
echo $fruits[0]; // Result: Avocado
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Object Type&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
class Computer{
    var $cpu;
    function turnOn(){
        echo &amp;quot;Turning on computer at {$this-&amp;gt;cpu}...&amp;quot;;
    }
}
$obj = new Computer;
$obj-&amp;gt;cpu = &amp;quot;500Mhz&amp;quot;;
$obj-&amp;gt;turnOn(); // Result: Turning on computer at 500Mhz
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h6&gt;6. Constants&lt;/h6&gt;
&lt;p&gt;A constant is a value that doesn&amp;#39;t change during program execution. Usually uppercase names are used.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-php&quot;&gt;&amp;lt;?
define(&amp;quot;MAX_CLIENTS&amp;quot;, 100);
echo MAX_CLIENTS; // Result: 100
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&amp;#39;s all for today folks.&lt;/p&gt;
&lt;p&gt;We&amp;#39;ll be back...&lt;/p&gt;
</content:encoded></item><item><title>Killer Pool, The Best Billiards Game for iPhone</title><link>https://alexbrodt.com/killer-pool-best-billiards-game-iphone</link><guid isPermaLink="true">https://alexbrodt.com/killer-pool-best-billiards-game-iphone</guid><description>Killer Pool is undoubtedly the best billiards game developed for iPhone so far, with excellent 3D graphics and impressive gameplay.</description><pubDate>Fri, 19 Dec 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I spent a good time testing billiards games on iPhone and always ended up running into the same problem: weird physics or controls that hinder more than help. Killer Pool escapes this. It gets the basics right. The table has a nice look, balls move as we expect and the shot responds precisely to touch.&lt;/p&gt;
&lt;p&gt;The camera helps align the play without fighting the interface and the aim gives good feedback on direction and force. After a few minutes you can forget the control and think about the game, which is the best compliment an app like this can receive. To vary the pace, you can choose between 8‑Ball, 9‑Ball, Straight Pool and a training mode that helps when the idea is just to relax and practice.&lt;/p&gt;
&lt;p&gt;What won me over the most was consistency. There are no exaggerated effects or tricks to seem more than it is. It&amp;#39;s an honest billiards simulator on mobile, with convincing physics and stable performance. If you enjoy the sport and want something to play during short breaks, this is the title I would install first.&lt;/p&gt;
</content:encoded></item><item><title>Gmail Labs: features that make a difference in productivity</title><link>https://alexbrodt.com/gmail-labs-features-that-make-difference-productivity</link><guid isPermaLink="true">https://alexbrodt.com/gmail-labs-features-that-make-difference-productivity</guid><description>Discover the best Gmail Labs features that really make a difference: custom shortcuts, superstars, colored labels and more.</description><pubDate>Fri, 05 Dec 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Gmail Labs offers experimental features that can transform your email experience. To access, change language to English in settings and look for the Labs tab. Here are the features that are really worth it.&lt;/p&gt;
&lt;h6&gt;Custom keyboard shortcuts&lt;/h6&gt;
&lt;p&gt;The most useful Labs feature. Allows navigating Gmail without taking hands off keyboard. Main shortcuts are &lt;strong&gt;c&lt;/strong&gt; to compose, &lt;strong&gt;r&lt;/strong&gt; to reply, &lt;strong&gt;gi&lt;/strong&gt; for inbox, &lt;strong&gt;s&lt;/strong&gt; to star, and &lt;strong&gt;#&lt;/strong&gt; to delete. Once you get the hang of it, managing emails becomes much faster.&lt;/p&gt;
&lt;h6&gt;Superstars and colored labels&lt;/h6&gt;
&lt;p&gt;Expands the one-star system to multiple colored icons. I use red for urgent, yellow for important, green for completed. Combined with colored labels, allows organizing emails visually very efficiently.&lt;/p&gt;
&lt;h6&gt;Quote selected text&lt;/h6&gt;
&lt;p&gt;Allows quoting only part of an email when replying. Select the specific text you want to respond to and click Reply. Very useful for long conversations where you only need to comment on a specific point.&lt;/p&gt;
&lt;h6&gt;Mail Goggles&lt;/h6&gt;
&lt;p&gt;The funniest feature, but surprisingly useful. When activated during night hours (configurable), forces you to solve simple math problems before sending emails. Prevents impulsive or alcohol-influenced sends that you might regret later.&lt;/p&gt;
&lt;h6&gt;Hide unread count&lt;/h6&gt;
&lt;p&gt;Removes unread email counter. Reduces anxiety and helps focus on what really matters instead of being obsessed with &amp;quot;inbox zero&amp;quot;.&lt;/p&gt;
&lt;h6&gt;Calendar and Docs integration&lt;/h6&gt;
&lt;p&gt;Adds side panels showing your Google Calendar appointments and recent Google Docs documents. Convenient to have everything in one place.&lt;/p&gt;
&lt;p&gt;To enable, go to Settings &amp;gt; Labs, activate desired features and save. I recommend starting with keyboard shortcuts and superstars, which make immediate difference in productivity. Others you can experiment with as needed.&lt;/p&gt;
</content:encoded></item><item><title>Mocha VNC, Control Your Computer from iPhone</title><link>https://alexbrodt.com/mocha-vnc-control-computer-from-iphone</link><guid isPermaLink="true">https://alexbrodt.com/mocha-vnc-control-computer-from-iphone</guid><description>Complete Mocha VNC tutorial for iPhone: how to remotely control your computer using WiFi, GPRS, EDGE or 3G connection.</description><pubDate>Sun, 30 Nov 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The idea behind VNC is simple: see the computer screen remotely and control it as if you were there. On iPhone, Mocha VNC does this job without complication. Over Wi‑Fi the response is good; with 3G you can get by when the goal is to check something quickly.&lt;/p&gt;
&lt;p&gt;Configuration starts on the computer. If it&amp;#39;s Linux, you can install VNC server through the package manager. In terminal, the command is straightforward:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;apt-get install vnc4server
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On Windows, the official installer resolves in a few clicks: &lt;a href=&quot;http://www.xalexandre.com.br/upload/programas/vnc-4_1_2-x86_win32.exe&quot;&gt;Download VNC Server for Windows&lt;/a&gt;. After installation, set a password in authentication preferences and confirm.&lt;/p&gt;
&lt;p&gt;On iPhone, open Mocha VNC, tap &amp;quot;Connect&amp;quot; and fill in the computer&amp;#39;s IP address, port (5900 by default) and password. If you want to make future connections easier, save the data. From there, touch gestures replace the mouse and virtual keyboard covers the basics. Worth remembering that experience depends a lot on network: Wi‑Fi at home usually works better; 3G holds up for quick checks.&lt;/p&gt;
&lt;p&gt;For those who need to give support to family members, monitor a download or trigger a process without leaving the couch, Mocha VNC resolves with what matters. It&amp;#39;s old technology known from the corporate world, now in your pocket.&lt;/p&gt;
</content:encoded></item><item><title>Veency, Control Your iPhone from Computer via VNC</title><link>https://alexbrodt.com/veency-control-iphone-from-computer-vnc</link><guid isPermaLink="true">https://alexbrodt.com/veency-control-iphone-from-computer-vnc</guid><description>Complete Veency tutorial, VNC server for iPhone that allows total remote control of the device from computer via wireless network.</description><pubDate>Tue, 28 Oct 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hello &lt;strong&gt;Folks&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;A program called &lt;strong&gt;Veency&lt;/strong&gt; was recently created, which aims to &lt;strong&gt;control iPhone from computer&lt;/strong&gt;, that is, Veency is a &lt;strong&gt;VNC server for iPhone&lt;/strong&gt;, it gives us total remote access to the device.&lt;/p&gt;
&lt;h2&gt;What Is It For?&lt;/h2&gt;
&lt;p&gt;Look, honestly I haven&amp;#39;t found great utility yet, but I believe it&amp;#39;s useful for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Writing&lt;/strong&gt; something faster on the device&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solving problems&lt;/strong&gt; if it freezes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrations&lt;/strong&gt; and presentations&lt;/li&gt;
&lt;li&gt;Remote &lt;strong&gt;technical support&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use it to follow &lt;strong&gt;technology evolution&lt;/strong&gt; buddy!&lt;/p&gt;
&lt;h2&gt;Required Prerequisites&lt;/h2&gt;
&lt;p&gt;To test this utility you need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iPhone&lt;/strong&gt; with jailbreak&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Computer&lt;/strong&gt; (Linux, Mac or Windows)&lt;/li&gt;
&lt;li&gt;Active &lt;strong&gt;Wireless connection&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VNC client&lt;/strong&gt; installed&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation Tutorial&lt;/h2&gt;
&lt;h3&gt;1. iPhone Installation&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;Cydia&lt;/strong&gt; app on your iPhone&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;VNC&lt;/strong&gt; in search&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Veency&lt;/strong&gt; will appear, install the program&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restart&lt;/strong&gt; iPhone to ensure correct installation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. VNC Client for Computer&lt;/h3&gt;
&lt;p&gt;You&amp;#39;ll need a VNC client for your operating system:&lt;/p&gt;
&lt;h4&gt;Linux (Debian-Like)&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;apt-get install vncviewer
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Mac OS X&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Download: &lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=64347&quot;&gt;Chicken of the VNC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Windows&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Download: &lt;a href=&quot;http://www.realvnc.com/products/download.html&quot;&gt;RealVNC Viewer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. Connecting to iPhone&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Open &lt;strong&gt;VNCViewer&lt;/strong&gt; on computer&lt;/li&gt;
&lt;li&gt;Type your &lt;strong&gt;iPhone&amp;#39;s IP&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Connect and &lt;strong&gt;control&lt;/strong&gt; remotely!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;How to Find iPhone IP&lt;/h2&gt;
&lt;p&gt;To discover your iPhone&amp;#39;s IP:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Enter &lt;strong&gt;Wi-Fi&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Tap the &lt;strong&gt;ⓘ&lt;/strong&gt; of connected network&lt;/li&gt;
&lt;li&gt;Note the &lt;strong&gt;IP address&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Veency Features&lt;/h2&gt;
&lt;h3&gt;What You Can Do&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Total control&lt;/strong&gt; of interface&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Navigate&lt;/strong&gt; through applications&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Type&lt;/strong&gt; using computer keyboard&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open&lt;/strong&gt; and &lt;strong&gt;close&lt;/strong&gt; programs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configure&lt;/strong&gt; settings remotely&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Limitations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Works only via &lt;strong&gt;WiFi&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt; depends on network quality&lt;/li&gt;
&lt;li&gt;Some &lt;strong&gt;gestures&lt;/strong&gt; may not work perfectly&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Battery&lt;/strong&gt; may drain faster&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Remote Control Advantages&lt;/h2&gt;
&lt;h3&gt;For Developers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Application &lt;strong&gt;debugging&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Screenshots&lt;/strong&gt; and recordings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Demonstrations&lt;/strong&gt; for clients&lt;/li&gt;
&lt;li&gt;Interface &lt;strong&gt;testing&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;For Users&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Faster &lt;strong&gt;typing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Presentations&lt;/strong&gt; on big screen&lt;/li&gt;
&lt;li&gt;Family &lt;strong&gt;technical support&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backup&lt;/strong&gt; and organization&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Security and Privacy&lt;/h2&gt;
&lt;h3&gt;Important Considerations&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use only&lt;/strong&gt; on trusted networks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Disable&lt;/strong&gt; when not using&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Beware&lt;/strong&gt; of public networks&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitor&lt;/strong&gt; active connections&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Troubleshooting&lt;/h2&gt;
&lt;h3&gt;Common Problems&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Can&amp;#39;t connect:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check if both are on &lt;strong&gt;same network&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Confirm iPhone &lt;strong&gt;IP&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Restart &lt;strong&gt;Veency&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Slow connection:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Move devices closer to &lt;strong&gt;router&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Check WiFi &lt;strong&gt;interference&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Test during &lt;strong&gt;lower traffic&lt;/strong&gt; hours&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Next Steps&lt;/h2&gt;
&lt;p&gt;In the next post, we&amp;#39;ll see how to do the &lt;strong&gt;opposite&lt;/strong&gt;: &lt;strong&gt;control computer from iPhone&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Veency represents an interesting advance in integration between mobile devices and computers, offering unique remote control possibilities.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[]&amp;#39;s&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>ASCII to Binary Text Translator in JavaScript</title><link>https://alexbrodt.com/ascii-to-binary-text-translator-javascript</link><guid isPermaLink="true">https://alexbrodt.com/ascii-to-binary-text-translator-javascript</guid><description>Complete tutorial to create a translator that converts ASCII text to binary and vice versa using JavaScript, HTML and CSS with real-time translation.</description><pubDate>Fri, 17 Oct 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Hello! On another rainy day I decided to create a utility, a tool that translates Binary to ASCII Text, and vice versa, and I&amp;#39;ll teach you!&lt;/p&gt;
&lt;p&gt;Right, let&amp;#39;s go, first of all, I must report that this incredible tool is made using HTML and JavaScript.&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s go by parts, we&amp;#39;ll make two files, one containing JavaScript, which will do all the work, and another with HTML for user interface.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-javascript&quot;&gt;/*
Function to check if the Ascii x Binary translation is real-time.
*/
function checkRealTime() {
    // Variable realTime receives checkbox content.
    var realTime = document.getElementById(&amp;quot;realTime&amp;quot;).checked;

    // If true calls the showBinary function.
    if (realTime) showBinary();
}

function decimalBinary(decInput) {
    // Variable binaryNumeric receives text and transforms to string.
    var binaryNumeric = &amp;quot;00000000&amp;quot;+decInput.toString(2);

    // binaryNumeric receives value filtering size-8.
    binaryNumeric = binaryNumeric.substr(binaryNumeric.length-8,8);

    // Returns binaryNumeric to showBinary function.
    return binaryNumeric;
}

/*
Function to show binary, from text(ascii) to binary.
*/
function showBinary() {
    // Variable declaration
    var binaryChar, binaryResult=&amp;quot;&amp;quot;, text, removeSpace;

    // Variable text receives the content of textarea &amp;quot;text&amp;quot;.
    text = document.getElementById(&amp;quot;text&amp;quot;).value;

    /* Variable removeSpace receives checkbox content, to check if
    it displays space in binary. */
    removeSpace = document.getElementById(&amp;quot;removeSpace&amp;quot;).checked;

    // Repetition loop, from 0 to the number of characters in text variable.
    for (i = 0; i &amp;lt; text.length; i++) {
        /* Returns an integer, representing unicode at position &amp;quot;i&amp;quot; of text string,
        after passing through decimalBinary function. */
        binaryChar = decimalBinary(text.charCodeAt(i));

        // If removeSpace variable is NOT true adds space.
        if (!removeSpace) binaryChar += &amp;quot; &amp;quot;;

        // Adds the result.
        binaryResult += binaryChar;
    }

    // Textarea &amp;quot;binary&amp;quot; receives the result in binary.
    document.getElementById(&amp;quot;binary&amp;quot;).value = binaryResult;
}

/*
Function to show text, from binary to text (ascii).
*/
function showAscii() {
    // Variable declaration
    var binaryText, textResult=&amp;quot;&amp;quot;, binaryLength;

    /* Variable binaryText receives everything in textarea &amp;quot;binary&amp;quot;,
    as long as it&amp;#39;s not 0 or 1. */
    binaryText = document.getElementById(&amp;quot;binary&amp;quot;).value.replace(/[^01]/g, &amp;quot;&amp;quot;);

    // Variable binaryLength receives the length of characters in binaryText%8.
    binaryLength = binaryText.length-(binaryText.length%8);

    // Repetition loop, from 0 to binary length with increment 8.
    for (z=0; z&amp;lt; binaryLength; z=z+8) {
        //Returns a string from Unicode character values.
        textResult += String.fromCharCode(parseInt(binaryText.substr(z,8),2));
    }

    // Textarea &amp;quot;text&amp;quot; receives the result in text (ascii).
    document.getElementById(&amp;quot;text&amp;quot;).value = textResult;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-html&quot;&gt;&amp;lt;script src=&amp;quot;js/binary.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
    &amp;lt;p&amp;gt;
        &amp;lt;label for=&amp;quot;realTime&amp;quot;&amp;gt;
            &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;realTime&amp;quot; id=&amp;quot;realTime&amp;quot; checked=&amp;quot;checked&amp;quot; /&amp;gt;
            Translate in real time. &amp;lt;em&amp;gt;(with JavaScript)&amp;lt;/em&amp;gt;
        &amp;lt;/label&amp;gt;
        &amp;lt;br /&amp;gt;
        &amp;lt;label for=&amp;quot;removeSpace&amp;quot;&amp;gt;
            &amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;removeSpace&amp;quot; id=&amp;quot;removeSpace&amp;quot; /&amp;gt;
                Remove spaces.
        &amp;lt;/label&amp;gt;
    &amp;lt;/p&amp;gt;
    &amp;lt;h4&amp;gt;
        &amp;lt;label for=&amp;quot;text&amp;quot;&amp;gt;
            Normal ASCII text:
        &amp;lt;/label&amp;gt;
    &amp;lt;/h4&amp;gt;
    &amp;lt;p&amp;gt;
        &amp;lt;textarea name=&amp;quot;text&amp;quot; rows=&amp;quot;5&amp;quot; cols=&amp;quot;67&amp;quot; id=&amp;quot;text&amp;quot;
                  onkeyup=&amp;quot;checkRealTime();&amp;quot; onkeypress=&amp;quot;checkRealTime();&amp;quot;&amp;gt;
        &amp;lt;/textarea&amp;gt;
        &amp;lt;br /&amp;gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;View in Binary&amp;quot;
               onclick=&amp;quot;showBinary(); return false;&amp;quot; /&amp;gt;
    &amp;lt;/p&amp;gt;
&amp;lt;/form&amp;gt;

&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;
    &amp;lt;h4&amp;gt;
        &amp;lt;label for=&amp;quot;binary&amp;quot;&amp;gt;
            Binary:
        &amp;lt;/label&amp;gt;
    &amp;lt;/h4&amp;gt;
    &amp;lt;p&amp;gt;
        &amp;lt;textarea name=&amp;quot;binary&amp;quot; rows=&amp;quot;5&amp;quot; cols=&amp;quot;67&amp;quot; id=&amp;quot;binary&amp;quot;&amp;gt;
        &amp;lt;/textarea&amp;gt;
        &amp;lt;br /&amp;gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;View in ASCII&amp;quot;
               onclick=&amp;quot;showAscii(); return false;&amp;quot; /&amp;gt;
    &amp;lt;/p&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;charCodeAt(), Gets the Unicode code of the character, toString(2), Converts to binary, Padding zeros, Adds zeros to the left to complete 8 bits and Concatenation, Joins all binary values.&lt;/p&gt;
&lt;p&gt;Replace regex, Removes characters that are not 0 or 1, Group division, Separates into 8-bit blocks, parseInt(x, 2), Converts binary to decimal and String.fromCharCode(), Converts code to character.&lt;/p&gt;
&lt;p&gt;The tool offers real-time translation (converts automatically while typing), option to remove spaces for compact format, and bidirectional conversion between ASCII and binary.&lt;/p&gt;
&lt;p&gt;Example: The word &lt;code&gt;Hello&lt;/code&gt; becomes &lt;code&gt;01001000 01100101 01101100 01101100 01101111&lt;/code&gt; in binary.&lt;/p&gt;
&lt;p&gt;Each character is represented by 8 bits (1 byte), following the standard ASCII table. This tool demonstrates in a practical way how computers store and process text, converting readable characters into their fundamental binary representation.&lt;/p&gt;
</content:encoded></item><item><title>Brazilian Championship Table in Terminal, ZZ Functions for Linux</title><link>https://alexbrodt.com/brazilian-championship-table-terminal-zz-functions</link><guid isPermaLink="true">https://alexbrodt.com/brazilian-championship-table-terminal-zz-functions</guid><description>Tutorial to create Shell function that displays the Brazilian Championship table directly in terminal using ZZ Functions and web scraping.</description><pubDate>Mon, 06 Oct 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;On a rainy Saturday, after hours of studying, I decided to take a break to check how Grêmio was doing in the Brazilian Championship. I looked at the standings and got the idea to bring the table to the terminal. Instead of opening the browser and navigating to the site, why not run a command and see everything right there, in the shell? I had already been creating small shortcuts for daily use, the previous week I made a .sh to switch between Wi-Fi networks -, so I took advantage of the momentum and played with ZZ Functions, that collection of utilities that solves a bunch of simple tasks. From there two functions were born: zzbrasileirao for Serie A and zzbrasileiraob for Serie B.&lt;/p&gt;
&lt;p&gt;Below are the functions as I use in my environment. They do web scraping of the standings page and format the result with a colored header line and a legend explaining each column. The heavy work is done by $ZZWWWDUMP to &amp;quot;dump&amp;quot; the page in the terminal and sed to extract only the block that matters; echo -e comes in to make the visual more readable.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zzbrasileirao() {
# ----------------------------------------------------------------------------
# Shows the updated Brazilian Championship table, Serie A
# Author: Alex Brodt &amp;lt;alex(a)brodt.com.br&amp;gt;
# Site: http://www.brodt.com.br
# Version: 1.0
# Usage: zzbrasileirao
# ----------------------------------------------------------------------------
zzzz -z $1 zzbrasileirao &amp;amp;&amp;amp; return
echo -e &amp;#39;[32m                             P  J       V       E       D       GP      GC      SG      % [m&amp;#39;
$ZZWWWDUMP &amp;#39;http://globoesporte.globo.com/Esportes/Futebol/Classificacao/0,,ESP0-9827,00.html&amp;#39; | sed -n &amp;#39;55,74p&amp;#39;
echo -e &amp;#39;
   [32mP[moints [31m-[m [32mJ[mgames [31m-[m [32mV[mictories [31m-[m [32mE[mties [31m-[m [32mD[mefeats [31m-[m [32mG[moals [32mP[mro [31m-[m [32mG[moals [32mC[montra [31m-[m [32mS[maldo de [32mG[moals [31m-[m [32m%[mWin Rate&amp;#39;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;zzbrasileiraob() {
# ----------------------------------------------------------------------------
# Shows the updated Brazilian Championship table, Serie B
# Author: Alex Brodt &amp;lt;alex(a)brodt.com.br&amp;gt;
# Site: http://www.brodt.com.br
# Version: 1.0
# Usage: zzbrasileiraob
# ----------------------------------------------------------------------------
zzzz -z $1 zzbrasileiraob &amp;amp;&amp;amp; return
echo -e &amp;#39;[32m                  P  J       V       E       D       GP      GC      SG      % [m&amp;#39;
$ZZWWWDUMP &amp;#39;http://globoesporte.globo.com/Esportes/Futebol/Classificacao/0,,ESP0-9828,00.html&amp;#39; | sed -n &amp;#39;54,73p&amp;#39;
echo -e &amp;#39;
   [32mP[moints [31m-[m [32mJ[mgames [31m-[m [32mV[mictories [31m-[m [32mE[mties [31m-[m [32mD[mefeats [31m-[m [32mG[moals [32mP[mro [31m-[m [32mG[moals [32mC[montra [31m-[m [32mS[maldo de [32mG[moals [31m-[m [32m%[mWin Rate&amp;#39;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ZZ Functions are created by Aurélio Marinho Jargas and are very worth installing. Download at &lt;a href=&quot;http://funcoeszz.net&quot;&gt;http://funcoeszz.net&lt;/a&gt;, load in your .bashrc or .profile and ensure basic dependencies like lynx or wget. Once done, just paste the two functions in your preferences file and use when you want to check the standings without leaving the terminal.&lt;/p&gt;
&lt;p&gt;In daily use the advantage is simple: speed to see the table, efficiency by not depending on the browser and freedom to adjust colors and format the way you like. Integration with any terminal makes it easy to run on servers or machines without graphical environment.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# View Serie A
$ zzbrasileirao

# View Serie B
$ zzbrasileiraob
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here&amp;#39;s the recommendation from someone who likes to solve things through the shell. ZZ Functions are simple and useful and still open space for you to create your own functions. Support free software and value what&amp;#39;s made here.&lt;/p&gt;
</content:encoded></item><item><title>Apache, MySQL and PHP on iPhone, Complete Web Server</title><link>https://alexbrodt.com/apache-mysql-php-iphone-web-server</link><guid isPermaLink="true">https://alexbrodt.com/apache-mysql-php-iphone-web-server</guid><description>iPhone is not just a smartphone! Learn to install Apache, PHP and MySQL on iPhone, turning it into a complete and portable web server.</description><pubDate>Sun, 20 Jul 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;iPhone really isn&amp;#39;t just a simple smartphone!
With it we can have a complete web server, running apache, php and mysql.&lt;/p&gt;
&lt;p&gt;Brief tutorial on how to turn your iPhone into a web server!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Required programs for installation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenSSH&lt;/li&gt;
&lt;li&gt;BossPrefs&lt;/li&gt;
&lt;li&gt;Apache&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.xalexandre.com.br/iphone/php.gz&quot;&gt;PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.xalexandre.com.br/iphone/mysql.tgz&quot;&gt;MySQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Open Installer and add the repository: &lt;code&gt;http://thebigboss.org/repo.xml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After refresh install the following packages through Installer: OpenSSH, BossPrefs and Apache.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Install and activate the Insomnia app when performing installations, so your iPhone will stay &amp;quot;awake&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Changing SSH root password:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Changing the SSH root password is extremely important, however, unfortunately 90% of iPhone owners keep the default password: alpine.
This could generate big problems, if someone funny wants to mess with your iPhone.&lt;/p&gt;
&lt;p&gt;To change the password is quite simple.
iPhone uses password encrypted with crypt system.
For Linux or Mac OS X users just type the following command:
&lt;code&gt;openssl passwd -crypt -salt /s NewPassword&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Windows users can generate their password from this site: &lt;a href=&quot;http://iphone.simbunch.com/crypt.php&quot;&gt;iPhone Simbunch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After generating your password, we need to access via SSH to change it.
Unix users can type in terminal:
&lt;code&gt;ssh root@your-iphone-ip -p 22&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Windows users can use the Putty program.&lt;/p&gt;
&lt;p&gt;To change the password type:
&lt;code&gt;vim /etc/master.passwd&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Put your new password for users: root and mobile.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installing PHP:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Via SSH, create the directories opt, iphone and bin, inside /var/WebServer:
&lt;code&gt;mkdir -p /var/WebServer/opt/iphone/bin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After return to root:
&lt;code&gt;cd /&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And create a hidden link to opt:
&lt;code&gt;ln -s /var/WebServer/opt/ ./opt&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now we need to send php into the iPhone.
Unix users:
&lt;code&gt;scp PHP_FILE root@IPHONE_IP:/var/WebServer/opt/iphone/bin/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Windows users can use the Winscp program&lt;/p&gt;
&lt;p&gt;Send the apache &lt;a href=&quot;http://www.xalexandre.com.br/iphone/httpd.conf&quot;&gt;httpd.conf&lt;/a&gt; file to your iPhone:
&lt;code&gt;scp httpd.conf root@[iphone ip]:/etc/httpd/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Via SSH, modify your iPhone&amp;#39;s profile, putting the php PATH:
&lt;code&gt;PATH=&amp;quot;/bin:/sbin:/usr/bin:/usr/local/bin:/usr/sbin:/opt/iphone/bin&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Installing MySQL:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Unzip the mysql.tgz file and send the directory to your iPhone:
&lt;code&gt;scp -r mysql root@IPHONE_IP:/var/root/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Via ssh type:
&lt;code&gt;cd /var/root/mysql/bin&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then:
&lt;code&gt;./mysql_install_db&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;After installation, run:
&lt;code&gt;./mysqld_safe --user=root &amp;amp;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To have access to MySQL via command line, being able to create, select, delete tables and much more type:
&lt;code&gt;./mysql mysql&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;With these programs installed, our capacity to produce iPhone applications became immense, we&amp;#39;ll have the possibility to produce web applications, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Web Photos: We could take a photo with our iPhone, and automatically the photo album would be accessible to anyone connected to a computer network.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Music Browser: We can produce web application, that streams our music, in the future each iPhone user could have their Online radio with music directly from their device.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The possibilities are infinite, you just need &lt;em&gt;creativity&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Questions? I&amp;#39;m available.
[]s&lt;/p&gt;
</content:encoded></item><item><title>Transparent Flash on Linux: finally!</title><link>https://alexbrodt.com/transparent-flash-linux-finally</link><guid isPermaLink="true">https://alexbrodt.com/transparent-flash-linux-finally</guid><description>Adobe launches Flash Player with real transparency for Linux. After years of waiting, it finally works like on Windows and Mac.</description><pubDate>Fri, 11 Jul 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Finally! Adobe launched Flash Player with real transparency for Linux. For years we saw opaque backgrounds where there should be transparency, while Windows and Mac had complete visual effects.&lt;/p&gt;
&lt;p&gt;I tested it here and transparency is working 100%. I found some bugs with specific animations, but the basics work perfectly. Now you can put HTML over Flash, alpha effects work, and sites that were previously broken on Linux are normal.&lt;/p&gt;
&lt;p&gt;To install just download from labs.adobe.com, extract libflashplayer.so and copy to ~/.mozilla/plugins/. It&amp;#39;s a significant victory for those who use Linux as main desktop, removing one of the last barriers to complete web experience.&lt;/p&gt;
</content:encoded></item><item><title>Compiz and Java Problems, Solutions</title><link>https://alexbrodt.com/compiz-java-problems-solutions</link><guid isPermaLink="true">https://alexbrodt.com/compiz-java-problems-solutions</guid><description>Users who use Java programs may face problems with compiz enabled. Learn the simple solution to make Java applications work correctly.</description><pubDate>Sat, 21 Jun 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you use Java on desktop and keep Compiz active, you might encounter windows that turn grey, freeze or don&amp;#39;t respond properly. This happened to me using Zend Studio every day. With Compiz on, the window would open and stay completely grey. The fix is simple and works for other Java applications.&lt;/p&gt;
&lt;p&gt;In Zend&amp;#39;s case, just edit the startup script and export a variable before the rest of the code. The file usually has a name like &lt;code&gt;Zend_Development_Environment&lt;/code&gt;. Open it and add the line below right at the beginning:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vim ZendStudio-5.5.0/Zend_Development_Environment
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export AWT_TOOLKIT=MToolkit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After saving, start the program again. Here it worked immediately and Compiz continued active without friction.&lt;/p&gt;
&lt;p&gt;What&amp;#39;s happening behind the scenes is a clash between the graphics compositor and Java&amp;#39;s default window toolkit. By forcing the use of &lt;code&gt;MToolkit&lt;/code&gt;, Java starts drawing in a way that&amp;#39;s more compatible with the composited environment and the visual artifacts disappear. The adjustment works for any Java app. If you prefer to apply it to just one program, create a simple wrapper:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;#!/bin/bash
export AWT_TOOLKIT=MToolkit
java -jar myapp.jar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you want all your Java programs to use this path, add to your &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.profile&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export AWT_TOOLKIT=MToolkit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can also adjust a &lt;code&gt;.desktop&lt;/code&gt; shortcut using &lt;code&gt;env&lt;/code&gt; in &lt;code&gt;Exec&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[Desktop Entry]
Name=My Java App
Exec=env AWT_TOOLKIT=MToolkit java -jar /path/to/app.jar
Icon=icon.png
Type=Application
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If grey windows, unresponsive buttons or strange rendering still appear, close the app, confirm the variable was applied and try again. In stubborn cases, restart the graphics session. As an alternative, some combinations help in specific scenarios:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Try GTK look and feel
export AWT_TOOLKIT=gtk

# Force Java 2D without problematic acceleration
export JAVA_2D_NODDRAW=true
export J2D_D3D=false
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or passing properties directly in execution:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel      -Dawt.toolkit=sun.awt.motif.MToolkit      -jar application.jar
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In distributions like Ubuntu, Fedora, openSUSE and Debian with active effects, this adjustment is usually sufficient for IDEs and tools like Eclipse, NetBeans, IntelliJ, Zend Studio, JDeveloper, plus editors and utilities in Java. The idea is simple: keep Compiz on and, at the same time, use your applications without headaches.&lt;/p&gt;
</content:encoded></item><item><title>Envy NG, Automatic Proprietary Driver Installation</title><link>https://alexbrodt.com/envy-ng-automatic-driver-installation-ati-nvidia</link><guid isPermaLink="true">https://alexbrodt.com/envy-ng-automatic-driver-installation-ati-nvidia</guid><description>Envy NG is the solution for users with difficulties compiling proprietary drivers for ATI and NVIDIA graphics cards. Simple and automatic installation.</description><pubDate>Sat, 21 Jun 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Many users have difficulties compiling proprietary drivers for their graphics cards when the Operating System doesn&amp;#39;t recognize them. ATI cards are even more complicated, since most Nvidia cards are already recognized by most OS.&lt;/p&gt;
&lt;p&gt;But as with everything in this world, there&amp;#39;s a solution! To help these desperate souls, there&amp;#39;s Envy NG! A friendly program that installs proprietary drivers for graphics cards (Nvidia and ATI) without any effort from the user.&lt;/p&gt;
&lt;p&gt;To install Envy on Debian-like distributions, type:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo aptitude install envyng-gtk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can choose between the graphical version (envyng-gtk), the Qt version for KDE (envyng-qt), or just command line (envyng-core). I recommend the graphical version.&lt;/p&gt;
&lt;p&gt;Right after, run Envy as root:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo envyng -g
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you prefer, you can run in text mode:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo envyng -t
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The cool thing about Envy NG is that it does everything automatically. It identifies your graphics card, checks compatibility, downloads the most suitable driver and configures everything for you. It supports NVIDIA cards (GeForce 6000+ series, Quadro, ION) and ATI/AMD (Radeon HD, FirePro and FGLRX drivers).&lt;/p&gt;
&lt;p&gt;The process is quite simple: it backs up the current driver, downloads the new one, safely removes the old one, installs the new one and configures Xorg.conf. If something goes wrong, you can go back to the previous driver.&lt;/p&gt;
&lt;p&gt;If installation fails, check the logs at &lt;code&gt;/var/log/envyng.log&lt;/code&gt;, update repositories with &lt;code&gt;apt-get update&lt;/code&gt; and try again. Sometimes it helps to try text mode if the graphical interface doesn&amp;#39;t work.&lt;/p&gt;
&lt;p&gt;If the driver doesn&amp;#39;t work after installation, restart the system (always necessary). If the screen goes black, use recovery mode to return to previous settings.&lt;/p&gt;
&lt;p&gt;To see if it worked, you can test:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# For NVIDIA
nvidia-smi

# For ATI/AMD
fglrxinfo

# Test OpenGL
glxinfo | grep rendering
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If everything is working, you should be able to adjust resolution, configure multiple monitors and have full 3D acceleration.&lt;/p&gt;
&lt;p&gt;Always backup before messing with drivers. If your card is already working well, no need to mess with it. Envy NG is most useful when you&amp;#39;re having compatibility or performance issues.&lt;/p&gt;
&lt;p&gt;For more recent Ubuntu users, you can also try &lt;code&gt;sudo ubuntu-drivers autoinstall&lt;/code&gt; which is even simpler.&lt;/p&gt;
&lt;p&gt;Envy NG is a very useful tool that solves one of the biggest problems in Linux adoption: installing proprietary drivers. For those with problematic ATI or NVIDIA cards, it&amp;#39;s practically indispensable.&lt;/p&gt;
</content:encoded></item><item><title>Installing Compiz Fusion Intel x3100</title><link>https://alexbrodt.com/installing-compiz-fusion-intel-x3100</link><guid isPermaLink="true">https://alexbrodt.com/installing-compiz-fusion-intel-x3100</guid><description>Learn how to install and configure Compiz Fusion on Ubuntu with Intel X3100 graphics card. Simple tutorial to enable 3D desktop effects.</description><pubDate>Sat, 21 Jun 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Installing Compiz Fusion on Ubuntu with the Intel X3100 is straightforward, but there&amp;#39;s an annoying detail. This GPU was added to compiz&amp;#39;s blacklist and, by default, it refuses to start the effects. In practice, the card handles basic effects just fine and the system runs well; we just need to tell compiz not to block it.&lt;/p&gt;
&lt;p&gt;The first step is to ensure the necessary packages. I prefer to do everything through terminal, because it&amp;#39;s clear what was installed and easier to repeat later:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt-get install xserver-xgl compizconfig-settings-manager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With that ready, comes the change that frees up the card. Open the compiz-manager configuration file with administrator privileges:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo vim /etc/xdg/compiz/compiz-manager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At the end of the file, add the line below and save. It&amp;#39;s the one that tells compiz to ignore hardware checks and proceed with the X3100:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;SKIP_CHECKS=&amp;quot;yes&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After that, install the Compiz configuration manager if you haven&amp;#39;t installed it yet. It makes it easy to turn effects on and off and adjust every detail:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt-get install compizconfig-settings-manager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To test, you can check the current process and replace the window manager with Compiz in the current session. If something doesn&amp;#39;t look good, just log out of the session and come back, the system returns to default:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;ps aux | grep compiz
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;compiz --replace &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since the X3100 is integrated, it makes sense to start slowly. I usually activate window decorations first, fade in transitions, minimize animation and the window move effect. It works smoothly and already gives a nice visual gain without being heavy. Heavier effects, like the 3D cube, water, fire and real-time blur, usually consume more resources from this GPU. If the interface shows signs of slowness, it&amp;#39;s worth reducing the amount of active effects and avoiding excessive transparencies.&lt;/p&gt;
&lt;p&gt;If nothing happens when running compiz, go back to the file to check if the SKIP_CHECKS line was saved properly and restart the session. Having everything right, the desktop should already load with active composition and windows animating as expected. The idea here is to stay with a light and stable setup and, over time, test other effects to see how far the card goes without sacrificing daily use.&lt;/p&gt;
&lt;p&gt;In the end, the X3100, even old and integrated, delivers an honest 3D experience for daily use. With the right adjustment and effects in measure, you can use Compiz Fusion without drama on Ubuntu.&lt;/p&gt;
</content:encoded></item><item><title>Brazil can contribute software to world astronomy</title><link>https://alexbrodt.com/brazil-can-contribute-software-world-astronomy</link><guid isPermaLink="true">https://alexbrodt.com/brazil-can-contribute-software-world-astronomy</guid><description>National Observatory bets on scientific software development as a way for Brazil to participate in major astronomy projects.</description><pubDate>Sun, 25 May 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The National Observatory sees an interesting opportunity for Brazil to participate in major world astronomy projects by developing scientific software. The idea makes sense where there&amp;#39;s more need for intelligence than heavy infrastructure, the country can contribute with quality.&lt;/p&gt;
&lt;p&gt;A concrete example already works in the Dark Energy Survey, where Brazilian software integrates an international collaboration of US$ 10 billion to map the sky. The new experiments produce gigantic volumes of data that need to be processed and analyzed, and that&amp;#39;s exactly where Brazil can enter with computing knowledge to transform raw data into scientific discoveries. It&amp;#39;s an intelligent approach that values our IT talents without competing in expensive hardware.&lt;/p&gt;
</content:encoded></item><item><title>Flash Player 10 beta: Linux still without transparency</title><link>https://alexbrodt.com/flash-player-10-beta-linux-no-transparency</link><guid isPermaLink="true">https://alexbrodt.com/flash-player-10-beta-linux-no-transparency</guid><description>Adobe launches Flash Player 10 beta for Linux but the transparency problem that has frustrated users for years continues without solution.</description><pubDate>Sun, 18 May 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Adobe launched Flash Player 10 beta for Linux, but disappointed those who expected they would finally fix the transparency problem. It&amp;#39;s frustrating because this is the biggest Flash problem on Linux for years, causing broken layouts and inferior experience to Windows and Mac.&lt;/p&gt;
&lt;p&gt;Flash Player 10 brings performance improvements, HD video support and security fixes, but we still have to deal with opaque backgrounds where there should be transparency. Meanwhile, developers use alternative CSS, HTML5 and SVG to work around the limitations. Adobe continues treating Linux as a second-class citizen, unfortunately.&lt;/p&gt;
</content:encoded></item><item><title>iPhone sold out: signal that 3G model is coming</title><link>https://alexbrodt.com/iphone-sold-out-signal-3g-model-coming</link><guid isPermaLink="true">https://alexbrodt.com/iphone-sold-out-signal-3g-model-coming</guid><description>Apple stops online iPhone sales in US and UK. Classic strategy before launching new version, probably 3G at WWDC.</description><pubDate>Fri, 16 May 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Apple stopped selling iPhone in online stores in the US and UK, claiming they sold out of stock. It&amp;#39;s the company&amp;#39;s classic strategy before launching a new version. Physical stores and AT&amp;amp;T still have some units, but the message is clear.&lt;/p&gt;
&lt;p&gt;The expectation is that they&amp;#39;ll present the iPhone 3G at WWDC in June. It makes perfect sense, since the current iPhone only works on EDGE network, which is quite slow compared to 3G. For those who have iPhone like me, the difference will be significant mainly for browsing and downloads. It&amp;#39;s a matter of weeks to find out if Apple will deliver the improvements everyone is expecting.&lt;/p&gt;
</content:encoded></item><item><title>iPhone comes to Brazil: Claro closes agreement with Apple</title><link>https://alexbrodt.com/iphone-comes-brazil-claro-confirms-apple-agreement</link><guid isPermaLink="true">https://alexbrodt.com/iphone-comes-brazil-claro-confirms-apple-agreement</guid><description>Claro confirms agreement to bring iPhone to Brazil in 2008. I share my experience of already having an iPhone bought in Paraguay.</description><pubDate>Thu, 08 May 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;América Móvil (Claro&amp;#39;s controlling company) confirmed agreement with Apple to bring iPhone to Brazil still in 2008. After much speculation, we&amp;#39;ll finally have the device officially in the country. They haven&amp;#39;t disclosed prices or specific date yet, but at least we know it&amp;#39;s going to happen.&lt;/p&gt;
&lt;p&gt;I already have an iPhone that I bought in Paraguay in January 2008, so I can say it really is a revolutionary device. The touchscreen interface and overall quality are impressive. It will be interesting to see how Claro will price it and what data plans they&amp;#39;ll offer, because iPhone really needs a good connection to work well. For those who were waiting, they&amp;#39;ll finally be able to have the device with warranty and official support in Brazil.&lt;/p&gt;
</content:encoded></item><item><title>Slackware 12.1 Released, New Stable Version Available</title><link>https://alexbrodt.com/slackware-12-1-released</link><guid isPermaLink="true">https://alexbrodt.com/slackware-12-1-released</guid><description>Patrick J. Volkerding announces the release of Slackware 12.1 with kernel 2.6.24.5, Xfce 4.4.2, KDE 3.5.9 and various stability and usability improvements.</description><pubDate>Sat, 03 May 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Patrick J. Volkerding announced the new stable version of Slackware 12.1. It comes with kernel 2.6.24.5 and the general feeling is of a more solid system, the way Slackware users usually expect.&lt;/p&gt;
&lt;p&gt;On desktop the choice remains simple. You can install Xfce 4.4.2 when the idea is lightness and speed or stick with KDE 3.5.9 to have a complete interface full of features. Both options are well maintained and work well on older and newer machines.&lt;/p&gt;
&lt;p&gt;There are improvements that show up in daily use. USB devices are now automatically recognized and ready for use, without needing to mount manually. In the package set, X11 is updated to the 7.3 series, and well-known tools arrive in recent versions like PHP 5.2.5, Apache 2.2.8 and GCC 4.2.3.&lt;/p&gt;
&lt;p&gt;The testing work paid off. This edition passes security in system stability, compatibility with current hardware and performance. No revolution, just that polishing that makes everything predictable and reliable.&lt;/p&gt;
&lt;p&gt;The philosophy follows the same that brought Slackware this far. Design simplicity, minimal dependencies, control in the user&amp;#39;s hands and a clean system, easy to understand and maintain. For those who like to know exactly what&amp;#39;s running, it continues to be a direct choice.&lt;/p&gt;
&lt;p&gt;The complete package list is here: &lt;a href=&quot;ftp://ftp.slackware.com/pub/slackware/slackware-12.1/PACKAGES.TXT&quot;&gt;ftp://ftp.slackware.com/pub/slackware/slackware-12.1/PACKAGES.TXT&lt;/a&gt;
Distribution download is at this address: &lt;a href=&quot;ftp://ftp.slackware.com/pub/slackware/slackware-12.1/&quot;&gt;ftp://ftp.slackware.com/pub/slackware/slackware-12.1/&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Fring Launch for iPhone, Free VoIP Communication</title><link>https://alexbrodt.com/fring-launch-iphone-free-voip-communication</link><guid isPermaLink="true">https://alexbrodt.com/fring-launch-iphone-free-voip-communication</guid><description>Meet Fring for iPhone: revolutionary app that allows using Skype, MSN Messenger, Google Talk and other communication protocols for free.</description><pubDate>Sun, 27 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Fring arrived on iPhone bringing together in one app what many people used separately: Skype, MSN Messenger, Google Talk, ICQ, SIP, Twitter, Yahoo! and AIM. The idea is simple and direct. You chat by voice or text with your contacts, without worrying about each one&amp;#39;s protocol.&lt;/p&gt;
&lt;p&gt;As it&amp;#39;s an initial version for the phone, it lacks some features that exist on other platforms, like sending and receiving files and more detailed ways to organize contacts by service. Nothing that prevents basic use. On Wi‑Fi the voice quality surprises and chat works without drama. The app is free; when opening for the first time, just make a quick registration and start using.&lt;/p&gt;
</content:encoded></item><item><title>Member of Laboratory that Created Lua Language Will Be at FISL</title><link>https://alexbrodt.com/lua-language-laboratory-member-will-be-at-fisl</link><guid isPermaLink="true">https://alexbrodt.com/lua-language-laboratory-member-will-be-at-fisl</guid><description>Sergio Queiroz de Medeiros, member of the laboratory that created the Lua language, will participate in FISL 9.0 with a talk about interaction between script languages and C.</description><pubDate>Fri, 11 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Lua language, born in the PUC-Rio laboratory and so present in games and embedded systems, will gain space at FISL with the presence of Sérgio Queiroz de Medeiros. The talk enters a topic that always generates conversation: how script languages integrate with C without becoming a mess.&lt;/p&gt;
&lt;p&gt;The proposal is to show approaches used by different languages and, in the specific case of Lua, practical examples with the API to talk with C programs. It makes sense. Part of Lua&amp;#39;s success is precisely in lightness and ease of embedding the interpreter in larger applications, maintaining performance and control. For those who work with extensibility and need to choose the right tool for each part of the system, it&amp;#39;s a good opportunity to see the subject treated by someone who lives this in the laboratory.&lt;/p&gt;
&lt;p&gt;FISL takes place in Porto Alegre, at PUCRS Events Center. It&amp;#39;s one of those meetings where the community recognizes itself and ideas jump from one room to another. Having someone from the team that created Lua on stage only increases the weight of the programming.&lt;/p&gt;
</content:encoded></item><item><title>Professional Shell Script, by Aurélio Marinho Jargas</title><link>https://alexbrodt.com/professional-shell-script-aurelio-marinho-jargas</link><guid isPermaLink="true">https://alexbrodt.com/professional-shell-script-aurelio-marinho-jargas</guid><description>Fresh from the oven, the Professional Shell Script book by Aurélio Marinho Jargas. A complete guide to learn shell programming in a didactic and fun way.</description><pubDate>Fri, 11 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Fresh from the oven, the &lt;a href=&quot;https://www.shellscript.com.br/&quot;&gt;Professional Shell Script book&lt;/a&gt;, by &lt;a href=&quot;https://aurelio.net/&quot;&gt;Aurélio Marinho Jargas&lt;/a&gt;. Those who follow his work know: besides technical quality, the light, direct and humorous didactics catch attention. Learning shell with this material tends to be a pleasant experience, one of those that makes you want to open the terminal and test right away.&lt;/p&gt;
&lt;p&gt;If you want to get a taste first, the publisher has made two files available: the &lt;a href=&quot;http://www.novatec.com.br/livros/shellscript/sumario9788575221525.pdf&quot;&gt;table of contents&lt;/a&gt; and a &lt;a href=&quot;http://www.novatec.com.br/livros/shellscript/capitulo9788575221525.pdf&quot;&gt;sample chapter&lt;/a&gt;. Worth taking a look to feel the text tone and content organization.&lt;/p&gt;
&lt;p&gt;The book covers from basic to advanced with natural progression. It starts with fundamental concepts, goes through control structures and goes deep into file and text manipulation. Regular expressions appear in the right context, with examples that solve real problems. There&amp;#39;s space for debugging, optimization and best practices, always with that care to explain the why of things and not just &amp;quot;how to do it&amp;quot;.&lt;/p&gt;
&lt;p&gt;Besides this title, Aurélio is author of Regular Expressions, also by Novatec, which reinforces his experience in essential tools for those who administer systems and program daily.&lt;/p&gt;
&lt;p&gt;Why learn shell script? Because automating tasks saves time, reduces errors and gives predictability. Administrators simplify routines, developers gain agility in deploys and integrations, Linux users customize the environment and DevOps professionals connect everything in more reliable pipelines.&lt;/p&gt;
&lt;p&gt;I recommend it for those starting from scratch, for those who already have some practice and want to take a step further, and for those looking for a reference to keep at hand at work. It&amp;#39;s reading that teaches without complicating and invites practice.&lt;/p&gt;
</content:encoded></item><item><title>III Seminar on Digital Inclusion and Free Software</title><link>https://alexbrodt.com/third-seminar-digital-inclusion-free-software</link><guid isPermaLink="true">https://alexbrodt.com/third-seminar-digital-inclusion-free-software</guid><description>University of Passo Fundo invites to the III Regional Seminar on Digital Inclusion and Free Software, free event from April 23-25, 2008.</description><pubDate>Fri, 11 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The University of Passo Fundo is organizing the &lt;strong&gt;III Regional Seminar on Digital Inclusion and Free Software&lt;/strong&gt; and everyone is invited!&lt;/p&gt;
&lt;p&gt;The event will be &lt;strong&gt;April 23-25, 2008&lt;/strong&gt;, at Building B5, Computer Science Course at UPF &lt;strong&gt;free admission&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;To participate, just access &lt;a href=&quot;http://inf.upf.br/~inclusao&quot;&gt;inf.upf.br/~inclusao&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is already the third edition of the seminar. The first took place in 2006 and brought together 360 people from 36 different municipalities. The second in 2007 had more than 300 participants from various municipalities in the region, focusing on the use of free software in educational spaces.&lt;/p&gt;
&lt;p&gt;The event emerged to deepen reflections on digital inclusion and free software in the UPF region, and has been very successful!&lt;/p&gt;
&lt;p&gt;The central theme will be the experience of Passo Fundo&amp;#39;s municipal education network in adopting Kelix as the operating system for school laboratories and the projects that were developed.&lt;/p&gt;
&lt;p&gt;The idea is to socialize these practical experiences, discuss digital inclusion issues, debate free software in education, establish regional partnerships, and foster actions for regional development.&lt;/p&gt;
&lt;p&gt;If you know someone who might be interested in the event, pass the invitation along! Print and distribute the poster, forward to your contacts who work with technology, education or digital inclusion.&lt;/p&gt;
&lt;p&gt;The seminar is a great opportunity to exchange experiences, learn about interesting projects, make contacts, and contribute to regional development through technology.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We count on your participation!&lt;/strong&gt;&lt;/p&gt;
</content:encoded></item><item><title>Google Movies: finally cinema showtimes easy to find</title><link>https://alexbrodt.com/google-movies-cinema-showtimes-easy-to-find</link><guid isPermaLink="true">https://alexbrodt.com/google-movies-cinema-showtimes-easy-to-find</guid><description>Tested the new Google Movies and it works well to find cinema showtimes in Brazil. More practical than calling cinemas.</description><pubDate>Thu, 10 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Google launched Google Movies in Brazil and we finally have an easy way to find cinema showtimes without having to call cinemas or navigate through horrible cinema complex websites.&lt;/p&gt;
&lt;p&gt;I tested it in some capitals and interior cities and it worked well. You access google.com.br/movies, type your city and the updated programming from cinemas in the region appears. It&amp;#39;s simple, fast and much more practical than traditional methods. Once again Google making life easier with something that should have been obvious long ago.&lt;/p&gt;
</content:encoded></item><item><title>How to Put Your Business on Google Maps</title><link>https://alexbrodt.com/how-to-put-your-business-on-google-maps</link><guid isPermaLink="true">https://alexbrodt.com/how-to-put-your-business-on-google-maps</guid><description>Learn how to register your business on Google Maps with exact location, phone, address and other important data to improve online visibility.</description><pubDate>Thu, 10 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Google launched a very interesting service that allows users to register their businesses on Google Maps.&lt;/p&gt;
&lt;p&gt;Technology is getting more and more advanced, and Google is always innovating. Now it&amp;#39;s possible to register your business on Google Maps with exact location, providing data like phone, address, website and other important information.&lt;/p&gt;
&lt;p&gt;So anyone who wants to know more about a business can count on this tool.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s quite simple. You can register the business name, complete address, phone, website, operating hours, service description and even photos of the establishment.&lt;/p&gt;
&lt;p&gt;For businesses, it&amp;#39;s a great opportunity to have online visibility without paying anything. It makes it much easier for customers to find them, keeps information always updated, and even gives credibility for being on Google&amp;#39;s platform.&lt;/p&gt;
&lt;p&gt;For those looking for some service, it becomes much easier to find businesses, have reliable information, precise directions to get to the location, and direct contact available.&lt;/p&gt;
&lt;p&gt;The process is straightforward: you access Google&amp;#39;s system, fill in the business data, they verify the location and validate the information before publishing on Google Maps.&lt;/p&gt;
&lt;p&gt;Registration link: &lt;a href=&quot;http://www.google.com/local/add/lookup?hl=en&amp;gl=US&quot;&gt;Google Maps Business&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You&amp;#39;ll need the business legal name, complete address, main phone number, business category, operating hours, and website if you have one. Google does verification by phone or mail to confirm that the business actually exists.&lt;/p&gt;
&lt;p&gt;I see this as a revolution for small businesses. Now they can compete with the big ones without having to invest much in marketing. Any local business can have visibility and be found easily.&lt;/p&gt;
&lt;p&gt;And with GPS becoming more popular and smartphones starting to appear, this location functionality will become increasingly important. Google Maps is already ahead of Yahoo Maps and MapQuest in this area.&lt;/p&gt;
&lt;p&gt;For those who have a business, it&amp;#39;s free and effective digital marketing. For those seeking services, it&amp;#39;s much more convenience and reliable information.&lt;/p&gt;
&lt;p&gt;It&amp;#39;s one of those novelties that really changes the game for local commerce. If you have a business and haven&amp;#39;t registered yet, it&amp;#39;s really worth doing this soon.&lt;/p&gt;
</content:encoded></item><item><title>Nokia finally going to make an iPhone competitor</title><link>https://alexbrodt.com/nokia-finally-making-iphone-competitor</link><guid isPermaLink="true">https://alexbrodt.com/nokia-finally-making-iphone-competitor</guid><description>Nokia confirms development of &apos;Tube&apos;, smartphone with touch screen to compete with iPhone. Can they adapt Symbian?</description><pubDate>Thu, 10 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nokia confirmed it&amp;#39;s developing a smartphone with touch screen to compete with iPhone, internally called &amp;quot;Tube&amp;quot;. It will be the brand&amp;#39;s first device controlled entirely by screen touches, running Symbian S60 adapted for touch interface.&lt;/p&gt;
&lt;p&gt;It was a matter of time. iPhone changed the game and Nokia, even being leader in volume, needed an answer in the premium segment. The challenge is big because Symbian wasn&amp;#39;t born for touch and will need a deep redesign. If they can maintain Symbian advantages (multitasking, customization) and create a fluid interface, it could be interesting. If they stumble in execution, the comparison with iPhone will be cruel.&lt;/p&gt;
</content:encoded></item><item><title>OpenSolaris Day, Free Event in Porto Alegre</title><link>https://alexbrodt.com/opensolaris-day-free-event-porto-alegre</link><guid isPermaLink="true">https://alexbrodt.com/opensolaris-day-free-event-porto-alegre</guid><description>The Porto Alegre OpenSolaris user group invites you to a free event on 16/04/08. Join this unique opportunity to learn about OpenSolaris.</description><pubDate>Thu, 10 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The Porto Alegre OpenSolaris User Group, together with the SouJava community, invites you to OpenSolaris Day on April 16, 2008, at the Bank Workers Union Auditorium, in Porto Alegre. Admission is free.&lt;/p&gt;
&lt;p&gt;The meeting is a good chance to better understand OpenSolaris, the open version of Sun Microsystems&amp;#39; Solaris. The conversation covers features that catch attention in the daily life of those who administer and develop: the ZFS file system, DTrace for real-time diagnostics, containers for lightweight isolation, SMF for managing services with more predictability and Crossbow for network virtualization. It&amp;#39;s content that helps understand why these technologies influenced so much in the Unix world and in free software.&lt;/p&gt;
&lt;p&gt;The expected audience mixes system administrators, Java developers, students and IT professionals curious about Unix-like systems. Worth going to exchange ideas, see practical cases and make contacts with those who already use or are starting to test.&lt;/p&gt;
&lt;p&gt;Registrations and updated information are on the official OpenSolaris project website. If you want to expand technical repertoire and get closer to the community, it&amp;#39;s an event that deserves to enter your agenda. Participating is simple, learning is certain.&lt;/p&gt;
</content:encoded></item><item><title>Pressured by Microsoft, Yahoo Announces Partnership with Google</title><link>https://alexbrodt.com/pressured-by-microsoft-yahoo-announces-google-partnership</link><guid isPermaLink="true">https://alexbrodt.com/pressured-by-microsoft-yahoo-announces-google-partnership</guid><description>Yahoo announces partnership with Google for advertising on 3% of American searches, strategic move to ward off Microsoft&apos;s unsolicited proposal.</description><pubDate>Thu, 10 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yahoo! will give part of its advertising space to Google in a test that, in practice, reinforces its position against Microsoft&amp;#39;s unsolicited proposal. Under the agreement, announced this Wednesday (9th), Google will be able to display ads on about 3% of searches made in the United States via Yahoo. The experiment is expected to last two weeks; after that, results will be evaluated before any decision about expanding the partnership.&lt;/p&gt;
&lt;p&gt;The move happens in the middle of the acquisition dispute. Microsoft had put on the table an offer of US$ 31 per share and was pressing for an agreement, while Yahoo judged the value low and sought alternatives. By turning to Google, Yahoo sends a clear message to the market that it can increase ad revenue without necessarily accepting the purchase.&lt;/p&gt;
&lt;p&gt;On the regulatory side, the proposal triggers alerts. Combined, Google and Yahoo would reach close to 81% of the US search market, according to numbers from that time, while a possible Microsoft + Yahoo merger would be around 31%. The concern is that the combination with Google consolidates even more a single player in online advertising, something that was already being discussed because of the DoubleClick acquisition for US$ 3.2 billion.&lt;/p&gt;
&lt;p&gt;Microsoft reacted quickly. Brad Smith, responsible for the company&amp;#39;s legal affairs, summarized the point of view:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This would make the market much less competitive, something that contrasts with our proposal to acquire Yahoo!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In Congress, Senator Herb Kohl, from the antitrust committee, also signaled reservations and said he rejects any permanent agreement that excessively increases industry concentration. Regulators&amp;#39; assessment will be determinant for the future of this partnership.&lt;/p&gt;
&lt;p&gt;In the market, the 2008 picture showed Google with about 59% of searches, Yahoo in second position and Microsoft chasing. A test like this can improve Yahoo&amp;#39;s monetization in the short term, but, if it advances, it also reduces independent alternatives for advertisers and publishers, pressuring prices and conditions in an already concentrated ecosystem.&lt;/p&gt;
&lt;p&gt;In technological terms, integration requires aligning auction systems, relevance criteria and performance metrics, without sacrificing user experience. Even being a small pilot, the experience is significant and can redefine the balance of forces between the three companies.&lt;/p&gt;
&lt;p&gt;Source: Folha Online.&lt;/p&gt;
</content:encoded></item><item><title>Brief Introduction to JavaScript, Client-Side Language for Web</title><link>https://alexbrodt.com/brief-introduction-to-javascript</link><guid isPermaLink="true">https://alexbrodt.com/brief-introduction-to-javascript</guid><description>Introduction to JavaScript, essential client-side programming language for dynamic web development, with basic tutorial and learning resources.</description><pubDate>Wed, 09 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;JavaScript is an excellent and powerful client-side programming language for the Web.&lt;/p&gt;
&lt;p&gt;By running in the Browser, JavaScript becomes a fantastic language in dynamic website development, being able to be introduced to any other Web language.&lt;/p&gt;
&lt;p&gt;A brief JavaScript tutorial can be found &lt;a href=&quot;http://www.hunlock.com/blogs/Essential_Javascript_--_A_Javascript_Tutorial&quot;&gt;here&lt;/a&gt;!&lt;/p&gt;
</content:encoded></item><item><title>Fedora 9 Beta Images, Preview of New Distribution</title><link>https://alexbrodt.com/fedora-9-beta-images-new-distribution-preview</link><guid isPermaLink="true">https://alexbrodt.com/fedora-9-beta-images-new-distribution-preview</guid><description>Michael Larabel publishes preview with real images of Fedora 9 Beta on Phoronix, showing improvements and innovations of the new Red Hat distribution version.</description><pubDate>Wed, 09 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Michael Larabel published on Phoronix a preview of Fedora 9 Beta with real system images. It&amp;#39;s one of those texts that make you want to install to see up close. I&amp;#39;ve always been more on the Debian and derivatives team, but Fedora has been surprising me with each release.&lt;/p&gt;
&lt;p&gt;The material shows a more polished interface and a set of changes that give it the face of a new version, not just a package update. The foundations are up to date with kernel, GCC, glibc and X.Org updated. On desktop you can choose between the latest GNOME and KDE 4.x, which at that time was still finding its own way. There are also new features that change daily use, like PulseAudio for system audio, smarter NetworkManager for networks and PackageKit simplifying life when installing and updating software. In the security part, features like PolicyKit enter, adding to what Fedora already brings by default.&lt;/p&gt;
&lt;p&gt;I like to look at Fedora as Red Hat&amp;#39;s living laboratory. A lot of things are born there and, if they make sense, continue maturing until they become standard in other distributions. For those who like to test what&amp;#39;s coming, it&amp;#39;s a full plate. For those who prefer instruction manual before everything, it makes sense to face it as a learning environment, not necessarily the main work distro.&lt;/p&gt;
&lt;p&gt;Even without wanting to migrate now, it&amp;#39;s hard to ignore the pace of evolution. With each version the experience becomes more rounded and the feeling is that the project pushes the ecosystem forward.&lt;/p&gt;
&lt;p&gt;If you want to see the images and read the complete analysis, worth visiting Phoronix: &lt;a href=&quot;http://www.phoronix.com/scan.php?page=article&amp;item=fedora9_beta&amp;num=1&quot;&gt;http://www.phoronix.com/scan.php?page=article&amp;amp;item=fedora9_beta&amp;amp;num=1&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Mandriva 2008 Spring: finally a version that works well</title><link>https://alexbrodt.com/mandriva-2008-spring-version-that-works-well</link><guid isPermaLink="true">https://alexbrodt.com/mandriva-2008-spring-version-that-works-well</guid><description>Tested Mandriva 2008 Spring and impressed by compatibility with mobile devices and ease of configuration.</description><pubDate>Wed, 09 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Mandriva 2008 Spring came out on schedule and this time they got it right on what matters. The system recognizes Nokia, Windows Mobile and Blackberry phones without drama, recent video cards work straight away, and the LAMP package comes ready for web developers.&lt;/p&gt;
&lt;p&gt;I like when a release gives security instead of just promises. Connecting the phone and transferring files works right away, the desktop is more polished, and no driver juggling needed. For those who want to install Linux and start using it, it&amp;#39;s an option that simply works with everyday devices.&lt;/p&gt;
</content:encoded></item><item><title>PHP6 Changes, Server Migration Impacts</title><link>https://alexbrodt.com/php6-changes-server-migration-impacts</link><guid isPermaLink="true">https://alexbrodt.com/php6-changes-server-migration-impacts</guid><description>Analysis of major changes in PHP6 that will cause server migration problems, including the complete removal of register_globals and other significant changes.</description><pubDate>Wed, 09 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Server migration to PHP6 could cause a lot of headaches for countless programmers.&lt;/p&gt;
&lt;p&gt;Major changes are coming in this new version of PHP.&lt;/p&gt;
&lt;p&gt;When PHP 5 was released, many hosting servers decided to maintain both PHP versions (4 and 5), due to numerous scripts having stopped working after the PHP update.&lt;/p&gt;
&lt;p&gt;In version 6, the changes are even bigger and we will certainly have hosting servers providing three versions of PHP 4, 5 and 6.&lt;/p&gt;
&lt;p&gt;Among the changes, the one that will cause the most impact is the complete removal of register_globals. In PHP version 5, register_globals already comes disabled by default, but in version 6, there won&amp;#39;t even be an option to enable it, since in this new version of PHP, register_globals will not exist.&lt;/p&gt;
&lt;p&gt;Other changes will make developers readapt to the language.&lt;/p&gt;
</content:encoded></item><item><title>Shell Script Course, Complete Guide by Julio Cezar Neves</title><link>https://alexbrodt.com/shell-script-course</link><guid isPermaLink="true">https://alexbrodt.com/shell-script-course</guid><description>Complete Shell Script course published in Linux Magazine, written by Julio Cezar Neves, organized in 11 topics from basic concepts to process synchronization.</description><pubDate>Wed, 09 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Recently a course written by Julio Cezar Neves was published on the &lt;a href=&quot;http://www.linuxmagazine.com.br&quot;&gt;Linux Magazine&lt;/a&gt; website.&lt;/p&gt;
&lt;p&gt;The course is organized in eleven topics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part I: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim&quot;&gt;Basic concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part II: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_parte_ii&quot;&gt;CD catalog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part III: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_iii&quot;&gt;String manipulation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part IV: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_iv&quot;&gt;Conditional structures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part V: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_v&quot;&gt;Loop structures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part VI: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_vi&quot;&gt;More loops&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part VII: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_parte_vii&quot;&gt;Format output&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part VIII: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_parte_viii&quot;&gt;Writing functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part IX: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_parte_ix&quot;&gt;Strings and variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part X: &lt;a href=&quot;http://www.linuxmagazine.com.br/article/papo_de_botequim_parte_x&quot;&gt;Expressions and parameter usage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Final Part: &lt;a href=&quot;http://www.linuxnewmedia.com.br/article/papo_de_botequim_parte_final&quot;&gt;Pipes and process synchronization&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Lula Expresses Interest in Participating in FISL</title><link>https://alexbrodt.com/lula-expresses-interest-in-participating-fisl</link><guid isPermaLink="true">https://alexbrodt.com/lula-expresses-interest-in-participating-fisl</guid><description>President Luiz Inácio Lula da Silva expresses interest in participating in FISL, promising effort in his agenda to be present at Latin America&apos;s largest free software event.</description><pubDate>Sat, 05 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;President Luiz Inácio Lula da Silva signaled that he wants to participate in the International Free Software Forum. The agenda is always a puzzle, but this time the coincidence of commitments in Rio Grande do Sul during the event days makes the presence viable. For the community, it would be a strong symbolic gesture: the country&amp;#39;s largest free software meeting receiving the government&amp;#39;s highest authority.&lt;/p&gt;
&lt;p&gt;More than a political nod, the visit would help highlight themes that FISL has defended from the beginning: open technology in the public sector, digital inclusion and local competency development. If it works out, the stage becomes a window to show Brazilian projects and reinforce the discussion about technological independence. It&amp;#39;s the type of appearance that expands the event&amp;#39;s reach beyond the technical circuit.&lt;/p&gt;
</content:encoded></item><item><title>Rasmus Lerdorf comes to FISL: PHP creator in Porto Alegre</title><link>https://alexbrodt.com/rasmus-lerdorf-comes-fisl-php-creator-porto-alegre</link><guid isPermaLink="true">https://alexbrodt.com/rasmus-lerdorf-comes-fisl-php-creator-porto-alegre</guid><description>Yahoo brought Rasmus Lerdorf, PHP creator, to FISL 9.0. A unique opportunity to meet who created the language I use every day.</description><pubDate>Sat, 05 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;What great news! Yahoo confirmed they&amp;#39;re bringing Rasmus Lerdorf, PHP creator, to FISL 9.0. As a developer who uses PHP at work, it&amp;#39;s a unique opportunity to hear directly from who created the language I use practically every day.&lt;/p&gt;
&lt;p&gt;PHP is a language you either love or hate, but you can&amp;#39;t deny it works. It&amp;#39;s behind giant websites, robust frameworks and millions of web applications. Being able to ask direct questions to Rasmus about design decisions, language future and best practices is unmissable.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ll take advantage to organize some questions about performance, object orientation in PHP 5 and where he sees the language in a few years. It&amp;#39;s the type of opportunity that rarely appears in Brazil, especially at an event like FISL.&lt;/p&gt;
</content:encoded></item><item><title>Mozilla Launches Firefox 3.0 Beta</title><link>https://alexbrodt.com/mozilla-launches-firefox-3-beta</link><guid isPermaLink="true">https://alexbrodt.com/mozilla-launches-firefox-3-beta</guid><description>Mozilla releases Firefox 3.0 Beta Final version, but caution is recommended and wait for stable version before using in production environment.</description><pubDate>Thu, 03 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Mozilla released Firefox 3.0 Final Beta. Even with &amp;quot;final&amp;quot; in the name, I still prefer to test carefully and wait for the stable version for production use. Beta is for curious people and those who help debug; those who depend on the browser for work need predictability.&lt;/p&gt;
&lt;p&gt;What looks good in this generation is a set of improvements that makes a difference: smarter performance, more contained memory consumption, a polished interface and security adjustments. For developers, integrated tools become more useful. If you decide to experiment now, backup your profile and, if possible, run on a test machine. Plugins and specific sites may not be ready, and nobody deserves to lose a configuration in the middle of work.&lt;/p&gt;
&lt;p&gt;Browsers are in fierce competition. Internet Explorer remains dominant, but Firefox grows, Safari runs on the outside and Opera maintains its loyal audience. This 3.0 is important for Mozilla to keep the pace. I&amp;#39;ll wait a bit more and then tell how the migration went.&lt;/p&gt;
</content:encoded></item><item><title>Lula receives FISL organizers: a milestone for free software in Brazil</title><link>https://alexbrodt.com/lula-receives-fisl-organizers-milestone-free-software-brazil</link><guid isPermaLink="true">https://alexbrodt.com/lula-receives-fisl-organizers-milestone-free-software-brazil</guid><description>The meeting between Lula and FISL 9.0 organizers marks a historic moment for the free software movement in the country.</description><pubDate>Tue, 01 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It&amp;#39;s interesting to see President Lula receiving the coordination of ASL (Free Software.Org Association) at Planalto to personally deliver the invitation to FISL 9.0. The event takes place April 17-19 in Porto Alegre and is considered Latin America&amp;#39;s largest free software forum.&lt;/p&gt;
&lt;p&gt;This movement makes sense considering the government was already showing interest in migrating to free software in public administration. SERPRO and Caixa Econômica already had projects in this direction, aiming to reduce licensing costs and develop more technological independence. For the Brazilian free software movement, having presidential recognition is an important milestone that can accelerate adoption of these technologies in the public sector.&lt;/p&gt;
</content:encoded></item><item><title>Nokia Will Hire FISL Participants</title><link>https://alexbrodt.com/nokia-will-hire-fisl-participants</link><guid isPermaLink="true">https://alexbrodt.com/nokia-will-hire-fisl-participants</guid><description>Nokia confirms presence at FISL 9.0 and announces intention to hire participants who stand out in the Programming Arena, focusing on mobility.</description><pubDate>Tue, 01 Apr 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nokia confirmed to &lt;a href=&quot;http://www.zerohora.com/blogdavanessa&quot;&gt;Vanessa&amp;#39;s blog&lt;/a&gt; that it will be at FISL 9.0 and that it intends to hire participants who stand out in the Programming Arena. The information came from the Nokia Technology Institute, through Sílvia Valadares, responsible for INdT partnerships.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We will indeed be at FISL, carrying the mobility banner. And we have several open positions. If there are people who stand out in the challenge, we will hire these people.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The reading is direct: the company wants to find talents in mobility and sees the event as a good place for that. For those participating in the Arena, it&amp;#39;s the chance to show code, solve problems under pressure and, as a bonus, leave there with a conversation forwarded for a position.&lt;/p&gt;
&lt;p&gt;INdT coordinates the presence at the meeting and brings technical team to exchange ideas with the community. Besides bringing Nokia closer to the local ecosystem, participation helps map projects, identify good people and understand where to make partnerships with universities and user groups.&lt;/p&gt;
&lt;p&gt;The market moment also pushes in this direction. In 2008 mobile development grows, Symbian remains strong in Nokia&amp;#39;s portfolio and demand for applications and services increases. Having prepared people close to operators and manufacturers makes a difference when opportunities arise.&lt;/p&gt;
&lt;p&gt;For those going to FISL, it&amp;#39;s worth polishing the basics: bring a simple portfolio with projects, leave public repositories organized, review programming concepts for mobile devices and, mainly, actively participate in Arena activities. Direct contact usually weighs as much as the resume.&lt;/p&gt;
&lt;p&gt;In the end, Nokia&amp;#39;s presence reinforces FISL as a meeting space between community and industry and opens concrete doors for those who want to work with mobility. It&amp;#39;s one of those opportunities where participating, showing work and talking to the right people can make all the difference.&lt;/p&gt;
</content:encoded></item><item><title>OS X and Windows Vista Are Cracked in Competition, but Ubuntu Survives</title><link>https://alexbrodt.com/os-x-windows-vista-cracked-competition-ubuntu-survives</link><guid isPermaLink="true">https://alexbrodt.com/os-x-windows-vista-cracked-competition-ubuntu-survives</guid><description>In the PWN to OWN 2008 competition, hackers manage to compromise Mac OS X and Windows Vista, but Ubuntu Linux remains invulnerable during the three days of testing.</description><pubDate>Mon, 31 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The second edition of the PWN to OWN competition, during the CanSecWest security conference in Vancouver, took place from Wednesday to Friday, March 26-28, 2008. Three laptops were in the contest: a MacBook Air with Mac OS X, a Sony VAIO with Ubuntu Linux and a Fujitsu with Windows Vista Ultimate SP1. The rule was simple for those who participate in this type of trial by fire: use an unknown flaw, win the right to take the machine and, depending on the phase, a cash prize. At the end of the three days, only the VAIO with Ubuntu remained intact.&lt;/p&gt;
&lt;p&gt;The organization was handled by TippingPoint&amp;#39;s Zero Day Initiative. It&amp;#39;s the program that buys information about vulnerabilities not yet disclosed, protects its customers with signatures and policies, and coordinates responsible disclosure with manufacturers so that fixes come out at the right time. The competition proposal follows this line, rewarding those who find the flaw and requiring that details be delivered to the team for proper notification to suppliers.&lt;/p&gt;
&lt;p&gt;On the first day only remote attacks counted, purely over network, with a high prize planned for those who could achieve the feat. None of the three systems fell in this phase. On the second day, everyday applications came into play, like browser, email and messenger. It took only a few minutes after opening for the MacBook Air to be compromised by a Safari vulnerability. The attack used a prepared website to take control of the machine. The exploitation was presented by Charlie Miller and the Independent Security Evaluators team, well-known names in this circuit.&lt;/p&gt;
&lt;p&gt;On Friday, the rule allowed exploiting browser plugins and other common programs. The target that gave in was Windows Vista, because of a flaw in Adobe Flash Player. Shane Macaulay conducted the attack, with support from Alexander Sotirov and Derek Callaway. The team had been trying since the previous evening until they managed to close the exploitation chain that earned them the laptop and the cash prize offered for the stage.&lt;/p&gt;
&lt;p&gt;Ubuntu was the only one to cross the three days without compromise. The organizers informed that the three systems had the latest versions and all available patches, running with default configurations. This helps understand part of the result. The exploitations that appeared hit the Mac browser and a popular Windows plugin, components that expand the attack surface. In competition scenarios, any implementation or integration error becomes an entry door.&lt;/p&gt;
&lt;p&gt;You can&amp;#39;t conclude that Ubuntu is invulnerable. What you can say, from the tests of this edition, is that a combination of architecture, security standards and software choices helped the system resist in that specific context. For manufacturers, the message remains about the importance of hardening browsers and treating the most common dependencies with priority. For users, it&amp;#39;s worth keeping everything updated, choosing plugins and extensions well and remembering that the weak link usually appears outside the system core.&lt;/p&gt;
&lt;p&gt;If you want to read the original report, the Linha Defensiva article covered the competition and brings more details: &lt;a href=&quot;http://linhadefensiva.uol.com.br/2008/03/pwn-to-own-2008/&quot;&gt;http://linhadefensiva.uol.com.br/2008/03/pwn-to-own-2008/&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Itaú Offers Services for 3G Users</title><link>https://alexbrodt.com/itau-offers-services-for-3g-users</link><guid isPermaLink="true">https://alexbrodt.com/itau-offers-services-for-3g-users</guid><description>Itaú Bank provides 3G telephony services including TV Itautrade with investment videos, fund portfolio and PDF reports for mobile customers.</description><pubDate>Sun, 30 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Starting March 25th, Itaú Bank began providing some 3G telephony services.&lt;/p&gt;
&lt;p&gt;The highlight goes to &amp;quot;TV Itautrade&amp;quot; which offers:&lt;/p&gt;
&lt;p&gt;Videos with main investment news, Market analysis in audiovisual format, Coverage of relevant financial events and Specialized content for investors.&lt;/p&gt;
&lt;p&gt;Consolidated position of fund portfolio through charts, Graphic visualization of investment performance, Real-time monitoring of applications and Interface optimized for mobile devices.&lt;/p&gt;
&lt;p&gt;Access to Itaú Brokerage reports, Documents in PDF format, Detailed information about investments and Direct download on mobile device.&lt;/p&gt;
&lt;p&gt;&amp;quot;With 3G technology we managed to develop exclusive services for customers, with more resources and facilities to access bank information through mobile phone,&amp;quot; says Luis Antônio Rodrigues, Director of Electronic Channel Systems at Itaú Bank.&lt;/p&gt;
&lt;p&gt;Higher connection speed, Better video quality, Smoother navigation and Rich multimedia content experience.&lt;/p&gt;
&lt;p&gt;The service will be available for customers using:
Claro, Leading 3G operator at the time and Teleming Celular, Regional coverage.&lt;/p&gt;
&lt;p&gt;Device with 3G support, Operator data plans and 3G coverage in usage region.&lt;/p&gt;
&lt;p&gt;3G was still emerging technology in Brazil, Smartphones in early adoption phase, Banks beginning to invest in mobile channels and Itaú among pioneers in mobile banking services.&lt;/p&gt;
&lt;p&gt;This initiative represents:
Competitive differentiation in banking sector, Investment in cutting-edge technology, Focus on customer experience and Preparation for digital future.&lt;/p&gt;
&lt;p&gt;Leadership in banking innovation, Attraction of tech-savvy customers, Premium service differentiation and Investment in digital relationship.&lt;/p&gt;
&lt;p&gt;Convenience of mobile access, Real-time information, Investment management anywhere and Modern banking experience.&lt;/p&gt;
&lt;p&gt;The launch of 3G services by Itaú marks an important moment in the digitalization of banking services in Brazil. The initiative demonstrates how financial institutions were preparing for the mobility era.&lt;/p&gt;
&lt;p&gt;With special focus on investments and an innovative service like TV Itautrade, Itaú positioned itself at the forefront of digital banking transformation, offering customers a rich and convenient experience through 3G technology.&lt;/p&gt;
</content:encoded></item><item><title>OpenOffice 2.4: worth upgrading?</title><link>https://alexbrodt.com/openoffice-2-4-worth-upgrading</link><guid isPermaLink="true">https://alexbrodt.com/openoffice-2-4-worth-upgrading</guid><description>Tested the new OpenOffice 2.4 version and share my impression about PDF improvements, new DejaVu font and usability changes.</description><pubDate>Sun, 30 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I tested the new OpenOffice 2.4 version and the improvements are noticeable in daily use. The main visible change is the new default DejaVu font (replacing BitStream Vera), which renders Portuguese accents better. Additionally, PDF handling improved considerably, something that already bothered me in previous versions when exporting documents with complex formatting.&lt;/p&gt;
&lt;p&gt;The suite became more stable and responsive. Writer opens problematic .doc files more consistently, Calc imports Excel spreadsheets more reliably, and Impress gained new templates. For those already using OpenOffice, the upgrade is worth it. For those considering migrating from Microsoft Office, this version is more mature and represents a viable free alternative for personal use and small businesses.&lt;/p&gt;
</content:encoded></item><item><title>Vivo and Yahoo launch mobile search</title><link>https://alexbrodt.com/vivo-yahoo-launch-mobile-search-service</link><guid isPermaLink="true">https://alexbrodt.com/vivo-yahoo-launch-mobile-search-service</guid><description>Vivo and Yahoo launch Vivo Search, mobile search tool based on Yahoo! oneSearch, optimized for mobile phones of the time.</description><pubDate>Sun, 30 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Vivo and Yahoo launched Vivo Search, mobile search tool based on Yahoo! oneSearch. The service organizes condensed results on a single page, including news, weather forecast, finance and images, all optimized for small screens and limited connections.&lt;/p&gt;
&lt;p&gt;The proposal is to reduce back and forth between sites, delivering &amp;quot;pocket&amp;quot; answers directly. Vivo gains differential for data customers, Yahoo strengthens presence in Brazil, and users have quick access to information without opening heavy pages in the browser.&lt;/p&gt;
</content:encoded></item><item><title>Windows loses market to Mac and Linux</title><link>https://alexbrodt.com/windows-losing-market-share-to-mac-and-linux</link><guid isPermaLink="true">https://alexbrodt.com/windows-losing-market-share-to-mac-and-linux</guid><description>Survey shows Windows being replaced by Mac and Linux, reflection of Vista problems and growth of alternatives.</description><pubDate>Sun, 30 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;DesktopLinux.com survey based on US computer sales data shows Windows is losing market share to Mac and Linux. The timing makes sense, considering it&amp;#39;s been a difficult year for Microsoft with Windows Vista facing performance criticism and compatibility problems.&lt;/p&gt;
&lt;p&gt;Mac OS X gains ground with more elegant interface and superior stability, especially in creative sectors. Linux grows in technical niches, taking advantage of free cost and open source philosophy. This scenario forces Microsoft to rethink strategies and accelerates innovation in the operating systems market as a whole.&lt;/p&gt;
</content:encoded></item><item><title>Apple studies bringing iPhone to Brazil but faces obstacles</title><link>https://alexbrodt.com/apple-studies-bringing-iphone-brazil-faces-obstacles</link><guid isPermaLink="true">https://alexbrodt.com/apple-studies-bringing-iphone-brazil-faces-obstacles</guid><description>Apple visits Brazil to evaluate iPhone entry in the country but encounters challenges with smuggling, taxes and complex regulations.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Apple visited Brazil to study bringing iPhone here, but ran into very complicated obstacles. The main problem is smuggling, since 90% of iPods sold in Brazil are illegally imported. This means competing with a very strong parallel market, plus extremely high import taxes and all ANATEL bureaucracy for homologation.&lt;/p&gt;
&lt;p&gt;Vivo appears as a possible partner, which makes sense due to network infrastructure and customer base with purchasing power. Even with challenges, you can see Apple is interested in the Brazilian market. This visit was a first step to understand obstacles and prepare ground for eventual official iPhone arrival in the country.&lt;/p&gt;
</content:encoded></item><item><title>FISL 9.0 gains Intel and Sun as sponsors</title><link>https://alexbrodt.com/fisl-9-gains-intel-sun-as-sponsors</link><guid isPermaLink="true">https://alexbrodt.com/fisl-9-gains-intel-sun-as-sponsors</guid><description>FISL 9.0 receives support from giants Intel and Sun Microsystems, showing how free software gained business relevance in Brazil.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;FISL 9.0 received support from important sponsors like Intel and Sun Microsystems, in addition to companies like Google, UOL and government agencies like SERPRO, Ministry of Culture and Caixa Econômica Federal.&lt;/p&gt;
&lt;p&gt;This robust support shows how free software stopped being just an ideological movement to become business and strategic reality in Brazil. The event takes place April 17-19 at PUCRS Events Center in Porto Alegre, consolidating itself as Latin America&amp;#39;s largest free software forum.&lt;/p&gt;
</content:encoded></item><item><title>Internet Explorer 8 Beta, Microsoft Announces New Version</title><link>https://alexbrodt.com/internet-explorer-8-beta-microsoft-announcement</link><guid isPermaLink="true">https://alexbrodt.com/internet-explorer-8-beta-microsoft-announcement</guid><description>Microsoft releases Internet Explorer 8 Beta for download, promising to faithfully follow W3C standards to the joy of web developers.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Microsoft has released the Beta version of Internet Explorer 8 for download.&lt;/p&gt;
&lt;p&gt;According to the company, the new version of IE will faithfully follow W3C standards, to the joy of every Web developer, who always waste time modifying their code for IE standards.&lt;/p&gt;
&lt;p&gt;This promise from Microsoft represents a significant change in the company&amp;#39;s approach to web standards. Historically, Internet Explorer has been known for its own interpretations of standards, forcing developers to create specific code or alternative solutions.&lt;/p&gt;
&lt;p&gt;The adoption of W3C standards by IE8 can mean:&lt;/p&gt;
&lt;p&gt;In summary, Less time spent with Internet Explorer-specific fixes, Cleaner and more standardized code, Better compatibility between different browsers and More efficient web page development.&lt;/p&gt;
&lt;p&gt;To test the news, you can download the beta version through Microsoft&amp;#39;s official website.&lt;/p&gt;
&lt;p&gt;Link: &lt;a href=&quot;http://www.microsoft.com/windows/products/winfamily/ie/ie8/getitnow.mspx&quot;&gt;Internet Explorer 8 Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Although it&amp;#39;s a beta version, IE8 represents an important step by Microsoft towards web standards. For developers who have dealt with incompatibilities for years, this could be a very welcome change.&lt;/p&gt;
&lt;p&gt;Worth remembering that beta versions are intended for testing and may present instabilities. Caution is recommended when installing in production environments.&lt;/p&gt;
</content:encoded></item><item><title>Lego for iPhone, Lego Touch Game</title><link>https://alexbrodt.com/lego-for-iphone-touch-game</link><guid isPermaLink="true">https://alexbrodt.com/lego-for-iphone-touch-game</guid><description>Nicholas Panas creates Lego Touch for iPhone, a game that allows building virtual Lego blocks, constructing buildings, cars and sharing creations with friends.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nicholas Panas brought Lego blocks to the iPhone screen with Lego Touch. The fun is the same as always, just digital. You build structures, buildings and cars using your fingers, choose pieces and colors and keep fitting them until you reach what you imagined.&lt;/p&gt;
&lt;p&gt;The touch interface makes control natural. You can zoom in to get details right, rotate what you&amp;#39;re building and try combinations without fear of making mistakes. There&amp;#39;s no physical piece limit, no mess and no mysterious block disappearance at the end of the day.&lt;/p&gt;
&lt;p&gt;The game also encourages sharing. Creations can be shared with other people, and seeing what the community builds gives good ideas for the next project. It&amp;#39;s a simple way to maintain Lego&amp;#39;s creative spirit in a format that fits in your pocket.&lt;/p&gt;
&lt;p&gt;There&amp;#39;s a video showing how it works: &lt;a href=&quot;http://www.youtube.com/v/rXxTA-CQv_o&amp;hl=en&quot;&gt;http://www.youtube.com/v/rXxTA-CQv_o&amp;amp;hl=en&lt;/a&gt;. For those who grew up building Lego and today live with their phone nearby, it&amp;#39;s a natural meeting between nostalgia and touch screen.&lt;/p&gt;
</content:encoded></item><item><title>Leopard gets 4.5 stars from PC Magazine</title><link>https://alexbrodt.com/leopard-gets-4-5-stars-pc-magazine-review</link><guid isPermaLink="true">https://alexbrodt.com/leopard-gets-4-5-stars-pc-magazine-review</guid><description>PC Magazine gave 4.5 stars to Mac OS X Leopard, an impressive score coming from a magazine traditionally focused on Windows.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;PC Magazine gave 4.5 out of 5 stars to Mac OS X Leopard, which is impressive coming from a magazine traditionally focused on Windows. The review highlighted the integration between applications and how tasks flow without unnecessary friction.&lt;/p&gt;
&lt;p&gt;The timing was perfect. While Windows Vista gets beaten up for performance problems and confusing interface, Leopard appears as a polished and stable alternative. For Apple, this PC Magazine score works as an important credibility seal to win over undecided Windows users.&lt;/p&gt;
</content:encoded></item><item><title>Opera Surpasses Safari in Acid3, 100% Compatibility</title><link>https://alexbrodt.com/opera-surpasses-safari-acid3-test-100-percent</link><guid isPermaLink="true">https://alexbrodt.com/opera-surpasses-safari-acid3-test-100-percent</guid><description>Opera Software announces achieving 100% on Acid3 test, surpassing Safari (98%) and Firefox 3 (71%) in web standards compatibility.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Opera Software announced that it reached 100% on the Acid3 test, surpassing Safari, Firefox and Internet Explorer. Until then, Safari led with 98%, followed by Firefox 3 with 71%, and Internet Explorer stayed behind with a much lower score. With this result, Opera takes the lead in an important metric of web standards compatibility.&lt;/p&gt;
&lt;p&gt;Acid3 is a test that verifies how browsers implement standardized features, including DOM, JavaScript, CSS and other fundamental technologies. In practical terms, a high score signals that complex pages have a better chance of rendering correctly and consistently across different environments.&lt;/p&gt;
&lt;p&gt;For developers, the gain is direct: fewer compatibility problems, more predictable behavior and greater fidelity to what we define in code. For users, the experience tends to be more uniform and without surprises.&lt;/p&gt;
&lt;p&gt;The race for total compatibility has been heating up the competition between browser manufacturers. By scoring 100% on Acid3, Opera reinforces its image of commitment to open standards and positions itself as a solid alternative for testing and daily use. Safari remains strong, Firefox still has room to evolve in this metric and Internet Explorer needs to catch up. Overall, the web wins.&lt;/p&gt;
</content:encoded></item><item><title>Ubuntu 8.04 Hardy Heron Beta, LTS with 3D Features and Virtualization</title><link>https://alexbrodt.com/ubuntu-hardy-heron-beta-lts-3d-virtualization</link><guid isPermaLink="true">https://alexbrodt.com/ubuntu-hardy-heron-beta-lts-3d-virtualization</guid><description>Ubuntu 8.04 Hardy Heron Beta available for download. Second LTS distribution in Ubuntu history with 3D desktop features and virtualization improvements.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;After releasing six alpha versions, the Ubuntu development team presented on March 18th the first beta version of their distribution for download. Ubuntu 8.04 Hardy Heron will be the second LTS (Long-Term Support) distribution in Ubuntu history and marks a special moment for being the first extended support version to offer integrated 3D desktop features.&lt;/p&gt;
&lt;p&gt;The beta version didn&amp;#39;t come alone, along with it are available the variants Kubuntu (with KDE environment), Xubuntu (lightweight version with Xfce), Ubuntu Studio (aimed at multimedia production) and Edubuntu (focused on educational environment). This diversity of options demonstrates how the Ubuntu project matured to serve different user needs.&lt;/p&gt;
&lt;p&gt;Hardy Heron brings important updates to its main components. The GNOME 2.22 desktop environment offers the most modern experience available, while Kubuntu presents both stable KDE 3.5.9 and the new KDE 4.0 version, giving users flexibility to choose between proven stability and latest innovations.&lt;/p&gt;
&lt;p&gt;Under the hood, the system ships kernel 2.6.24 with active KVM (Kernel-based Virtual Machine), transforming the Linux kernel itself into an efficient hypervisor. This virtualization implementation represents a significant qualitative leap, especially for users who have processors with virtualization capabilities like Intel VT or AMD-V. Integrated virtualization offers superior performance with lower overhead compared to traditional solutions.&lt;/p&gt;
&lt;p&gt;The graphics system also received special attention with Xorg 7.3, which works together with the new 3D desktop features. This is the first time an Ubuntu LTS version includes native three-dimensional visual effects, providing a more modern and attractive interface that significantly improves user experience.&lt;/p&gt;
&lt;p&gt;As an LTS version, Hardy Heron offers extended support for a much longer period than regular versions, including enhanced stability for enterprise environments, prolonged security updates and a solid foundation for long-term deployments. This combination of LTS stability with innovations like 3D features and advanced virtualization positions Ubuntu 8.04 as a strategic choice for both home and corporate users.&lt;/p&gt;
&lt;p&gt;The final version is scheduled for April 2008, representing an important milestone in Ubuntu distribution evolution by combining maturity, stability and technological innovation in a single package.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href=&quot;http://www.linuxmagazine.com.br/noticia/nova_versao_do_ubuntu_traz_suporte_estendido_virtualizacao_e_recursos_3d&quot;&gt;LinuxMagazine.com.br&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Ulteo Screenshots, The Web Desktop by Gaël Duval</title><link>https://alexbrodt.com/ulteo-screenshots-web-desktop-gael-duval</link><guid isPermaLink="true">https://alexbrodt.com/ulteo-screenshots-web-desktop-gael-duval</guid><description>Ulteo is the virtual KDE desktop accessible via web browser, created by Gaël Duval, founder of Mandrake Linux. See screenshots of this technological innovation.</description><pubDate>Sat, 29 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ulteo is the virtual KDE desktop, accessible via web browser, produced by the company of Gaël Duval, the creator of Mandrake Linux.&lt;/p&gt;
&lt;p&gt;A collection of screenshots was made available by CodingStudio. Very interesting images. But it seems there&amp;#39;s a lot to evolve.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thecodingstudio.com/opensource/linux/screenshots/index.php?linux_distribution_sm=Ulteo%20Applications%20System%20Beta%201&quot;&gt;Check it out!&lt;/a&gt;&lt;/p&gt;
</content:encoded></item><item><title>Best Firefox Extensions</title><link>https://alexbrodt.com/best-firefox-extensions-web-development</link><guid isPermaLink="true">https://alexbrodt.com/best-firefox-extensions-web-development</guid><description>Discover the 10 best Firefox extensions for web development. Essential tools like FireBug, Web Developer, ColorZilla and much more.</description><pubDate>Wed, 26 Mar 2008 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I&amp;#39;ve separated my favorite Firefox extensions for web development. These are the ones I install first when setting up a new environment and that, day to day, save me time and headaches.&lt;/p&gt;
&lt;p&gt;The combo starts with the classic &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/1843&quot;&gt;FireBug&lt;/a&gt;, which remains unbeatable for inspecting and debugging HTML, CSS and JavaScript directly on the page. Alongside it, &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/60&quot;&gt;Web Developer&lt;/a&gt; offers quick panels to validate markup, turn off styles, simulate scenarios and reveal what&amp;#39;s behind each element. To get the palette right and not miss the detail, &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/271&quot;&gt;ColorZilla&lt;/a&gt; solves it with a precise eyedropper; when I need to measure spaces, &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/539&quot;&gt;Measure&lt;/a&gt; gives the size in pixels without guesswork.&lt;/p&gt;
&lt;p&gt;On the quality side, &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/249&quot;&gt;HTML Validator&lt;/a&gt; helps keep the house in order and &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/532&quot;&gt;LinkChecker&lt;/a&gt; scours the page for broken links before the client finds them. For those working with back-end, &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/6149&quot;&gt;FirePHP&lt;/a&gt; opens an elegant debugging channel between server and browser. In the publishing routine, &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/684&quot;&gt;FireFTP&lt;/a&gt; saves the day when you need to upload files without leaving the browser, and the del.icio.us bookmarks extension makes it easy to save references to find later: &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/3615&quot;&gt;Bookmark, del.icio.us&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is my base. If you have some hidden gem that should be on this list, send it in the comments. Good tools are those that disappear and let us focus on the code.&lt;/p&gt;
</content:encoded></item></channel></rss>