Planet Geek
http://www.planetgeek.org/
enPlanet Geek - http://www.planetgeek.org/
http://www.planetgeek.org/
https://planetgeek.org/images/pgrsslogo.gifPlanet Geek4848Planet GeekAberto até de Madrugada: Epic volta aos tribunais para forçar Apple a aceitar o Fortnitehttps://abertoatedemadrugada.com/2025/05/epic-volta-aos-tribunais-para-forcar.html
https://abertoatedemadrugada.com/2025/05/epic-volta-aos-tribunais-para-forcar.html
<div><a href="https://abertoatedemadrugada.com/2025/05/epic-volta-aos-tribunais-para-forcar.html"><img alt="" border="0" data-original-height="1000" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi__a5KCPcPKbB0oJjRQRQLiE9rBEabI_KSEsWIqFHQqLWbvQrUAIie-VUGxucam_XhsKDlOvjYrm1gruKoYQOuXYMbeifbToPG-r6leZzBAM2Fl2pU529XRI1GKVxsjYFL2bAz9G_h1s9SLApFzqAMH7nM6uowcgehkPOf3YI9IMCpHa-TR18IRx_sFKk_/s1600/fortnite.jpg" width="600"></a></div>
A Epic Games pediu a uma juíza para obrigar a Apple a aprovar o regresso de Fortnite à App Store nos EUA, alegando que a empresa está a violar uma ordem judicial recente.<br><br><a name="more"></a>
Segundo a Epic, a Apple está a ignorar a decisão de abril que <a href="https://abertoatedemadrugada.com/2025/05/epic-derrota-apple-nas-comissoes-da-app.html">impede a rejeição de apps</a> apenas por incluírem links para métodos de pagamento externos.<br><br>
Numa carta partilhada pela Epic, a Apple afirma que não analisará a submissão de Fortnite até que o tribunal de recurso decida sobre o seu pedido para suspender parcialmente a decisão. A Epic vê isto como uma retaliação e garante que o jogo cumpre todas as diretrizes da App Store — algo que, segundo a própria Apple, seria suficiente para ser aceite.<br><br><blockquote><p dir="ltr" lang="en">Yesterday afternoon, Apple broke its week-long silence on the status of our app review with a letter saying they will not act on the Fortnite app submission until the Ninth Circuit Court rules on the partial stay. We believe this violates the Court’s Injunction and we have filed…</p>— Epic Games Newsroom (@EpicNewsroom) <a href="https://twitter.com/EpicNewsroom/status/1923558197802971459?ref_src=twsrc%5Etfw">May 17, 2025</a></blockquote> <br>
O impasse já afetou também o mercado europeu. Após uma atualização da versão da UE que incluía o acesso ao mercado dos EUA, a Apple retirou Fortnite da App Store europeia. Mais tarde, pediu à Epic para reenviar a app sem o suporte aos EUA, evitando assim problemas noutras regiões. Mas a Epic contesta, dizendo que isso obrigaria a criar várias versões do jogo - algo que contradiz as regras da Apple.<br><br>
Agora, a Epic quer que o tribunal faça cumprir a decisão, declare novamente a Apple em desrespeito e obrigue a empresa a aceitar qualquer versão do Fortnite que esteja conforme. Tudo dependerá de como a juíza interpreta esta nova situação, especialmente depois das duras críticas feitas à Apple na decisão de 30 de abril.<br><br>Tue, 20 May 2025 20:00:00 +0000Aberto até de Madrugada: Google Wallet pode pedir PIN em Android e Wear OShttps://abertoatedemadrugada.com/2025/05/google-wallet-pode-pedir-pin-em-android.html
https://abertoatedemadrugada.com/2025/05/google-wallet-pode-pedir-pin-em-android.html
<div><a href="https://abertoatedemadrugada.com/2025/05/google-wallet-pode-pedir-pin-em-android.html"><img alt="" border="0" width="600" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpVKJ50DRtOPHMiCF1RhlKOI5Wnht-i5sg9y6mMprDCnSBY5uarOOfSK9n3TdB41ShPj99HNK8F4qcvvJdG9naEjVu13D0AZ9JFuEEw9hFe9HTQj6wyooVX5Q3hSH8HK1qyei_AQtQjcQ2s9beTm_pIcg7gFdRHzuWuehUPZeE9CmOx3q7GDpD1WL67iS4/s1600/androidwallet.jpg"></a></div>
Aceder à Google Wallet poderá tornar-se menos conveniente em breve, mas mais segura, com exigência de autenticação.<br><br><a name="more"></a>
A Google está a testar reforços de segurança no Google Wallet para Android e Wear OS. Em breve, poderá ser necessário autenticar a identidade não só para fazer pagamentos, mas também para aceder ao ecrã principal da aplicação. Ou seja, será preciso desbloquear com PIN, palavra-passe ou biometria, mesmo que seja apenas para ver os cartões e documentos digitais.<br><br>
Esta mudança surge após uma actualização em 2024 que obrigava à verificação antes de pagamentos sem contacto, com exceção para transportes públicos. Agora que a aplicação guarda também documentos como cartas de condução e cartões de estudante, faz sentido garantir uma proteção extra.<br><br>
No caso dos relógios com Wear OS, a Google pode voltar a exigir a introdução do PIN em cada pagamento por aproximação. Embora esta medida já tenha causado polémica no passado por ser vista como um erro, alguns utilizadores relatam que voltou, e o apoio técnico da Google afirma que <a href="https://www.androidpolice.com/google-wallet-testing-stronger-security-measures-android-wear-os/">poderá tornar-se permanente</a>.<br><br>
Nada disto está oficialmente confirmado, mas tudo indica que a Google pretende tornar o Wallet mais seguro, à medida que a app passa a guardar mais do que apenas cartões bancários.<br><br>Tue, 20 May 2025 17:30:00 +0000Alexsandro Felix: Guia Prático: Manipule Listas em Python com Facilidadehttps://blog.ffelix.eti.br/guia-pratico-manipule-listas-em-python-com-facilidade/
https://blog.ffelix.eti.br/guia-pratico-manipule-listas-em-python-com-facilidade/
<p>Se você está começando sua jornada na programação com Python, provavelmente já se deparou com listas – essas estruturas incríveis que armazenam dados de forma organizada e flexível. Hoje, vamos destrinchar um código simples, mas poderoso, que manipula uma lista de preços. Nosso objetivo? Explicar cada linha de forma clara, com um toque de bom humor, para que você não só entenda o que está acontecendo, mas também se sinta confiante para testar e brincar com o código. Vamos mergulhar nesse universo de números e aprender como ordenar, somar, encontrar máximos, mínimos e muito mais!</p>
<p>Nosso código de exemplo é um script Python que manipula uma lista de preços de produtos. Ele é perfeito para iniciantes que querem entender como trabalhar com listas e funções básicas da linguagem. Vamos analisar cada parte, explicar o que ela faz e fornecer exemplos práticos para você testar. Ao final, você estará pronto para aplicar esses conceitos em seus próprios projetos e, quem sabe, dar um passo a mais na sua jornada de aprendizado com Python!</p>
<h2>O Código Explicado: Manipulando Preços com Python</h2>
<p>Aqui está o código que vamos explorar:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>prices = [33, 49, 55, 14]
print(prices)
# prices in order
sorted_prices = sorted(prices)
print(f”preços em ordem crescente: {sorted_prices}”)
# invertered prices
inv_prices = sorted(prices, reverse=True)
print(f”preços em ordem decrescente: {inv_prices}”)
# only 3 bigger prices
print(f”Os 3 maiores preços: {inv_prices[:3]}”)
# total price
total = sum(prices)
print(f”Soma total: {total}”)
# maximum price
max_price = max(prices)
print(f”o valor mais alto é: {max_price}”)
# minumim price
min_price = min(prices)
print(f”o menor valor é: {min_price}”)
# number of products
n_products = len(prices)
print(f”quantia de itens: {n_products}”)
# average
average = total / n_products
print(f”a media de valor é: {average}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>prices </span><span>=</span><span> </span><span>[</span><span>33</span><span>,</span><span> </span><span>49</span><span>,</span><span> </span><span>55</span><span>,</span><span> </span><span>14</span><span>]</span></span>
<span><span>print</span><span>(</span><span>prices</span><span>)</span></span>
<span></span>
<span><span># prices in order</span></span>
<span><span>sorted_prices </span><span>=</span><span> </span><span>sorted</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"preços em ordem crescente: </span><span>{</span><span>sorted_prices</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span># invertered prices</span></span>
<span><span>inv_prices </span><span>=</span><span> </span><span>sorted</span><span>(</span><span>prices</span><span>,</span><span> </span><span>reverse</span><span>=True</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"preços em ordem decrescente: </span><span>{</span><span>inv_prices</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span># only 3 bigger prices</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Os 3 maiores preços: </span><span>{</span><span>inv_prices</span><span>[:</span><span>3</span><span>]</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span># total price</span></span>
<span><span>total </span><span>=</span><span> </span><span>sum</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Soma total: </span><span>{</span><span>total</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span># maximum price</span></span>
<span><span>max_price </span><span>=</span><span> </span><span>max</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"o valor mais alto é: </span><span>{</span><span>max_price</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span># minumim price</span></span>
<span><span>min_price </span><span>=</span><span> </span><span>min</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"o menor valor é: </span><span>{</span><span>min_price</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span># number of products</span></span>
<span><span>n_products </span><span>=</span><span> </span><span>len</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"quantia de itens: </span><span>{</span><span>n_products</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span># average</span></span>
<span><span>average </span><span>=</span><span> total </span><span>/</span><span> n_products</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"a media de valor é: </span><span>{</span><span>average</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>Agora, vamos dissecar cada trecho para que você entenda exatamente o que está acontecendo e como pode usar essas técnicas em outros projetos.</p>
<h2>Criando e Exibindo a Lista de Preços</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>prices = [33, 49, 55, 14]
print(prices)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>prices </span><span>=</span><span> </span><span>[</span><span>33</span><span>,</span><span> </span><span>49</span><span>,</span><span> </span><span>55</span><span>,</span><span> </span><span>14</span><span>]</span></span>
<span><span>print</span><span>(</span><span>prices</span><span>)</span></span></code></pre></div>
<p>Aqui, criamos uma lista chamada <code>prices</code> com quatro valores: 33, 49, 55 e 14. Uma lista em Python é como uma sacola de compras – você pode colocar vários itens dentro dela, e cada item pode ser acessado ou manipulado. O comando <code>print(prices)</code> simplesmente exibe a lista na tela: <mark>[33, 49, 55, 14].</mark></p>
<p><strong>Teste você mesmo</strong>: Crie uma lista com preços de produtos que você gosta (como livros, jogos ou lanches). Use o <code>print()</code> para exibir a lista e veja o resultado!</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly># Exemplo para você testar
meus_precos = [20, 15, 30, 25]
print(meus_precos) # Saída: [20, 15, 30, 25]</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span># Exemplo para você testar</span></span>
<span><span>meus_precos </span><span>=</span><span> </span><span>[</span><span>20</span><span>,</span><span> </span><span>15</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>25</span><span>]</span></span>
<span><span>print</span><span>(</span><span>meus_precos</span><span>)</span><span> </span><span># Saída: [20, 15, 30, 25]</span></span></code></pre></div>
<h2>Ordenando a Lista em Ordem Crescente</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>sorted_prices = sorted(prices)
print(f”preços em ordem crescente: {sorted_prices}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>sorted_prices </span><span>=</span><span> </span><span>sorted</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"preços em ordem crescente: </span><span>{</span><span>sorted_prices</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>A função <code>sorted()</code> pega a lista <code>prices</code> e a organiza em ordem crescente (do menor para o maior). O resultado é armazenado em <code>sorted_prices</code>. No nosso caso, a saída será: <mark>[14, 33, 49, 55]</mark>. A string formatada com <code>f (f-string)</code> deixa a saída mais amigável: preços em ordem crescente: <mark>[14, 33, 49, 55]</mark>.</p>
<p><strong>Por que isso é útil</strong>? Imagine que você está comparando preços em uma loja online. Ordenar os preços ajuda a encontrar o mais barato rapidinho!</p>
<p><strong>Teste você mesmo</strong>: Modifique a lista meus_precos do exemplo anterior e ordene-a em ordem crescente.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>meus_precos = [20, 15, 30, 25]
ordenados = sorted(meus_precos)
print(f”Preços ordenados: {ordenados}”) # Saída: Preços ordenados: [15, 20, 25, 30]</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>meus_precos </span><span>=</span><span> </span><span>[</span><span>20</span><span>,</span><span> </span><span>15</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>25</span><span>]</span></span>
<span><span>ordenados </span><span>=</span><span> </span><span>sorted</span><span>(</span><span>meus_precos</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Preços ordenados: </span><span>{</span><span>ordenados</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: Preços ordenados: [15, 20, 25, 30]</span></span></code></pre></div>
<p>Se você quer aprender mais sobre estruturas como listas e como manipulá-las, recomendo dar uma olhada no artigo <a href="https://blog.ffelix.eti.br/python-para-iniciantes-lacos-e-variaveis-descomplicados/" target="_blank" rel="noopener" title="">Python para Iniciantes: Laços e Variáveis Descomplicados</a>. Ele é perfeito para reforçar esses conceitos!</p>
<h2>Ordenando em Ordem Decrescente</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>inv_prices = sorted(prices, reverse=True)
print(f”preços em ordem decrescente: {inv_prices}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>inv_prices </span><span>=</span><span> </span><span>sorted</span><span>(</span><span>prices</span><span>,</span><span> </span><span>reverse</span><span>=True</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"preços em ordem decrescente: </span><span>{</span><span>inv_prices</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>Aqui, usamos a mesma função <code>sorted()</code>, mas com o parâmetro <code>reverse=True</code>, que inverte a ordem, <mark>organizando do maior para o menor. A saída será:</mark><mark> [55, 49, 33, 14]</mark>. Isso é ótimo para identificar os itens mais caros rapidamente.</p>
<p><strong>Teste você mesmo</strong>: Pegue a lista <code>meus_precos</code> e ordene-a em ordem decrescente.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>meus_precos = [20, 15, 30, 25]
invertidos = sorted(meus_precos, reverse=True)
print(f”Preços em ordem decrescente: {invertidos}”) # Saída: [30, 25, 20, 15]</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>meus_precos </span><span>=</span><span> </span><span>[</span><span>20</span><span>,</span><span> </span><span>15</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>25</span><span>]</span></span>
<span><span>invertidos </span><span>=</span><span> </span><span>sorted</span><span>(</span><span>meus_precos</span><span>,</span><span> </span><span>reverse</span><span>=True</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Preços em ordem decrescente: </span><span>{</span><span>invertidos</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: [30, 25, 20, 15]</span></span></code></pre></div>
<h2>Selecionando os Três Maiores Preços</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>print(f”Os 3 maiores preços: {inv_prices[:3]}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>print</span><span>(</span><span>f</span><span>"Os 3 maiores preços: </span><span>{</span><span>inv_prices</span><span>[:</span><span>3</span><span>]</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>Aqui, usamos o fatiamento <code>([:3])</code> para pegar os três primeiros itens da lista <code>inv_prices</code>. Como ela já está em ordem decrescente, isso nos dá os três maiores preços: [<mark>55, 49, 33]</mark>.</p>
<p><strong>Por que isso é legal</strong>? Se você está gerenciando uma loja, pode querer destacar os produtos premium. Esse truque é perfeito para isso!</p>
<p><strong>Teste você mesmo</strong>: Crie uma lista com 5 preços e exiba apenas os dois maiores.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>precos_loja = [100, 50, 75, 25, 10]
maiores = sorted(precos_loja, reverse=True)[:2]
print(f”Os 2 maiores preços: {maiores}”) # Saída: [100, 75]</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>precos_loja </span><span>=</span><span> </span><span>[</span><span>100</span><span>,</span><span> </span><span>50</span><span>,</span><span> </span><span>75</span><span>,</span><span> </span><span>25</span><span>,</span><span> </span><span>10</span><span>]</span></span>
<span><span>maiores </span><span>=</span><span> </span><span>sorted</span><span>(</span><span>precos_loja</span><span>,</span><span> </span><span>reverse</span><span>=True</span><span>)[:</span><span>2</span><span>]</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Os 2 maiores preços: </span><span>{</span><span>maiores</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: [100, 75]</span></span></code></pre></div>
<h2>Calculando a Soma Total</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>total = sum(prices)
print(f”Soma total: {total}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>total </span><span>=</span><span> </span><span>sum</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Soma total: </span><span>{</span><span>total</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>A função <code>sum()</code> soma todos os valores da lista <code>prices</code>. No nosso caso, <mark>33 + 49 + 55 + 14 = 151</mark>. A saída será: <mark>Soma total: 151</mark>.</p>
<p><strong>Teste você mesmo</strong>: Some os preços da sua lista <code>meus_precos</code>.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>meus_precos = [20, 15, 30, 25]
total = sum(meus_precos)
print(f”Soma total: {total}”) # Saída: Soma total: 90</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>meus_precos </span><span>=</span><span> </span><span>[</span><span>20</span><span>,</span><span> </span><span>15</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>25</span><span>]</span></span>
<span><span>total </span><span>=</span><span> </span><span>sum</span><span>(</span><span>meus_precos</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Soma total: </span><span>{</span><span>total</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: Soma total: 90</span></span></code></pre></div>
<h2>Encontrando o Maior e o Menor Preço</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>max_price = max(prices)
print(f”o valor mais alto é: {max_price}”)
min_price = min(prices)
print(f”o menor valor é: {min_price}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>max_price </span><span>=</span><span> </span><span>max</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"o valor mais alto é: </span><span>{</span><span>max_price</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span>min_price </span><span>=</span><span> </span><span>min</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"o menor valor é: </span><span>{</span><span>min_price</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>As funções <code>max()</code> e <code>min()</code> retornam, respectivamente, o maior e o menor valor da lista. Aqui, o maior preço é <mark>55</mark> e o menor é <mark>14</mark>.</p>
<p><strong>Teste você mesmo</strong>: Encontre o maior e o menor preço da sua lista.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>meus_precos = [20, 15, 30, 25]
maior = max(meus_precos)
menor = min(meus_precos)
print(f”Maior preço: {maior}, Menor preço: {menor}”) # Saída: Maior preço: 30, Menor preço: 15</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>meus_precos </span><span>=</span><span> </span><span>[</span><span>20</span><span>,</span><span> </span><span>15</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>25</span><span>]</span></span>
<span><span>maior </span><span>=</span><span> </span><span>max</span><span>(</span><span>meus_precos</span><span>)</span></span>
<span><span>menor </span><span>=</span><span> </span><span>min</span><span>(</span><span>meus_precos</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Maior preço: </span><span>{</span><span>maior</span><span>}</span><span>, Menor preço: </span><span>{</span><span>menor</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: Maior preço: 30, Menor preço: 15</span></span></code></pre></div>
<h2>Contando o Número de Itens</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>n_products = len(prices)
print(f”quantia de itens: {n_products}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>n_products </span><span>=</span><span> </span><span>len</span><span>(</span><span>prices</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"quantia de itens: </span><span>{</span><span>n_products</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>A função <code>len()</code> conta quantos itens estão na lista. Aqui, temos 4 preços, então a saída é: quantia de itens: <mark>4</mark>.</p>
<p><strong>Teste você mesmo</strong>: Conte os itens da sua lista.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>meus_precos = [20, 15, 30, 25]
quantidade = len(meus_precos)
print(f”Quantidade de itens: {quantidade}”) # Saída: Quantidade de itens: 4</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>meus_precos </span><span>=</span><span> </span><span>[</span><span>20</span><span>,</span><span> </span><span>15</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>25</span><span>]</span></span>
<span><span>quantidade </span><span>=</span><span> </span><span>len</span><span>(</span><span>meus_precos</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Quantidade de itens: </span><span>{</span><span>quantidade</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: Quantidade de itens: 4</span></span></code></pre></div>
<h2>Calculando a Média</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>average = total / n_products
print(f”a media de valor é: {average}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>average </span><span>=</span><span> total </span><span>/</span><span> n_products</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"a media de valor é: </span><span>{</span><span>average</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>Para calcular a média, dividimos a soma total <mark>(total)</mark> pelo número de itens <code>(n_products)</code>. Aqui, <mark>151 / 4 = 37.75</mark>. A saída é: a <mark>media de valor é:</mark><mark>37.75</mark>.</p>
<p><strong>Teste você mesmo</strong>: Calcule a média da sua lista.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>meus_precos = [20, 15, 30, 25]
total = sum(meus_precos)
quantidade = len(meus_precos)
media = total / quantidade
print(f”A média de valor é: {media}”) # Saída: A média de valor é: 22.5</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>meus_precos </span><span>=</span><span> </span><span>[</span><span>20</span><span>,</span><span> </span><span>15</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>25</span><span>]</span></span>
<span><span>total </span><span>=</span><span> </span><span>sum</span><span>(</span><span>meus_precos</span><span>)</span></span>
<span><span>quantidade </span><span>=</span><span> </span><span>len</span><span>(</span><span>meus_precos</span><span>)</span></span>
<span><span>media </span><span>=</span><span> total </span><span>/</span><span> quantidade</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"A média de valor é: </span><span>{</span><span>media</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: A média de valor é: 22.5</span></span></code></pre></div>
<h2>Por Que Python é Tão Incrível para Isso?</h2>
<p>Python é uma linguagem simples, mas poderosa, que permite manipular dados com poucas linhas de código. Se você está começando, pode parecer que há muito a aprender, mas com prática, essas operações vão parecer brincadeira de criança! Quer saber por que Python é a escolha perfeita para iniciantes e profissionais? Confira este artigo: <a href="https://blog.ffelix.eti.br/python-vs-outras-linguagens-por-que-escolher-python-em-2025/" target="_blank" rel="noopener" title="">Python vs. Outras Linguagens: Por Que Escolher Python em 2025</a>?.</p>
<p>E se você quer acelerar sua jornada, recomendo o e-book <a href="https://go.hotmart.com/F13340196Y" target="_blank" rel="noopener" title="">Python de A-Z: Guia de Primeiros Passos com a Linguagem</a> (clique <a href="https://go.hotmart.com/F13340196Y" title="">aqui</a> para adquirir). Ele é perfeito para quem está começando e quer dominar os fundamentos com exemplos práticos e explicações claras. Pense nisso como seu mapa do tesouro para aprender Python!</p>
<h2>Dica Extra: Loops para Manipular Listas</h2>
<p>Para dar um gostinho a mais, que tal usar um loop para exibir cada preço da lista individualmente? Isso é útil para processar cada item de forma personalizada. Veja este exemplo:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" aria-label="Copy"><textarea aria-hidden="true" readonly>precos = [33, 49, 55, 14]
for preco in precos:
print(f”Preço individual: {preco}”)</textarea><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>precos </span><span>=</span><span> </span><span>[</span><span>33</span><span>,</span><span> </span><span>49</span><span>,</span><span> </span><span>55</span><span>,</span><span> </span><span>14</span><span>]</span></span>
<span><span>for</span><span> preco </span><span>in</span><span> precos</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Preço individual: </span><span>{</span><span>preco</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<p>Saída:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill=&qTue, 20 May 2025 16:12:52 +0000Aberto até de Madrugada: Hub USB-C Baseus 9-em-1 com 2 HDMI a €36https://abertoatedemadrugada.com/2025/05/hub-usb-c-baseus-9-em-1-com-2-hdmi-36.html
https://abertoatedemadrugada.com/2025/05/hub-usb-c-baseus-9-em-1-com-2-hdmi-36.html
<div><a href="https://abertoatedemadrugada.com/2025/05/hub-usb-c-baseus-9-em-1-com-2-hdmi-36.html"><img alt="" border="0" data-original-height="844" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIvfoldxGEmP-9ioKn0YsfbQpQORaR91HT3pwwkBPP3cavqinovcBFCqk9CpDTko_yWfpaWlMX1uQmMsH39UFxkGp3gMIqzNgIzFdCkKQEFrH-xHA4fCBQhWV2LfpLvmPybf3qlZcTIj-eMb4H6EODE6GqsbVncM5C_EYrFiwCNTzPJuTfUHwGWxLZHA/s1600/baseus.jpg" width="600"></a></div>
O processo de transição para as portas USB-C faz inevitavelmente com que seja necessário usar um hub para manter as ligações tradicionais, e é precisamente isso que faz este hub Baseus 9-em-1 com 2 portas HDMI.<br><br><a name="more"></a>O objectivo das fichas USB-C era passarem a ser a ligação universal para tudo, mas esse é um processo que não pode ser feito de um dia para o outro. A maioria dos utilizadores continuará a ter inúmeros produtos que contam com outras fichas, e o recurso a adaptadores, ou um hub, acaba por ser indispensável.<br><br>
No caso deste <a href="https://amzn.to/3ZAXKSr">hub USB-C Baseus</a>, uma única porta USB-C pode multiplicar-se em: 2x portas USB 3.0, 1 porta USB-C com PD 100W, 1x porta USB 2.0 de 480 Mbps, leitor de cartões SD, leitor de cartões microSD (que podem ser usados em simultâneo), 1x porta Ethernet Gigabit, e 2x portas HDMI com suporte para resoluções 4K.<br><div><a href="https://amzn.to/3ZAXKSr"><img alt="" border="0" data-original-height="751" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU_BLWeA1WYUACdf7KUTpoRCufnPeiaGCsg9KajcwywRW55QGSVAwLlar8RtHoF678A375u42c-Pls-yF4qPTPxwGzCljtxA2Qpsig4E8sIvvxAqhRlLxuEHwZKI-I3bS-G8TzxM9Q1P-X4wHpZFPCA9JgtlAvOY4zaRvwi85woKT1sQPrLEGIBzLRYw/s600/baseushub.jpg" width="600"></a></div>
Este <a href="https://amzn.to/3ZAXKSr">hub USB-C Baseus 9-em-1</a> está disponível por 39 euros na Amazon Espanha - activar desconto de 40%.<br><br>
Este hub suporta também carregamento rápido via USB-PD até um máximo de 100 W; pelo que será mais que suficiente para recarregar portáteis usando um único cabo, enquanto simultaneamente dá acesso a todas as demais portas que disponibiliza; mas o elemento que será mais diferenciador será o de permitir a utilização de dois monitores externos, usando as 2 portas HDMI.<br><br>
Também está disponível uma versão que permite <a href="https://amzn.to/3SHH2QR">ligar até quatro monitores</a>.<br><br><br>
Acompanha as melhores promoções diárias no nosso grupo <a href="https://www.facebook.com/groups/AadM.Promos/?sorting_setting=CHRONOLOGICAL">AadM Promos</a>.<br><br>Tue, 20 May 2025 15:30:00 +0000Aberto até de Madrugada: Huawei apresenta MateBook Fold Ultimate: portátil dobrável de 18"https://abertoatedemadrugada.com/2025/05/huawei-apresenta-matebook-fold-ultimate.html
https://abertoatedemadrugada.com/2025/05/huawei-apresenta-matebook-fold-ultimate.html
<div><a href="https://abertoatedemadrugada.com/2025/05/huawei-apresenta-matebook-fold-ultimate.html"><img alt="" border="0" width="600" data-original-height="800" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZZWBMRTQkdcWHCGNZwNMvWyyCUbqwhtS_BBVEiZZWUJP-fBFxffCAUW62oSbMitUAjel-zmtd2j06X5V9M1cet06THDx-frxjqJtIkFlmr04EEHBcyWnvklTpYoT_gBMGrjzOSh75sNeHsCv7qbvgmjxuHalsvssIhWA6FG-_K_N0wcFcNgYi-HlC_b3o/s1600/huaweifoldbook.jpg"></a></div>
A Huawei revelou oficialmente o MateBook Fold Ultimate, um portátil dobrável com um ecrã OLED de 18", que se dobra até ficar com o tamanho de um de 13".<br><br><a name="more"></a>
O <a href="https://consumer.huawei.com/cn/harmonyos-computer/matebook-fold-ultimate-design/">MateBook Fold Ultimate</a> corre o sistema HarmonyOS PC e adapta-se a vários modos de utilização, incluindo posição vertical ou horizontal completa, ou a 90° com teclado virtual.<br><br>
O ecrã tem uma proporção 4:3 quando totalmente aberto e resolução de 3.296 x 2.472 píxeis, com brilho até 1.600 nits. A tecnologia OLED LTPO de dupla camada reduz o consumo de energia em 30% e triplica a durabilidade. A estrutura é em fibra de carbono, com proteção por fluido não newtoniano (endurece apenas quando sujeito a impactos).<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8QitYFDPBx48zaeiK28__pcaYfmKxL74seDM-vOSW_M0j4HQJJfbKc46OCL64x0SCZjlU8ErUW_kxHXE0k5RTCcLxSnSUB8XGL63E1w5k7ssnMexJ5-eaDT8iEa29TRKvW9QrkN0Ii5zTTFMk8XKHddWkgyvLuBVrtfTTNY7c18tv2Ql8jpnwBUehswu8/s1240/matebookfold.jpg"><img alt="" border="0" data-original-height="860" data-original-width="1240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8QitYFDPBx48zaeiK28__pcaYfmKxL74seDM-vOSW_M0j4HQJJfbKc46OCL64x0SCZjlU8ErUW_kxHXE0k5RTCcLxSnSUB8XGL63E1w5k7ssnMexJ5-eaDT8iEa29TRKvW9QrkN0Ii5zTTFMk8XKHddWkgyvLuBVrtfTTNY7c18tv2Ql8jpnwBUehswu8/s600/matebookfold.jpg" width="600"></a></div>
Apesar do ecrã generoso, o portátil mantém-se leve e fino – pesa 1,16 kg fechado e apenas 7,3 mm quando aberto. Inclui 32GB de RAM e até 2TB de SSD, embora o processador ainda não tenha sido revelado. Também vem com um teclado sem fios ultrafino de 5mm, feito em liga de alumínio.<br><br>
O MateBook Fold Ultimate estará disponível em três cores, com acessórios a condizer, incluindo capas e um carregador USB-C de 140W. Com Wi-Fi 6, Bluetooth 5.2, seis colunas e quatro microfones, está preparado para qualquer utilização. Já está em pré-venda na China, com lançamento a 6 de junho. Os preços começam nos 2.950 euros para o modelo de 1TB.<br><br>Tue, 20 May 2025 13:30:00 +0000Aberto até de Madrugada: Apple pode deixar trocar Siri por ChatGPT ou Geminihttps://abertoatedemadrugada.com/2025/05/apple-pode-deixar-trocar-siri-por.html
https://abertoatedemadrugada.com/2025/05/apple-pode-deixar-trocar-siri-por.html
<div><a href="https://abertoatedemadrugada.com/2025/05/apple-pode-deixar-trocar-siri-por.html"><img alt="" border="0" width="600" data-original-height="919" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-16L8HDzRF57fp_MvHaeR4TMKE-QJkc2oGOLcUVSwnAtgj5CV3ztLnxAbbFcMcR6QUXsN-lpEqxZORdtVYt3T-0zLDe1uQU-H5H6Tmj1hbuh0w6dm5n7PCJFTUNXLhWIIMIlUTucjqAPdaCPEQaTQqBFlmsh-BxIxrL7VM12Y-HcY6SAa8H0n5FXCjoP5/s1600/appleai.jpg"></a></div>
A Apple poderá em breve dar aos utilizadores dos iPhone a liberdade de escolher o assistente de voz que preferirem.<br><br><a name="more"></a>
Segundo alguns relatos, a empresa está a considerar o <a href="https://www.bloomberg.com/news/features/2025-05-18/how-apple-intelligence-and-siri-ai-went-so-wrong">suporte para assistentes AI de terceiros</a>, como o ChatGPT, Amazon Alexa ou Google Gemini, permitindo aos utilizadores usarem um assistente alternativo directamente no sistema, além da Siri, pela primeira vez em mais de 10 anos.<br><br>
Esta possível mudança surge numa altura em que a Apple enfrenta pressão por parte dos utilizadores e regulações europeias mais rigorosas, que promovem maior liberdade de escolha e concorrência. Ao permitir assistentes de AI alternativos, a marca poderá evitar conflitos legais, especialmente no espaço europeu. Actualmente a Apple já permite fazer a integração do ChatGPT via Siri, pelo que há curiosidade em saber se este novo método substituiria por completo a Siri ou se limitaria a permitir maior liberdade na integração de assistentes via Siri.<br><br>
Se se confirmar, a possibilidade de trocar a Siri por alternativas como o ChatGPT representará uma mudança importante para a Apple, que sempre manteve um controlo apertado sobre o seu ecossistema. Mas num mercado dominado por modelos de linguagem avançados, manter a Siri como única opção poderá já não ser suficiente.<br><br>Tue, 20 May 2025 11:00:00 +0000Aberto até de Madrugada: Ganha um mini-leitor MP3 BThttps://abertoatedemadrugada.com/2025/05/ganha-um-mini-leitor-mp3-bt.html
https://abertoatedemadrugada.com/2025/05/ganha-um-mini-leitor-mp3-bt.html
<div><a href="https://abertoatedemadrugada.com/2025/05/ganha-um-mini-leitor-mp3-bt.html"><img alt="" border="0" data-original-height="958" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsjpom7jSNEyqVd_a1I-IIgxBzaSTPiO_0htc6axrBuc0lpduHWeFAmwahm35bw60s3HWzn6VNS-VE0BpaDeedkEfXCNkPv03S_UhtHb3zGDy6mqf0ilpxSDlIQX6FkAtVJQBv_Jf4oWw/s1600/mp3.jpg" width="600"></a></div>
Todas as semanas temos gadgets para vos oferecer, e desta vez a escolha recai sobre um mini-leitor MP3 compacto bastante simpático.<br><br><a name="more"></a>
Em tempos pequenas maravilhas da tecnologia, os leitores MP3 perderam protagonismo com a ascensão dos smartphones e das suas impressionantes capacidades. Mas, isto não significa que não possam haver situações em que continue a ser preferível usar um leitor MP3 dedicado, e por isso mesmo estamos a oferecer um bastante compacto, com <a href="https://amzn.to/3WNK2fz">ecrã de 1.8" e Bluetooth</a>, para que possam continuar a ouvir a música sem fios.<br><div><a href="https://amzn.to/3WNK2fz"><img alt="" border="0" data-original-height="750" data-original-width="1500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqTiIxfqAuo9n0NuIHUShhtrMhi5M0UmK3e-41ei3xL37TZ-197iSbfM1xeiCE_ksPxDxzufY6tzqprEHMqfcHeO_zfHGJSQE-hZwqV2ZD8oj-GXHPAJg53a9klVCNxdezMPp-TbUSJt8/s560/mp3player.jpg"></a></div>
Já sabem como funcionam os nossos passatempos semanais: ao longo dos próximos dias iremos colocando diferentes perguntas no formulário que se segue, e no final o mesmo será oferecido aleatoriamente entre os participantes que tiverem acertado correctamente pelo menos numa delas (sendo que mais respostas certas melhorarão as vossas probabilidades de ganharem - mas atenção, pois apenas conta a primeira resposta que derem a cada pergunta.)<br><br>Loading…<br><!--<span style="color: red;"><b>Passatempo encerrado:</b></span> O vencedor foi o , que já foi contactado por email com as boas notícias. Fica atento aos <a href="http://abertoatedemadrugada.com/search/label/Passatempos">próximos passatempos</a>.<br />--><br>
Passatempo aberto a todos os participantes com morada em Portugal.<br><br>Tue, 20 May 2025 09:00:00 +0000Aberto até de Madrugada: Xiaomi apresenta SU7 no dia 22 de Maiohttps://abertoatedemadrugada.com/2025/05/xiaomi-apresenta-su7-no-dia-22-de-maio.html
https://abertoatedemadrugada.com/2025/05/xiaomi-apresenta-su7-no-dia-22-de-maio.html
<div><a href="https://abertoatedemadrugada.com/2025/05/xiaomi-apresenta-su7-no-dia-22-de-maio.html"><img alt="" border="0" data-original-height="800" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRSQtGcIAak3Uo5Vp9MYHEb0Xk2vGTU0SaLgU5VpGOKcrXF6-tDw4IcRn52qgyatTbw0XZ3ci_jKj7IIu-Uiq9LK_J-HFdDfz_HbLU-m0lL4V7YyQTtTrLu2VQJQ0LlJdWE3fOrC0ga9tX3Nfs5vkLap3NvdiND2k_mth8Z6VavQQvyT9_foQoE_CvFdnv/s1600/yu7.jpg" width="600"></a></div>
A Xiaomi vai revelar o seu primeiro SUV eléctrico, o YU7, no dia 22 de Maio. Este lançamento dá continuidade ao SU7 e coloca a marca a concorrer directamente com o Tesla Model Y no segmento dos SUV médios.<br><br><a name="more"></a>
De acordo com registos oficiais, o <a href="https://cnevpost.com/2025/05/19/xiaomi-to-unveil-yu7-may-22/">YU7</a> mede 4.999 mm de comprimento, 1.996 mm de largura e 1.600 mm de altura, com uma distância entre eixos de 3 metros - ligeiramente maior do que o Model Y, oferecendo mais espaço interior. A Xiaomi ainda não divulgou dados de potência, mas a fasquia está alta depois dos 1.548 cv do SU7 Ultra apresentados em 2024.<br><br>
Apesar de ser estreante no sector automóvel, a Xiaomi EV entregou mais de 28.000 viaturas em Abril, o sétimo mês consecutivo acima das 20 mil unidades. Contudo, a marca enfrenta desafios: um acidente mortal com um SU7 em Março e queixas sobre a qualidade provocaram três semanas seguidas de queda nas vendas na China.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg89Sz_oRPoS2UQ3KxkLfL6UqE-NXc9rqe6X0smsBIYmTK7uc93Ufm-cWE7eAHczVt-V8FytQWlJ7WLDO-Tvtg_KINKlEKrKhMhcDh2znsbeFXhpNgGuBwBr85FVkAk6TkAE1TUXX_m24bN6hP6DEkTiZmyLi_ZOoYyoSnIobi3YBHiGH-zunbGBajBmnVh/s1200/yu7back.jpg"><img alt="" border="0" data-original-height="599" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg89Sz_oRPoS2UQ3KxkLfL6UqE-NXc9rqe6X0smsBIYmTK7uc93Ufm-cWE7eAHczVt-V8FytQWlJ7WLDO-Tvtg_KINKlEKrKhMhcDh2znsbeFXhpNgGuBwBr85FVkAk6TkAE1TUXX_m24bN6hP6DEkTiZmyLi_ZOoYyoSnIobi3YBHiGH-zunbGBajBmnVh/s600/yu7back.jpg" width="600"></a></div>
O evento de quinta-feira vai além do SUV. A Xiaomi apresentará também o seu primeiro processador móvel próprio (Xring O1), o smartphone Xiaomi 15S Pro e o tablet Xiaomi 7 Ultra, reforçando a estratégia de integrar todo o ecossistema tecnológico sob a mesma marca.<br><br>Tue, 20 May 2025 07:00:00 +0000Aberto até de Madrugada: Defendnot consegue desactivar o Microsoft Defender no Windowshttps://abertoatedemadrugada.com/2025/05/defendnot-consegue-desactivar-o.html
https://abertoatedemadrugada.com/2025/05/defendnot-consegue-desactivar-o.html
<div><a href="https://abertoatedemadrugada.com/2025/05/defendnot-consegue-desactivar-o.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYqhgIbfmkJ_2LDnDxVP2uJXb-_1Yailhu0dE_i37swKmcKQtx7cGOyhoATNHHYJ_xtVxeF6HLYOzEVuoNyrBMaGa73on126b7Fc871U5rR_xHqxEnHbrBtOOL2qgZ3_jMcjTODRh6ms3IZ5A3pIh6j_YNda8RpSc6zt6clV4Avvh-gwjbf9O3bccCyqp8/s1600/defender.jpg" width="600"></a></div>
Uma ferramenta chamada <a href="https://github.com/es3n1n/defendnot">Defendnot</a> consegue enganar o Windows e desactivar o Microsoft Defender, mesmo quando não existe outro antivírus instalado.<br><br><a name="more"></a>
A técnica passa por registar um antivírus falso usando uma API não documentada do Windows Security Center (WSC), que serve normalmente para informar o sistema de que outro software de segurança está ativo.<br><br>
Sempre que um antivírus legítimo se regista, o Windows desativa automaticamente o Defender para evitar conflitos. A ferramenta Defendnot, criada pelo investigador es3n1n, simula esse comportamento com uma DLL de antivírus falsa construída de raiz, evitando problemas legais como os que levaram à remoção da ferramenta anterior no-defender, que usava código de terceiros.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvjPdiu8zxbVWFsXePMa25GSDRXz8x8FFiV6ioO_kIk6U0GFAE2sdH7BpFKWNScwyol9Ufp5B2Af9e1XA4cEuO9POAWx9mvhXx_wkYqx8K81SjviczP6fsJBaOtUl3ZestSLPyusb0g0ZHoz2hWS6Yo27Q9A5oAQLsTHHEJvk-vSFHBOnbIRx3L5eH0pPf/s1306/defendnot.jpg"><img alt="" border="0" data-original-height="1005" data-original-width="1306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvjPdiu8zxbVWFsXePMa25GSDRXz8x8FFiV6ioO_kIk6U0GFAE2sdH7BpFKWNScwyol9Ufp5B2Af9e1XA4cEuO9POAWx9mvhXx_wkYqx8K81SjviczP6fsJBaOtUl3ZestSLPyusb0g0ZHoz2hWS6Yo27Q9A5oAQLsTHHEJvk-vSFHBOnbIRx3L5eH0pPf/s600/defendnot.jpg" width="600"></a></div>
O truque funciona ao injetar a DLL falsa num processo de sistema confiável, como o Taskmgr.exe, que é assinado pela Microsoft. A partir desse processo, a ferramenta regista o antivírus falso com um nome à escolha do utilizador, o que leva o Defender a desligar-se de imediato. O Defendnot inclui ainda um carregador de configuração e garante persistência ao criar uma tarefa automática no Agendador de Tarefas do Windows.<br><br>
Apesar de ser apresentado como um projeto de investigação, o Defendnot expõe uma falha grave na forma como o Windows gere os registos de antivírus. O Microsoft Defender já está a detetar esta ameaça com o nome Win32/Sabsik.FL.!ml, mas fica o aviso: mesmo funcionalidades de segurança aparentemente bem protegidas podem ser manipuladas.<br><br>Mon, 19 May 2025 20:00:00 +0000Aberto até de Madrugada: Ford F-150 Lightning ultrapassa Tesla Cybertruck nos EUAhttps://abertoatedemadrugada.com/2025/05/ford-f-150-lightning-ultrapassa-tesla.html
https://abertoatedemadrugada.com/2025/05/ford-f-150-lightning-ultrapassa-tesla.html
<div><a href="https://abertoatedemadrugada.com/2025/05/ford-f-150-lightning-ultrapass-tesla.html"><img alt="" border="0" data-original-height="886" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHZTcN4pTXiAkz9tVPjWF8v2-BENuHpGGpbm_HUbFi0YtVC0CpFIeTUH9yoDHsDbaRHtwVM3U0_r6TK01l-dcHN8DVa1Gd-BIv6b-OTZ1XZB6vH-jNWkvbwTHJaMOhwrtWt-RGmQ0USKDDhb55r3AvVKqDgeV_TBgld7X-sdxbjRhEwbAb3CSwYKQKgGEP/s1600/f150.jpg" width="600"></a></div>
O cenário para a Tesla fica mais complicado, com a rival Ford F-150 a ultrapassar as vendas do Cybertruck.<br>
-
<br><a name="more"></a>
A corrida das pick-ups elétricas ganhou um novo líder: a <a href="https://www.spglobal.com/automotive-insights/en">Ford F-150 Lightning ultrapassou o Tesla Cybertruck</a> nas vendas do primeiro trimestre de 2025. Segundo dados da S&P Global Mobility, a Ford registou 7.913 unidades entre janeiro e março, enquanto a Tesla ficou-se pelas 7.126.<br><br>
Outras fontes, como a Cox Automotive, confirmam a tendência com números ligeiramente diferentes: 7.187 Lightnings vendidas contra 6.404 Cybertrucks. Apesar das variações, o resultado é claro: a Ford recuperou a liderança, depois de a Tesla ter ocupado o primeiro lugar durante algum tempo.<br><br>
Asvendas do Cybertruck tem vindo a cair. Depois de vender mais de 16 mil unidades no terceiro trimestre de 2023, a Tesla tem registado uma quebra constante, ficando agora abaixo das 7 mil unidades e aparentemente <a href="https://abertoatedemadrugada.com/2025/05/tesla-vai-suspender-producao-do.html">tendo suspendido a produção</a>. A Lightning também não está a bater recordes, mas tem conseguido manter-se à frente.<br><br>
As pick-ups elétricas enfrentam vários desafios. Precisam de baterias grandes, o que as torna caras e pesadas — pouco ideal para quem precisa de rebocar, andar fora de estrada ou fazer longas viagens. Marcas como Chevrolet, GMC, Rivian e Ram também estão a lidar com atrasos e quebras nas entregas. Para já, a Ford está na frente, mas tudo se pode alterar nos próximos meses.<br><br>Mon, 19 May 2025 17:30:00 +0000Aberto até de Madrugada: Carregador Powerowl com 8 pilhas recarregáveis a €19https://abertoatedemadrugada.com/2025/05/carregador-powerowl-com-8-pilhas.html
https://abertoatedemadrugada.com/2025/05/carregador-powerowl-com-8-pilhas.html
<div><a href="https://abertoatedemadrugada.com/2025/05/carregador-powerowl-com-8-pilhas.html"><img alt="" border="0" data-original-height="880" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiXP-3Ra6tGJFjK1j0X9-_RV1Rq4Zeex8bfldkbOhEpXxaSagQ8xr9TLxAn2OslgGu4-M2WzK8PTKjA5NCYOmz9t0TqVNS283aB52fqwiCZhi10ye_yfK0ipYpY9ofpOSXtID4gShHh1r9d9ZdlAYhDfEWiUruHo5YwWS0Or4CKXtEOYZqMbFVgLZliIEW/s1600/powerowl.jpg" width="600"></a></div>
Para evitar a troca infindável das pilhas, nada como usar pilhas recarregáveis e este pack da Powerowl com carregador e 8 pilhas é uma excelente forma de começar.<br><br><a name="more"></a>
Vivemos num mundo "mobile" em que assumimos que as coisas funcionam sem necessidade de estarem agarradas a cabos de alimentação, e isso faz com que exista uma dependência crítica em baterias e pilhas. No caso das pilhas, que continuam a ser comuns em coisas como controlos remotos, gamepads, teclados wireless e muitas outras coisas, uma das melhores opções é trocar as pilhas convencionais por <a href="https://amzn.to/4jLR1yJ">pilhas recarregáveis reutilizáveis</a>, e o investimento não é assim tão avultado quanto se possa pensar.<br><div><a href="https://amzn.to/4jLR1yJ"><img alt="" border="0" data-original-height="500" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUOoMtJMpGcuccPMV4lbmq8i4BDXHr7iGigLTAM9y0cYIAOpFJlcbHw1bJqshQsKmc7m34xcRgBUj-gbCgr3WetP4qCpk8fmFtdAfoHm0X1at9TjI9uxgw5H3RdBs6SyracxtQyxWf8oj61wurwMv30lLGpHtA9xbItLAqWDoC2qrwOeV_J9IbnklAnjgw/s600/powerowlbat.jpg" width="600"></a></div>
Este <a href="https://amzn.to/4jLR1yJ">carregador Powerowl já traz 8 pilhas recarregáveis</a> e custa apenas 19 euros - activar desconto de 20%.<br><br>
As pilhas AA incluídas são de 2800 mAh, e este carregador tem a vantagem de usar uma comum ficha USB e permitir carregar pilhas individualmente (alguns só permitem carregar pares). Podem apanhar um pack de <a href="https://amzn.to/4eohGzP">mais 8 pilhas AA de 2800 mAh</a> por 12 euros.<br><br><br>
Acompanha as melhores promoções diárias no nosso grupo <a href="https://www.facebook.com/groups/AadM.Promos?sorting_setting=CHRONOLOGICAL">AadM Promos</a>.<br><br>Mon, 19 May 2025 15:30:00 +0000Aberto até de Madrugada: Renault revela Savane 4x4 concepthttps://abertoatedemadrugada.com/2025/05/renault-revela-savane-4x4-concept.html
https://abertoatedemadrugada.com/2025/05/renault-revela-savane-4x4-concept.html
<div><a href="https://abertoatedemadrugada.com/2025/05/renault-revela-savane-4x4-concept.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWPnvuipJdKbbJ66GYgm2v5Lmd_u8olBgeHyzg60fFxQ7hehwR-pc4n1atKL5wHiWhRqi_o7DYaFQJQsUjR-GiMo_br4ejDK47OMEwOARTYwU5mJjL7idIIVo9vS1gXxc3H9-YSD69QfQI4fXzv6td1AbVsP-a5YADrLIDFYBHeTe1SOqb3xNstidyDgZ6/s1600/renault4savage%20%282%29.jpg" width="600"></a></div>
A Renault está a tirar partido da popularidade dos modelos antigos renovados em versão elétrica, e avança com o Savane 4x4 concept.<br><br><a name="more"></a>
A Renault apresentou uma nova versão mais robusta do Renault 4 elétrico, o <a href="https://media.renault.com/renault-4-savane-4x4-concept-makes-its-global-debut-at-roland-garros-2025/">Savane 4x4 concept</a>. Este protótipo dá um toque aventureiro ao pequeno crossover, ao adicionar tração integral graças a um segundo motor elétrico no eixo traseiro — algo que o modelo original não tem.<br><br>
Além do novo sistema de tração, o Savane recebe uma suspensão elevada, pintura exclusiva Jade Green, um tejadilho em tecido com padrão pixelizado e pneus Goodyear UltraGrip montados em jantes de 18 polegadas. A Renault alargou ainda as vias dianteira e traseira em 10 mm e aumentou a distância ao solo em 15 mm, para maior estabilidade e capacidade fora de estrada.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipQZcSpOhVDgzIN5W7kg0tQoA52pmIKzcBbt7NIKCarqYKZ8jhEXhP2zhJCNHEdChyEoYZfEs_OUq75L-Pn_mNaGHErg4e_L8sLAEE10eMyEvzWjySisZ2IarVtYs14F3thc-OBFzYDhXMXjqatIr7OCsf2Ihway6qNUNW2NSHLJPz2pIaBbjKxTIKstl2/s1200/renault4savage%20%283%29.jpg"><img alt="" border="0" data-original-height="674" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipQZcSpOhVDgzIN5W7kg0tQoA52pmIKzcBbt7NIKCarqYKZ8jhEXhP2zhJCNHEdChyEoYZfEs_OUq75L-Pn_mNaGHErg4e_L8sLAEE10eMyEvzWjySisZ2IarVtYs14F3thc-OBFzYDhXMXjqatIr7OCsf2Ihway6qNUNW2NSHLJPz2pIaBbjKxTIKstl2/s600/renault4savage%20%283%29.jpg" width="600"></a></div>
<div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitD91rctlDCCKfo4rhEjSOU2dEfRzv6-fS_7bzGiqlMJCizfuXRC-cTEf5QH1rbiPghK7_41TH03sZ2SQjtFcqdv3FJcnuCcS0LcZ4X1wsjRr29sGddNRlIhL7juwXfCFi6wPmXnBiqiE-MV0wEUfAalZtOH1dx578oXQCbERHcbMxzB0awEVrwOgSH16V/s1200/renault4savage%20%281%29.jpg"><img alt="" border="0" data-original-height="674" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitD91rctlDCCKfo4rhEjSOU2dEfRzv6-fS_7bzGiqlMJCizfuXRC-cTEf5QH1rbiPghK7_41TH03sZ2SQjtFcqdv3FJcnuCcS0LcZ4X1wsjRr29sGddNRlIhL7juwXfCFi6wPmXnBiqiE-MV0wEUfAalZtOH1dx578oXQCbERHcbMxzB0awEVrwOgSH16V/s600/renault4savage%20%281%29.jpg" width="600"></a></div>
A marca não revelou os números de potência deste sistema de dois motores, mas deverá superar facilmente o modelo de série, que tem 148 cv e acelera dos 0 aos 100 km/h em 8,2 segundos. O concept poderá usar uma bateria de 52 kWh, semelhante à versão mais equipada do Renault 4, com autonomia até 400 km.<br><br>
Assente na plataforma AmpR Small, partilhada com modelos como o Renault 5 e o novo Nissan Micra, o Savane mostra que é possível ter tração total nesta base. A produção ainda não foi confirmada, mas a Renault já apostou antes em projetos mais ousados. Se chegar ao mercado, custará certamente mais do que os €31.490 do modelo de série, mas poderá ser uma opção interessante para quem quer um elétrico compacto com mais estilo e capacidade.<br><br>Mon, 19 May 2025 13:30:00 +0000A Minha Alegre Casinha: EUA têm mais de 26 GW de baterias na rede eléctricahttp://aminhaalegrecasinha.com/2025/05/eua-tem-mais-de-26-gw-de-baterias-na.html
http://aminhaalegrecasinha.com/2025/05/eua-tem-mais-de-26-gw-de-baterias-na.html
<div><a href="http://aminhaalegrecasinha.com/2025/05/eua-tem-mais-de-26-gw-de-baterias-na.html"><img alt="" border="0" width="600" data-original-height="870" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi4jRRWRxbqyatnoE4YdsfJJoWPSBaIMKLlpIgvwruB2eWAq5pXUzHeX8H-oOsPtDIKzfd0eslF4N8sMNTbDY_gTQL3dk_cglT_OaYkvYD2FPfjMbGbELnOYw9yuMcJePJy3L7Jp4KPkzM-xHpx_unuSN1XDbrNjYWs5IH_ZUqZaKqvPY60Y3gplzP4nnp/s1600/batterygrid.jpg"></a></div>
Os EUA aumentaram consideravelmente o uso de baterias para estabilização da rede eléctrica nos últimos anos.<br><br><a name="more"></a>
Quando ainda muito se fala sobre o <a href="https://abertoatedemadrugada.com/2025/04/o-motivo-do-apagao-em-portugal-e-espanha.html">apagão ibérico</a>, o uso de baterias para efeito de estabilização da rede pode ser uma das opções a considerar (a par de outros sistemas de recuperação / reaproveitamento de energia como bombear a água das barragens de volta para os reservatórios). <br><br>
Enquanto ia explorando o caso para saber que tipo de instalações já existe, descobri que <a href="https://www.wired.com/story/grid-scale-battery-storage-is-quietly-revolutionizing-the-energy-system/">nos EUA</a>, em 2024, já existia uma <a href="https://www.eia.gov/todayinenergy/detail.php?id=64705">capacidade de 26 GW de energia em baterias</a> para estabilização da rede - que se prevê que duplique até 2026. Apesar de ser uma solução dispendiosa face a outras, tem a grande vantagem de dar resposta instantânea às necessidades da rede; e não se podendo esquecer que não é necessário usar as baterias "caras" como as que são utilizadas em veículos, pois pode optar-se por baterias mais económicas que tenham menor densidade energética (para uma instalação industrial, torna-se irrelevante o seu peso e volume).<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTWsffZJ9WMiihgiHN7xLXkCwXGfhMmPH-Fr7pFQkAbECfLqxvhri68_JByjYIzhwknQ4ica35jqsTHsbsXkm4XT-4ydEYCDErSscG1EpfwPX7dftszG4IC8UhmroSAfT9uoTxFnn4ICbowYcIZNbukW2m4mxW4-7wDwdcyrCZ-ivSCKw1p2BK7Rdjw-aW/s960/batup.jpg"><img alt="" border="0" width="600" data-original-height="576" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTWsffZJ9WMiihgiHN7xLXkCwXGfhMmPH-Fr7pFQkAbECfLqxvhri68_JByjYIzhwknQ4ica35jqsTHsbsXkm4XT-4ydEYCDErSscG1EpfwPX7dftszG4IC8UhmroSAfT9uoTxFnn4ICbowYcIZNbukW2m4mxW4-7wDwdcyrCZ-ivSCKw1p2BK7Rdjw-aW/s600/batup.jpg"></a></div>
Podem também considerar-se outras opções de armazenamento de energia - há até sistemas que usam <a href="https://abertoatedemadrugada.com/2022/07/bateria-de-areia-entra-em-funcionamento.html">areia aquecida</a> como forma de armazenamento de energia. O ponto crítico, para efeitos de estabilização da rede eléctrica, é o de ser um sistema que possa reagir de forma imediata às necessidades, assegurando a rede até que outras fontes de energia tenham tempo para entrar em acção.<br><br><br>Mon, 19 May 2025 12:45:00 +0000Aberto até de Madrugada: Xiaomi confirma chip próprio Xring O1https://abertoatedemadrugada.com/2025/05/xiaomi-confirma-chip-proprio-xring-o1.html
https://abertoatedemadrugada.com/2025/05/xiaomi-confirma-chip-proprio-xring-o1.html
<div><a href="https://abertoatedemadrugada.com/2025/05/xiaomi-confirma-chip-proprio-xring-o1.html"><img alt="" border="0" width="600" data-original-height="1085" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW87q2idEgoHd6mbsOfj1qRzjjR1_2Fo9SOELCDfhtaqLRE8pUPQe-Xwy8ILvYDvBjmGe1G1SnsVquyzwcTIuAsoGTu87KDoJeagp_VX34H4CIoVRc-0sZJsFGougEJIMMcPNWIHW6J7roAyfLORYHHZNr0XC33XHJEoLmNhhURKvq4jXB9Cuir_8A2V_n/s1600/xiaomi.jpg"></a></div>
A Xiaomi vai juntar-se à Apple, Samsung, e Huawei, no uso de chips próprios nos seus smartphones e tablets, com o Xring O1.<br><br><a name="more"></a>
A Xiaomi confirmou oficialmente que o seu <a href="https://m.weibo.cn/detail/5166664397360334">primeiro processador</a> desenvolvido internamente está a caminho e já tem nome e data de apresentação. O chip vai chamar-se Xring O1 a nível internacional (e Xuanjie O1 na China), e será revelado no final de Maio.<br><br>
Com esta aposta, a Xiaomi pretende reduzir a sua dependência da Qualcomm e MediaTek, ganhando mais controlo sobre o hardware e, potencialmente, reduzindo custos. Segundo fugas de informação, o Xring O1 será produzido com tecnologia de 5nm e terá um CPU de 8 núcleos: um Cortex-X925, três Cortex-A725 e quatro Cortex-A520, com velocidades até 3,2GHz. Vai contar ainda com GPU da Imagination Technologies e modem 5G da Unisoc.<br><br>
Em termos de desempenho, espera-se que esteja ao nível do Snapdragon 8 Gen 2 - o que seria um excelente início para um chip de estreia. A revelação oficial é esperada para breve, por isso não falta muito para conhecermos todos os detalhes.<br><br>Mon, 19 May 2025 11:00:00 +0000Aberto até de Madrugada: Módulo de tomadas Aonoka com 3 USB + 3 tomadas a €20.99https://abertoatedemadrugada.com/2025/05/modulo-de-tomadas-aonoka-com-3-usb-3.html
https://abertoatedemadrugada.com/2025/05/modulo-de-tomadas-aonoka-com-3-usb-3.html
<div><a href="https://abertoatedemadrugada.com/2025/05/modulo-de-tomadas-aonoka-com-3-usb-3.html"><img alt="" border="0" data-original-height="910" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYOD6k7b592JqA6IfwTZDlLFqeNJhDA5xmkDiP7EpDDthIwHYQdJPhTF7V0KbXB0CM2X3gK-VLPDWVQLAWIlGBROOGNWTMBYgILv6_1ZUXV-zPqP6KL4vnlqNzvUQTbvj5M1vNQBpYOLWHakY5ZwH2EvuH7oznwvlnTbn9H9lZEdc-7LfEjQ0FrPnYKWE8/s1600/aonokaplug.jpg" width="600"></a></div>
Uma excelente opção para quem tem que lidar com um número crescente de dispositivos USB para recarregar, é usar um módulo de tomada com portas USB integradas, como é o caso deste módulo de tomada Aonoka com 3 tomadas mais 3 USB.<br><br><a name="more"></a>Hoje em dia temos uma grande variedade de carregadores USB, mas estes <a href="https://amzn.to/4isOsBc">módulos de tomada com portas USB</a> integradas acabam por ser uma solução bastante atractiva, já que permitem manter a utilidade da tomada original, mas adicionando portas USB adicionais para carregarem outros equipamentos sem necessidade de carregadores individuais.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeCUkWGpyC-2B0OSuZEJbE7ETSGEc52KAwq3QqbLwHu719xNCDRXIQl4CpAVH49nTunXYiZ81eFHHLqKvKgfU936A0LCAZtWk85D-Xd1067spwx32umwwHwjEO7r40oVOzHhbf11Z8Oc1ccHhV8zAds31hci_pCmNCHIgTLBjCFlgwQBUbavRmOtg8_cEx/s1600/aonoka.jpg"><img alt="" border="0" data-original-height="667" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeCUkWGpyC-2B0OSuZEJbE7ETSGEc52KAwq3QqbLwHu719xNCDRXIQl4CpAVH49nTunXYiZ81eFHHLqKvKgfU936A0LCAZtWk85D-Xd1067spwx32umwwHwjEO7r40oVOzHhbf11Z8Oc1ccHhV8zAds31hci_pCmNCHIgTLBjCFlgwQBUbavRmOtg8_cEx/s600/aonoka.jpg" width="600"></a></div>
Este <a href="https://amzn.to/4isOsBc">módulo de tomada Aonoka </a> com 3 tomadas mais 3 USB (2x USB-C, 1x USB-A) está disponível por apenas 20.99 euros na Amazon Espanha - activar desconto de 3 euros.<br><br>
As portas USB podem fornecer até 20W PD e 18W QC, suficiente para assegurar um carregamento rápido na maioria dos dispositivos sem necessidade de ocupar uma tomada com um carregador USB dedicado. Como particularidade adicional, a ficha rotativa na traseira permite colocar o módulo na horizontal ou vertical, conforme seja mais conveniente, e ainda conta com práticos interruptores individuais para cada tomada e para as portas USB, para eliminar os chamados consumos "fantasma" de equipamentos em standby.<br><br>
É uma opção bastante interessante, especialmente para locais como casas de banho ou cozinhas, onde será conveniente manter o acesso à tomada eléctrica, mas ainda assim arranjar forma de recarregar aparelhos via USB - não só os habituais smartphones e tablets, mas também coisas como colunas Bluetooth, relógios, iluminação recarregável, escovas de dentes e máquinas de barbear, etc.<br><br><br>
Acompanha as melhores promoções diárias no nosso grupo <a href="https://www.facebook.com/groups/AadM.Promos/?sorting_setting=CHRONOLOGICAL">AadM Promos</a>.<br><br>Mon, 19 May 2025 09:00:00 +0000Aberto até de Madrugada: iPhone 17 Air com bateria de 2800 mAh?https://abertoatedemadrugada.com/2025/05/iphone-17-air-com-bateria-de-2800-mah.html
https://abertoatedemadrugada.com/2025/05/iphone-17-air-com-bateria-de-2800-mah.html
<div><a href="https://abertoatedemadrugada.com/2025/05/iphone-17-air-com-bateria-de-2800-mah.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqEJSCIQKNWpGtve4o30Jbf3uqZdF5pNs3RsAwjpMIZVWQ1cKFmmdXlLzm0vWt5bIkW-DptkfYK1fqFSbgo7rUm9ZPotIJhp1Q0I0gu402NPmtu2dYycni2b0A4M2fGBtgJHX9RcCCM4uh8zSjiUXZzKwEznYJ1-SjgAtl7W1VsxkzYvrf6AnTFQUD5oRC/s1600/iphoneair.jpg" width="600"></a></div>
O novo iPhone 17 Air deverá levar ao limite a redução da capacidade da bateria.<br><br><a name="more"></a>
Um novo leak revelou detalhes curiosos sobre o futuro iPhone 17 Air, e nem todos agradam. O modelo deverá ter apenas 5,5 mm de espessura, tornando-se o iPhone mais fino de sempre, mas isso vem com um custo: uma <a href="https://m.blog.naver.com/PostView.naver?blogId=yeux1122&logNo=223868166518&navType=by" rel="nofollow">bateria de apenas 2.800 mAh</a>.<br><br>
É uma diferença significativa face a concorrentes como o Samsung Galaxy S25 Edge, que oferece uma bateria de 3.900 mAh num formato semelhante. Ainda assim, há quem acredite que a Apple poderá recorrer a tecnologia de alta densidade para aumentar a capacidade em 15 a 20%. A fuga de informação indica ainda que o novo iPhone pesará apenas 145 gramas, menos que o Galaxy S25 Edge, mesmo tendo potencialmente um ecrã maior.<br><br>
Enquanto alguns suspeitam que a marca está a reduzir a bateria de propósito para vender mais capas com bateria, há também rumores de que está a desenvolver uma funcionalidade inteligente, baseada em AI, para <a href="https://abertoatedemadrugada.com/2025/05/apple-prepara-gestao-ai-da-bateria-dos.html">optimizar a autonomia</a> sem depender de uma bateria maior. Mas, será algo que terá que ser visto para se acreditar.<br><br>Mon, 19 May 2025 07:00:00 +0000Aberto até de Madrugada: Apple penaliza apps que escapam às comissões com avisos de perigohttps://abertoatedemadrugada.com/2025/05/apple-penaliza-apps-que-escapam-as.html
https://abertoatedemadrugada.com/2025/05/apple-penaliza-apps-que-escapam-as.html
<div><a href="https://abertoatedemadrugada.com/2025/05/apple-penaliza-apps-que-escapam-as.html"><img alt="" border="0" width="600" data-original-height="931" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFrpbOWRy7i0wPjCZZ0b-5KuUSyqeqElaVcpnNiaTg2griv8hFIxiPcGEPXffa_YXpIctIBTIZbRkPs24CAmlO0nyTVH___VBpj5nMPRBCHteKDioBq0wdc7vuVay9Osh9hOWN8ZE3kNhGjNK8cPX5KUwiHe03eiUisNZigXWgystrbj0UDXtHPR8FgVJ0/s1600/applescare.jpg"></a></div>
A Apple está a apresentar aviso de "perigo" nas apps que adoptaram sistemas de pagamento externos que escapam às suas comissões.<br><br><a name="more"></a>
A Apple volta a ser criticada na Europa por tentar afastar utilizadores de apps que oferecem métodos de pagamento alternativos. Certas apps na App Store, como a Instacar da Hungria, surgem agora com um ícone de aviso vermelho e uma mensagem a alertar que não utilizam o sistema de pagamentos "privado e seguro" da Apple, insinuando riscos adicionais.<br><br>
Este aviso já existe desde Março de 2024, quando a Apple começou a cumprir a Lei dos Mercados Digitais da UE (DMA). Contudo, como poucas apps adoptaram pagamentos externos, o tema passou despercebido, até agora. A Apple diz estar disposta a mudar para um aviso menos agressivo (que foi o que tinha indicado aos developers que iria utilizar) mas que aguarda da UE para o implementar.<br><blockquote><p lang="en" dir="ltr">On the left is what Apple tells developers their apps are going to look like if they add support for alternative payment systems. <br><br>On the right is what Apple actually shows. <br><br>Would love to see all the “make it more scary” internal communications that led to this: <a href="https://t.co/fjOJVDeu7v">pic.twitter.com/fjOJVDeu7v</a></p>— Kosta Eleftheriou (@keleftheriou) <a href="https://twitter.com/keleftheriou/status/1923226062906863923?ref_src=twsrc%5Etfw">May 16, 2025</a></blockquote>
A mensagem explica que os utilizadores terão de fornecer dados pessoais e de pagamento directamente aos programadores e seus parceiros, apresentando isto como uma preocupação de privacidade e segurança. No entanto, há quem considere que o objectivo é simplesmente desencorajar a concorrência - já que isso é meramente o que se passa em todo e qualquer pagamento online.<br><br>
A abordagem da Apple já motivou críticas das autoridades europeias, que acusam a empresa de tornar excessivamente complicado o uso de lojas de apps e pagamentos alternativos. A polémica intensificou-se após o caso Epic vs Apple, que proibiu este tipo de tácticas dissuasoras nos EUA - uma decisão que, por agora, a Apple não aplicou ao resto do mundo.<br><br>Sun, 18 May 2025 20:00:00 +0000Alexsandro Felix: Fotos Esportivas Incríveis: Equipamento Antigohttps://blog.ffelix.eti.br/alem-do-clique-capturando-a-alma-do-esporte-mesmo-com-equipamento-das-antigas/
https://blog.ffelix.eti.br/alem-do-clique-capturando-a-alma-do-esporte-mesmo-com-equipamento-das-antigas/
<p>E aí, pessoal! Quem me acompanha aqui no blog sabe que eu adoro misturar minhas paixões por tecnologia e por registrar momentos – e a fotografia esportiva é um prato cheio pra isso. Mas, confesso, nem sempre foi um mar de rosas (ou melhor, um campo de futebol iluminado!).</p>
<p>Capturar a emoção, a velocidade e a imprevisibilidade do esporte é um desafio e tanto. Um fração de segundo pode ser a diferença entre a foto icônica e um borrão sem sentido. E, no início da minha jornada nesse universo, eu sentia isso na pele, e muito!Meu equipamento inicial se resumia a uma guerreira Canon EOS 60D e uma lente Sigma 18-75mm 2.8. Era o que tinha na época, e eu me virava como podia. Essa combinação me ensinou DEMAIS sobre limites e criatividade para superá-los.</p>
<figure><a href="https://amzn.to/4ksCJDG"><img data-recalc-dims="1" decoding="async" width="800" height="717" data-attachment-id="1098" data-permalink="https://blog.ffelix.eti.br/canon_eos_60d/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?fit=1337%2C1198&ssl=1" data-orig-size="1337,1198" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="Canon_EOS_60D" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?fit=300%2C269&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?fit=800%2C717&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?resize=800%2C717&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?resize=1024%2C918&ssl=1 1024w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?resize=300%2C269&ssl=1 300w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?resize=768%2C688&ssl=1 768w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Canon_EOS_60D.jpg?w=1337&ssl=1 1337w" sizes="(max-width: 800px) 100vw, 800px"></a></figure><p>A 60D, coitada, é de uma época em que câmeras DSLR reinavam, e hoje em dia é até difícil achar uma novinha por aí! Se você está começando hoje e procura algo na mesma pegada DSLR versátil, uma opção bacana seria algo como esta câmera <a href="https://amzn.to/4j9VlXR" target="_blank" rel="noopener" title="">aqui</a> (Link Afiliado), pois de tão antiga que ela é, fica muito difícil encontrar uma nova para comprar, então indico a <a href="https://amzn.to/4j9VlXR" target="_blank" rel="noopener" title="">Canon EOS Rebel T100</a> porque é uma câmera de entrada boa e tem um valor acessível. E a <a href="https://amzn.to/44FqfUx" target="_blank" rel="noopener" title="">Sigma 28-70 mm</a> essa daqui (<a href="https://amzn.to/44FqfUx" target="_blank" rel="noopener" title="">Link Afiliado</a>), que usei muito, era minha fiel companheira para os cliques mais gerais.</p>
<figure><a href="https://amzn.to/44FqfUx"><img data-recalc-dims="1" decoding="async" width="598" height="1000" data-attachment-id="1100" data-permalink="https://blog.ffelix.eti.br/sigma_28-70mm/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/sigma_28-70mm.webp?fit=598%2C1000&ssl=1" data-orig-size="598,1000" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="sigma_28-70mm" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/sigma_28-70mm.webp?fit=179%2C300&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/sigma_28-70mm.webp?fit=598%2C1000&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/sigma_28-70mm.webp?resize=598%2C1000&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/sigma_28-70mm.webp?w=598&ssl=1 598w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/sigma_28-70mm.webp?resize=179%2C300&ssl=1 179w" sizes="(max-width: 598px) 100vw, 598px"></a></figure><p>Com esse kit, muitas vezes eu sentia que estava “longe” demais da ação, ou que perdia aquele detalhe crucial do rosto do atleta pela falta de zoom. Era frustrante, mas me forçou a pensar fora da caixa, a me posicionar melhor, a antecipar os movimentos.</p>
<p>A virada veio depois de um tempo, com muito suor e economia, quando consegui adquirir uma lente <a href="https://amzn.to/44LpXeU" target="_blank" rel="noopener" title="">Canon 75-300mm 4.0</a>. Ah, essa lente aqui (<a href="https://amzn.to/44LpXeU" target="_blank" rel="noopener" title="">Link Afiliado</a>)! De repente, o campo pareceu menor, e eu conseguia trazer a ação para mais perto, capturando expressões, o foco no olhar, a tensão do momento de um jeito que antes era impossível</p>
<figure><a href="https://amzn.to/44LpXeU"><img data-recalc-dims="1" loading="lazy" decoding="async" width="545" height="1000" data-attachment-id="1102" data-permalink="https://blog.ffelix.eti.br/lente_canon_ef_75-300mm_f4-0-5-6/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/lente_canon_EF_75-300mm_F4.0-5.6.webp?fit=545%2C1000&ssl=1" data-orig-size="545,1000" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="lente_canon_EF_75-300mm_F4.0-5.6" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/lente_canon_EF_75-300mm_F4.0-5.6.webp?fit=164%2C300&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/lente_canon_EF_75-300mm_F4.0-5.6.webp?fit=545%2C1000&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/lente_canon_EF_75-300mm_F4.0-5.6.webp?resize=545%2C1000&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/lente_canon_EF_75-300mm_F4.0-5.6.webp?w=545&ssl=1 545w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/lente_canon_EF_75-300mm_F4.0-5.6.webp?resize=164%2C300&ssl=1 164w" sizes="auto, (max-width: 545px) 100vw, 545px"></a></figure><p>Essa experiência me mostrou que, embora o equipamento ajude MUITO (e uma boa teleobjetiva faz milagres na fotografia esportiva!), a técnica, o olhar e a capacidade de antecipação são igualmente (ou mais!) importantes. É sobre entender o esporte, ler o jogo e estar no lugar certo na hora certa, combinando isso com o domínio da sua câmera e lente.</p>
<figure><a href="https://banlek.com/asfelix"><img data-recalc-dims="1" loading="lazy" decoding="async" width="683" height="1024" data-attachment-id="1103" data-permalink="https://blog.ffelix.eti.br/basquete/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?fit=1707%2C2560&ssl=1" data-orig-size="1707,2560" data-comments-opened="1" data-image-meta='{"aperture":"4","credit":"Alexsandro Felix","camera":"Canon EOS 60D","caption":"","created_timestamp":"1716729120","copyright":"","focal_length":"70","iso":"6400","shutter_speed":"0.0025","title":"","orientation":"1"}' data-image-title="Basquete" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?fit=200%2C300&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?fit=683%2C1024&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete.jpg?resize=683%2C1024&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?resize=683%2C1024&ssl=1 683w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?resize=200%2C300&ssl=1 200w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?resize=768%2C1152&ssl=1 768w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?resize=1024%2C1536&ssl=1 1024w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?resize=1365%2C2048&ssl=1 1365w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?w=1707&ssl=1 1707w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Basquete-scaled.jpg?w=1600&ssl=1 1600w" sizes="auto, (max-width: 683px) 100vw, 683px"></a></figure><p>Hoje, continuo aprendendo e experimentando, sempre buscando capturar não apenas a ação, mas a paixão e a emoção que movem atletas e torcedores. É uma busca constante por aquele clique que conta uma história inteira.</p>
<p>Se você se interessou pelo meu trabalho e quiser ver um pouco mais dessas histórias contadas por imagens, ou até mesmo adquirir uma foto, convido você a visitar meu <a href="https://banlek.com/asfelix" target="_blank" rel="noopener" title="">portfólio</a>.</p>
<figure><a href="https://banlek.com/asfelix"><img data-recalc-dims="1" loading="lazy" decoding="async" width="577" height="1024" data-attachment-id="1104" data-permalink="https://blog.ffelix.eti.br/volleyball/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?fit=1442%2C2560&ssl=1" data-orig-size="1442,2560" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"Alexsandro Felix","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"1"}' data-image-title="Volleyball" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?fit=169%2C300&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?fit=577%2C1024&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball.jpg?resize=577%2C1024&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?resize=577%2C1024&ssl=1 577w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?resize=169%2C300&ssl=1 169w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?resize=768%2C1364&ssl=1 768w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?resize=865%2C1536&ssl=1 865w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?resize=1153%2C2048&ssl=1 1153w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Volleyball-scaled.jpg?w=1442&ssl=1 1442w" sizes="auto, (max-width: 577px) 100vw, 577px"></a></figure><p>E você, quais desafios já enfrentou na fotografia e como os superou? Conta pra mim nos comentários</p>
<p></p><p>The post <a href="https://blog.ffelix.eti.br/alem-do-clique-capturando-a-alma-do-esporte-mesmo-com-equipamento-das-antigas/">Fotos Esportivas Incríveis: Equipamento Antigo</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Sun, 18 May 2025 19:40:56 +0000Aberto até de Madrugada: O arranha-céus que esteve quase a cairhttps://abertoatedemadrugada.com/2025/05/o-arranha-ceus-que-esteve-quase-cair.html
https://abertoatedemadrugada.com/2025/05/o-arranha-ceus-que-esteve-quase-cair.html
<div><a href="https://abertoatedemadrugada.com/2025/05/o-arranha-ceus-que-esteve-quase-cair.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgH7RR0iY0D4eaQWB9_-YvgqSfaoldNXPVt1vUrfUu0QXCF2eByXJQq6YsnaJoPuj84qhMAl7ur6cDPZi0EydXVMcj4CTiJmJewq8w-RE-SzxbctuezVeAdXgk9f0EikFQ6j9LyQv9zIP861ni-5uZnqmN12S2HcJ_3QLY3dqJdn8QS9B7qalWYSpLLSix3/s1600/citicorp.jpg" width="600"></a></div>
O edifício da Citicorp é um curioso exemplo de um "desastre prestes a acontecer" - mas que felizmente foi corrigido a tempo.<br><br><a name="more"></a>
Por muito impressionante que sejam os feitos de engenharia da era moderna, existem também alguns casos que demonstram o que pode acontecer quando as coisas não são feitas da forma correcta. O edifício da Citicorp é mais um dos arranha-céus que faz parte da moldura arquitectónica do perfil de Manhatan, mas que esconde uma história que se poderia ter tornado numa grande catástrofe.<br><br>
O <a href="https://en.wikipedia.org/wiki/Citigroup_Center" rel="nofollow">Citicorp Center</a> (agora Citigroup Center) foi construído em 1977 e, com 279 metros de altura, ainda hoje permanece um dos mais altos arranha-céus do planeta. A concepção da sua estrutura ficou a cargo de William LeMessurier, que ficou condicionado por alguns factores externos: num dos cantos do terreno estava uma igreja que exigiu ser mantida no local, fazendo com que fosse necessário recorrer a uma incomum estrutura de suporte. Uma estrutura que se acreditava ser suficientemente capaz, assistida por um sistema de amortecimento no topo, mas que anos mais tarde foi posta em causa na sequência de uma pergunta inocente de um estudante. A estrutura não tinha sido feita exactamente como tinha sido originalmente planeada, com vigas que foram aparafusadas em vez de soldadas e, em caso do edifício ficar exposto a fortes ventos na diagonal, <a href="https://en.wikipedia.org/wiki/Citicorp_Center_engineering_crisis">ficava em sério risco de colapsar</a>.<br><br><br><div></div>
<br><br>
Felizmente, em vez de tentarem abafar o caso e ignorarem o possível desastre, deu-se início a um processo de aplicação de correções, feito em segredo durante a noite - e acautelando um plano de emergência para evacuação da área afectada - que acabou por trazer segurança ao edifício, e fazer com que ainda hoje permaneça em operação.<br><br>Sun, 18 May 2025 17:30:00 +0000Ricardo Saramago: Capcom Fighting Collection 2https://www.odrakir.com/blog/2025/05/18/capcom-fighting-collection-2/
https://www.odrakir.com/blog/2025/05/18/capcom-fighting-collection-2/
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-8.png?ssl=1"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="555" height="555" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-8.png?resize=555%2C555&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-8.png?w=555&ssl=1 555w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-8.png?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-8.png?resize=150%2C150&ssl=1 150w" sizes="(max-width: 555px) 100vw, 555px"></a></figure><blockquote>
<p>Note: I should have included this in my latest random stuff post, but I completely forgot…</p>
</blockquote>
<p>If there’s one thing that still hits me right in the nostalgia, it’s a solid Capcom fighting game from the golden era of Arcade gaming and now, with Capcom Fighting Collection 2, Capcom did it again.</p>
<p>After the first collection gave us a beautifully preserved slice of arcade history, this second volume feels like a deep cut mixtape curated by someone who really gets it.</p>
<p>We’re talking pixel-perfect ports, rollback netcode, and (thankfully) customizable controls that make it playable whether you’re using a stick, pad, or even a hitbox. Titles that barely saw proper home releases finally get their moment—Red Earth, Cyberbots, Rival Schools 2 (finally!), and a few surprises that I won’t spoil here. The best for me? Power Stone, Power Stone 2 and Street Fighter Alpha 3 Upper, three games that I don’t play since I retired my beloved PSP.</p>
<figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title1-1.webp?ssl=1"><img data-recalc-dims="1" decoding="async" width="600" height="422" data-id="2076" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title1-1.webp?resize=600%2C422&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title1-1.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title1-1.webp?resize=300%2C211&ssl=1 300w" sizes="(max-width: 600px) 100vw, 600px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title2-1.webp?ssl=1"><img data-recalc-dims="1" decoding="async" width="600" height="420" data-id="2077" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title2-1.webp?resize=600%2C420&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title2-1.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title2-1.webp?resize=300%2C210&ssl=1 300w" sizes="(max-width: 600px) 100vw, 600px"></a></figure></figure><figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title3.webp?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="420" data-id="2078" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title3.webp?resize=600%2C420&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title3.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title3.webp?resize=300%2C210&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title4.webp?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="420" data-id="2079" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title4.webp?resize=600%2C420&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title4.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title4.webp?resize=300%2C210&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></a></figure></figure><figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title5.webp?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="420" data-id="2080" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title5.webp?resize=600%2C420&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title5.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title5.webp?resize=300%2C210&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title6.webp?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="420" data-id="2081" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title6.webp?resize=600%2C420&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title6.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title6.webp?resize=300%2C210&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></a></figure></figure><figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title7.webp?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="420" data-id="2082" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title7.webp?resize=600%2C420&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title7.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title7.webp?resize=300%2C210&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title8.webp?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="420" data-id="2083" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title8.webp?resize=600%2C420&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title8.webp?w=600&ssl=1 600w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/logo_title8.webp?resize=300%2C210&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></a></figure></figure><p>This isn’t just a dump of old ROMs—it’s preservation with love. Menus are slick, the museum mode is surprisingly rich, and online play is smooth (at least in my tests). Capcom didn’t phone this in—they knew exactly who they were making this for: us, the arcade kids who never really grew up.</p>
<p>Capcom Fighting Collection 2 is available since May 16th for PC and consoles, so you don’t have an excuse not to play it.</p>
<p>Is it niche? A bit… some players probably never played the 3D titles in the collection… Is it essential? If you grew up mashing out hadoukens with your friends on a CRT and still get chills from that CPS2 arcade startup sound… then yes. 100% yes.</p>
<p></p>Sun, 18 May 2025 17:22:32 +0000Aberto até de Madrugada: Cientistas transformam chumbo em ouro no LHChttps://abertoatedemadrugada.com/2025/05/cientistras-transformam-chumbo-em-ouro.html
https://abertoatedemadrugada.com/2025/05/cientistras-transformam-chumbo-em-ouro.html
<div><a href="https://abertoatedemadrugada.com/2025/05/cientistras-transformam-chumbo-em-ouro.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRiID8xvMvnZZz7O2giifBePpRfCsW3_lid6whUbew4rQn41tKO1WSVtSpKfPlL3ljSNEDXsJ_bsCMY5SsHUwA8VJ27gkOR6ZYaqSSlb97IB90ZsQwn0qt3Qmws8O-i78oh-WWqTiN1JRR7abO2dNpEsZJqyQb745xsnIZ0wRI0L4CuoTnENIeUJtisi2Z/s1600/lhc.jpg" width="600"></a></div>
O sonho de transformar chumbo em ouro tornou-se realidade, e tudo o que é preciso é fazer colidir átomos à velocidade da luz.<br><br><a name="more"></a>
Os cientistas conseguiram finalmente realizar o sonho antigo dos alquimistas: transformar chumbo em ouro. No LHC (Large Hadron Collider), investigadores conseguiram esta transmutação não através de colisões directas, mas por um novo processo que envolve interações de "quase contacto" entre núcleos atómicos.<br><br>
Quando átomos de chumbo passam muito próximos a velocidades próximas da luz, geram campos electromagnéticos tão fortes que provocam rajadas de fotões. Estas interações fazem com que os núcleos dos átomos vibrem e libertem partículas como neutrões e protões.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgklr5F7hd4zfWRbpvtKdwCYL4vcOzR7yTYns_1AoPiJ36bk3fIIDJQWobYW2rVWnAF3dQ8OjbsQB-z7ciLz0969mNELOJWITt2dq8YkpQmxQuHlZWypepB_BLoUS-TZ3_RlXz-ghiv6SZMRci6Ihvhy1HOOoIT253xSQA1IWhSvc0fqqIeYwpn2QZBA3S/s1440/pbag.jpg"><img alt="" border="0" width="600" data-original-height="810" data-original-width="1440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgklr5F7hd4zfWRbpvtKdwCYL4vcOzR7yTYns_1AoPiJ36bk3fIIDJQWobYW2rVWnAF3dQ8OjbsQB-z7ciLz0969mNELOJWITt2dq8YkpQmxQuHlZWypepB_BLoUS-TZ3_RlXz-ghiv6SZMRci6Ihvhy1HOOoIT253xSQA1IWhSvc0fqqIeYwpn2QZBA3S/s600/pbag.jpg"></a></div>
Neste caso, os átomos de chumbo perderam três protões, transformando-se assim <a href="https://www.home.cern/news/news/physics/alice-detects-conversion-lead-gold-lhc">em átomos de ouro</a>. A quantidade de ouro foi mínima e durou pouco tempo, mas é uma demonstração impressionante de transmutação nuclear graças à física moderna.<br><br>
Apesar de não ter valor comercial, esta descoberta ajuda a compreender melhor as forças fundamentais da natureza. É um exemplo curioso de como a ciência consegue dar vida a antigos mitos - mesmo que apenas por um fugaz instante.<br><br>Sun, 18 May 2025 15:30:00 +0000Ricardo Saramago: Random Sunday Stuffhttps://www.odrakir.com/blog/2025/05/18/random-sunday-stuff/
https://www.odrakir.com/blog/2025/05/18/random-sunday-stuff/
<p>Thinking of starting a Sunday ritual here — a weekly post with random things that caught my eye and felt worth sharing. Not sure if it’ll stick, but let’s give it a shot.</p>
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-4.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="652" height="388" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-4.png?resize=652%2C388&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-4.png?w=652&ssl=1 652w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-4.png?resize=300%2C179&ssl=1 300w" sizes="auto, (max-width: 652px) 100vw, 652px"></a></figure><p><strong>The Conan O’Brien Mark Twain Award special on Netflix.</strong> <br>Hands down one of the best comedy specials I’ve seen in a long time. The roasts from his friends are brutally funny, and there’s a sharp political undertone that never lets you forget the current state of the US. If you’re a Conan fan (or just into smart, fearless comedy), don’t miss this.<br></p>
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="1024" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?resize=1024%2C1024&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?resize=1024%2C1024&ssl=1 1024w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?resize=768%2C768&ssl=1 768w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?resize=1536%2C1536&ssl=1 1536w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-5.png?resize=2048%2C2048&ssl=1 2048w" sizes="auto, (max-width: 1000px) 100vw, 1000px"></a></figure><p><strong>Dire Straits – Brothers In Arms – 40th Anniversary</strong><br>Released on May 16, this iconic album is now out on all major streaming platforms, Vinyl, CD, and Blu-ray — featuring lush Dolby Atmos and 5.1 mixes. This record shaped a big part of my youth, and I couldn’t resist grabbing it. It sounds absolutely fantastic.</p>
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-6.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="774" height="774" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-6.png?resize=774%2C774&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-6.png?w=774&ssl=1 774w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-6.png?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-6.png?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-6.png?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 774px) 100vw, 774px"></a></figure><p><strong>OsbsoleteSony</strong> – <a href="https://www.instagram.com/obsoletesony/">https://www.instagram.com/obsoletesony/</a></p>
<p>If you grew up in the ’80s and ’90s like I did, chances are you had at least one Sony product in your life.<br>I was a huge Sony fan back then. The last audio device I owned from them was a Minidisc recorder — I absolutely loved that thing and held onto it for years, until I traded it for a Creative Jukebox. Looking back, I really wish I had kept it. There’s something almost mystical about the design aesthetic of Sony products from that era — a mix of elegance, precision, and futuristic minimalism that’s hard to find today.</p>
<p>I remember seeing the PS5 for the first time and instinctively rejecting it. It just didn’t have that magic.<br>Honestly, I’d love to see Sony release a proper, affordable media player — CD player and all — designed in the spirit of their golden years.</p>
<p>Anyway, I digress.<br>If you’re a fellow Sony nostalgist, check out the @ObsoleteSony Instagram account. It’s packed with gorgeous shots of classic devices from that era. If you’re not following them yet, you’re missing out. </p>
<p>There’s also an official Design Gallery site from Sony <a href="https://www.sony.com/en/SonyInfo/design/gallery/">here</a>.</p>Sun, 18 May 2025 14:15:46 +0000Aberto até de Madrugada: Doom: The Dark Ageshttps://abertoatedemadrugada.com/2025/05/doom-dark-ages.html
https://abertoatedemadrugada.com/2025/05/doom-dark-ages.html
<div><a href="https://abertoatedemadrugada.com/2025/05/doom-dark-ages.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOQp2JJ8OYDETshvfv639AE834QeK83hAFqOhIBoBWbv5ku3e0JFyqH87c6xk91jwcfwbcRsQSzBzTDBBpJ2OZMprNqd4OnZHwLl-6Yj3ipzFKnsOyjGDD3ThJlhEQI-0DeXWtWPRtI03_W2RofmpfQPecY8HYxRopmx-RBXs3_S-yauM0_HRAGfD_Dqam/s1600/doom.jpg" width="600"></a></div>
Já está disponível o Doom: The Dark Ages, a mais recente versão de um clássico que transformou os jogos de computador.<br><br><a name="more"></a>
Depois do Doom Eternal, este Doom: The Dark Ages traz-nos mais uma dose de carnificina digital, desta vez reforçando ainda mais a componente "medieval" do jogo.<br><br>
Mas, por trás da diversão de destruir tudo o que nos aparece pela frente da forma mais criativa possível, esconde-se um poderoso motor gráfico altamente avançado, quer a nível da qualidade de imagem (com reflexos e iluminação), como também a nível da simulação física. Detalhes que quase poderão passar despercebidos pelo meio da intensa acção mas que contribuem para dar um nível de realismo que, tradicionalmente, não estava presente neste tipo de jogos.<br><br>
Como sempre, vale a pena experimentar e desfrutar.<br><br><div></div>
<br><div></div>
<br>
Para os fãs, podem também apreciar as diferenças e evoluções dos diferentes inimigos e criaturas - bem distantes do amontoado de pixels do Doom original.<br><br><div></div>
<br>Sun, 18 May 2025 13:30:00 +0000Aberto até de Madrugada: Viagem ao Japão - parte 2https://abertoatedemadrugada.com/2025/05/viagem-ao-japao-parte-2.html
https://abertoatedemadrugada.com/2025/05/viagem-ao-japao-parte-2.html
<div><a href="https://abertoatedemadrugada.com/2025/05/viagem-ao-japao-parte-2.html"><img alt="" border="0" data-original-height="945" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6rgMmejJbv6wtb20AzXeuugwnL8_x30v0rcg6GW2eK5XlwBV3zgyCv_qZsSl-QOTPcwif5fF_6OuMKyHUG1Bop1JGLSd-YELVA-vPkXRlfj169grU9gusn-XKAxyGkohSdF7y98hX45j7ir9aUCds6ieA5FifbqHGqH5B06UkL4VghKEWO3bOn2Jzk1bv/s1600/nara.jpg" width="600"></a></div>
O Japão é tudo aquilo que se poderia imaginar - e mais.<br><br><a name="more"></a>
Quem acompanha regularmente o AadM saberá que tem estado em "modo especial" devido a uma <a href="https://abertoatedemadrugada.com/2025/05/viagem-ao-japao.html">viagem ao Japão</a> (que ainda está a decorrer) e que me forçou a alterar a rotina habitual de publicações. Mesmo estando ainda a meio da viagem, finalmente consegui arranjar uma curta pausa para vir partilhar como tem sido - embora o rescaldo final fique para mais tarde.<br><br>
Neste momento já estou em Tóquio, que é precisamente aquilo que se poderia imaginar, tal como se vê nos filmes e séries: uma mega-metrópole que acumula mais pessoas que o nosso Portugal; e onde as coisas fluem bastante bem, em grande parte devido à imensa organização implícita dos japoneses.<br><blockquote><p dir="ltr" lang="en">Tokyo by night <a href="https://t.co/e6fsSLyScC">pic.twitter.com/e6fsSLyScC</a></p>— Carlos Martins (@ptnik) <a href="https://twitter.com/ptnik/status/1923528394811244985?ref_src=twsrc%5Etfw">May 16, 2025</a></blockquote>
Ainda não fui às partes da cidade que tenho mais curiosidade em ver, como <a href="https://pt.wikipedia.org/wiki/Akihabara">Akihabara</a>, mas não irá escapar nos próximos dias. Entretanto, posso dizer que já sou um mestre no domínio das sanitas japonesas, e também já passei pelos banhos públicos (que, obviamente, tem que ser algo vivido ao vivo e não pode ser partilhado com imagens ou vídeos! :)<br><br>
また明日ね (até amanhã!)<br><br>Sun, 18 May 2025 11:00:00 +0000Aberto até de Madrugada: Android 16 prepara ecrã dividido 90:10https://abertoatedemadrugada.com/2025/05/android-16-prepara-ecra-dividido-9010.html
https://abertoatedemadrugada.com/2025/05/android-16-prepara-ecra-dividido-9010.html
<div><a href="https://abertoatedemadrugada.com/2025/05/android-16-prepara-ecra-dividido-9010.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7gbs_EMb78gn7PVDgc0mLfFB-Q_p97NOTYUBbD8lPE7ep3xda0bvGgZyrvgXWFyePFiwKb6Yo1rRdiT_JiRXih6A2tubCk9ZJ0mMbnIq62_oFJvPfFQxkNf9FQ0FcCsrL19kjcnKrEC-rKcxpjGcP7j9G2CjAWWZbHIL9fPE3sU9Vs6LfHbiSSBIt5yvz/s1600/android9010.jpg" width="600"></a></div>
O novo Android 16 deverá trazer um novo modo de ecrã dividido 90:10 inspirado no que já existe nos OnePlus.<br><br><a name="more"></a>
A Google está a preparar um novo modo de ecrã dividido para o Android 16 que promete melhorar a multitarefa nos smartphones. Em vez da habitual divisão 70:30, este novo formato usa uma <a href="https://www.androidauthority.com/android-16-90-10-split-screen-3557268/">proporção de 90:10</a>, permitindo que uma app ocupe quase todo o ecrã, enquanto a outra continua acessível numa pequena área.<br><br>
O truque está no toque: ao tocar na app mais pequena, o Android troca imediatamente os tamanhos - a app pequena passa a ocupar 90% do ecrã e a maior reduz-se a 10%. É uma forma simples e rápida de alternar entre apps sem sair do modo de ecrã dividido, resolvendo a falta de espaço nos telemóveis.
<div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsVWC2MrruPI_0z3DzS2SdWDCiO2LIvVM3wGLfgKZq7br8CZbhJBDM-z7ig2qCFbgXkkLoF7heRIR7R07JNoExcitArzu88vUgGjjYXZwILZ369v_-JVg9283Q3oVcfWb9db9gSEt6P6J-N3QcCeqTsyu60hgpNxdxoJ7kMO9Huu2WBrnpYz32Cc28loOM/s1600/androidmulti90.jpg"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsVWC2MrruPI_0z3DzS2SdWDCiO2LIvVM3wGLfgKZq7br8CZbhJBDM-z7ig2qCFbgXkkLoF7heRIR7R07JNoExcitArzu88vUgGjjYXZwILZ369v_-JVg9283Q3oVcfWb9db9gSEt6P6J-N3QcCeqTsyu60hgpNxdxoJ7kMO9Huu2WBrnpYz32Cc28loOM/s600/androidmulti90.jpg" width="600"></a></div>
<br><br><div></div>
<br>
Esta funcionalidade parece claramente inspirada no sistema Open Canvas da OnePlus, embora não se saiba se houve colaboração entre as duas empresas. Seja como for, é uma melhoria inteligente que tornará a multitarefa mais prática nos dispositivos Android.<br><br>
Embora ainda não haja data oficial de lançamento, a funcionalidade está praticamente pronta e poderá chegar num dos próximos updates do Android 16. Para quem usa várias apps em simultâneo, esta novidade será muito bem-vinda.<br><br>Sun, 18 May 2025 10:00:00 +0000Aberto até de Madrugada: LG e Mediatek criam sistema Android multi-ecrã para automóveishttps://abertoatedemadrugada.com/2025/05/lg-e-mediatek-criam-sistema-android.html
https://abertoatedemadrugada.com/2025/05/lg-e-mediatek-criam-sistema-android.html
<div><a href="https://abertoatedemadrugada.com/2025/05/lg-e-mediatek-criam-sistema-android.html"><img alt="" border="0" width="600" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7B9JP5t7qcw6yaerZoquTx-omHc4iGKeoiXP-QU65UdQHgzNxRfen23KPrpnZ1rsh5jkZRh8Adco-knCKOmxfzA4ouybn2tW46wR_GnNW9ZXUz9Sti2tqyCgYI16VCpHGHsLuC5uGg2SdkHUDX3qOHtpcMRPI91Wc9MF_FZR__Lm3TyL2Wm96Ok50A6Pi/s1600/LGCMU.jpg"></a></div>
A LG Electronics e a MediaTek apresentaram a sua estrutura Concurrent Multi-User (CMU), alicerçada em Android, aplicada a sistemas de Infotainment In-Vehicle (IVI), no Salão Automóvel de Xangai.<br><br><a name="more"></a>
A estrutura CMU é a primeira do seu género a ser implementada no sistema operativo Android Automotive OS (AAOS) da Google. Esta solução permite que os passageiros utilizem simultaneamente vários ecrãs num único sistema operativo Android, respondendo à necessidade de um melhor consumo de conteúdos no veículo, à medida que os ecrãs se tornam maiores e mais diversificados na era dos veículos definidos por software (SDV).<br><br>
A estrutura proporciona aos ocupantes do veículo uma experiência Android multi-dispositivo sem falhas num sistema unificado. Os condutores podem utilizar o sistema de navegação enquanto o passageiro do banco da frente vê vídeos e os passageiros do banco de trás jogam jogos - tudo em simultâneo e de forma independente, de acordo com as normas de segurança.<br><br>
Anteriormente, as configurações típicas de veículos com um ecrã central de informação (CID) e dois ecrãs de entretenimento nos bancos traseiros (RSE) exigiam várias máquinas virtuais (VM) Android. A tecnologia CMU simplifica esta configuração, ao executar tudo num único sistema operativo Android, reduzindo os requisitos de CPU, memória e armazenamento e minimizando a carga do sistema.<br><br>
A estrutura CMU transforma as experiências no veículo, criando espaços digitais personalizados para os passageiros. Cada utilizador pode iniciar sessão no seu próprio ecrã, ligar auscultadores Bluetooth ou controladores de jogos, gerir definições de privacidade e pode até partilhar filmes, jogos e áudio em vários ecrãs. Os pais podem definir controlos parentais para garantir uma experiência segura e adequada à idade das crianças.<br><br>
A estrutura CMU foi introduzida como uma caraterística essencial do AAOS15. Para além das funções principais do AAOS, a LG oferece caraterísticas exclusivas, como o suporte de auscultadores Bluetooth independentes, Text-To-Speech, controlos parentais e espelhamento fácil através de gestos. A LG tira partido das suas décadas de experiência na otimização do desempenho dos dispositivos móveis Android, que adquiriu enquanto operava um negócio móvel.<br><br><br><h5>[<a href="https://www.pelaestradafora.com/">Pela Estrada Fora</a>]</h5>Sun, 18 May 2025 09:00:00 +0000Alexsandro Felix: Ubuntu: Corrigir Erro ‘Lista de Fontes’ Fácilhttps://blog.ffelix.eti.br/solucao-para-a-lista-de-fontes-nao-pode-ser-lida-no-ubuntu/
https://blog.ffelix.eti.br/solucao-para-a-lista-de-fontes-nao-pode-ser-lida-no-ubuntu/
<p>Se você é um entusiasta do Linux e já se deparou com o temido erro “A lista de fontes não pode ser lida” ao tentar atualizar o Ubuntu, sabe que é como tentar pedir um café numa máquina quebrada: frustrante, mas não impossível de consertar! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f605.png" alt="😅"> Esse problema, comum entre usuários do Ubuntu, geralmente está ligado a configurações erradas nos repositórios de software ou permissões bagunçadas. Neste artigo, vamos mergulhar de cabeça no problema, com explicações didáticas, exemplos de código testáveis e um toque de humor para deixar sua jornada mais leve. Preparado para fazer seu Ubuntu cantar de novo? Vamos lá!</p>
<h2>Por Que Esse Erro Acontece?</h2>
<p>O erro ocorre quando o gerenciador de pacotes APT (Advanced Package Tool) do Ubuntu não consegue ler o arquivo de repositórios (/etc/apt/sources.list) ou os arquivos complementares em /etc/apt/sources.list.d/. As causas mais comuns são:</p>
<ul><li><strong>Linhas mal formatadas</strong> nos arquivos de repositórios.</li>
<li><strong>Permissões incorretas</strong> que impedem o acesso aos arquivos.</li>
<li><strong>URLs de repositórios quebradas</strong> ou servidores fora do ar.</li>
<li><strong>Cache corrompido do APT</strong>.</li>
</ul><p>Nosso objetivo é consertar isso passo a passo, com comandos que você pode copiar, colar e testar. E, claro, entender o que cada um faz!</p>
<h2>Passo a Passo para Resolver o Erro</h2>
<h3>Identifique o Problema com o Comando de Atualização</h3>
<p>Primeiro, vamos ver a mensagem de erro completa. Abra o terminal (atalho: Ctrl + Alt + T) e execute:</p>
<pre><code>sudo apt update</code></pre>
<p>A saída pode mostrar algo como:</p>
<pre><code>E: Não foi possível ler o arquivo de lista de fontes /etc/apt/sources.list.d/algum_repositorio.list
E: A lista de fontes não pode ser lida.</code></pre>
<p>Anote o arquivo ou linha mencionada. Isso é a pista do crime! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f575-fe0f-200d-2642-fe0f.png" alt="🕵️‍♂️"></p>
<h3>Inspecione o Arquivo sources.list</h3>
<p>O arquivo principal de repositórios está em /etc/apt/sources.list. Vamos abri-lo para verificar:</p>
<pre><code>sudo nano /etc/apt/sources.list</code></pre>
<p>No editor Nano, você verá linhas como:</p>
<pre><code>deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse</code></pre>
<h4>O que procurar?</h4>
<ul><li><strong>Linhas estranhas</strong>: URLs quebradas ou repositórios de terceiros mal configurados.</li>
<li><strong>Formato incorreto</strong>: Cada linha deve começar com deb ou deb-src, seguida de uma URL válida, codinome da versão (ex.: jammy para Ubuntu 22.04) e componentes (ex.: main, universe).</li>
</ul><p>Se encontrar algo errado, comente a linha adicionando # no início ou corrija a URL. Por exemplo, se uma linha aponta para um repositório inexistente:</p>
<pre><code># Comentar linha problemática
# deb http://repositorio-invalido.com/ubuntu jammy main</code></pre>
<p>Salve com Ctrl + O, pressione Enter e saia com Ctrl + X.</p>
<h3>Verifique Arquivos em sources.list.d</h3>
<p>Repositórios de terceiros podem estar em /etc/apt/sources.list.d/. Liste os arquivos:</p>
<pre><code>ls /etc/apt/sources.list.d/</code></pre>
<p>Se houver arquivos suspeitos (ex.: repositorio_quebrado.list), abra-os:</p>
<pre><code>sudo nano /etc/apt/sources.list.d/repositorio_quebrado.list</code></pre>
<p>Corrija ou comente linhas problemáticas. Se o repositório não for essencial, mova o arquivo para um local seguro:</p>
<pre><code>sudo mv /etc/apt/sources.list.d/repositorio_quebrado.list /tmp/</code></pre>
<h3>Ajuste as Permissões</h3>
<pre><code>sudo chmod 644 /etc/apt/sources.list
sudo chmod -R 644 /etc/apt/sources.list.d/*
sudo chown root:root /etc/apt/sources.list
sudo chown -R root:root /etc/apt/sources.list.d/*</code></pre>
<p>Esses comandos garantem que os arquivos tenham permissões de leitura para todos e sejam pertencentes ao usuário root.</p>
<h3>Restaure o sources.list Padrão (Se Necessário)</h3>
<p>Se o sources.list estiver muito bagunçado, crie um novo. Faça backup do atual:</p>
<pre><code>sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak</code></pre>
<p>Crie um novo arquivo:</p>
<pre><code>sudo nano /etc/apt/sources.list</code></pre>
<p>Adicione as linhas padrão para sua versão do Ubuntu. Para o Ubuntu 22.04 (Jammy), use:</p>
<pre><code>deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse</code></pre>
<p>Para outras versões, substitua jammy pelo codinome correto (ex.: focal para 20.04). Salve e saia.</p>
<h3>Limpe o Cache do APT</h3>
<p>Um cache corrompido pode causar o erro. Limpe-o:</p>
<pre><code>sudo apt clean
sudo rm -rf /var/lib/apt/lists/*</code></pre>
<p>Isso remove listas de pacotes antigas. Agora, atualize novamente:</p>
<pre><code>sudo apt update</code></pre>
<h3>Troque o Servidor de Repositórios</h3>
<p>Se o erro persistir, o servidor pode estar fora do ar. Mude para outro servidor:</p>
<ul><li>Abra o aplicativo “Programas e Atualizações” ou execute</li>
</ul><pre><code>sudo software-properties-gtk</code></pre>
<ul><li>Na aba “Software Ubuntu”, selecione outro servidor em “Baixar de” (ex.: “Servidor Principal”).</li>
<li>Atualize com:</li>
</ul><pre><code>sudo apt update</code></pre>
<h3>Resolva Problemas de DNS</h3>
<p>Se o APT não consegue acessar os repositórios, pode ser um problema de DNS. Teste um DNS público:</p>
<pre><code>sudo nano /etc/resolv.conf</code></pre>
<p>Adicione:</p>
<pre><code>nameserver 8.8.8.8
nameserver 8.8.4.4</code></pre>
<p>Salve e tente:</p>
<pre><code>sudo apt update</code></pre>
<h2>Dica de Ouro: Domine o Linux com um Guia Prático</h2>
<figure><a href="https://amzn.to/4koYHr2"><img data-recalc-dims="1" loading="lazy" decoding="async" width="452" height="678" data-attachment-id="1090" data-permalink="https://blog.ffelix.eti.br/linux_guia_pratico/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Linux_guia_pratico.jpeg?fit=452%2C678&ssl=1" data-orig-size="452,678" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="Linux_guia_pratico" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Linux_guia_pratico.jpeg?fit=200%2C300&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Linux_guia_pratico.jpeg?fit=452%2C678&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Linux_guia_pratico.jpeg?resize=452%2C678&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Linux_guia_pratico.jpeg?w=452&ssl=1 452w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/Linux_guia_pratico.jpeg?resize=200%2C300&ssl=1 200w" sizes="auto, (max-width: 452px) 100vw, 452px"></a></figure><p>Resolver erros como esse é só o começo da sua jornada no Linux. Para dominar comandos essenciais e evitar dores de cabeça, recomendo o livro <a href="https://amzn.to/4koYHr2" target="_blank" rel="noopener" title="">Linux, Guia Prático – Comandos Essenciais</a>. Ele é perfeito para quem quer entender o sistema de forma clara e direta, com exemplos práticos que vão te salvar em momentos como este. Garanta o seu e leve suas habilidades no Linux para o próximo nível! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f4da.png" alt="📚"></p>
<h2>Testando o Resultado</h2>
<p>Depois de seguir os passos, seu sudo apt update deve rodar sem erros, mostrando algo como:</p>
<pre><code>Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]F
etched 119 kB in 1s (100 kB/s)Reading package lists... Done</code></pre>
<p>Se ainda houver problemas, compartilhe a saída do comando nos comentários do blog. Vamos resolver juntos!</p>
<h2>Conclusão e Convite para Ação</h2>
<p>Pronto! Você acabou de transformar um erro chato em uma oportunidade de aprender mais sobre o Ubuntu. <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f60e.png" alt="😎"> O Linux é assim: quanto mais você mexe, mais descobre seus segredos. Quer continuar essa aventura? Confira outros artigos no blog, como “Como Instalar Pacotes no Ubuntu” ou “Dicas para Otimizar seu Sistema Linux”. Inscreva-se na nossa newsletter para receber dicas exclusivas e não perca nenhum conteúdo! Deixe seu comentário abaixo: conseguiu resolver o erro? Qual foi sua maior dificuldade? Sua participação faz nosso blog crescer! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f680.png" alt="🚀"></p><p>The post <a href="https://blog.ffelix.eti.br/solucao-para-a-lista-de-fontes-nao-pode-ser-lida-no-ubuntu/">Ubuntu: Corrigir Erro ‘Lista de Fontes’ Fácil</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Sat, 17 May 2025 23:41:35 +0000Aberto até de Madrugada: Chrome corrige vulnerabilidade que deixava roubar dadoshttps://abertoatedemadrugada.com/2025/05/chrome-corrige-vulnerabilidade-que.html
https://abertoatedemadrugada.com/2025/05/chrome-corrige-vulnerabilidade-que.html
<div><a href="https://abertoatedemadrugada.com/2025/05/chrome-corrige-vulnerabilidade-que.html"><img alt="" border="0" width="600" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLiJ3lUVgyyhyphenhyphenppLHpemGuK6-86SGAn_wUrBfwimv-DnJsozLTczDNHz2u3_6vxMMr2pwPuFNvR_RMN7ztflHaVQ-jLmUmNJ7OnCgfPK2GFTpYju8pPVwydMzmgv7xBXAAbaVrykTSDwX58I2tsslZOgToblXk2yvoD6yARhcK6Bcp4HWZKGDuooHrjeHl/s1600/chrome%20%282%29.jpg"></a></div>
A Google lançou uma actualização urgente para corrigir uma falha grave no Chrome que podia permitir a hackers assumir o controlo de contas.<br><br><a name="more"></a>
A vulnerabilidade, identificada como <a href="https://chromereleases.googleblog.com/2025/05/stable-channel-update-for-desktop_14.html">CVE-2025-4664</a>, afecta o componente Loader do Chrome e pode ser explorada para roubar dados sensíveis através de páginas web maliciosas.<br><br>
Já existe um exploit público para esta falha, o que levanta preocupações sobre possíveis ataques reais. Embora a Google não confirme explorações activas, o alerta deixa essa possibilidade em aberto. O problema foi descoberto pelo investigador Vsevolod Kokorin, que explicou como tokens OAuth e parâmetros de consulta podem ser expostos através de políticas de referrer inseguras.<br><br>
A correcção já está disponível para utilizadores de Windows, Linux e macOS, com as versões 136.0.7103.113 e .114 a serem distribuídas progressivamente. Recomenda-se actualizar o Chrome manualmente ou reiniciar o navegador para garantir a instalação automática.<br><br>
Esta é a segunda falha crítica corrigida no Chrome este ano, depois de um zero-day explorado em ataques de espionagem em Março. A Google mantém o foco em reforçar a segurança do navegador, especialmente com exploits a serem divulgados publicamente e ataques a surgir cada vez mais depressa.<br><br>Sat, 17 May 2025 20:00:00 +0000Ricardo Saramago: Notebook Therapyhttps://www.odrakir.com/blog/2025/05/17/notebook-therapy/
https://www.odrakir.com/blog/2025/05/17/notebook-therapy/
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20200714_134646.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="576" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20200714_134646.jpg?resize=1024%2C576&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20200714_134646.jpg?resize=1024%2C576&ssl=1 1024w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20200714_134646.jpg?resize=300%2C169&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20200714_134646.jpg?resize=768%2C432&ssl=1 768w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20200714_134646.jpg?resize=1536%2C864&ssl=1 1536w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20200714_134646.jpg?w=1630&ssl=1 1630w" sizes="auto, (max-width: 1000px) 100vw, 1000px"></a></figure><p>This could easily be the name of a blog. Maybe it already is. But that’s beside the point.</p>
<p>I’ve been trying to slow down for a long time — to break away from the chaos of daily life. To do that, I’ve forced myself to journal.</p>
<p>It helps me clear my mind, organize my life, align my thoughts, and — most importantly — nurture a creativity that’s been running on empty.</p>
<p>Now, this isn’t some new revelation. I was a Moleskine user for decades. A loyalist. But over time, it started to feel… limiting. I wanted something more flexible. Something modular. A system I could shape around me, not the other way around.</p>
<p>Because journaling, for me, isn’t just writing. It’s also collage. Sketching. Watercolor. Scratching out wild ideas and painting over them with new ones. It’s experimentation. It’s… me.</p>
<p>Funny thing though — even though I love writing in notebooks, I feel oddly freer when I type in a computer. Maybe it’s the impermanence of a blinking cursor versus the commitment of a fountain pen on paper. I scribble and scratch, sure — but the pressure is always there. Still, I digress.</p>
<p>With Moleskine no longer doing it for me, I started searching. And wow — the stationery world is massive. So many brands, so many systems, so many rabbit holes to fall into.</p>
<p>I made a list of what I needed:</p>
<ul><li>Mix-and-match paper types and mediums</li>
<li>Easy to replace components</li>
<li>Stylish and/or elegant (yes, I’m that kind of person)</li>
<li>Strong brand and community support</li>
<li>Bigger than A6</li>
<li>Matching accessories (I hate mixing brands)</li>
<li>Suitable for both personal and professional use</li>
</ul><p>My first discovery was Paper Republic, a beautiful European brand. I got the Grand Voyageur XL — loved the leather, loved the refill options. It became my personal notebook for a while.</p>
<p>But something was missing. The quality? Impeccable. The feel? Luxurious. But… no real community that I felt I could fit in. No shared excitement. And over time, I used it less and less for personal stuff, keeping it mainly for work.</p>
<p>After looking for something else, I stumbled into Traveler’s Notebook by Traveler’s Company, Japan. My first reaction? Mixed. It looked familiar — kind of like my Grand Voyageur XL — but the dimensions felt odd. Not quite A5. Still, I kept digging.</p>
<p>I discovered a whole ecosystem: themed refills, brass accessories, matching pens, vibrant communities, blogs, YouTube channels. Despite the initial language barrier, I was hooked.</p>
<figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20240722_173623.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="917" height="917" data-id="2053" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20240722_173623.jpg?resize=917%2C917&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20240722_173623.jpg?w=917&ssl=1 917w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20240722_173623.jpg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20240722_173623.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20240722_173623.jpg?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 917px) 100vw, 917px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20241115_195529.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="907" height="907" data-id="2054" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20241115_195529.jpg?resize=907%2C907&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20241115_195529.jpg?w=907&ssl=1 907w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20241115_195529.jpg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20241115_195529.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20241115_195529.jpg?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 907px) 100vw, 907px"></a></figure></figure><p>So I took the plunge. Ordered a notebook and some accessories. And that was it. I got it. This was more than a notebook — it was a world. I ended up getting a second one just for sketching and painting. I use them both regularly as my main daily drivers.</p>
<p>One day, I stumbled upon a <a href="https://arslan.io/2025/02/24/plotter-notebook-system/">blog post</a> by <a href="https://arslan.io/">Fatih Arslan</a> — a deep dive into a Japanese system called <a href="https://www.plotter-japan.com/">Plotter</a>, made by a sister company of Traveler’s Company.</p>
<p>Plotter is… different. It’s sleek. Modular. Minimal. It’s a ring binder system with a focus on projects. You can mix paper types, use only what you need, keep it lean and purposeful. It immediately resonated with how I think and work.</p>
<p>There was one catch: Plotter products weren’t available in Europe. But I had a lucky break — a friend went to Japan and I sent him on a mission.</p>
<figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133403.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="917" height="917" data-id="2055" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133403.jpg?resize=917%2C917&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133403.jpg?w=917&ssl=1 917w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133403.jpg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133403.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133403.jpg?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 917px) 100vw, 917px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133856.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="917" height="917" data-id="2056" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133856.jpg?resize=917%2C917&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133856.jpg?w=917&ssl=1 917w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133856.jpg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133856.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_133856.jpg?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 917px) 100vw, 917px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141348.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="917" height="917" data-id="2058" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141348.jpg?resize=917%2C917&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141348.jpg?w=917&ssl=1 917w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141348.jpg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141348.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141348.jpg?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 917px) 100vw, 917px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141448.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="917" height="917" data-id="2057" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141448.jpg?resize=917%2C917&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141448.jpg?w=917&ssl=1 917w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141448.jpg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141448.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141448.jpg?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 917px) 100vw, 917px"></a></figure><figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141544.jpg?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="917" height="917" data-id="2059" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141544.jpg?resize=917%2C917&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141544.jpg?w=917&ssl=1 917w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141544.jpg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141544.jpg?resize=150%2C150&ssl=1 150w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/20250417_141544.jpg?resize=768%2C768&ssl=1 768w" sizes="auto, (max-width: 917px) 100vw, 917px"></a></figure></figure><p>Here’s what I got:</p>
<ul><li>Pueblo 6-Ring Leather Binder (A5 Size) Black</li>
<li>6mm Ruled Paper 80 sheets (A5 Size)</li>
<li>Drawing Paper 30 sheets (A5 Size)</li>
<li>5mm Dot Grid 80 sheets (A5 Size)</li>
<li>Project Manager 6 Colors Assortment (A5 Size)</li>
<li>Zipper Case (A5 Size)</li>
<li>Leather Ring Supporter (A5 Size)</li>
<li>Ruler Pad (A5 Size)</li>
<li>Leather Pen Holder with Lifter (A5 Size)</li>
<li>Band with Lifter (A5 Size)</li>
</ul><p>This allowed me to setup my Plotter to manage personal projects: goal setting, notes, to-do lists, creative planning. It’s become a second brain — structured, yet deeply personal.</p>
<p>So where am I now?</p>
<ul><li>Paper Republic: for work</li>
<li>Traveler’s Notebook: for journaling, sketching, painting</li>
<li>Plotter: for managing personal projects and creativity</li>
</ul><p>Is it overkill? Maybe. But honestly? I enjoy it. And that’s what matters.</p>
<p>If you’re curious about Plotter, I highly recommend Fatih Arslan’s blog post and the <a href="https://plotterusa.com/what-is-plotter-analog-method/">Plotter USA website</a> — they’re great resources to understand the system better.</p>
<p></p>Sat, 17 May 2025 18:03:00 +0000Aberto até de Madrugada: SanDisk lança SSD WD Black SN8100 de 14.9 GB/shttps://abertoatedemadrugada.com/2025/05/sandisk-lanca-ssd-wd-black-sn8100-de.html
https://abertoatedemadrugada.com/2025/05/sandisk-lanca-ssd-wd-black-sn8100-de.html
<div><a href="https://abertoatedemadrugada.com/2025/05/sandisk-lanca-ssd-wd-black-sn8100-de.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY3tfTnXzmgSg6FZqVgM9WcBLwoTFcuxEqeTYmPiWHzOfwQwyxgJTnC5KdwQGHsoJv8BxwCdf9g4ijwiTEqbTIyWYLzjt2Zx-QTUbjfQjIkF3H6aD-GTfUfnK8uTx4ru6Bps4ErZ5JYiZplzIlAW1BwvfE8z_AAlmgr40gx7zKoGP1GbwcL8NDRdbq35G_/s1600/SN8100.jpg" width="600"></a></div>
A SanDisk revelou o seu novo SSD WD Black SN8100, apresentado como o NVMe PCIe Gen 5.0 mais rápido do mundo com transferências de quase 15GB/s.<br><br><a name="more"></a>
Com velocidades de leitura até 14.900MB/s e capacidades que chegam aos 8TB, este modelo é pensado para gamers, criadores de conteúdo e aplicações de inteligência artificial. Além da velocidade, a SanDisk garante que o SN8100 é 100% mais eficiente em termos de consumo energético face à geração anterior. O SSD utiliza tecnologia BiCS8 TLC 3D NAND, que promete uma gestão térmica superior e um design mais compacto.<br><br>
Em termos técnicos, o SN8100 oferece até 14.900MB/s de leitura e 14.000MB/s de escrita, com um desempenho aleatório de 2,3 milhões de IOPS nos modelos de 2TB e 4TB. Os preços começam nos 179,99 dólares para a versão de 1TB, embora as especificações máximas sejam exclusivas das versões com mais capacidade. Está ainda prevista uma versão com dissipador para o final do ano, assim como o modelo de 8TB.<br><br>
É também indicador que os SSDs PCIe 5.0 de 15 GB/s se começam a tornar mais comuns, e que não deverá demorar muito para que se tornem suficientemente acessíveis para todos os utilizadores.<br><br>Sat, 17 May 2025 17:30:00 +0000Aberto até de Madrugada: Robot Lingxi X2 mostra as suas capacidadeshttps://abertoatedemadrugada.com/2025/05/robot-lingxi-x2-mostra-as-suas.html
https://abertoatedemadrugada.com/2025/05/robot-lingxi-x2-mostra-as-suas.html
<div><a href="https://abertoatedemadrugada.com/2025/05/robot-lingxi-x2-mostra-as-suas.html"><img alt="" border="0" width="600" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheLA44gOTvdc2J97W5dmtGSahDnYOUWDBK6UAoFRZ5cQmfd-y0Vjop0f_UedwXGomUX7XaWgfv-sabybYThATeQib6iAf3cgNFuiFd1bTQeRxEeIdSXbxnksLekHBMJjwheVTLZe5WKOS7k270tmaz866fzCggYm_1GmPEOiQZN4GJjeoYyNKichXTc5Bu/s1600/lingx2.jpg"></a></div>
O robot humanóide Lingxi X2 da AgiBot demonstrou ou seus mais recentes avanços.<br><br><a name="more"></a>
Os robots humanóides têm sido uma das coisas que mais têm evoluído nos últimos anos, tirando partido da tecnologia AI, e a AgiBot mostra-nos aquilo que o seu Lingxi X2 consegue fazer, incluindo coisas como equilíbrio dinâmico, rotações rápidas, recuperação de quedas, e outros.<br><blockquote><p lang="en" dir="ltr">New video of AGIBOT's Lingxi X2 robot showcasing dynamic movements, fall recovery, quiet operation, and vision-based perception/planning. <a href="https://t.co/5D2FMCnb1u">https://t.co/5D2FMCnb1u</a> <a href="https://t.co/pbDiM2xKKF">pic.twitter.com/pbDiM2xKKF</a></p>— The Humanoid Hub (@TheHumanoidHub) <a href="https://twitter.com/TheHumanoidHub/status/1923259033160384676?ref_src=twsrc%5Etfw">May 16, 2025</a></blockquote>
Nem será recomendável tentar arriscar no quanto isto irá evoluir ainda mais ao longo dos próximos 12 anos.<br><br>Sat, 17 May 2025 15:30:00 +0000Aberto até de Madrugada: Serviço Max voltará a ser HBO Maxhttps://abertoatedemadrugada.com/2025/05/servico-max-voltara-ser-hbo-max.html
https://abertoatedemadrugada.com/2025/05/servico-max-voltara-ser-hbo-max.html
<div><a href="https://abertoatedemadrugada.com/2025/05/servico-max-voltara-ser-hbo-max.html"><img alt="" border="0" data-original-height="800" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRZZj75EbtMpAD-2DzsX5_iNR2fV3PONEtp0qFyx03WgPBz5tgkdZWl304XguoWU-PfGrZm2OlErshZJoMLidzdjzWl2F5PJ855RljF9jhbZHjBqmc44CA_G-ig1kFLude8ERax69K9ZFAAl9WJZ5LhPXrKirRmasjvMwsx9-AjZgL0DeQTvmfdL1uckUL/s1600/max.jpg" width="600"></a></div>
A Warner Bros. Discovery vai voltar a chamar o seu serviço de streaming "HBO Max", revertendo a decisão de 2023 que o encurtou para apenas "Max".<br><br><a name="more"></a>
A mudança acontecerá este verão e pretende reforçar a identidade "única" da plataforma, apostando no peso da marca HBO. A alteração para "Max" foi uma tentativa de alargar o público-alvo, mas acabou por causar confusão, já que muitos associam o serviço ao conteúdo premium da HBO. Com a concorrência a apertar, a empresa quer agora recentrar-se em conteúdos de qualidade para adultos e famílias.<br><br>
Ainda não se sabe se o regresso do nome trará de volta o antigo design da app. Em 2023, os utilizadores foram obrigados a descarregar uma aplicação completamente nova, algo que gerou críticas e frustração.<br><br>
A própria empresa brincou com a situação nas redes sociais, assumindo com humor esta mudança de planos. No fundo, a Warner Bros. Discovery aposta no reconhecimento da marca HBO para se manter relevante no mercado do streaming.<br><br><br>Sat, 17 May 2025 13:30:00 +0000Ricardo Saramago: Eversolo Play Streaming Amplifierhttps://www.odrakir.com/blog/2025/05/17/eversolo-play-streaming-amplifier/
https://www.odrakir.com/blog/2025/05/17/eversolo-play-streaming-amplifier/
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-2.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="760" height="551" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-2.png?resize=760%2C551&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-2.png?w=760&ssl=1 760w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/image-2.png?resize=300%2C218&ssl=1 300w" sizes="auto, (max-width: 760px) 100vw, 760px"></a></figure><p>Just caught <a href="https://stereonet.com/reviews/eversolo-play-streaming-amplifier-first-look">this</a> on my radar today — and I’m genuinely excited.</p>
<p>I’ve been eyeing a few Eversolo DACs and players for a while now, especially since I revamped my music setup (more on that in a future post), and now, the newly announced <a href="https://www.eversolo.com/Product/index/model/play/target/fxVC4T0PzE3eq7k9e%5Bld%5D3ulg%3D%3D.html#/">Eversolo Play Streaming Amplifier</a> looks like it checks all the boxes on my list of requirements.</p>
<p>It even comes in two editions: one with a built-in CD player, and one without. Originally, CD support was just a “nice-to-have” for me… but now? It’s officially a must-have. Although my main source of music is digital (local files and streaming), I still have hundreds of CDs. And no, I never joined the vinyl bandwagon. </p>
<p>Now we wait for it to make its way across the pond to Europe. </p>
<p>Can’t wait to get my hands (and ears) on it.</p>
<p></p>Sat, 17 May 2025 12:30:47 +0000A Minha Alegre Casinha: Como fazer um controlador de fita LED WRGB com ESP32http://aminhaalegrecasinha.com/2025/05/como-fazer-um-controlador-de-fita-led.html
http://aminhaalegrecasinha.com/2025/05/como-fazer-um-controlador-de-fita-led.html
<div><a href="http://aminhaalegrecasinha.com/2025/05/como-fazer-um-controlador-de-fita-led.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3P8zmOsp81SdEAf9umyQ3oMZ4qTbAkLTZ6-5zxBCW5FunOYS858-tBakRDACfU3ZozPUPK1cdkp1YCExFUD03a9DCBZtFXhLW5ghR27MJJuO2IsMwQ-fkH8mYPkMwCJAGgx1L6NoHKQd5eRQASpbENQXxCZiaHCtE7eDSLJpeFT_hQfq8a6IWU5nJUixo/s1600/LEDcontrolHA%20%282%29.jpg" width="600"></a></div>
Com um ESP32 podemos fazer um versátil controlador de fitas LED RGBW, com sensor de movimento, iluminação, e temperatura, incluídos - para integração no Home Assistant.<br><br><a name="more"></a>
Não há falta de sistemas de iluminação que podem ser facilmente (ou não tão facilmente) integrados no Home Assistant, mas quem desejar a maior versatilidade para um sistema que não fique dependente da boa vontade de um qualquer fabricante poderá preferir criar o seu próprio controlador por medida.<br><br>
Como sempre, o <a href="https://www.instructables.com/All-in-one-RGBW-LEDs-Controller-With-Temperature-a/">cérebro do sistema</a> recai sobre um ESP32, assistido por quatro módulos MOSFET para o controlo de potência de cada um dos canais da fita LED (RGB + W).<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHZx-wIVhmL7zJo74NFkMnVz3Ndn4hsO_KSycHEMlq3qaagxN5UkQHIpIgwo8ZBiUag-EYT3cs-lDr-Hi_ZifZuymx3aJSRKyU54aSiSVV7UkV5XUMXmiXU4N8PfWmRJCMk3pW9VxhHJTC8R_KtzQNWDYUMp2S_JjxQtL27Ata92iFCPHHKEGVw6j1c0Cy/s1024/LEDcontrolHA%20%281%29.jpg"><img alt="" border="0" data-original-height="576" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHZx-wIVhmL7zJo74NFkMnVz3Ndn4hsO_KSycHEMlq3qaagxN5UkQHIpIgwo8ZBiUag-EYT3cs-lDr-Hi_ZifZuymx3aJSRKyU54aSiSVV7UkV5XUMXmiXU4N8PfWmRJCMk3pW9VxhHJTC8R_KtzQNWDYUMp2S_JjxQtL27Ata92iFCPHHKEGVw6j1c0Cy/s600/LEDcontrolHA%20%281%29.jpg" width="600"></a></div>
Sendo um sistema criado de raiz, temos também a liberdade de integrar sensores adicionais, como um sensor de movimento, iluminação e temperatura. Isto permite que se possa fazer controlo directamente no módulo, se desejado (como acender a fita quando há movimento e estiver escuro), como também reportar essa informação para o Home Assistant, para que possa ser usado em combinação com acções adicionais - como acender mais luzes, ou manter um registo histórico da temperatura. A parte do software também fica imensamente simplificada recorrendo-se ao popular <a href="https://esphome.io/">ESPHome</a>.<br><br><div></div>
<br>
Uma opção a ter em conta, tanto para se poder criar um sistema por medida com funcionalidades que possam não existir em produtos comerciais, como para não se ficar dependente de um produto que possa deixar de existir daqui a um par de anos e deixar-nos encravados à procura de alternativas.<br><br>Sat, 17 May 2025 12:05:00 +0000Ricardo Saramago: Enter the Server – Part Four (Yes, 10 Years Later!)https://www.odrakir.com/blog/2025/05/17/enter-the-server-part-four-yes-10-years-later/
https://www.odrakir.com/blog/2025/05/17/enter-the-server-part-four-yes-10-years-later/
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2015/07/c03760124.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="474" height="356" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2015/07/c03760124.png?resize=474%2C356&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2015/07/c03760124.png?w=474&ssl=1 474w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2015/07/c03760124.png?resize=300%2C225&ssl=1 300w" sizes="auto, (max-width: 474px) 100vw, 474px"></a></figure><p>Here we are again — almost a full decade later — with part four of my home server saga!</p>
<p>And yes, unbelievably, it’s <em>still the same</em> server from <a href="https://www.odrakir.com/blog/2015/07/07/enter-the-server-part-three/">all those years ago</a>: the ever-reliable <strong>HP Microserver Gen8</strong>. Quiet, stable, and surprisingly capable after all this time. It hasn’t been running ESXi Free for a while now, and many of the original services have been retired — either because I no longer needed them, or I found better alternatives.</p>
<p>Currently, it’s running <strong><a href="https://www.truenas.com/truenas-scale/">TrueNAS Scale</a> (Dragonfish-24.04.2.5)</strong> — and the transition was mostly smooth. The only hiccup? I had to wipe out my previous RAID setup. TrueNAS doesn’t play well with hardware RAID, especially with the <strong>HP Smart Array P420 Controller</strong> I had added years ago. It has its own storage architecture that prefers direct disk access.</p>
<h3>What’s Still Running:</h3>
<ul><li><strong>File Sharing</strong> – Native SMB shares from TrueNAS. Solid and reliable.</li>
<li><strong>Backup</strong> – Using <strong><a href="https://www.bvckup2.com/">Bvckup 2 Pro</a></strong> on my PCs, targeting the Gen8 for storage.</li>
<li><strong>Plex</strong> – Long gone. These days, streaming services like Netflix and Prime have taken over.</li>
<li><strong>Download Management</strong> – Also retired.</li>
<li><strong>SFTP Server</strong> – Used to share public files, but no longer needed.</li>
<li><strong>VPN / Private Cloud</strong> – Replaced everything with <strong><a href="https://tailscale.com/">Tailscale</a></strong>, and it’s been a game-changer. Seriously, one of the best additions I’ve made. If you don’t know Tailscale, it’s a zero-config VPN that uses WireGuard under the hood and creates a private mesh network between your devices — wherever they are. I can now access the TrueNAS dashboard, SMB shares, or SSH into my server from literally anywhere (even my phone), with no firewall tweaks or weird NAT rules. It even supports MagicDNS and exit nodes if you want all your traffic to route securely through your home network. Well… now recalling I had to make a few tweaks, because I installed Taiscale in my EdgeRouter X… but I didn’t had to, I just wanted to play with it a bit more, because, hacking.</li>
</ul><p>The Gen8 is now handling a few extra duties that weren’t part of the original plan:</p>
<ul><li><strong>UniFi Network Controller</strong> – Running on a lightweight Ubuntu VM. TrueNAS’s built-in virtualization makes this easy.</li>
<li><strong>AdGuard Home</strong> – This one has become indispensable in a household with teens, smart TVs, tablets, and IoT clutter. I run <a href="https://adguard.com/en/adguard-home/overview.html">AdGuard Home</a> in a container on the Gen8. It acts as a local DNS sinkhole, filtering ads, trackers, and shady domains before they even reach your devices. It also gives me visibility into where traffic is going and what’s being blocked. It has centralized content filtering (for devices that don’t support ad blockers natively), you can set per-device rules (yes, you can “accidentally” block TikTok and other social media sites just for the kids). It has a minimal resource usage as it’s very lightweight and the web interface is clean and simple to use. Total win.<br></li>
</ul><h3>What’s Next?</h3>
<p>Unless the Gen8 suffers a critical hardware failure, I plan to keep it running. It’s not the fastest thing in the world, but for what I need, it’s perfectly fine. If something dies, I might go with a newer Mini PC build — compact, silent, low power, and capable of running Proxmox or even TrueNAS Scale with ease.</p>
<p>Funny thing — I’ve already replaced my personal laptop with a Mini PC (but that’s a story for another post).</p>
<p>For now, though?<br>Ol’ Faithful lives on.</p>Sat, 17 May 2025 11:08:57 +0000Aberto até de Madrugada: GPT-4.1 chega ao ChatGPThttps://abertoatedemadrugada.com/2025/05/gpt-41-chega-ao-chatgpt.html
https://abertoatedemadrugada.com/2025/05/gpt-41-chega-ao-chatgpt.html
<div><a href="https://abertoatedemadrugada.com/2025/05/gpt-41-chega-ao-chatgpt.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitPxp_SY4WohT-GKvUQmMTnCoJ9XSyQL6uvkWlZ-4LlNQ1vQeWrDFgUOlscjlrBMRbLdsCLLqfNE0YphVaynM0-rod45ysTStz775P8Wm0eyWnxdx4ztByIZPxYbKA5hKWuvDB47LuEXnM0xZKRXBlzDOyqyzSuRDKZz6QibOjyk5e5IeLM_dX5GGChgmA/s1600/GPT.jpg" width="600"></a></div>
A OpenAI lançou oficialmente o modelo GPT-4.1 no ChatGPT, ficando já disponível para subscritores dos planos Plus, Pro e Team.<br><br><a name="more"></a>
Este novo modelo promete melhor desempenho em tarefas de programação e uma maior precisão no seguimento de instruções. Para os utilizadores gratuitos, a empresa <a href="https://x.com/OpenAI/status/1922707554745909391">substituiu o GPT-4o mini pelo GPT-4.1 mini</a> como modelo padrão. Isto significa que todos irão beneficiar de melhorias na velocidade e capacidade de contexto. Quem usa a extensão ChatGPT com a Apple Intelligence verá também o GPT-4.1 mini como novo padrão.<br><br>
Um dos maiores destaques é a janela de contexto alargada - ambos os modelos GPT-4.1 conseguem lidar com até um milhão de tokens por vez, muito acima do limite de 128.000 tokens do GPT-4o - isto permite conversas mais longas e complexas sem perder o fio à meada.<br><br>
A OpenAI garantiu que os utilizadores Enterprise e Education terão acesso ao GPT-4.1 nas próximas semanas. Ambos os modelos passaram pelas habituais verificações de segurança antes de serem disponibilizados ao público.<br><br>Sat, 17 May 2025 11:00:00 +0000Aberto até de Madrugada: Sony lança WH-1000XM6https://abertoatedemadrugada.com/2025/05/sony-lanca-wh-1000xm6.html
https://abertoatedemadrugada.com/2025/05/sony-lanca-wh-1000xm6.html
<div><a href="https://abertoatedemadrugada.com/2025/05/sony-lanca-wh-1000xm6.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgosm_uO5ITjJxG6_69gnAboaoLh6QcPAdg88Zu8xHoqs7jG7Qj0skZGvP2H0ZXtmFHU8ruOMUZrHb2Bx3EelRvt5JMz8gmPNSZrwDerYQ9h9iETE2VWjvlxhfil9zoOkEn_fwpV-RQAZqUIel4n_wQTasE8BxU7SgqASBclMbHbI9DMfFt5J2sPHE9DurH/s1600/Sony%20WH-1000XM6%20%281%29.jpg" width="600"></a></div>
A Sony apresentou oficialmente os WH-1000XM6, a nova geração dos seus auscultadores topo de gama com cancelamento de ruído.<br><br><a name="more"></a>
Este modelo recupera a dobradiça de gerações anteriores para facilitar o transporte, melhora a qualidade de som e o ANC, mas continua sem resistência à água ou áudio via USB-C.<br><br>
O destaque vai para o design dobrável, mais prático e agora com uma estrutura reforçada. O novo chip QN3 e um sistema de 12 microfones melhoram o cancelamento de ruído e o modo ambiente, enquanto os comandos por voz passaram a ser mãos-livres. Também foi adicionado suporte a Bluetooth 5.3 com Auracast, ideal para partilhar áudio em espaços públicos.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjauvTN3rwiGVsyAECXLTKuAuXZ2JwbHDh05mXFWDetCMHpcMDL2rHM-3sdhodhUtTQQ_qCIvXAI5LTddLPpRANKpk3KbOK-0o28kkufaE9jfNjMAtqslKWrRUvLCNKjnLmsO3MRNYALvzQb1uxx2V7QNHq53FENumWtDPc5zqQP-d3u2eo0B7AHjso-TJe/s1200/Sony%20WH-1000XM6%20%282%29.jpg"><img alt="" border="0" data-original-height="1200" data-original-width="1200" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjauvTN3rwiGVsyAECXLTKuAuXZ2JwbHDh05mXFWDetCMHpcMDL2rHM-3sdhodhUtTQQ_qCIvXAI5LTddLPpRANKpk3KbOK-0o28kkufaE9jfNjMAtqslKWrRUvLCNKjnLmsO3MRNYALvzQb1uxx2V7QNHq53FENumWtDPc5zqQP-d3u2eo0B7AHjso-TJe/w400-h400/Sony%20WH-1000XM6%20(2).jpg" width="400"></a></div>
Os codecs mantêm-se nos formatos SBC, AAC, LDAC e LC3, sem sinais de aptX ou Snapdragon Sound. A autonomia foi ligeiramente aumentada e as almofadas das orelhas são agora substituíveis, mas continua a não haver reprodução de áudio via USB-C nem certificação IP - uma das coisas mais pedidas pelos clientes.<br><br>
Apesar das limitações, a Sony respondeu aos pedidos mais importantes dos utilizadores. Os WH-1000XM6 posicionam-se como uma alternativa forte aos concorrentes premium, como os AirPods Max, mantendo a Sony no topo do segmento ANC.<br><br>Sat, 17 May 2025 10:00:00 +0000Aberto até de Madrugada: Carregamentos na rede Mobi.E crescem 48% em Abrilhttps://abertoatedemadrugada.com/2025/05/carregamentos-na-rede-mobie-crescem-48.html
https://abertoatedemadrugada.com/2025/05/carregamentos-na-rede-mobie-crescem-48.html
<div><a href="https://abertoatedemadrugada.com/2025/05/carregamentos-na-rede-mobie-crescem-48.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq-ok7LSKsdoQA5iPnb8YQXsoyx-ef1MPjNRMSbupqOSJOg6crS8sXZnjl2OVpv55pOhL3fLR4DFxcGUD52P5m60qzfZwbysNP4mRhBoqjVhQ64WHQ7jb_ZXlperm1NY6pn5ZHp1RKHZNnQaMukH2MWTReo_trkSr6je6Fxul9x_Lu-iRJ_pSnxSRFOwz9/s1600/mobieE.jpg" width="600"></a></div>
A preferência pelos carros eléctricos continua a fazer-se sentir no aumento dos carregadores públicos da rede Mobi.E.<br><br><a name="more"></a>
A rede Mobi.E registou, em abril, cerca de 665 mil carregamentos, o que representa um aumento de 48% face ao mesmo mês do ano passado, que foram efetuados por mais de 115.500 utilizadores distintos, número nunca antes atingido num único mês e uma subida de 52% em comparação com o período homólogo. Quanto à energia consumida, foi de cerca de 14,7 GWh, mais 63% em relação a abril de 2024.<br><br>
Em média, foram efetuados 22.176 carregamentos por dia, a média mais alta de sempre, que representa um aumento face ao mês de março, quando foi registada uma média de 21.602 carregamentos.<br><br>
Nos primeiros quatro meses do ano, o número de carregamentos já ultrapassou os 2,5 milhões, um aumento de 48% em comparação com o mesmo período de 2024. Estes carregamentos foram efetuados por cerca de 200 mil utilizadores distintos, mais 52% do que nos primeiros quatro meses do ano passado.<br><br>
A infraestrutura tem acompanhado o crescimento da procura. No final de abril, a rede de carregamento pública disponibilizava 6.193 postos, o que corresponde a 11.517 pontos (tomadas que podem estar a carregar em simultâneo). Destes, mais de 2.360 eram de carregamento rápido ou ultrarrápido (com potência superior a 22 kW), representando 38,1% do total da rede.<br><br>
Outro dado importante é o facto de, a 30 de abril, a rede Mobi.E disponibilizar mais de 382.922 kW de potência, ultrapassando o exigido pelo regulamento europeu para a criação de uma infraestrutura para combustíveis alternativos (AFIR), que determina que deve existir uma potência de 1,3 kW por cada veículo 100% elétrico e 0,8 kW por cada veículo híbrido plug in.<br><br>
Em termos de poupança ambiental, no quarto mês de 2025, a utilização da rede Mobi.E evitou que fossem emitidas para a atmosfera mais de 11.800 toneladas de dióxido de carbono. Seriam necessárias cerca de 195 mil árvores, em ambiente urbano, com 10 anos, para reter o mesmo CO2.<br><br>
Em média, existem atualmente 94 tomadas por 100 quilómetros de estrada e 127 tomadas por 100 mil habitantes.<br><br><h5>[<a href="https://www.pelaestradafora.com/">Pela Estrada Fora</a>]</h5>Sat, 17 May 2025 09:00:00 +0000Alexsandro Felix: Aprenda a Criar Funções no Python com Exemplos Práticoshttps://blog.ffelix.eti.br/aprenda-a-criar-funcoes-no-python-com-exemplos-praticos/
https://blog.ffelix.eti.br/aprenda-a-criar-funcoes-no-python-com-exemplos-praticos/
<p>Se você está começando a programar em Python, provavelmente já se deparou com a necessidade de organizar seu código para evitar aquela bagunça de linhas repetitivas. É aqui que as funções entram em cena, como super-heroínas do seu script! Neste artigo, vamos explorar o que são funções, sua sintaxe, como usar parâmetros e valores de retorno, e por que elas são essenciais para manter seu código limpo e eficiente. Tudo isso com exemplos práticos que você pode testar agora mesmo! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f604.png" alt="😄"></p>
<p>Pronto para dar um salto no seu aprendizado de Python? Vamos mergulhar de cabeça!</p>
<h2>O que são Funções em Python?</h2>
<p>Funções são como receitas de bolo: um conjunto de instruções que você pode chamar sempre que precisar, sem precisar reescrever tudo. Elas permitem que você modularize seu código, ou seja, divida-o em pedaços reutilizáveis, facilitando a manutenção e a leitura.</p>
<p>Em Python, uma função é definida com a palavra-chave <code>def</code>, seguida pelo nome da função e, opcionalmente, parâmetros. Quando você chama a função, ela executa o bloco de código associado. Simples, né? Mas poderoso!</p>
<h2>Sintaxe Básica de uma Função</h2>
<p>A sintaxe de uma função em Python é assim:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def nome_da_funcao(parametro1, parametro2):
# Bloco de código
return resultado" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>def</span><span> </span><span>nome_da_funcao</span><span>(</span><span>parametro1</span><span>,</span><span> </span><span>parametro2</span><span>):</span></span>
<span><span> </span><span># Bloco de código</span></span>
<span><span> </span><span>return</span><span> resultado</span></span></code></pre></div>
<ul><li><code>def</code>: Indica que você está definindo uma função.</li>
<li><code>nome_da_funcao</code>: Escolha um nome descritivo (use letras minúsculas e _ para separar palavras, como calcular_media).</li>
<li><code>parametro1, parametro2</code>: Variáveis que a função recebe (opcional).</li>
<li><code>return</code>: Devolve um resultado (também opcional).</li>
</ul><p>Vamos ver um exemplo prático:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='def saudar_usuario(nome):
mensagem = f"Olá, {nome}! Bem-vindo ao mundo Python!"
return mensagem
# Chamando a função
print(saudar_usuario("João")) # Saída: Olá, João! Bem-vindo ao mundo Python!' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>def</span><span> </span><span>saudar_usuario</span><span>(</span><span>nome</span><span>):</span></span>
<span><span> mensagem </span><span>=</span><span> </span><span>f</span><span>"Olá, </span><span>{</span><span>nome</span><span>}</span><span>! Bem-vindo ao mundo Python!"</span></span>
<span><span> </span><span>return</span><span> mensagem</span></span>
<span></span>
<span><span># Chamando a função</span></span>
<span><span>print</span><span>(</span><span>saudar_usuario</span><span>(</span><span>"</span><span>João</span><span>"</span><span>))</span><span> </span><span># Saída: Olá, João! Bem-vindo ao mundo Python!</span></span></code></pre></div>
<p><strong>Teste você mesmo</strong>: Copie esse código, mude o nome para o seu e execute. Viu como é fácil? <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f60e.png" alt="😎"></p>
<figure><a href="https://amzn.to/4ds98YM"><img data-recalc-dims="1" loading="lazy" decoding="async" width="471" height="651" data-attachment-id="1082" data-permalink="https://blog.ffelix.eti.br/pense_em_python/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/pense_em_python.jpeg?fit=471%2C651&ssl=1" data-orig-size="471,651" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="pense_em_python" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/pense_em_python.jpeg?fit=217%2C300&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/pense_em_python.jpeg?fit=471%2C651&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/pense_em_python.jpeg?resize=471%2C651&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/pense_em_python.jpeg?w=471&ssl=1 471w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/pense_em_python.jpeg?resize=217%2C300&ssl=1 217w" sizes="auto, (max-width: 471px) 100vw, 471px"></a></figure><h2>Parâmetros: Dando Vida às Funções</h2>
<p>Parâmetros permitem que suas funções sejam flexíveis. Eles são como os ingredientes da sua receita: você pode mudar a quantidade ou o tipo para obter resultados diferentes. Existem alguns tipos de parâmetros em Python:</p>
<ul><li><strong>Parâmetros obrigatórios</strong>: Devem ser passados na chamada da função.</li>
<li><strong>Parâmetros opcionais</strong>: Têm valores padrão e não precisam ser informados.</li>
</ul><p>Exemplo com parâmetros obrigatórios e opcionais:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='def calcular_preco(produto, desconto=0):
preco = 100 # Preço base fictício
preco_final = preco - (preco * desconto / 100)
return f"O preço de {produto} com {desconto}% de desconto é R${preco_final:.2f}"
# Testando
print(calcular_preco("Camiseta")) # Saída: O preço de Camiseta com 0% de desconto é R$100.00
print(calcular_preco("Tênis", 20)) # Saída: O preço de Tênis com 20% de desconto é R$80.00' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>def</span><span> </span><span>calcular_preco</span><span>(</span><span>produto</span><span>,</span><span> </span><span>desconto</span><span>=</span><span>0</span><span>):</span></span>
<span><span> preco </span><span>=</span><span> </span><span>100</span><span> </span><span># Preço base fictício</span></span>
<span><span> preco_final </span><span>=</span><span> preco </span><span>-</span><span> </span><span>(</span><span>preco </span><span>*</span><span> desconto </span><span>/</span><span> </span><span>100</span><span>)</span></span>
<span><span> </span><span>return</span><span> </span><span>f</span><span>"O preço de </span><span>{</span><span>produto</span><span>}</span><span> com </span><span>{</span><span>desconto</span><span>}</span><span>% de desconto é R$</span><span>{</span><span>preco_final</span><span>:.2f</span><span>}</span><span>"</span></span>
<span></span>
<span><span># Testando</span></span>
<span><span>print</span><span>(</span><span>calcular_preco</span><span>(</span><span>"</span><span>Camiseta</span><span>"</span><span>))</span><span> </span><span># Saída: O preço de Camiseta com 0% de desconto é R$100.00</span></span>
<span><span>print</span><span>(</span><span>calcular_preco</span><span>(</span><span>"</span><span>Tênis</span><span>"</span><span>,</span><span> </span><span>20</span><span>))</span><span> </span><span># Saída: O preço de Tênis com 20% de desconto é R$80.00</span></span></code></pre></div>
<p><strong>Dica prática</strong>: Experimente mudar o valor do desconto ou até adicionar um parâmetro extra, como um imposto. Isso vai te ajudar a entender como os parâmetros funcionam na prática!</p>
<p>Quer acelerar seu aprendizado? O e-book Python de A-Z: Guia de Primeiros Passos com a Linguagem é perfeito para iniciantes que querem dominar conceitos como funções de forma prática e divertida. <a href="https://go.hotmart.com/F13340196Y" title="">Confira aqui e comece hoje mesmo</a>!</p>
<h2>Valores de Retorno: O que a Função “Entrega”?</h2>
<p>O <code>return</code> é como o garçom que traz o prato pronto da cozinha. Ele devolve o resultado da função para quem a chamou. Sem o <code>return</code>, a função pode executar ações, mas não entrega um valor específico.</p>
<p>Exemplo com múltiplos retornos:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='def calcular_estatisticas(numeros):
soma = sum(numeros)
media = soma / len(numeros)
return soma, media # Retorna dois valores
# Testando
lista = [10, 20, 30, 40]
soma, media = calcular_estatisticas(lista)
print(f"Soma: {soma}, Média: {media}") # Saída: Soma: 100, Média: 25.0' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>def</span><span> </span><span>calcular_estatisticas</span><span>(</span><span>numeros</span><span>):</span></span>
<span><span> soma </span><span>=</span><span> </span><span>sum</span><span>(</span><span>numeros</span><span>)</span></span>
<span><span> media </span><span>=</span><span> soma </span><span>/</span><span> </span><span>len</span><span>(</span><span>numeros</span><span>)</span></span>
<span><span> </span><span>return</span><span> soma</span><span>,</span><span> media </span><span># Retorna dois valores</span></span>
<span></span>
<span><span># Testando</span></span>
<span><span>lista </span><span>=</span><span> </span><span>[</span><span>10</span><span>,</span><span> </span><span>20</span><span>,</span><span> </span><span>30</span><span>,</span><span> </span><span>40</span><span>]</span></span>
<span><span>soma</span><span>,</span><span> media </span><span>=</span><span> </span><span>calcular_estatisticas</span><span>(</span><span>lista</span><span>)</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Soma: </span><span>{</span><span>soma</span><span>}</span><span>, Média: </span><span>{</span><span>media</span><span>}</span><span>"</span><span>)</span><span> </span><span># Saída: Soma: 100, Média: 25.0</span></span></code></pre></div>
<p><strong>Teste você mesmo</strong>: Crie uma lista com outros números e passe para a função. Tente adicionar mais cálculos, como o maior valor <code>(max(numeros))</code>. Isso vai reforçar seu entendimento!</p>
<h2>Por que Funções são Tão Importantes?</h2>
<p>Imagine escrever um código com 500 linhas, onde você repete o mesmo cálculo de média 10 vezes. Se precisar mudar algo, vai ter que editar cada trecho. <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f62b.png" alt="😫"> Com funções, você escreve o cálculo uma vez e o reutiliza quantas vezes quiser. Benefícios das funções incluem:</p>
<ul><li><strong>Reutilização</strong>: Evita repetir código (o famoso DRY – Don’t Repeat Yourself).</li>
<li><strong>Organização</strong>: Divide o código em blocos lógicos, tornando-o mais fácil de entender.</li>
<li><strong>Manutenção</strong>: Alterações em uma função afetam todas as chamadas, economizando tempo.</li>
<li><strong>Legibilidade</strong>: Nomes descritivos de funções tornam o código quase auto explicativo.</li>
</ul><p>Exemplo prático de organização:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='def calcular_imc(peso, altura):
imc = peso / (altura ** 2)
if imc < 18.5:
return f"Seu IMC é {imc:.2f}: Abaixo do peso"
elif 18.5 <= imc < 25:
return f"Seu IMC é {imc:.2f}: Peso normal"
else:
return f"Seu IMC é {imc:.2f}: Sobrepeso"
# Testando
print(calcular_imc(70, 1.75)) # Saída: Seu IMC é 22.86: Peso normal' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>def</span><span> </span><span>calcular_imc</span><span>(</span><span>peso</span><span>,</span><span> </span><span>altura</span><span>):</span></span>
<span><span> imc </span><span>=</span><span> peso </span><span>/</span><span> </span><span>(</span><span>altura </span><span>**</span><span> </span><span>2</span><span>)</span></span>
<span><span> </span><span>if</span><span> imc </span><span><</span><span> </span><span>18.5</span><span>:</span></span>
<span><span> </span><span>return</span><span> </span><span>f</span><span>"Seu IMC é </span><span>{</span><span>imc</span><span>:.2f</span><span>}</span><span>: Abaixo do peso"</span></span>
<span><span> </span><span>elif</span><span> </span><span>18.5</span><span> </span><span><=</span><span> imc </span><span><</span><span> </span><span>25</span><span>:</span></span>
<span><span> </span><span>return</span><span> </span><span>f</span><span>"Seu IMC é </span><span>{</span><span>imc</span><span>:.2f</span><span>}</span><span>: Peso normal"</span></span>
<span><span> </span><span>else</span><span>:</span></span>
<span><span> </span><span>return</span><span> </span><span>f</span><span>"Seu IMC é </span><span>{</span><span>imc</span><span>:.2f</span><span>}</span><span>: Sobrepeso"</span></span>
<span></span>
<span><span># Testando</span></span>
<span><span>print</span><span>(</span><span>calcular_imc</span><span>(</span><span>70</span><span>,</span><span> </span><span>1.75</span><span>))</span><span> </span><span># Saída: Seu IMC é 22.86: Peso normal</span></span></code></pre></div>
<p><strong>Desafio</strong>: Modifique a função para incluir mais categorias de IMC, como “Obesidade”. Execute e veja o resultado!</p>
<p>Pronto para dar um passo além? Se você quer usar Python para análise de dados, o curso Formação em Análise de Dados com Python ensina desde funções até visualizações incríveis. <a href="https://go.hotmart.com/C99673846R" target="_blank" rel="noopener nofollow" title="">Clique aqui e transforme seus projetos!</a></p>
<h2>Dicas para Criar Funções Eficientes</h2>
<ul><li><strong>Nomes descritivos</strong>: Use nomes como <code>calcular_media</code> em vez de <code>cm</code>.</li>
<li><strong>Comentários</strong>: Explique o que a função faz, especialmente se for complexa.</li>
<li><strong>Evite funções longas</strong>: Se uma função tem mais de 20 linhas, considere dividi-la.</li>
<li><strong>Teste sempre</strong>: Antes de usar uma função em um projeto maior, teste-a com diferentes entradas.</li>
</ul><h2>Conclusão: Funções são suas Melhores Amigas!</h2>
<p>Funções em Python são como atalhos que tornam seu código mais organizado, reutilizável e fácil de manter. Com elas, você pode transformar um emaranhado de linhas em um script elegante e funcional. Agora que você aprendeu a criar funções, que tal colocá-las em prática em seus projetos?</p>
<p>Gostou deste artigo? Deixe um comentário contando como você usa funções no seu código ou qual exemplo achou mais legal! Não esqueça de explorar outros artigos no blog para continuar sua jornada em Python e inscreva-se na nossa newsletter para receber dicas exclusivas diretamente no seu e-mail. <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f680.png" alt="🚀"></p><p>The post <a href="https://blog.ffelix.eti.br/aprenda-a-criar-funcoes-no-python-com-exemplos-praticos/">Aprenda a Criar Funções no Python com Exemplos Práticos</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Sat, 17 May 2025 06:36:18 +0000Alexsandro Felix: Dicas de Leitura: ‘Um Estudo em Vermelho’ para Fãs de Mistériohttps://blog.ffelix.eti.br/dicas-de-leitura-um-estudo-em-vermelho-para-fas-de-misterio/
https://blog.ffelix.eti.br/dicas-de-leitura-um-estudo-em-vermelho-para-fas-de-misterio/
<figure><a href="https://amzn.to/4k04X91"><img data-recalc-dims="1" loading="lazy" decoding="async" width="554" height="554" data-attachment-id="1075" data-permalink="https://blog.ffelix.eti.br/um_estudo_em_vermelho/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/um_estudo_em_vermelho.jpeg?fit=554%2C554&ssl=1" data-orig-size="554,554" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="um_estudo_em_vermelho" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/um_estudo_em_vermelho.jpeg?fit=300%2C300&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/um_estudo_em_vermelho.jpeg?fit=554%2C554&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/um_estudo_em_vermelho.jpeg?resize=554%2C554&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/um_estudo_em_vermelho.jpeg?w=554&ssl=1 554w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/um_estudo_em_vermelho.jpeg?resize=300%2C300&ssl=1 300w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/um_estudo_em_vermelho.jpeg?resize=150%2C150&ssl=1 150w" sizes="auto, (max-width: 554px) 100vw, 554px"></a></figure><p>Bem-vindos a uma nova tradição no blog! A partir de agora, toda sexta-feira será dedicada a uma dica de leitura para descontrair, fugir um pouco do código e mergulhar em histórias incríveis. E para começar com o pé direito, vamos falar de um clássico da literatura: <em>Um Estudo em Vermelho</em>, de Arthur Conan Doyle. Prepare-se para conhecer o início da lendária dupla Sherlock Holmes e Dr. Watson, com um review e resumo sem spoilers, perfeito para quem quer se aventurar nesse romance policial.</p>
<h2>Por que uma pausa para leitura?</h2>
<p>Aqui no blog, amamos Python, tecnologia e programação. Mas também sabemos que uma boa história pode recarregar as energias e inspirar novas ideias. Por isso, decidimos trazer, toda sexta, sugestões de livros que não têm nada a ver com código, mas que vão enriquecer seu repertório cultural e te ajudar a relaxar. E para estrear essa série, nada melhor que o primeiro caso de Sherlock Holmes!</p>
<h2>Um Estudo em Vermelho: Sobre o que é o livro?</h2>
<p>Publicado em 1887, <em>Um Estudo em Vermelho</em> é o romance que apresentou ao mundo o detetive Sherlock Holmes e seu fiel companheiro, Dr. John Watson. Escrito por Arthur Conan Doyle, o livro é um marco da literatura policial e combina suspense, lógica afiada e uma narrativa envolvente. A história começa com Watson, um médico militar recém-chegado a Londres, buscando um lugar para morar. Por acaso, ele conhece Holmes, um excêntrico “consultor detetive” com métodos peculiares. Juntos, eles são arrastados para investigar um crime misterioso que desafia a polícia.</p>
<p>O livro é dividido em duas partes: a primeira foca na investigação em Londres, enquanto a segunda explora o passado dos personagens envolvidos no caso. Sem dar spoilers, posso garantir que a trama é cheia de reviravoltas e mostra o brilhantismo de Holmes em ação, com suas deduções impressionantes.</p>
<h2>Por que ler Um Estudo em Vermelho?</h2>
<ul><li><strong>Introdução a Sherlock Holmes</strong>: Se você nunca leu nada sobre o detetive mais famoso da literatura, este é o ponto de partida ideal. Aqui, você conhece a essência de Holmes – sua mente analítica, sua excentricidade e até suas manias.</li>
<li><strong>Narrativa envolvente</strong>: A escrita de Conan Doyle é acessível e cativante, perfeita tanto para leitores experientes quanto para quem está começando.</li>
<li><strong>Mistério bem construído</strong>: O caso central é intrigante e mantém você grudado nas páginas, tentando desvendar o enigma junto com Holmes.</li>
<li><strong>História curta e fluida</strong>: A edição que tenho em mãos tem apenas 190 páginas, é uma leitura rápida, ideal para uma pausa no fim de semana.</li>
</ul><p>Além disso, o livro é uma ótima pedida para quem gosta de histórias que misturam lógica e emoção, algo que, de certa forma, ressoa com o pensamento estruturado de um programador!</p>
<h2>Para quem é esse livro?</h2>
<p><em>Um Estudo em Vermelho</em> é perfeito para:</p>
<ul><li>Fãs de suspense e histórias policiais.</li>
<li>Leitores que querem conhecer Sherlock Holmes pela primeira vez.</li>
<li>Quem busca uma leitura leve, mas inteligente, para relaxar.</li>
<li>Amantes de clássicos que marcaram a literatura</li>
</ul><p>Se você curte séries como Sherlock (da BBC) ou filmes sobre detetives, esse livro vai te conquistar.</p>
<h2>Onde comprar Um Estudo em Vermelho?</h2>
<p>Se você ficou curioso para mergulhar nessa aventura, recomendo adquirir Um <em>Estudo em Vermelho</em> pela Amazon. Clique aqui para comprar: <a href="https://amzn.to/4j86RTE" target="_blank" rel="noopener" title="">Comprar Um Estudo em Vermelho na Amazon</a>. Escolha entre edições físicas, e-books ou até audiobooks, dependendo do seu estilo de leitura.</p>
<h2>Dicas para aproveitar a leitura:</h2>
<ul><li><strong>Crie um clima</strong>: Leia em um ambiente tranquilo, talvez com uma xícara de chá ou café, para entrar no clima vitoriano de Londres.</li>
<li><strong>Preste atenção aos detalhes</strong>: Holmes é mestre em observar o que ninguém vê. Tente captar as pistas que Conan Doyle deixa na narrativa.</li>
<li><strong>Continue a jornada</strong>: Se gostar do livro, saiba que ele é o primeiro de uma série de histórias sobre Holmes. Há muito mais para explorar!</li>
</ul><h2>Conclusão: Uma leitura que vale a pena</h2>
<p><em>Um Estudo em Vermelho</em> é um clássico atemporal que combina suspense, inteligência e personagens inesquecíveis. É a escolha perfeita para começar nossa série de dicas de leitura às sextas-feiras, trazendo um momento de descontração para equilibrar a rotina de códigos e algoritmos. Se você está procurando uma história que prenda sua atenção e te transporte para a Londres do século XIX, este livro é para você.</p>
<p><strong>E agora, quero ouvir de você</strong>! Já leu <em>Um Estudo em Vermelho</em> ou outras aventuras de Sherlock Holmes? Tem alguma dica de livro para nossas próximas sextas-feiras? Deixe seu comentário abaixo e compartilhe suas impressões! Além disso, não perca os outros artigos do blog – temos dicas de Python, tecnologia e muito mais. Inscreva-se na nossa newsletter para receber as novidades direto no seu e-mail e não perder nenhuma dica de leitura ou tutorial. Até a próxima sexta!</p><p>The post <a href="https://blog.ffelix.eti.br/dicas-de-leitura-um-estudo-em-vermelho-para-fas-de-misterio/">Dicas de Leitura: ‘Um Estudo em Vermelho’ para Fãs de Mistério</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Sat, 17 May 2025 01:49:17 +0000Alexsandro Felix: O Futuro das Carreiras com Python e Inteligência Artificialhttps://blog.ffelix.eti.br/o-futuro-das-carreiras-com-python-e-inteligencia-artificial/
https://blog.ffelix.eti.br/o-futuro-das-carreiras-com-python-e-inteligencia-artificial/
<p>E aí, pessoal do blog!</p>
<p>Sabe aquelas notícias sobre Inteligência Artificial que parecem coisa de filme? Pois é, a IA não é mais ficção científica, ela tá aqui, transformando o mercado de trabalho e criando um monte de oportunidades novas e bacanas. E se você tá pensando em entrar nessa onda, ou dar um UP na sua carreira, prepare-se: tem uma linguagem de programação que é a chave para abrir muitas dessas portas. Acertou quem pensou em… <strong>Python</strong>!</p>
<p>Recentemente, demos uma olhada numa matéria super interessante (lá no <a href="https://oantagonista.com.br/brasil/as-carreiras-que-mais-crescem-com-a-inteligencia-artificial-em-2025/" target="_blank" rel="noopener" title="">O Antagonista</a>) que falava sobre as carreiras que prometem bombar com o avanço da Inteligência Artificial em 2025. E o que a gente viu? Que muitas dessas áreas quentíssimas têm um denominador comum: o bom e velho (nem tão velho assim!) Python.</p>
<h2>Carreira Turbinada Pela IA? Python Tá No Meio!</h2>
<p>O artigo destaca algumas posições que estarão em alta. Duas que chamaram MUITO a atenção e que tem tudo a ver com o nosso papo por aqui são:</p>
<ul><li><strong>Especialista em Inteligência Artificial e Machine </strong>Learning: Pensa em treinar máquinas para aprender, tomar decisões, reconhecer padrões. É um campo fascinante que tá revolucionando indústrias inteiras. E adivinha qual linguagem é a mais usada pelas maiores empresas e pesquisadores da área? Exato: Python, com suas bibliotecas poderosas como TensorFlow e PyTorch.</li>
<li><strong>Analista de Dados e Business Intelligence</strong>: Com a IA gerando e processando volumes gigantescos de dados, alguém precisa dar sentido a tudo isso! Analistas de dados são como detetives modernos, encontrando tesouros de informação escondidos nos números. Python é essencial aqui, com ferramentas como Pandas e NumPy que transformam a análise de dados de uma tarefa chata para algo eficiente e, ouso dizer, elegante!</li>
</ul><p>O artigo também mencionou o <strong>Desenvolvedor de Automações com IA</strong>, outra área onde saber programar (e Python é ótimo para isso!) te dá uma super vantagem para conectar sistemas e otimizar processos usando APIs e modelos de linguagem.</p>
<h2>Por Que Python Se Deu Tão Bem Nesse Casamento Com a IA?</h2>
<p>Não é por acaso que Python virou a “língua oficial” da IA e Data Science. Sua sintaxe limpa e fácil de ler (lembra do nosso papo sobre Python não morder?), a vasta quantidade de bibliotecas prontas (tipo “kits” de ferramentas pra IA e dados) e a comunidade ativa tornam o desenvolvimento nessas áreas muito mais rápido e eficiente.</p>
<p>É como ter um carro superpotente e fácil de dirigir numa estrada novinha em folha, em vez de tentar pilotar um trator numa trilha esburacada. <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f609.png" alt="😉"></p>
<h2>Quer Pegar Essa Onda do Futuro? Comece Agora Com Python!</h2>
<figure><a href="https://amzn.to/4k0cMLT"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="424" data-attachment-id="1031" data-permalink="https://blog.ffelix.eti.br/livro_paperback_600/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?fit=600%2C424&ssl=1" data-orig-size="600,424" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="livro_paperback_600" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?fit=300%2C212&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?fit=600%2C424&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?resize=600%2C424&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?w=600&ssl=1 600w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?resize=300%2C212&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></a></figure><p>Viu só? A Inteligência Artificial não é uma ameaça para todas as carreiras, mas sim um convite para evoluir e se adaptar. E aprender Python é, sem dúvida, um dos melhores investimentos que você pode fazer hoje para surfar nessa onda e garantir seu espaço nas profissões do futuro.</p>
<p>Se você tá coçando a cabeça, pensando “Ok, me convenceram, mas por onde eu começo de verdade?”, a boa notícia é que dar os primeiros passos com Python é mais simples do que parece. Às vezes, um bom guia prático faz toda a diferença para organizar as ideias e começar com o pé direito. Para quem busca um material que vai direto ao ponto para não se perder no labirinto inicial e quer construir uma base sólida, o <a href="https://go.hotmart.com/F13340196Y" target="_blank" rel="noopener" title="">Python de A-Z, guia de primeiros passos com a linguagem</a> pode ser exatamente o que você precisa para ligar o motor da sua jornada no mundo da programação.</p>
<p>E se você já deu os primeiros passos e a área de dados te chamou a atenção – afinal, a IA vive de dados! – e quer se aprofundar para dominar as técnicas mais usadas no mercado, transformando dados brutos em insights valiosos, investir em uma formação completa em Análise de Dados com Python é um movimento inteligente. A <a href="https://go.hotmart.com/C99673846R" target="_blank" rel="noopener" title="">Formação em Análise de Dados com Python</a> é um caminho excelente para quem busca especialização e quer se destacar em uma das áreas mais promissoras impulsionadas pela era da Inteligência Artificial.</p>
<h2>Inteligência Artificial.A IA Tá Aí, e Seu Aprendizado Também Pode Estar!</h2>
<p>A mensagem é clara: a Inteligência Artificial está moldando o futuro do trabalho, e o conhecimento em linguagens como Python é um diferencial enorme. Aproveite esse momento para investir em você, aprender uma habilidade com alta demanda e se posicionar para as oportunidades que vêm por aí.A jornada de aprendizado é contínua e empolgante. Mergulhe de cabeça, construa seus projetos e faça parte da comunidade que está criando o futuro</p>
<p>Curtiu o panorama e se animou para aprender Python? Temos mais conteúdo esperando por você!</p>
<ul><li>Deixe seu comentário aqui embaixo! Qual carreira da era da IA te interessa mais?</li>
<li>Explore outros artigos no nosso blog e continue sua jornada de aprendizado!Não perca nossas novidades e dicas exclusivas! </li>
<li>Assine nossa newsletter agora mesmo e receba conteúdo de valor direto na sua caixa de entrada!Vamos juntos nessa!</li>
</ul><p></p><p>The post <a href="https://blog.ffelix.eti.br/o-futuro-das-carreiras-com-python-e-inteligencia-artificial/">O Futuro das Carreiras com Python e Inteligência Artificial</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Sat, 17 May 2025 00:04:03 +0000Aberto até de Madrugada: Android 16 reforça segurança do Advanced Protectionhttps://abertoatedemadrugada.com/2025/05/android-16-reforca-seguranca-do.html
https://abertoatedemadrugada.com/2025/05/android-16-reforca-seguranca-do.html
<div><a href="https://abertoatedemadrugada.com/2025/05/android-16-reforca-seguranca-do.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg03UHY8B79v02_XDhDgsZQ4MCGgg1MWAdZHmp-CqsrXFNj7mKdPxV_1OiNapJ9AoIsPvugvAu0Aa_bQ9PKlXIWDee5sBYn32urKV492CpIG0bJLLus86FIdTrFteb6vAeMb-Ql2SGep_7zrHJRavUVeFDciVkRBmup7gzPEBziFkV_RHcFIuJoBUAdwo81/s1600/android16prot.jpg" width="600"></a></div>
Para o Android 16 a Google está a preparar uma série de melhorias para a segurança do sistema e utilizadores.<br><br><a name="more"></a>
O Android 16 vai reforçar a segurança com melhorias importantes no '<a href="https://www.bleepingcomputer.com/news/security/android-16-expands-advanced-protection-with-device-level-security/">Advanced Protection</a>', que passa agora a proteger o próprio dispositivo, para além da conta Google. Esta nova camada de proteção, semelhante ao Lockdown Mode da Apple, combina as ferramentas de segurança mais avançadas do Android num único modo, que bloqueia o sistema, impede alterações maliciosas e dificulta ataques com spyware que exploram vulnerabilidades zero-day.<br><br>
Entre as proteções estão o arranque verificado, sandboxing rigoroso das apps, bloqueio da porta USB e reinício automático do equipamento após 72 horas sem uso. O Android 16 também introduz o 'intrusion logging', que regista tentativas de manipulação num log encriptado na cloud, e impede que o dispositivo se ligue automaticamente a redes Wi-Fi inseguras. Algumas destas funções vão depender do fabricante e chegarão mais tarde este ano.<br><br>
Para além da segurança no dispositivo, o Android 16 inclui novas defesas contra burlas. Destaca-se o bloqueio de ações arriscadas durante chamadas de números desconhecidos e o 'Key Verifier' na app Mensagens, que usa chaves de encriptação para confirmar a identidade dos contactos, ajudando a evitar fraudes e ataques de troca de SIM.<br><br>
A Google também melhorou as funções anti-roubo, transformando o Find My Device no 'Find Hub' — um serviço alargado que funciona com etiquetas Bluetooth, parcerias com companhias aéreas e, em breve, terá suporte para ligação via satélite, permitindo manter o contacto mesmo em locais sem sinal móvel.<br><br>Fri, 16 May 2025 20:00:00 +0000Ricardo Saramago: Of Jazz and Whiskyhttps://www.odrakir.com/blog/2025/05/16/of-jazz-and-whisky/
https://www.odrakir.com/blog/2025/05/16/of-jazz-and-whisky/
<figure><a href="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/jazz-and-whisky.png?ssl=1"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="768" src="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/jazz-and-whisky.png?resize=1024%2C768&ssl=1" alt="" srcset="https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/jazz-and-whisky.png?w=1024&ssl=1 1024w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/jazz-and-whisky.png?resize=300%2C225&ssl=1 300w, https://i0.wp.com/www.odrakir.com/blog/wp-content/uploads/2025/05/jazz-and-whisky.png?resize=768%2C576&ssl=1 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px"></a></figure><p>Ten years ago, I couldn’t stand either.</p>
<p>Jazz sounded like a dissonant chaos. Whisky burned on the way down. Both felt like they belonged to someone older, wiser — someone else entirely, but not mine.</p>
<p>I discovered the wonders of traditional wet shaving in 2017.<br>This was how my grandfather used to shave — a double-edged blade, shaving soap lathered by hand into a rich foam. No more skin rashes, no more infected follicles, no redness on my pale face. Shaving became a ritual, almost ceremonial. But something was missing.</p>
<p>“Why not listen to some music?” I thought.<br>The usual rock wasn’t cutting it (no pun intended), so I put on some jazz — a genre I never liked much. But hey, I hadn’t shaved like this before either. Why not keep stepping outside my comfort zone?</p>
<p>Spotify, by some stroke of kismet, recommended <strong>Kind of Blue</strong> by <strong>Miles Davis</strong>.<br>I recognized the name — a jazz legend — but I had no idea what his music sounded like. Same with <strong>John Coltrane</strong>. <strong>“Cannonball” Adderley</strong>, <strong>Paul Chambers</strong>, <strong>Jimmy Cobb</strong>, <strong>Bill Evans</strong>, and <strong>Wynton Kelly</strong> were complete strangers to me.</p>
<p>Hot water. Lather. Blade. And then — <strong>So What</strong>.<br>I literally stopped shaving when Miles’ trumpet came in. I was hooked.<br>It didn’t sound like the typical chaotic jazz I remembered. It felt both old and new. The improvisation wasn’t dissonant. Every instrument had a voice, a role, a place in the tune. It flowed.</p>
<p>I had no idea I was listening to one of the greatest jazz masterpieces ever created.<br>And then Coltrane’s tenor saxophone joined in.<br>There I was, having a religious experience — with a razor blade in my hand. Almost ten minutes of pure bliss.</p>
<p>In time, my taste for jazz deepened.<br><strong>Miles</strong>. <strong>Coltrane</strong>.<strong> Parker</strong>.<strong> Brubeck</strong>.<strong> Evans</strong>.<br>They weren’t just playing music — they were having conversations, full of pauses, detours, contradictions. The kind I understood better as I got older.</p>
<p>Jazz taught me that beauty doesn’t always follow a straight line.<br>That it’s okay to feel a little lost inside a song — as long as you keep listening.<br>(Though I still struggle with modern jazz. I’m stuck in the classics. And honestly? I don’t care.)</p>
<p>I had my beer phase. Then a wine phase.<br>But none of it ever felt truly mine.<br>Whisky came later, like a punctuation mark at the end of long days.</p>
<p>At first, it was about the ritual.<br>The quiet of pouring a dram. The weight of the glass.<br>The warmth that spreads — not just through the body, but the mood.<br>The comfort it gifts to the soul.</p>
<p>I started noticing differences:<br>Peat smoke. Sherry casks. The sweetness of a bourbon versus the sharp clarity of a Japanese blend.<br>It stopped being about the alcohol. It became about the taste. The story.<br>About how jazz sounded with a side of whisky.</p>
<p>I fell in love with the Japanese brands — Suntory, Nikka…<br>There’s something in Japanese whisky that flows over your tastebuds like a wave of heat and flavour.<br>You can taste every decision the Master Blender made. It’s craftsmanship in a glass.</p>
<p>What jazz and whisky have in common is patience.<br>They don’t demand your attention.<br>They wait for you to come to them.<br>They reward slowing down, leaning in, letting go of certainty.</p>
<p>In a world that worships speed, they taught me the pleasure of drifting.<br>Of shutting down — just a little. Enough to feel something again.</p>
<p>I’m no connoisseur — not in jazz, not in whisky. But I know what I like.<br>A moody <strong>Bill Evans</strong> track on a rainy night.<br>A smoky Monkey Shoulder in a quiet room.</p>
<p>They remind me I’ve grown — not just older, but deeper.<br>More comfortable in my own silences.<br>More curious than certain.</p>
<p>So here’s to the long road of acquired tastes.<br>To music you once found confusing.<br>To drinks you once found harsh.<br>To the surprising ways we evolve — without even noticing.</p>Fri, 16 May 2025 19:47:26 +0000Aberto até de Madrugada: Aston Martin mostra CarPlay Ultra da Applehttps://abertoatedemadrugada.com/2025/05/aston-martins-mostra-carplay-ultra-da.html
https://abertoatedemadrugada.com/2025/05/aston-martins-mostra-carplay-ultra-da.html
<div><a href="https://abertoatedemadrugada.com/2025/05/aston-martins-mostra-carplay-ultra-da.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRPKE_-daH1x-E2JshDJeefKcUMM8RNPkxDJYg3WvVHBdqoWXWWyamFlf5wwFr8UmZZwpJ0GrXKPYFnX1SsuBcr6mKuXlQqvOYZFj89PPTbU1B__KYwp36WpmBsrToPvlune5B0NQ8QC71tUdnulmW9nNBPXsW59sXhOuiaAxx-BEfB8wESlpdPMFPG4PV/s1600/carplay.jpg" width="600"></a></div>
Depois de muitos atrasos e demoras, a Apple mostra o CarPlay Ultra em acção, num Aston Martin.<br><br><a name="more"></a>
<br>
O novo CarPlay Ultra da Apple foi finalmente mostrado ao mundo em vídeos reais que revelam a experiência avançada de infoentretenimento em ação. As imagens, partilhadas pela Aston Martin e outros meios, mostram em detalhe como o sistema se integra nos veículos, permitindo personalizar o painel de instrumentos, navegar e controlar várias funções do carro.<br><br>
O CarPlay Ultra oferece uma ligação ainda mais profunda entre o iPhone e os ecrãs do carro, com widgets, temas e um painel de bordo altamente personalizável. Funciona com iPhone 12 ou mais recente, desde que corra iOS 18.5 ou superior.
<br><br><div></div>
<br><div></div>
<br>
Por agora, o CarPlay Ultra está disponível apenas em novos modelos da Aston Martin na América do Norte, com expansão global prevista para o próximo ano. Certos modelos atuais da marca também poderão receber o sistema através de uma atualização de software nos concessionários.<br><br>
Outros fabricantes, como Hyundai, Kia e Genesis, ainda estão a trabalhar para trazer o CarPlay Ultra aos seus carros, com o objetivo de disponibilizar a experiência a mais condutores em todo o mundo.<br><br>Fri, 16 May 2025 17:30:00 +0000Aberto até de Madrugada: Descontos Windows 11 a €17 na CdkeySaleshttps://abertoatedemadrugada.com/2025/05/descontos-windows-11-17-na-cdkeysales.html
https://abertoatedemadrugada.com/2025/05/descontos-windows-11-17-na-cdkeysales.html
<div><a href="https://abertoatedemadrugada.com/2025/05/descontos-windows-11-17-na-cdkeysales.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIJzlpylUpk1ey6O6r_6oczA7KYxyNU3T1dbM7BCHKMtgU-Rf04X8VovKb8bch_c_yAXjOBtY82U12T_pIlaa97jCdJ-0afMO-cJsrf5bTc4nmg01A82p1cYSUXpp5y_aJsQnpU2O1czofW0KtU0N2pTrxEXf1bsjwqYi3EDJBgRO46Bo3nk80ecpV-_d1/s1600/ab%20cover.jpg" width="600"></a></div>
<a name="more"></a>
Com o Windows 10 a aproximar-se do seu fim (em Outubro de 2025), começa a ser necessário pensar na mudança para o mais recente Windows 11. O Windows 11 adopta um design mais moderno e simplificado com um menu Iniciar centralizado, multitarefa melhorada através dos Snap Layouts e vantagens para jogos como o DirectStorage para tempos de carregamento mais rápidos, conta também com uma integração cada vez mais robusta com o Copilot para se poder tirar partido do assistente AI da Microsoft. Apesar de ainda ser possível <a href="https://pt.cdkeysales.com/cs/W10P-AB">comprar licenças Windows</a> para ambos os sistemas na CdkeySales, a recomendação vai obviamente para as <a href="https://pt.cdkeysales.com/cs/W11P-AB">chaves para Windows 11</a> para que se possa tirar partido de todas as novidades e melhorias.<br><br><b>Código de desconto <span>35%</span>: <span>AB35</span></b><span><br></span><h4>
Windows</h4><a href="https://pt.cdkeysales.com/cs/W11P-AB">Lifetime MS Windows 11 Pro OEM KEY GLOBAL</a> €18,67 (<b>35% off</b> code <b><span>AB35</span></b>)<br><a href="https://pt.cdkeysales.com/cs/W11H-AB">Lifetime MS Windows 11 Home OEM KEY GLOBAL</a> €17,95 (<b>35% off</b> code <b><span>AB35</span></b>)<br><a href="https://pt.cdkeysales.com/cs/W10P-AB">Lifetime MS Windows 10 Pro OEM KEY GLOBAL</a> €14,01 (<b>35% off</b> code <b><span>AB35</span></b>)<br><a href="https://pt.cdkeysales.com/cs/W10H-AB">Lifetime MS Windows 10 Home OEM KEY GLOBAL</a> €11,58 (<b>35% off</b> code <b><span>AB35</span></b>)<br><h4>Office</h4>
<a href="https://pt.cdkeysales.com/cs/O19P-AB">Lifetime MS Office 2019 Professional Plus Key GLOBAL</a> €38,53 (<b>35% off</b> code <b><span>AB35</span></b>)<br><a href="https://pt.cdkeysales.com/cs/O16P-AB">Lifetime MS Office 2016 Professional Plus Key GLOBAL</a> €23,17 (<b>35% off</b> code <b><span>AB35</span></b>)<br><a href="http://pt.cdkeysales.com/cs/O365-AB">Microsoft Office 365 One Year Account for One Device</a> €17,09 (<b>35% off</b> code <b><span>AB35</span></b>)<br><h4>Combos Windows+Office</h4>
<a href="https://pt.cdkeysales.com/cs/PACK1-AB">Lifetime Windows 10 Pro + Office 2016 Pro Plus Keys Pack</a> €34,68 (<b>35% off</b> code <b><span>AB35</span></b>)<br><a href="https://pt.cdkeysales.com/cs/PACK2-AB">Lifetime Windows 10 Pro + Office 2019 Pro Plus Keys Pack</a> €48,35 (<b>35% off</b> code <b><span>AB35</span></b>)<br><!--<h4>Outros produtos</h4>
<a href="http://pt.cdkeysales.com/cs/VS-AB">Microsoft Visual Studio 2022 Enterprise Key Global</a> €78,32 (35% off code AB35)<br /><a href="http://pt.cdkeysales.com/cs/SQL-AB">Microsoft SQL Server 2019 Standard 2 Core Key Global</a> €71,82 (35% off code AB35)<br />
<br />--><!--<br>
Além dessa mega promoção, a Bzfuture.com também está oferecendo <b>descontos de até 15%</b> na utilização do cupão de descontos <b>AB15</b>:<br /><a href="https://pt.bzfuture.com/dareu-a710-trimode-connection-gaming-headset.html#AB">Dareu A710 gaming headset</a> (€64,59)<br /><a href="https://pt.bzfuture.com/dareu-ek871-tri-mode-connection-hotswap-mechanical-gaming-keyboard.html#AB">Dareu EK871 gaming keyboard</a> (€63,74)<br /><a href="https://pt.bzfuture.com/gaming-accessories/e-yooso-k620-usb-mechanical-gaming-keyboard-blue-switch-87-key-backlit.html#AB">E-YOOSO K620 gaming keyborad</a> (€32,29)<br />
<br />--><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghW_fZQ03TRO4U1dHJAXXPE-Ec89fdFjPfXJf-XjL1cmVQmyEW4Q9fJdcSd0k4uZG4cpWFnJaau3Wo5kPnDWs-Xoc60i2MOdsnWmOGoGvXzpGhVBbHtqJy8RwRZHVuSejpGcH0NSDjQvIxIgazN1T2bUTqxpOnPC6bPPbLd5eNqjjTbXxQEhOtN06FDqoj/s1200/ab%205.16%20%281%29.jpg"><img alt="" border="0" data-original-height="800" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghW_fZQ03TRO4U1dHJAXXPE-Ec89fdFjPfXJf-XjL1cmVQmyEW4Q9fJdcSd0k4uZG4cpWFnJaau3Wo5kPnDWs-Xoc60i2MOdsnWmOGoGvXzpGhVBbHtqJy8RwRZHVuSejpGcH0NSDjQvIxIgazN1T2bUTqxpOnPC6bPPbLd5eNqjjTbXxQEhOtN06FDqoj/s600/ab%205.16%20%281%29.jpg" width="600"></a></div>
O processo de compra é bastante simples, bastando ir adicionando os produtos pretendidos ao carrinho de compras, e inserir o código de desconto no campo respectivo antes de prosseguir para o checkout.<br><!--<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNXRUYG3ey7PTqvk_QCUTRIbBfLSVU8Lhx2KhpFJmUEl6TyMP6ReYHN1NkXeprg1MZGtYz2KNJgwPrvAJ7-W4pNV9Yj-iY9Ej3FhlaWn9yJ09KBWAnlZnDyTNS58qvtNS-7pEG-281Y-4pThUbA5-Zt-c2N37g9KpzdqJPO9Ly6Q7cibcQ4YkkiEbRk8XI/s1204/product%20page--CS-PT.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="750" data-original-width="1204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNXRUYG3ey7PTqvk_QCUTRIbBfLSVU8Lhx2KhpFJmUEl6TyMP6ReYHN1NkXeprg1MZGtYz2KNJgwPrvAJ7-W4pNV9Yj-iY9Ej3FhlaWn9yJ09KBWAnlZnDyTNS58qvtNS-7pEG-281Y-4pThUbA5-Zt-c2N37g9KpzdqJPO9Ly6Q7cibcQ4YkkiEbRk8XI/s600/product%20page--CS-PT.jpg" width="600" /></a></div>--><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvH2e-y9Xv35swgM3RDCIHS8z7yTR61wPUYZsMGH05A8cmbQ0RF7MfqJjdyxRAI4AzYCq7JRI1YNguXadwSN2T6ph58x12T3EezAnhjsD5yQl73Vk6BYwqkD0pdQ6NUpNSBSaTiJBXa5Ywc4s2MPrNc7oW5TZeS7tV4eWbh6EEN5bsXlRFIik3MoI8AkjU/s1713/official%20price-pt.jpg"><img alt="" border="0" data-original-height="954" data-original-width="1713" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvH2e-y9Xv35swgM3RDCIHS8z7yTR61wPUYZsMGH05A8cmbQ0RF7MfqJjdyxRAI4AzYCq7JRI1YNguXadwSN2T6ph58x12T3EezAnhjsD5yQl73Vk6BYwqkD0pdQ6NUpNSBSaTiJBXa5Ywc4s2MPrNc7oW5TZeS7tV4eWbh6EEN5bsXlRFIik3MoI8AkjU/s600/official%20price-pt.jpg" width="600"></a></div>
<div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7atO2wLppa4NUaeCd0wqM1hb8MBah0YrNeYdBa46EhmBkB-nfl0c_r54oFoz1OEn4De7I_-OLHjnqFRqbgDb31-yZyTnmyfzlNaBxZinYkfZuok70zir2fUfPQDcQzMiRWjxYOygx8wumFdl7_99vbF9YMpX2YCrkl3dIYZH7CAIexrnfqBC4WHAUKp-J/s1214/USING%20CODE%20AB35.jpg"><img alt="" border="0" data-original-height="698" data-original-width="1214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7atO2wLppa4NUaeCd0wqM1hb8MBah0YrNeYdBa46EhmBkB-nfl0c_r54oFoz1OEn4De7I_-OLHjnqFRqbgDb31-yZyTnmyfzlNaBxZinYkfZuok70zir2fUfPQDcQzMiRWjxYOygx8wumFdl7_99vbF9YMpX2YCrkl3dIYZH7CAIexrnfqBC4WHAUKp-J/s600/USING%20CODE%20AB35.jpg" width="600"></a></div>
<!--<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqYkO20wLa_-vDD34Db73tUJ7iBOBOGsDFQlr5Cy9jo4o6xOGyi86iJwvXmpbq1pgA0CzT_5O6cdtSXOZbXEd0FwoFluIQmNTx3lwK8ISVSmqPiYS2CFSLP8OpMoDiGYr3QUIUaNObLwcVZe0IBUBxAzTdahQWXwmU-hp4Rjw1qiAFV6GdBazKW_iXqg/s1162/purchased%20oder-PT.jpg" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="762" data-original-width="1162" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqYkO20wLa_-vDD34Db73tUJ7iBOBOGsDFQlr5Cy9jo4o6xOGyi86iJwvXmpbq1pgA0CzT_5O6cdtSXOZbXEd0FwoFluIQmNTx3lwK8ISVSmqPiYS2CFSLP8OpMoDiGYr3QUIUaNObLwcVZe0IBUBxAzTdahQWXwmU-hp4Rjw1qiAFV6GdBazKW_iXqg/s600/purchased%20oder-PT.jpg" width="600" /></a></div>-->
<b> Como activar o código de desconto AB35</b><br>
Depois de adicionado ao carrinho (botão Comprar Agora), antes de confirmar a encomenda, deverá inserir o código AB35 na caixa "Código de promoção" e clicar em "Aplicar".<br><br>
É possível fazer o pagamento via PayPal - o que é sempre recomendado como medida de protecção adicional em todas as compras online - e temos à disposição o serviço de suporte via live chat no site ou através do email [email protected].<br><br><br><b>Como activar a licença do Windows 10 / 11</b><br>
Para activar a licença do Windows 10 ou Windows 11, basta aceder às configurações do Windows e, na secção "Ativação" clicar no botão "Alterar chave do produto". Surgirá uma janela onde se pode inserir o código de activação do Windows que acabou de adquirir.<br><div><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh_5F3nLAUMVLsOdoOnczpFS-XNhSd5cdeOaBxPxfVwAB1Cr04Bm6jO76znoE54NOCdkPj2YcldgTnsk5PJTO63PF9dC8EKjY-lCav1GWA34ffTSTrS16qo0OqVg6W0pgoi2QfvdPC5lgHNAJXO8B4M8rM6jcUgBQ7TP1JRMfDQ83bZBCwxyMX_e995Jg=s661"><img alt="" border="0" data-original-height="521" data-original-width="661" src="https://blogger.googleusercontent.com/img/a/AVvXsEh_5F3nLAUMVLsOdoOnczpFS-XNhSd5cdeOaBxPxfVwAB1Cr04Bm6jO76znoE54NOCdkPj2YcldgTnsk5PJTO63PF9dC8EKjY-lCav1GWA34ffTSTrS16qo0OqVg6W0pgoi2QfvdPC5lgHNAJXO8B4M8rM6jcUgBQ7TP1JRMfDQ83bZBCwxyMX_e995Jg=s400" width="400"></a></div>
Ao concluir, será apresentada uma mensagem informando que a licença está activa e validada.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicBZLSHMWPqFSOEmS3_DH6NoMmVUJvhiwYNX77wUYmO3pzCBfiETmdar-YJ1A_cGpb7Ts_lHknnI-RefgzEPqDXwk6m_6nf4znaYl-3-S8_eyKQ1-Q8ADxdLuP0So5890T__GMq_SlP--Za8eJ7-SQPbbs0c47iCQSd8-dsMgSHJhBhEk8pro9yoVJVQ/s1600/Activation-PT%20%281%29.jpg"><img alt="" border="0" data-original-height="854" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicBZLSHMWPqFSOEmS3_DH6NoMmVUJvhiwYNX77wUYmO3pzCBfiETmdar-YJ1A_cGpb7Ts_lHknnI-RefgzEPqDXwk6m_6nf4znaYl-3-S8_eyKQ1-Q8ADxdLuP0So5890T__GMq_SlP--Za8eJ7-SQPbbs0c47iCQSd8-dsMgSHJhBhEk8pro9yoVJVQ/s600/Activation-PT%20%281%29.jpg" width="600"></a></div>
É possível fazer o pagamento via PayPal - o que é sempre recomendado como medida de protecção adicional.<br><br>
Não se esqueçam que no caso dos Windows e Office, o download continuará a ser feito do site da Microsoft, com a compra a disponibilizar apenas as chaves para activar os produtos:<br><ul><li>Windows 11 - [ <a href="https://www.microsoft.com/en-us/software-download/windows11">Download Link</a> ]</li><li>Windows 10 - [ <a href="https://www.microsoft.com/en-us/software-download/windows10">Download Link</a> ]</li>
<li>Microsoft Office 2016 Professional Plus - [ <a href="https://setup.office.com/">Download Link</a> ]</li>
<li>Microsoft Office 2019 Professional Plus - [ <a href="https://setup.office.com/">Download Link</a> ]</li>
<li>Microsoft Office 2021 Professional Plus - [ <a href="https://setup.office.com/">Download Link</a> ]</li>
</ul><br>
[Artigo patrocinado por <a href="http://en.mediamz.com/">Mediamz</a>]<br><br>Fri, 16 May 2025 15:30:00 +0000Aberto até de Madrugada: DJI lança drone com projectores e altofalante de alta potênciahttps://abertoatedemadrugada.com/2025/05/dji-lanca-drone-com-projectores-e.html
https://abertoatedemadrugada.com/2025/05/dji-lanca-drone-com-projectores-e.html
<div><a href="https://abertoatedemadrugada.com/2025/05/dji-lanca-drone-com-projectores-e.html"><img alt="" border="0" data-original-height="940" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAfzOqRUtmJnFPgHLPFCtW_c85UUsdXJxFWYcco0CPvz9SgK1Lmms9XeHas4GAHsTzwS8VjaNXMKdTl9iDwlmtHRAj0gGH-uNMicQedRc6-kfne5amqq-mf06wN66VSehYEBN3bqmDhpdzcq3KvlhOUQ2YDGYoOKvFb_zg2npL6ix_fr0LYsEQxCGGKsFc/s1600/djispeakerlight.jpg" width="600"></a></div>
A DJI expandiu a sua gama de acessórios para drones, com um altofalante e projector de alta potência.<br><br><a name="more"></a>
O <a href="https://enterprise.dji.com/zenmuse-v1">Zenmuse V1 speaker</a> consegue emitir mensagens de voz a 127 dB, o equivalente ao som de um avião a descolar. O objectivo é ajudar equipas de emergência e segurança pública a comunicar de forma clara e eficaz a partir do ar, seja em situações de resgate, controlo de multidões ou gestão de trânsito.<br><br>
Este altifalante pode ser instalado nos drones Matrice 350 RTK e Matrice 300 RTK, e permite transmitir mensagens até 500 metros de distância mesmo em ambientes ruidosos. As mensagens podem ser gravadas em tempo real, escritas em texto e convertidas para voz, ou carregadas através da app DJI Pilot 2.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXFZRf-1AJGsX7Gcex_sy_9EXLWEgd6UrslkYy_bgB28-ad8UOfJiTW4BqzWYeqt8m-sYuaI2Lw_Q7xX8thRI2cY4i7tgznZA-xfc36xGsSzifnL2RvYl6-NRs8kp2acKwwPlKWdJJazWuSu8z4Itp6Vmvp-yy9CqmtO0tP48S5Y6XFPpw4W2bBXC6uKAP/s1600/djinight.jpg"><img alt="" border="0" data-original-height="1067" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXFZRf-1AJGsX7Gcex_sy_9EXLWEgd6UrslkYy_bgB28-ad8UOfJiTW4BqzWYeqt8m-sYuaI2Lw_Q7xX8thRI2cY4i7tgznZA-xfc36xGsSzifnL2RvYl6-NRs8kp2acKwwPlKWdJJazWuSu8z4Itp6Vmvp-yy9CqmtO0tP48S5Y6XFPpw4W2bBXC6uKAP/s600/djinight.jpg" width="600"></a></div>
Além <b><a href="https://abertoatedemadrugada.com/12"></a></b>do altifalante, a DJI revelou também o novo <a href="https://enterprise.dji.com/zenmuse-s1">Zenmuse S1 spotlight</a>, um holofote que utiliza tecnologia LEP (Laser Excited Phosphor) para oferecer uma iluminação intensa, com dois modos de luz: com maior área ou modo mais focado. Ambos os modos podem ser activados simultaneamente para a máxima iluminação, ideal para operações nocturnas ou buscas.<br><br><div></div>
<br>
A DJI ainda não revelou preços nem datas de lançamento, mas estes novos acessórios mostram como os drones estão a tornar-se ferramentas essenciais para as mais diversas áreas, indo para além da simples captação de imagens aéreas.<br><br>Fri, 16 May 2025 13:30:00 +0000Alexsandro Felix: Break e Continue: Controle de Fluxo em Pythonhttps://blog.ffelix.eti.br/break-e-continue-controle-de-fluxo-em-python/
https://blog.ffelix.eti.br/break-e-continue-controle-de-fluxo-em-python/
<p>Olá, futuro mestre do Python! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f44b.png" alt="👋">Se você já deu os primeiros passos no mundo da programação com Python, provavelmente já esbarrou nos famosos loops (<code>for</code> e <code>while</code>). Eles são super úteis para repetir tarefas e automatizar processos chatos (ninguém quer copiar e colar código 100 vezes, né?).Mas e se, no meio de um loop, você precisar dar um “chega!” ou pular uma etapa específica? É aí que entram em cena nossos amigos <code>break</code> e <code>continue</code>. Pense neles como os botões de controle que te dão o poder de microgerenciar o fluxo dos seus loops.Neste artigo, vamos desvendar esses dois comandos, entender quando e como usá-los, e claro, vamos colocar a mão na massa com exemplos práticos que você pode rodar aí no seu computador! Preparado para dar um upgrade no seu controle de fluxo? Então, bora lá!</p>
<h2>break: O Botão de Pânico (ou Saída Rápida) do Seu Loop</h2>
<p>Imagine que você está procurando por algo em uma lista gigantesca. Quando você encontra o que procura, faz sentido continuar vasculhando a lista inteira? Claro que não! Você quer parar na hora, certo?É exatamente isso que o comando <code>break</code> faz. Quando o Python encontra um <code>break</code> dentro de um loop (<code>for</code> ou <code>while</code>), ele <strong>interrompe o loop imediatamente</strong>, sem terminar as iterações restantes, e continua executando o código que vem depois do loop. É como apertar o botão de “ejetar” do seu loop!</p>
<h3>Quando usar break?</h3>
<ul><li>Quando você encontrou o item que procurava em uma lista e não precisa mais continuar.</li>
<li>Quando uma condição de erro inesperada acontece dentro do loop.</li>
<li>Quando você quer garantir que o loop pare depois de um certo número de execuções, mesmo que a condição do loop ainda seja verdadeira (cuidado para não criar loops infinitos sem querer</li>
</ul><h2>Exemplo Prático: Encontrando um Número Secreto</h2>
<p>Vamos supor que temos uma lista de números e queremos parar de procurar assim que encontrarmos o número 7.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='numeros = [1, 3, 5, 7, 9, 11, 13, 15]
numero_secreto = 7
print("Procurando pelo número secreto...")
for numero in numeros:
print(f"Verificando o número: {numero}")
if numero == numero_secreto:
print(f"UHUU! Encontrei o número secreto: {numero}!")
break # <- O break entra em ação aqui!
print("Esse não é o número secreto... continuando a busca.") # Esta linha só executa se não encontrar o número secreto
print("Busca finalizada (fora do loop).")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>numeros </span><span>=</span><span> </span><span>[</span><span>1</span><span>,</span><span> </span><span>3</span><span>,</span><span> </span><span>5</span><span>,</span><span> </span><span>7</span><span>,</span><span> </span><span>9</span><span>,</span><span> </span><span>11</span><span>,</span><span> </span><span>13</span><span>,</span><span> </span><span>15</span><span>]</span></span>
<span><span>numero_secreto </span><span>=</span><span> </span><span>7</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>Procurando pelo número secreto...</span><span>"</span><span>)</span></span>
<span></span>
<span><span>for</span><span> numero </span><span>in</span><span> numeros</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Verificando o número: </span><span>{</span><span>numero</span><span>}</span><span>"</span><span>)</span></span>
<span><span> </span><span>if</span><span> numero </span><span>==</span><span> numero_secreto</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"UHUU! Encontrei o número secreto: </span><span>{</span><span>numero</span><span>}</span><span>!"</span><span>)</span></span>
<span><span> </span><span>break</span><span> </span><span># <- O break entra em ação aqui!</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Esse não é o número secreto... continuando a busca.</span><span>"</span><span>)</span><span> </span><span># Esta linha só executa se não encontrar o número secreto</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>Busca finalizada (fora do loop).</span><span>"</span><span>)</span></span></code></pre></div>
<h3>Como rodar e o que esperar:</h3>
<ul><li>Copie e cole este código em um arquivo meu_loop.py (ou o nome que preferir).</li>
<li>Abra seu terminal ou prompt de comando.</li>
<li>Navegue até a pasta onde salvou o arquivo.</li>
<li>Execute o código com o comando: python meu_loop.py</li>
</ul><h3>Saída esperada:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Procurando pelo número secreto...
Verificando o número: 1
Esse não é o número secreto... continuando a busca.
Verificando o número: 3
Esse não é o número secreto... continuando a busca.
Verificando o número: 5
Esse não é o número secreto... continuando a busca.
Verificando o número: 7
UHUU! Encontrei o número secreto: 7!
Busca finalizada (fora do loop)." aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Procurando pelo número secreto...</span></span>
<span><span>Verificando o número</span><span>:</span><span> </span><span>1</span></span>
<span><span>Esse não é o número secreto... continuando a busca</span><span>.</span></span>
<span><span>Verificando o número</span><span>:</span><span> </span><span>3</span></span>
<span><span>Esse não é o número secreto... continuando a busca</span><span>.</span></span>
<span><span>Verificando o número</span><span>:</span><span> </span><span>5</span></span>
<span><span>Esse não é o número secreto... continuando a busca</span><span>.</span></span>
<span><span>Verificando o número</span><span>:</span><span> </span><span>7</span></span>
<span><span>UHUU! Encontrei o número secreto</span><span>:</span><span> </span><span>7</span><span>!</span></span>
<span><span>Busca </span><span>finalizada</span><span> </span><span>(</span><span>fora do loop</span><span>).</span></span></code></pre></div>
<h3>Entendendo o que aconteceu</h3>
<p>O loop começou a iterar pela lista numeros. A cada número, ele imprimiu que estava verificando. Quando chegou no número 7, a condição<code> if numero == numero_secreto</code>: se tornou verdadeira. Ele imprimiu a mensagem de sucesso e, imediatamente, encontrou o <code>break</code>. Isso fez com que o loop fosse encerrado naquele exato momento. A mensagem “Esse não é o número secreto…” não foi impressa para os números 9, 11, 13 e 15, porque o loop parou antes de chegar neles. O código então continuou a execução depois do loop, imprimindo “Busca finalizada…”.Ficou claro o poder do <code>break</code>? Ele é direto e reto: achou, parou</p>
<figure><a href="https://amzn.to/3yNBMn6"><img data-recalc-dims="1" loading="lazy" decoding="async" width="280" height="280" data-attachment-id="1063" data-permalink="https://blog.ffelix.eti.br/amazonoriginal280x280/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/amazonoriginal280x280.png?fit=280%2C280&ssl=1" data-orig-size="280,280" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="amazonoriginal280x280" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/amazonoriginal280x280.png?fit=280%2C280&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/amazonoriginal280x280.png?fit=280%2C280&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/amazonoriginal280x280.png?resize=280%2C280&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/amazonoriginal280x280.png?w=280&ssl=1 280w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/amazonoriginal280x280.png?resize=150%2C150&ssl=1 150w" sizes="auto, (max-width: 280px) 100vw, 280px"></a></figure><h2>continue: Pulando a Fogueira (ou a Etapa Chata)</h2>
<p>Agora, imagine outra situação. Você está processando uma lista de arquivos, mas sabe que alguns deles estão corrompidos e não podem ser processados. Você não quer parar todo o processo por causa de um arquivo ruim, quer? Você só quer pular aquele específico e ir para o próximo.</p>
<p>É para isso que serve o comando <code>continue</code>. Quando o Python encontra um <code>continue</code> dentro de um loop, ele pula todo o código restante da iteração atual e vai direto para a próxima iteração do loop.</p>
<p>É como pular uma casa no jogo da vida ou pular a fila do banco (na programação é permitido!).</p>
<h2>Quando usar continue?</h2>
<ul><li>Quando você precisa pular o processamento de um item específico que não atende a uma condição.</li>
<li>Para otimizar loops, pulando etapas desnecessárias para certos elementos.</li>
<li>Para lidar com casos excepcionais dentro de uma iteração sem parar o loop inteiro.</li>
</ul><h3>Exemplo Prático: Pulando Números Pares</h3>
<p>Vamos iterar por uma lista de números e imprimir apenas os números ímpares, pulando os pares.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("Imprimindo apenas números ímpares:")
for numero in numeros:
print(f"\n--- Verificando o número: {numero} ---") # Adicionei esses prints para vermos o fluxo
if numero % 2 == 0: # Verifica se o número é par (resto da divisão por 2 é 0)
print(f"Ops! O número {numero} é par. Pulando esta iteração com continue...")
continue # <- O continue entra em ação aqui!
# Este código só será executado se o continue NÃO for encontrado
print(f"O número {numero} é ímpar. Processando...")
print(f"Processado: {numero * 2}") # Apenas um exemplo de "processamento"
print("\nProcessamento de ímpares finalizado (fora do loop).")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>numeros </span><span>=</span><span> </span><span>[</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>,</span><span> </span><span>4</span><span>,</span><span> </span><span>5</span><span>,</span><span> </span><span>6</span><span>,</span><span> </span><span>7</span><span>,</span><span> </span><span>8</span><span>,</span><span> </span><span>9</span><span>,</span><span> </span><span>10</span><span>]</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>Imprimindo apenas números ímpares:</span><span>"</span><span>)</span></span>
<span></span>
<span><span>for</span><span> numero </span><span>in</span><span> numeros</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"</span><span>\n</span><span>--- Verificando o número: </span><span>{</span><span>numero</span><span>}</span><span> ---"</span><span>)</span><span> </span><span># Adicionei esses prints para vermos o fluxo</span></span>
<span><span> </span><span>if</span><span> numero </span><span>%</span><span> </span><span>2</span><span> </span><span>==</span><span> </span><span>0</span><span>:</span><span> </span><span># Verifica se o número é par (resto da divisão por 2 é 0)</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Ops! O número </span><span>{</span><span>numero</span><span>}</span><span> é par. Pulando esta iteração com continue..."</span><span>)</span></span>
<span><span> </span><span>continue</span><span> </span><span># <- O continue entra em ação aqui!</span></span>
<span><span> </span></span>
<span><span> </span><span># Este código só será executado se o continue NÃO for encontrado</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"O número </span><span>{</span><span>numero</span><span>}</span><span> é ímpar. Processando..."</span><span>)</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Processado: </span><span>{</span><span>numero </span><span>*</span><span> </span><span>2</span><span>}</span><span>"</span><span>)</span><span> </span><span># Apenas um exemplo de "processamento"</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Processamento de ímpares finalizado (fora do loop).</span><span>"</span><span>)</span></span></code></pre></div>
<h3>Como rodar e o que esperar:</h3>
<ul><li>Copie e cole este código em um arquivo (ex: meu_continue.py).</li>
<li>Execute-o no terminal/prompt: python meu_continue.py</li>
</ul><h3>Saída esperada:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Imprimindo apenas números ímpares:
--- Verificando o número: 1 ---
O número 1 é ímpar. Processando...
Processado: 2
--- Verificando o número: 2 ---
Ops! O número 2 é par. Pulando esta iteração com continue...
--- Verificando o número: 3 ---
O número 3 é ímpar. Processando...
Processado: 6
--- Verificando o número: 4 ---
Ops! O número 4 é par. Pulando esta iteração com continue...
--- Verificando o número: 5 ---
O número 5 é ímpar. Processando...
Processado: 10
--- Verificando o número: 6 ---
Ops! O número 6 é par. Pulando esta iteração com continue...
--- Verificando o número: 7 ---
O número 7 é ímpar. Processando...
Processado: 14
--- Verificando o número: 8 ---
Ops! O número 8 é par. Pulando esta iteração com continue...
--- Verificando o número: 9 ---
O número 9 é ímpar. Processando...
Processado: 18
--- Verificando o número: 10 ---
Ops! O número 10 é par. Pulando esta iteração com continue...
Processamento de ímpares finalizado (fora do loop)." aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Imprimindo apenas números ímpares</span><span>:</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>1</span><span> </span><span>--</span><span>-</span></span>
<span><span>O número </span><span>1</span><span> é ímpar</span><span>.</span><span> Processando...</span></span>
<span><span>Processado</span><span>:</span><span> </span><span>2</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>2</span><span> </span><span>--</span><span>-</span></span>
<span><span>Ops! O número </span><span>2</span><span> é par</span><span>.</span><span> Pulando esta iteração com </span><span>continue</span><span>...</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>3</span><span> </span><span>--</span><span>-</span></span>
<span><span>O número </span><span>3</span><span> é ímpar</span><span>.</span><span> Processando...</span></span>
<span><span>Processado</span><span>:</span><span> </span><span>6</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>4</span><span> </span><span>--</span><span>-</span></span>
<span><span>Ops! O número </span><span>4</span><span> é par</span><span>.</span><span> Pulando esta iteração com </span><span>continue</span><span>...</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>5</span><span> </span><span>--</span><span>-</span></span>
<span><span>O número </span><span>5</span><span> é ímpar</span><span>.</span><span> Processando...</span></span>
<span><span>Processado</span><span>:</span><span> </span><span>10</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>6</span><span> </span><span>--</span><span>-</span></span>
<span><span>Ops! O número </span><span>6</span><span> é par</span><span>.</span><span> Pulando esta iteração com </span><span>continue</span><span>...</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>7</span><span> </span><span>--</span><span>-</span></span>
<span><span>O número </span><span>7</span><span> é ímpar</span><span>.</span><span> Processando...</span></span>
<span><span>Processado</span><span>:</span><span> </span><span>14</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>8</span><span> </span><span>--</span><span>-</span></span>
<span><span>Ops! O número </span><span>8</span><span> é par</span><span>.</span><span> Pulando esta iteração com </span><span>continue</span><span>...</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>9</span><span> </span><span>--</span><span>-</span></span>
<span><span>O número </span><span>9</span><span> é ímpar</span><span>.</span><span> Processando...</span></span>
<span><span>Processado</span><span>:</span><span> </span><span>18</span></span>
<span></span>
<span><span>--</span><span>-</span><span> Verificando o número</span><span>:</span><span> </span><span>10</span><span> </span><span>--</span><span>-</span></span>
<span><span>Ops! O número </span><span>10</span><span> é par</span><span>.</span><span> Pulando esta iteração com </span><span>continue</span><span>...</span></span>
<span></span>
<span><span>Processamento de ímpares </span><span>finalizado</span><span> </span><span>(</span><span>fora do loop</span><span>).</span></span></code></pre></div>
<h3>Entendendo o que aconteceu:</h3>
<p>O loop percorre cada número. Quando o número é par, a condição <code>numero % 2 == 0</code> é verdadeira. A mensagem “Ops!…” é impressa, e então o continue é executado. Isso faz com que o Python ignore a linha <code>print(f"O número {numero} é ímpar. Processando...") </code>e a linha <code>print(f"Processado: {numero * 2})</code> para aquele número (o número par). Ele “pula” o restante da iteração e vai direto para o próximo número da lista. Quando o número é ímpar, a condição <code>if numero % 2 == 0</code>: é falsa, o <code>continue</code> não é executado, e o código de “processamento” é executado normalmente.Viu a diferença? O <code>break</code> para tudo, o <code>continue</code> apenas pula a vez atual.</p>
<h2>break vs. continue: Qual Usar Quando?</h2>
<p>A diferença é crucial e simples:</p>
<ul><li><code>break</code>: <strong>PARA TUDO</strong>! Sai completamente do loop.</li>
<li><code>continue</code>: <strong>PRÓXIMO</strong>! Pula o resto da iteração atual e vai para a próxima.</li>
</ul><p>Seu uso depende do que você precisa fazer: parar ou pular.</p>
<h2>Indo Além e Construindo Coisas Incríveis com Python</h2>
<p>Compreender como controlar o fluxo dos seus programas, seja com loops, if/else, break ou continue, é um passo GIGANTE na sua jornada Python. São esses fundamentos que te permitem construir lógicas mais complexas e resolver problemas reais.Se você está gostando de desvendar esses segredos e quer ir além, construir projetos de verdade e solidificar sua base em Python de forma completa, desde os primeiros passos até tópicos mais avançados, eu tenho uma recomendação especial: o e-book <a href="https://go.hotmart.com/F13340196Y" target="_blank" rel="noopener" title="">Python de A-Z, guia de primeiros passos com a linguagem</a>. É um material pensado para te acompanhar nessa jornada, cheio de exemplos e explicações claras. Ele pode ser o seu mapa para dominar Python! <a href="https://go.hotmart.com/F13340196Y" target="_blank" rel="noopener" title="">Garanta seu exemplar e acelere seu aprendizado</a>! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f609.png" alt="😉"></p>
<h2>Reforce Seu Aprendizado!</h2>
<p>Dominar loops é fundamental. Para complementar o que vimos aqui e aprofundar ainda mais seus conhecimentos sobre loops em Python, recomendo a leitura destes outros artigos no blog:</p>
<ul><li><a href="https://blog.ffelix.eti.br/python-para-iniciantes-lacos-e-variaveis-descomplicados/" target="_blank" rel="noopener" title="">Python para Iniciantes: Laços e Variáveis Descomplicados</a></li>
<li><a href="https://blog.ffelix.eti.br/dominando-loops-em-python-guia-completo/" target="_blank" rel="noopener" title="">Dominando Loops em Python: Guia Completo</a></li>
</ul><p>Eles vão te dar uma visão ainda mais robusta sobre o assunto!</p>
<h2>Conclusão (e um Pedido!)</h2>
<p>Aí estão eles: <code>break</code> e <code>continue</code>! Ferramentas simples, mas poderosíssimas para controlar o fluxo dos seus loops em Python. Lembre-se: <code>break</code> para tudo, <code>continue</code> pula uma volta. Pratique com os exemplos, modifique-os, teste seus próprios cenários. A prática leva à perfeição (e a menos bugs chatos!).</p>
<p>Curtiu o artigo? Conseguiu rodar os exemplos? Tem alguma dúvida ou um jeito diferente de usar break ou continue? Deixe seu comentário abaixo! Sua interação é super importante pra gente!</p>
<p>E já que você está por aqui, que tal explorar outros artigos no blog? Temos conteúdo fresquinho saindo do forno para te ajudar a se tornar um desenvolvedor Python incrível. Ah, e não se esqueça de se inscrever na nossa newsletter para não perder nenhuma novidade!Até a próxima aventura Pythônica! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2728.png" alt="✨"></p>
<p></p><p>The post <a href="https://blog.ffelix.eti.br/break-e-continue-controle-de-fluxo-em-python/">Break e Continue: Controle de Fluxo em Python</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Fri, 16 May 2025 11:29:51 +0000Aberto até de Madrugada: Copilot ganha activaçao por vozhttps://abertoatedemadrugada.com/2025/05/copilot-ganha-activacao-por-voz.html
https://abertoatedemadrugada.com/2025/05/copilot-ganha-activacao-por-voz.html
<div><a href="https://abertoatedemadrugada.com/2025/05/copilot-ganha-activacao-por-voz.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1cb3yW20qx7hfSLGLHw8nBvmKoRcSjhPj4WZ1yae7ZqR16beOgn226Kam_HVmG5vlWVXDAPV9jRCFQQhqMF_tkAlX8t5_F3GCnyg1jbPgiwXuggFg39BACgFGnWHg4LrkLTboHFvUJrMfuEqb8YMmv2m4o6Lgy1-0E6PPYn36AEXvc8-PfF1vENg1pvG5/s1600/copilot.jpg" width="600"></a></div>
Os utilizadores Windows poderão começar a dar uso ao Copilot por intermédio de activação por voz.<br><br><a name="more"></a>
A Microsoft tornou mais fácil falar com o Copilot no Windows 11 ao lançar uma nova funcionalidade de ativação por voz. Agora, <a href="https://blogs.windows.com/windows-insider/2025/05/14/copilot-on-windows-hey-copilot-begins-rolling-out-to-windows-insiders/">basta dizer "Hey, Copilot"</a> para chamar o assistente de IA, sem precisar clicar em nada. Esta opção mãos-livres, semelhante ao antigo "Hey, Cortana", está disponível para utilizadores do programa Windows Insider.<br><br>
Por defeito, a funcionalidade está desligada e tem de ser ativada manualmente nas definições do Copilot, na secção Modo de Voz. Ao ser ativado, aparece um microfone flutuante no ecrã, permitindo conversar diretamente com o Copilot. Quem preferir, pode usar o atalho ALT+Espaço durante dois segundos para o mesmo efeito.<br><br>
A Microsoft garante que a privacidade dos utilizadores está protegida, explicando que o computador apenas escuta o comando de ativação através de uma memória temporária de 10 segundos, que não é gravada nem enviada para a cloud. No entanto, após o Copilot ser ativado, os comandos de voz são processados na cloud, mas sem serem armazenados, a não ser que o utilizador autorize partilhar dados para treinar o modelo de IA.<br><br>
Por agora, a funcionalidade só suporta inglês e não funciona se o PC estiver desligado ou bloqueado. A Microsoft promete alargar o suporte a mais línguas em futuras atualizações.<br><br>Fri, 16 May 2025 11:00:00 +0000Ricardo Saramago: Still Alivehttps://www.odrakir.com/blog/2025/05/16/still-alive/
https://www.odrakir.com/blog/2025/05/16/still-alive/
<p>It has been almost 10 years since I stopped blogging. </p>
<p>With the focus changing from blogging to social media, I lost the attention span, the time and motivation I usually dedicated to this… also, I found that my opinions and posts became mostly a drop in an ocean of echoes.</p>
<p>When I and others started the tech / geek blogging scene in Portugal, things were very different. There are still a few that resist like<a href="https://taoofmac.com/"> Rui</a>, <a href="http://celso.io/" data-type="link" data-id="celso.io">Celso</a>, <a href="http://macacos.com/" data-type="link" data-id="macacos.com">Pedro </a>and <a href="http://hugocardoso.com/blog">Hugo</a>, but I just hadn’t the energy or the motivation necessary to keep blogging like they did.</p>
<blockquote>
<p><strong>Why this post now?</strong></p>
</blockquote>
<p>Well… for a sanity check. Because I felt the need to blog / write again. Not that I have much to say, of even that it might be of interest to the World, but in a time where most of the Internet is crap, violence or even AI generated, I felt like I needed to build my own “oasis”.</p>
<p>What will I bring here? Old man rants about everything mostly. Kinda like that Family Guy sketch “What grinds my gears” stuff.</p>
<p>Bare with me, I’m close to 3 years of being 50.</p>Fri, 16 May 2025 09:58:37 +0000Aberto até de Madrugada: Produtos da Semanahttps://abertoatedemadrugada.com/2025/05/produtos-da-semana16.html
https://abertoatedemadrugada.com/2025/05/produtos-da-semana16.html
<i>A nossa rubrica de <a href="http://abertoatedemadrugada.com/search/label/Produtos%20da%20Semana">Produtos da Semana</a> agrupa uma lista de produtos e notícias que vamos compilando ao longo da semana e que achamos que será do interesse geral.</i><br><br><h3>Philips Evnia 25M2N5200U: O monitor de esports para jogadores competitivos</h3>
<div><a href="https://abertoatedemadrugada.com/2025/05/produtos-da-semana16.html"><img alt="" border="0" data-original-height="1080" data-original-width="1080" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEindJD0Bjos-P8wORoHqfxsP7_3pAK1UIq8BKhTvUto1XOGG9Rm0TJ1PCn0k4HVmsJj-UlN_05CPxU4yN6ve5v_DNzqktmc0nzn6owaXIdjEJKCqJKbytCzzvarZjmkup_xIMr0UEdhW55krAhjSsWtmamUDd-UllAODuIm9mA9GQuCUXrVk_USgeNHqqQE/s1600/IMG%201%20-%2025M2N5200U.jpg" width="400"></a></div>
<a name="more"></a>
O Philips Evnia 25M2N5200U está apetrechado com funcionalidades projetadas para proporcionar aos jogadores de esports uma experiência consistentemente impressionante.
<br><br>
Para começar, é extremamente veloz. Com uma taxa de atualização de 390Hz overclokable, input lag reduzido e tempo de resposta de 0,3 ms Smart MBR, a jogabilidade é nítida, certeira e intensa. Sem borrões, efeito fantasma ou atrasos na imagem. Com uma jogabilidade tão fluída, os utilizadores vão jurar que atravessaram o ecrã. Além disso, é um autêntico festim visual. A resolução full HD FastIPS 1920 x 1080 deste monitor é aumentada por funcionalidades gráficas de ponta. O DisplayHDR 400 com certificação VESA oferece a profundidade e definição necessárias para imagens convincentemente realistas, enquanto o SmartContrast fluida e automaticamente ajusta as cores e retroiluminação para melhorar o contraste. Para proporcionar aos jogadores uma vantagem sobre os seus adversários em ambientes escuros, onde a perceção visual pode ser condicionada pela sombra, o Stark ShadomBoost oferece três nível com saturação de cor melhorada e elevado contraste, conseguindo o equilíbrio perfeito entre luz e escuridão. Para assegurar conectividade completa com todos os periféricos e uma atualização fácil da configuração de gaming, este modelo integra 2 portas HDMI 2.0, 1 DisplayPort 1.4, hub USB e saída para auscultadores, cobrindo a maioria das necessidades dos jogadores.
<br><br>
Finalmente, o Philips Evnia 25M2N5200U oferece aos jogadores mais exigentes um conjunto de funcionalidades destinadas a aumentar o desempenho para que tirem mais partido de cada sessão de jogo. O modo SmartImage Game oferece acesso um OSD de acesso rápido com múltiplas opções projetadas especificamente para oferecer aos jogadores mais controlo sobre a sua experiência. Estas incluem os modos First Person Shooting, Racing, Real Time Strategy, entre outros. O Smart Crosshair melhora a precisão em jogos de ação na primeira pessoa, proporcionando aos utilizadores uma vantagem enquanto procuram e atingem os inimigos. O modo LowBlue e tecnologia Flicker-free reduz o esforço e cansaço para os olhos, oferecendo aos jogadores maior conforto e paz de espírito. Por fim, um stand ajustável permite aos utilizadores rodar, inclinar e ajustar o monitor à posição ideal, tornando cada sessão de jogo o mais confortável e envolvente possível.
<br><br>
O Philips Evnia 25M2N5200U estará disponível a partir de meados de maio com um preço recomendado pelo fabricante de 379 euros.
<br><br><br><h3> Hama MOB.BT - Som potente e sem fios para quem procura qualidade premium em movimento</h3>
<div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyIOyLme_0mtDO7hssOSJfBORXmK8MryQ4To6k0ZXmolK4fJHsIy3BRPuqs7vxlMSis0FmCKZwpmd37FPF9CPOA6sY6iIgx-mvtD1MWGcD_xr7_XMQYx7ORoRiGqYpUrM-9bnnTdOmXTF1uAHsvGuT_pbiKtCxSbS3rrmTjt90IQVxCsUqSx_z1rjYs1n7/s1000/00188232awd3.jpg"><img alt="" border="0" data-original-height="1000" data-original-width="1000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyIOyLme_0mtDO7hssOSJfBORXmK8MryQ4To6k0ZXmolK4fJHsIy3BRPuqs7vxlMSis0FmCKZwpmd37FPF9CPOA6sY6iIgx-mvtD1MWGcD_xr7_XMQYx7ORoRiGqYpUrM-9bnnTdOmXTF1uAHsvGuT_pbiKtCxSbS3rrmTjt90IQVxCsUqSx_z1rjYs1n7/s400/00188232awd3.jpg" width="400"></a></div>
<br>
A Hama acaba de lançar em Portugal a sua nova coluna portátil sem fios da série MOB.BT, criada para os utilizadores que procuram um modelo fácil de transportar e capacidades de utilização "todo-o-terreno", sem descurar um som de qualidade "premium".
<br><br>
A parceria com a Canton trouxe à nova Hama MOB.BT Ultimate Pro as melhorias mais recentes introduzidas no hardware para reprodução de som de classe profissional. O modelo conta com um potente amplificador de 120 Watt, enquanto o altifalante Bluetooth está equipado com um sistema bidirecional de alta-fidelidade programado para reproduzir os sons agudos e médios, que se junta a dois radiadores passivos adicionais, que ajudam a reforçar os sons mais graves. O modelo integra um equalizador com três efeitos sonoros distintos – Bass Sound, Power Sound e Balanced Sound – que oferecem uma experiência auditiva perfeita em qualquer cenário, ambiente e localização, seja numa festa dentro de quatro paredes, numa praia ou no jardim, tudo à distância de um simples botão. Nos casos em que os utilizadores procuram um som estéreo ainda mais envolvente e poderoso, a função True-Wireless-Stereo (TWS) permite ligar duas ou mais MOB.BT Ultimate Pro através de Bluetooth, transformando o som numa verdadeira experiência estereofónica.
<br><br>
A nova coluna MOB.BT Ultimate Pro da Hama destaca-se também pela grande versatilidade que oferece aos utilizadores ao nível dos dispositivos possíveis de ligar. Além da ligação Bluetooth estão disponíveis uma porta USB-C com função Power Pack, para carregamento de outros dispositivos (smartphones, tablets, etc.), porta USB-A e entradas AUX através de tomadas do tipo "jack" (6,3 mm) e mini-jack (3,5 mm). Alem de música por Bluetooth, isto significa que a MOB.BT Ultimate Pro pode também funcionar como sistema de karaoke, através da ligação de um microfone, como amplificador para guitarra elétrica, ou como sistema de som que reproduz música a partir de um disco USB externo.
<br><br>
A bateria recarregável que acompanha a nova coluna portátil da Hama faz também jus ao som e às funcionalidades premium deste modelo: os utilizadores podem desfrutar das suas músicas preferidas por Bluetooth durante até 24 horas, mais do que suficientes para momentos de dança e de diversão "non-stop". Além disso, a certificação de acordo com a norma IPX6 torna a MOB.BT Ultimate Pro numa solução portátil e robusta em diferentes condições atmosféricas, mantendo o seu altifalante protegido contra chuva, jatos e salpicos de água. Por fim, com a App "Hama Smart Home" é possível controlar confortavelmente as funcionalidades da coluna de som, incluindo a personalização das definições do equalizador, a alteração do nome ou simplesmente verificar o nível da carga da bateria em percentagem. Como empresa há muito apostada na preservação responsável do ambiente, a embalagem destas Hama MOB.BT Ultimate Pro é 100% isenta de plástico e todo o papel, cartão e papelão usados são provenientes de práticas sustentáveis de gestão florestal, com Certificação FSC.
<br><br>
Em Portugal, a Hama MOB.BT Ultimate Pro tem um preço de venda recomendado de 249 euros.
<br><br><br><h3>LG lança QNED EVO 2025</h3>
<div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD20FcoMeefpYqpU8DDlQ3NOkFnPuMq9T2zyaAGwi1UOoMCSVJEWHTrQPRtgBjifPcRPXwdaa8bqFBp6rXi0uJcRSaUoyGjZjyPIJqajP2H-hLs9yG82V80CBYH9wS2pXVMTrEwJueGVf91J6OVodUfJzG-EBU8WcatxXOef4dPjw4kgvlbh2bhJYvqJQw/s900/LG%20-%20QNED%20evo%202025%20%282%29.jpg"><img alt="" border="0" data-original-height="593" data-original-width="900" height="421" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD20FcoMeefpYqpU8DDlQ3NOkFnPuMq9T2zyaAGwi1UOoMCSVJEWHTrQPRtgBjifPcRPXwdaa8bqFBp6rXi0uJcRSaUoyGjZjyPIJqajP2H-hLs9yG82V80CBYH9wS2pXVMTrEwJueGVf91J6OVodUfJzG-EBU8WcatxXOef4dPjw4kgvlbh2bhJYvqJQw/w640-h421/LG%20-%20QNED%20evo%202025%20(2).jpg" width="640"></a></div>
<br>
A LG Electronics Inc. está a lançar a sua linha QNED evo 2025, reforçando a sua presença no segmento de TV LCD premium. Marcando um salto significativo para as TVs LCD, as novas TVs QNED evo herdam o valor diferenciado do LG OLED, juntamente com várias soluções de cores, tecnologia Mini LED, o mais recente processador α (Alpha) AI, desempenho de jogos de primeira linha e a versátil e premiada plataforma webOS.
<br><br>
Certificadas pela Intertek por atingirem 100% de volume de cor, estas TVs de vanguarda reproduzem cores ricas e reais em ambientes claros e escuros. Com a solução Dynamic QNED Color patenteada pela empresa, que substitui a tecnologia de pontos quânticos, os espectadores podem esperar profundidade, nitidez e precisão excecionais, independentemente das condições de iluminação. Com a tecnologia Mini LED alimentada pelo processador Alpha AI, os modelos QNED evo apresentam um controlo de luz refinado, melhorando o contraste e a precisão das imagens para garantir pretos mais profundos, realces mais brilhantes e uma qualidade de imagem equilibrada. Os algoritmos avançados de IA controlam eficazmente cada zona para proporcionar um desempenho superior, para além dos visuais envolventes do Mini LED. Para melhorar ainda mais a qualidade de imagem e som, o AI Picture Pro da LG otimiza o detalhe, a profundidade e a precisão, afinando cada cena com um processamento sofisticado para obter a qualidade de imagem mais refinada em todos os conteúdos.
<br><br>
O AI Object Enhancer identifica e melhora rostos, corpos e elementos-chave de cada cena para um maior detalhe e naturalismo. O Dynamic Tone Mapping Pro divide cada cena em blocos e afina o brilho e o contraste, criando imagens mais vivas e realistas. Complementando estas melhorias, o AI Sound Pro mergulha os espectadores em som surround 9.1.2 virtual, enriquecendo a profundidade e a clareza espacial através das colunas incorporadas no televisor. A linha também apresenta funcionalidades altamente personalizadas, graças à tecnologia de Inteligência Artificial que consegue compreender as preferências áudio e visuais únicas de cada utilizador. Analisando mais de 1,6 mil milhões de definições de imagem e 40 milhões de perfis de som, o AI Picture/Sound Wizard leva a personalização a um novo nível, recomendando modos áudio e visuais adaptados para cada utilizador.
<br><br>
Para maior comodidade, a LG introduz um botão de IA no Comando Mágico de IA, proporcionando um reconhecimento de voz intuitivo e uma navegação sem esforço. A função de ponteiro do telecomando funciona como um rato de computador, permitindo aos utilizadores explorar facilmente o conteúdo e ajustar os modos de visualização. Um conjunto de funcionalidades alimentadas por IA cria uma experiência de entretenimento profundamente personalizada. O AI Voice ID reconhece vozes individuais para mudar de perfil e recomendar conteúdos personalizados. O LG AI Concierge analisa o histórico de visualizações e os hábitos do utilizador para fornecer sugestões de conteúdo e recomendações de palavras-chave, enquanto a Pesquisa de IA – alimentada por um Modelo de Linguagem Ampla – compreende o contexto de conversação e a intenção do utilizador para uma descoberta de conteúdo mais intuitiva. A integração do Microsoft Copilot simplifica ainda mais o processo, ajudando os utilizadores a encontrar e organizar informações complexas de forma eficiente, e o AI Chatbot identifica potenciais desafios do utilizador e oferece soluções atempadas e eficazes. Os modelos QNED evo 2025 elevam a experiência do utilizador através destas funcionalidades avançadas de IA e da premiada plataforma de smart TV webOS 25. Equipado com o novo processador Alpha AI, o webOS 25 oferece maior personalização e conveniência. Estendendo os benefícios para além da compra inicial, os proprietários de televisões com webOS da LG podem desfrutar da experiência de smart TV mais atualizada durante cinco anos.
<br><br>
Os novos modelos QNED evo também podem funcionar como hubs centrais de casa inteligente. O Home Hub oferece conetividade multiplataforma através da integração do LG ThinQ e do Google Home, permitindo aos utilizadores gerir os seus dispositivos domésticos inteligentes através de uma interface única e intuitiva. O suporte para Apple AirPlay e Google Cast melhora a compatibilidade móvel, permitindo a partilha perfeita de conteúdos de dispositivos pessoais para o grande ecrã. Os gamers vão poder apreciar as poderosas capacidades de jogo dos televisores QNED evo, incluindo movimentos fluidos, imagens vivas e controlos fáceis no jogo. Como hub central de jogos, o LG Gaming Portal serve como uma forma fácil para os jogadores descobrirem novos títulos e desfrutarem dos que já adoram. Através de parcerias com os principais serviços de jogos na nuvem, juntamente com muitos jogos nativos da aplicação webOS, a LG oferece uma vasta seleção de jogos de vários géneros, permitindo aos utilizadores jogar instantaneamente sem a necessidade de consolas de jogos ou downloads. Suportando 4K 144Hz com AMD FreeSync Premium, estas TVs aumentam a fluidez e a nitidez dos movimentos que acompanham cada movimento sem trepidação ou soluços visuais. A destacar a linha de produtos está a QNED9M, a primeira TV QNED da LG que pode transmitir áudio e vídeo sem fios através da tecnologia True Wireless. Esta inovação, inicialmente exclusiva da série LG OLED evo M, estende-se agora à QNED, dando a mais clientes a capacidade de desfrutar de conteúdo 4K de alta definição sem fios, sem perda de qualidade de imagem ou atraso. Ao ligar-se à Zero Connect Box, o QNED9M pode transmitir áudio e vídeo sem fios a até 144 Hz, sem latência ou perda de qualidade de imagem e som, ao mesmo tempo que cumpre os critérios de uma experiência AMD FreeSync Premium. Além disso, a Zero Connect Box elimina a necessidade de consolas de jogos e set-top boxes à volta do ecrã, resultando numa configuração elegante e sem confusão.
<br><br>
Disponíveis em tamanhos que variam entre as 50 e as 100 polegadas, os modelos 2025 QNED evo satisfazem as diversas necessidades dos consumidores atuais. À medida que a procura de ecrãs ultragrandes continua a aumentar, a nova QNED TV de 100 polegadas da LG proporciona uma experiência de qualidade cinematográfica, trazendo para casa imagens imersivas e semelhantes às do cinema. A linha de TVs QNED evo 2025 da LG estará disponível a partir de maio na Coreia, nos Estados Unidos e em países europeus, com outros mercados a seguirem-se ao longo do ano.
<br><br><br><h3>SPC lança o tablet GRAVITY PRO</h3>
<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn1wmTKwhDSSQRZoA87CmfBBNGL8ErSuoifdUYEc3NsNvNX59URbDR7Dldnvag7PWoNBJ3gArtFU5MoNZKoPOVTbHr-rLD_ltsHbQTo9SXlS60TwyB1BMIgy8Wn-E-UWqWSKj9O1rWE1p574fVBZHooPvKrJsVTgWxPYupFpLiFQvHbCi84ZbKQKbj2hMn/s653/unnamed.jpg"><img alt="" border="0" data-original-height="574" data-original-width="653" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgn1wmTKwhDSSQRZoA87CmfBBNGL8ErSuoifdUYEc3NsNvNX59URbDR7Dldnvag7PWoNBJ3gArtFU5MoNZKoPOVTbHr-rLD_ltsHbQTo9SXlS60TwyB1BMIgy8Wn-E-UWqWSKj9O1rWE1p574fVBZHooPvKrJsVTgWxPYupFpLiFQvHbCi84ZbKQKbj2hMn/s400/unnamed.jpg" width="400"></a></div>
<br>
A SPC, empresa tecnológica europeia especializada no desenvolvimento de produtos de eletrónica de consumo apresenta o novo GRAVITY PRO, o primeiro tablet da marca com tecnologia Matte View Display, que cuida da saúde dos nossos olhos, reduzindo o encandeamento e oferecendo uma experiência visual suave e confortável, adaptando-se constantemente a todas as condições de luminosidade, tanto no exterior como no interior.
<br><br>
Quer esteja em casa, no escritório ou ao ar livre, o Matte View Display reduz o brilho da luz no ecrã para que possa ler, trabalhar ou ver séries com total nitidez. A tecnologia IPS Incell e resolução Full HD nas versões de 11" e 12" garante um ângulo de visualização ideal, perfeito para longas sessões frente ao ecrã sem desconforto visual. Quantas vezes já tentou utilizar um tablet à luz do sol ou num ambiente com muita iluminação e acabou por ver mais reflexos do que o próprio conteúdo no ecrã? Com o novo GRAVITY PRO, isso não acontece. O novo ecrã integra um tratamento Anti-Glare (AG), uma tecnologia que transforma a superfície original do ecrã — naturalmente brilhante e reflexiva — numa superfície mate com reflexão difusa. Isto significa que, em vez de refletir diretamente a luz para os seus olhos, o ecrã dispersa essa luz em diferentes direções, reduzindo significativamente o encandeamento. O resultado? Uma visualização mais clara e confortável, mesmo em ambientes com muita luz, e uma proteção extra para os teus olhos durante longos períodos de utilização. Além de melhorar a experiência visual, o novo tratamento do ecrã do novo GRAVITY PRO também traz benefícios táteis. A textura ligeiramente microestruturada, conseguida através de tecnologia de precisão a nível nanométrico, oferece uma sensação ao toque mais suave e controlada. Navegar, trabalhar ou ver filmes no tablet torna-se uma experiência mais agradável, natural e precisa — como se estivesse a deslizar os dedos sobre papel.
<br><br>
Equipado com processador Octa Core Unisoc T606 e 6 GB de RAM, o SPC GRAVITY PRO permite alternar entre aplicações, navegar, ver vídeos ou editar documentos sem interrupções. O desempenho fluido adapta-se às exigências do teletrabalho, estudo e entretenimento, acompanhando o ritmo do utilizador durante todo o dia. Com 256 GB de armazenamento interno e possibilidade de expansão até 512 GB mais via microSD, este tablet oferece espaço suficiente para guardar vídeos, fotografias, documentos, aplicações e jogos, ou seja, tudo acessível mesmo sem ligação à internet. A sua conectividade 4G com Dual SIM permite usar dois números diferentes num só dispositivo — ideal para gerir a vida pessoal e profissional. Com Wi-Fi 5, mantém uma ligação rápida e estável em qualquer ambiente. De salientar, que a sua bateria de 6.000 mAh (11") ou 8.000 mAh (12") oferece até 10 e 12,5 horas de utilização em reprodução contínua, respetivamente. Quando for necessário recarregar, o sistema de carga rápida a 18W via USB-C permite recuperar 100% da bateria em apenas 90 minutos. Conta ainda com função de carga inversa, ideal para alimentar outros dispositivos em caso de emergência.
<br><br>
Com câmara traseira de 13 Mpx para fotos nítidas e vídeos em Full HD, e câmara frontal de 8 Mpx, o GRAVITY PRO é ideal para videochamadas, aulas online, conefence calls ou partilhas nas redes sociais com qualidade garantida. Mas o seu design, não fica atrás. O seu corpo metálico em cor Lunar Mist confere-lhe um visual sofisticado, resistente e moderno — à altura de qualquer contexto profissional ou pessoal. O SPC GRAVITY PRO estará disponível a partir de 13 de maio, por 229,90 euros (versão 11") e por 249,90 euros (versão 12").
<br><br><br>Fri, 16 May 2025 08:00:00 +0000Aberto até de Madrugada: MS corrige problema de dual-boot com Linux nos PCs com Windowshttps://abertoatedemadrugada.com/2025/05/ms-corrige-problema-de-dual-boot-com.html
https://abertoatedemadrugada.com/2025/05/ms-corrige-problema-de-dual-boot-com.html
<div><a href="https://abertoatedemadrugada.com/2025/05/ms-corrige-problema-de-dual-boot-com.html"><img alt="" border="0" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSYPU3i1FrhyGBCJqpUbUmqKN5ooGqV7uxt6yKQXeHSkIndpLpY-BgHQpha8fhjhL3RW2DgPmA-AVst_8yDlOE-39wX7GR_lw1bIct4TdcksCjNnhNzSvXhsb1_cPM00sjbuaaDvWXQ3FvD7D71gR6eiJL4QjX5FvJfvneb1fgPvVXBDvyv_k3hVnhN7h9/s1600/linuxboot.jpg" width="600"></a></div>
Demorou, mas a MS corrigiu o erro que encravava o arranque de Linux em dual boot em máquinas Windows.<br><br><a name="more"></a>
A Microsoft resolveu finalmente um problema antigo que <a href="https://www.bleepingcomputer.com/news/microsoft/microsoft-fixes-linux-boot-issues-on-dual-boot-windows-systems/">impedia o arranque do Linux em PCs com dual boot</a> e Secure Boot ativo. A falha surgiu após a atualização de segurança do Windows em agosto de 2024 e afetou sistemas com Windows e várias distribuições Linux, como Ubuntu, Mint e outras. A origem estava numa atualização ao SBAT do Secure Boot, que bloqueava incorretamente os bootloaders ao tentar corrigir uma falha no GRUB2.<br><br>
Apesar de a Microsoft ter garantido que sistemas em dual boot não receberiam a atualização, muitos utilizadores com métodos personalizados acabaram por ser afetados. Isto resultou em erros como "SBAT self-check failed" e impossibilidade de arrancar o Linux. A empresa forneceu uma solução temporária em agosto de 2024, mas não resolveu totalmente o problema.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixUSZaOPoYKYOUl9gNDSbQ4wk-oKKfsZBWd_zdO7PMg8XlTe3JxBv8GD2DBScgPXJGzYUzWOxEaOtMXXUBfPFfu5TMdvBswZ1l6-N2EXFlzUYnRvAfP9CUINVJcgekl5i6Wlk-ZCsAc55Z8cCgwpAimrhDU9MltYM3XdbdWVErUGeskhSCtecweizNN_Mi/s1024/linuxfail.jpg"><img alt="" border="0" data-original-height="181" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixUSZaOPoYKYOUl9gNDSbQ4wk-oKKfsZBWd_zdO7PMg8XlTe3JxBv8GD2DBScgPXJGzYUzWOxEaOtMXXUBfPFfu5TMdvBswZ1l6-N2EXFlzUYnRvAfP9CUINVJcgekl5i6Wlk-ZCsAc55Z8cCgwpAimrhDU9MltYM3XdbdWVErUGeskhSCtecweizNN_Mi/s600/linuxfail.jpg" width="600"></a></div>
Agora, nove meses depois, a Microsoft lançou uma correção definitiva nas atualizações de segurança de maio de 2025. Recomenda-se a todos os utilizadores afetados que instalem as atualizações mais recentes do Windows, que corrigem finalmente o comportamento errado do SBAT e deixam de bloquear os bootloaders do Linux.<br><br>
A par da correção, a Microsoft já tinha deixado de aplicar automaticamente a atualização problemática em setembro de 2024 e ofereceu um comando no registo do Windows para quem quiser bloquear futuras atualizações SBAT manualmente. Segundo a empresa, as atualizações desde setembro de 2024 já não incluem as definições que causaram o problema.<br><br>Thu, 15 May 2025 20:00:00 +0000Alexsandro Felix: Tratamento de Erros de Input em Python: Dicas Práticashttps://blog.ffelix.eti.br/tratamento-de-erros-de-input-em-python-dicas-praticas/
https://blog.ffelix.eti.br/tratamento-de-erros-de-input-em-python-dicas-praticas/
<p>Olá, futuro mestre do Python! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f40d.png" alt="🐍"> Se você está aqui, provavelmente já se deparou com aquela mensagem de erro assustadora ao tentar coletar dados de um usuário no Python. Talvez o programa esperasse um número e o usuário digitou “banana”. Ou quem sabe ele apertou Enter sem querer, e o Python jogou um <code>ValueError</code> na sua cara. Não se preocupe! Neste artigo, vamos mergulhar no mundo dos erros na entrada de dados em Python, entender por que eles acontecem e, o mais importante, como evitá-los com exemplos práticos que você pode testar agora mesmo. Vamos aprender juntos, com um toque de humor e muitos códigos para você brincar!</p>
<p>A propósito, manter este blog exige café, tempo e um pouco de dinheiro. As propagandas que você vê por aqui ajudam a cobrir os custos, já que eu não ganho nada diretamente por escrever esses artigos. Se você gosta do conteúdo, considere adquirir os livros de Python que recomendo na Amazon através dos meus links de <a href="https://amzn.to/3yNBMn6" target="_blank" rel="noopener" title="">afiliado</a> ou confira os cursos que anuncio no blog. Quem sabe, se a receptividade for boa, eu me anime a escrever um livro sobre Python no futuro! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f604.png" alt="😄"> Agora, vamos ao que interessa.</p>
<h2>Por que os erros na entrada de dados acontecem?</h2>
<p>Quando você usa a função <code>input()</code> em Python, está pedindo ao usuário para digitar algo. O problema é que os usuários (incluindo você e eu) são imprevisíveis. Eles podem digitar letras onde você esperava números, deixar o campo em branco ou até tentar trollar o programa com emojis. <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f61c.png" alt="😜"> O Python, sendo bem exigente, não lida bem com essas surpresas e pode lançar erros como:</p>
<ul><li><strong>ValueError</strong>: Quando o usuário digita algo que não pode ser convertido para o tipo esperado (ex.: tentar converter “abc” para int).</li>
<li><strong>KeyboardInterrupt</strong>: Quando o usuário interrompe o programa (Ctrl+C).</li>
<li><strong>EOFError</strong>: Quando o usuário tenta encerrar a entrada (Ctrl+D ou Ctrl+Z, dependendo do sistema).</li>
<li><strong>TypeError</strong>: Quando você tenta usar o dado de forma inadequada.</li>
</ul><p>Nosso objetivo é criar programas que sejam <strong>robustos</strong> e lidem com essas situações sem quebrar. Vamos ver como fazer isso com exemplos práticos.</p>
<h2>Exemplo 1: Capturando um número inteiro</h2>
<p>Imagine que você está criando um programa que calcula a idade de uma pessoa daqui a 10 anos. Você precisa que o usuário digite a idade atual, que deve ser um número inteiro. Aqui está um código inicial (e ingênuo):</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='idade = int(input("Digite sua idade: "))
idade_futura = idade + 10
print(f"Daqui a 10 anos, você terá {idade_futura} anos!")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>idade </span><span>=</span><span> </span><span>int</span><span>(</span><span>input</span><span>(</span><span>"</span><span>Digite sua idade: </span><span>"</span><span>))</span></span>
<span><span>idade_futura </span><span>=</span><span> idade </span><span>+</span><span> </span><span>10</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"Daqui a 10 anos, você terá </span><span>{</span><span>idade_futura</span><span>}</span><span> anos!"</span><span>)</span></span></code></pre></div>
<p>Teste esse código. Se o usuário digitar 25, ele verá:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Digite sua idade: 25
Daqui a 10 anos, você terá 35 anos!" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Digite sua idade</span><span>:</span><span> </span><span>25</span></span>
<span><span>Daqui a </span><span>10</span><span> anos</span><span>,</span><span> você terá </span><span>35</span><span> anos!</span></span></code></pre></div>
<p>Perfeito, né? Mas e se o usuário digitar <em>vinte e cinco </em>ou simplesmente apertar Enter? O Python vai jogar um <code>ValueError</code> na sua cara. Vamos melhorar esse código usando tratamento de exceções com <code>try</code> e <code>except</code>:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='while True:
try:
idade = int(input("Digite sua idade: "))
idade_futura = idade + 10
print(f"Daqui a 10 anos, você terá {idade_futura} anos!")
break # Sai do loop se tudo der certo
except ValueError:
print("Ops! Por favor, digite um número inteiro válido.")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>while</span><span> </span><span>True</span><span>:</span></span>
<span><span> </span><span>try</span><span>:</span></span>
<span><span> idade </span><span>=</span><span> </span><span>int</span><span>(</span><span>input</span><span>(</span><span>"</span><span>Digite sua idade: </span><span>"</span><span>))</span></span>
<span><span> idade_futura </span><span>=</span><span> idade </span><span>+</span><span> </span><span>10</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Daqui a 10 anos, você terá </span><span>{</span><span>idade_futura</span><span>}</span><span> anos!"</span><span>)</span></span>
<span><span> </span><span>break</span><span> </span><span># Sai do loop se tudo der certo</span></span>
<span><span> </span><span>except</span><span> </span><span>ValueError</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Ops! Por favor, digite um número inteiro válido.</span><span>"</span><span>)</span></span></code></pre></div>
<p>Agora, se o usuário digitar algo inválido, como <em>banana</em>, o programa não quebra. Ele exibe uma mensagem amigável e pede a entrada novamente.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Digite sua idade: banana
Ops! Por favor, digite um número inteiro válido.
Digite sua idade: 25
Daqui a 10 anos, você terá 35 anos!" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Digite sua idade</span><span>:</span><span> banana</span></span>
<span><span>Ops! Por favor</span><span>,</span><span> digite um número inteiro válido</span><span>.</span></span>
<span><span>Digite sua idade</span><span>:</span><span> </span><span>25</span></span>
<span><span>Daqui a </span><span>10</span><span> anos</span><span>,</span><span> você terá </span><span>35</span><span> anos!</span></span></code></pre></div>
<p><strong>Por que isso funciona</strong>? O bloco <code>try</code> tenta executar o código arriscado <code>(int(input()))</code>, e se algo der errado, o <code>except ValueError</code> captura o erro e dá uma chance ao usuário de tentar novamente. O <code>while True</code> mantém o loop até que a entrada seja válida.</p>
<h2>Exemplo 2: Validando entradas específicas</h2>
<p>Agora, vamos supor que você quer que o usuário digite apenas uma idade entre 0 e 120 anos (porque, convenhamos, ninguém tem 150 anos ou idade negativa, né?). Vamos adicionar uma validação extra:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='while True:
try:
idade = int(input("Digite sua idade (0 a 120): "))
if 0 <= idade <= 120:
idade_futura = idade + 10
print(f"Daqui a 10 anos, você terá {idade_futura} anos!")
break
else:
print("Idade inválida! Digite um número entre 0 e 120.")
except ValueError:
print("Ops! Digite um número inteiro válido.")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>while</span><span> </span><span>True</span><span>:</span></span>
<span><span> </span><span>try</span><span>:</span></span>
<span><span> idade </span><span>=</span><span> </span><span>int</span><span>(</span><span>input</span><span>(</span><span>"</span><span>Digite sua idade (0 a 120): </span><span>"</span><span>))</span></span>
<span><span> </span><span>if</span><span> </span><span>0</span><span> </span><span><=</span><span> idade </span><span><=</span><span> </span><span>120</span><span>:</span></span>
<span><span> idade_futura </span><span>=</span><span> idade </span><span>+</span><span> </span><span>10</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Daqui a 10 anos, você terá </span><span>{</span><span>idade_futura</span><span>}</span><span> anos!"</span><span>)</span></span>
<span><span> </span><span>break</span></span>
<span><span> </span><span>else</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Idade inválida! Digite um número entre 0 e 120.</span><span>"</span><span>)</span></span>
<span><span> </span><span>except</span><span> </span><span>ValueError</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Ops! Digite um número inteiro válido.</span><span>"</span><span>)</span></span></code></pre></div>
<p>Teste esse código! Se o usuário digitar <em>-5 </em>ou <em>200</em>, ele verá uma mensagem pedindo uma idade válida. Se digitar <em>abc</em>, o <code>ValueError</code> entra em ação. Esse código é mais robusto porque combina tratamento de exceções com validação lógica.</p>
<h2>Exemplo 3: Lidando com entradas vazias e outros erros</h2>
<p>Às vezes, o usuário pode simplesmente apertar Enter sem digitar nada, ou até tentar encerrar o programa com Ctrl+C. Vamos criar um programa que lida com essas situações. Aqui, queremos que o usuário digite o nome de uma cidade e um número de dias para uma previsão do tempo fictícia:</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='while True:
try:
cidade = input("Digite o nome da cidade: ").strip()
if not cidade:
print("Ei, não deixe o campo vazio! Digite o nome de uma cidade.")
continue
dias = int(input("Quantos dias de previsão (1 a 7)? "))
if 1 <= dias <= 7:
print(f"Previsão do tempo para {cidade} por {dias} dias: Ensolarado! ☀")
break
else:
print("Por favor, escolha entre 1 e 7 dias.")
except ValueError:
print("Ops! O número de dias deve ser um número inteiro.")
except KeyboardInterrupt:
print("\nPrograma interrompido pelo usuário. Até mais!")
break
except EOFError:
print("\nEntrada encerrada. Até mais!")
break' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>while</span><span> </span><span>True</span><span>:</span></span>
<span><span> </span><span>try</span><span>:</span></span>
<span><span> cidade </span><span>=</span><span> </span><span>input</span><span>(</span><span>"</span><span>Digite o nome da cidade: </span><span>"</span><span>).</span><span>strip</span><span>()</span></span>
<span><span> </span><span>if</span><span> </span><span>not</span><span> cidade</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Ei, não deixe o campo vazio! Digite o nome de uma cidade.</span><span>"</span><span>)</span></span>
<span><span> </span><span>continue</span></span>
<span><span> dias </span><span>=</span><span> </span><span>int</span><span>(</span><span>input</span><span>(</span><span>"</span><span>Quantos dias de previsão (1 a 7)? </span><span>"</span><span>))</span></span>
<span><span> </span><span>if</span><span> </span><span>1</span><span> </span><span><=</span><span> dias </span><span><=</span><span> </span><span>7</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Previsão do tempo para </span><span>{</span><span>cidade</span><span>}</span><span> por </span><span>{</span><span>dias</span><span>}</span><span> dias: Ensolarado! ☀"</span><span>)</span></span>
<span><span> </span><span>break</span></span>
<span><span> </span><span>else</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Por favor, escolha entre 1 e 7 dias.</span><span>"</span><span>)</span></span>
<span><span> </span><span>except</span><span> </span><span>ValueError</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Ops! O número de dias deve ser um número inteiro.</span><span>"</span><span>)</span></span>
<span><span> </span><span>except</span><span> </span><span>KeyboardInterrupt</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Programa interrompido pelo usuário. Até mais!</span><span>"</span><span>)</span></span>
<span><span> </span><span>break</span></span>
<span><span> </span><span>except</span><span> </span><span>EOFError</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Entrada encerrada. Até mais!</span><span>"</span><span>)</span></span>
<span><span> </span><span>break</span></span></code></pre></div>
<p>Teste esse código e tente:</p>
<ul><li>Deixar o campo da cidade vazio (apertar Enter).</li>
<li>Digitar uma letra no campo de dias.</li>
<li>Usar Ctrl+C para interromper</li>
</ul><p>O programa lida com tudo isso de forma elegante! A função <code>strip()</code> remove espaços em branco, e verificamos se a string está vazia com <code>if not cidade</code>. Também capturamos <code>KeyboardInterrupt</code> e <code>EOFError</code> para evitar que o programa quebre de forma feia.</p>
<h2>Dicas para evitar erros na entrada de dados</h2>
<ul><li><strong>Use</strong> <code>try</code> e <code>except</code> sempre: Eles são seus melhores amigos para lidar com entradas inesperadas.</li>
<li><strong>Valide os dados</strong>: Não confie que o usuário vai seguir as regras.</li>
<li><strong>Verifique intervalos</strong>, tipos e formatos.Dê feedback claro: Mensagens como “Digite um número válido” ajudam o usuário a entender o erro.</li>
<li><strong>Teste exaustivamente</strong>: Tente quebrar seu próprio programa com entradas malucas (letras, números negativos, emojis, etc.).</li>
<li><strong>Considere entradas vazias</strong>: Sempre verifique se o usuário deixou o campo em branco</li>
</ul><h2>Um pedido do coração <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/2764.png" alt="❤"></h2>
<p>Escrever artigos como este leva tempo e dedicação, e eu faço isso porque amo ensinar Python! As propagandas no blog ajudam a pagar as contas, mas se você quiser apoiar ainda mais, considere comprar os <a href="https://amzn.to/3yNBMn6" target="_blank" rel="noopener" title="">livros de Python</a> que recomendo através dos meus links de afiliado na Amazon ou conferir os cursos que anuncio. Se vocês gostarem bastante, quem sabe eu não lanço um livro sobre <strong>Python</strong> no futuro? <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f604.png" alt="😄"></p>
<figure><a href="https://amzn.to/3yNBMn6"><img data-recalc-dims="1" loading="lazy" decoding="async" width="280" height="280" data-attachment-id="1054" data-permalink="https://blog.ffelix.eti.br/kuassociates280x280/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/KUassociates280x280.png?fit=280%2C280&ssl=1" data-orig-size="280,280" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="KUassociates280x280" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/KUassociates280x280.png?fit=280%2C280&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/KUassociates280x280.png?fit=280%2C280&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/KUassociates280x280.png?resize=280%2C280&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/KUassociates280x280.png?w=280&ssl=1 280w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/KUassociates280x280.png?resize=150%2C150&ssl=1 150w" sizes="auto, (max-width: 280px) 100vw, 280px"></a></figure><h2>Vamos continuar aprendendo juntos?</h2>
<p>Gostou do artigo? Então não pare por aqui! Explore outros posts no blog para turbinar suas habilidades em Python. Que tal se inscrever na nossa newsletter para receber dicas exclusivas e novos artigos diretamente no seu e-mail? Deixe um comentário abaixo contando como você lida com erros de entrada nos seus programas ou se já passou por alguma situação engraçada com <code>input()</code>. Sua interação me motiva a continuar criando conteúdo!</p><p>The post <a href="https://blog.ffelix.eti.br/tratamento-de-erros-de-input-em-python-dicas-praticas/">Tratamento de Erros de Input em Python: Dicas Práticas</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Thu, 15 May 2025 19:15:45 +0000Alexsandro Felix: Como Construir um Portfólio Impactante em Pythonhttps://blog.ffelix.eti.br/como-construir-um-portfolio-impactante-em-python/
https://blog.ffelix.eti.br/como-construir-um-portfolio-impactante-em-python/
<p>Fala, dev! Tá naquela saga de conquistar a vaga dos sonhos em Python? Ou quem sabe dar um “up” na carreira? Então se liga, porque o seu portfólio é a chave mestra pra abrir todas as portas! Esquece o currículo boring, aqui a gente mostra código de verdade!</p>
<h2>Por que um portfólio Python é tão importante?</h2>
<p>Imagina que você é um super-herói… seu portfólio é tipo a sua coleção de troféus, mostrando todas as suas habilidades e feitos extraordinários! Em vez de listar “sei fazer isso”, você mostra que sabe!</p>
<ul><li><strong>Prova social</strong>: Empresas amam ver projetos reais, não só palavras bonitas.Diferenciação: Se destaca da multidão de currículos genéricos.</li>
<li><strong>Aprendizado contínuo</strong>: A melhor forma de aprender é colocando a mão na massa.</li>
<li><strong>Networking</strong>: Compartilhe seus projetos e conheça outros devs incríveis.</li>
</ul><h2>Projetos para dar um “tchan” no seu portfólio Python</h2>
<p>Sem ideias? Relaxa! Preparei um cardápio de projetos que vão deixar os recrutadores babando:</p>
<ul><li><strong>Web Scraping Divertido</strong>:
<ul><li>Crie um script que coleta dados de um site que você curte (notícias, games, receitas…).</li>
<li><strong>Plus</strong>: Use bibliotecasc omo BeautifulSoup e Scrapy.</li>
<li><strong>Exemplo de projeto</strong>: que tal um script que coleta os preços dos seus jogos favoritos toda semana e te manda um alerta quando tem promoção.</li>
</ul></li>
<li><strong>API Rest de Respeito</strong>:
<ul><li>Desenvolva uma API usando FastAPI ou Flask para gerenciar alguma informação útil (tarefas, filmes, receitas…).</li>
<li><strong>Plus</strong>: Documente sua API com Swagger e use autenticação.</li>
<li><strong>Exemplo de projeto</strong>: Desenvolva uma API para organizar seus livros, com busca, cadastro e tudo mais.</li>
</ul></li>
<li><strong>Análise de Dados “Mito”</strong>:
<ul><li>Analise um dataset interessante (pode ser de finanças, esportes, clima…) com Pandas.</li>
<li><strong>Plus</strong>: Crie visualizações incríveis com Matplotlib ou Seaborn.</li>
<li><strong>Exemplo de projeto</strong>: Analise os dados de vendas da sua loja online e descubta os produtos mais populares.</li>
</ul></li>
<li><strong>Projeto de Machine Learning “Brabo”</strong>:
<ul><li>Crie um modelo simples para prever alguma coisa (preço de ações, resultados de jogos…).</li>
<li><strong>Plus</strong>: Use bibliotecas como Scikit-learn ou TensorFlow.</li>
<li><strong>Exemplo de projeto</strong>: Crie um modelo para prever se um email é spam ou não.</li>
</ul></li>
<li><strong>Automação “Ninja”</strong>:
<ul><li>Automatize tarefas repetitivas (enviar emails, organizar arquivos…).</li>
<li><strong>Plus</strong>: Use bibliotecas como Selenium ou PyAutoGUI.</li>
<li><strong>Exemplo de projeto</strong>: Crie um script para enviar emails de parabéns para seus amigos e familiares no dia de seus aniversários.</li>
</ul></li>
</ul><h2>Dicas de ouro para o seu portfólio Python:</h2>
<ul><li><strong>GitHub é seu melhor amigo</strong>: Use o GitHub para hospedar seus projetos e mostrar seu código.</li>
<li><strong>README que impressiona</strong>: Crie um README claro e objetivo, explicando o que o projeto faz, como usar e quais tecnologias foram usadas.</li>
<li><strong>Código limpo e organizado</strong>: Use boas práticas de programação, comente seu código e siga um estilo consistente.</li>
<li><strong>Mostre seus “power-ups”</strong>: Destaque suas habilidades extras (testes, deploy, etc.).</li>
<li><strong>Não tenha medo de errar</strong>: Mostrar seus erros e como você os resolveu também é importante!</li>
<li><strong>Peça feedback</strong>: Mostre seu portfólio para outros devs e peça sugestões.</li>
</ul><h2>Onde divulgar seu portfólio Python:</h2>
<ul><li><strong>LinkedIn</strong>: A rede social dos profissionais.</li>
<li><strong>Seu currículo</strong>: Inclua um link para o GitHub.</li>
<li><strong>Seu blog/site</strong>: Se você tiver um blog, compartilhe seus projetos lá.</li>
<li><strong>Comunidades online</strong>: Participe de fóruns e grupos de Python e mostre seus projetos.</li>
<li><strong>Eventos</strong>: Conheça outros devs e mostre seu trabalho pessoalmente.</li>
</ul><p>E aí, curtiu as dicas? Então não perca tempo e comece a construir seu portfólio Python hoje mesmo! Explore mais artigos do blog para turbinar suas habilidades e se inscreva na nossa newsletter para não perder nenhuma novidade</p><p>The post <a href="https://blog.ffelix.eti.br/como-construir-um-portfolio-impactante-em-python/">Como Construir um Portfólio Impactante em Python</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Thu, 15 May 2025 17:54:38 +0000Aberto até de Madrugada: Tesla vai suspender produção do Cybertruck e Model Y nos EUAhttps://abertoatedemadrugada.com/2025/05/tesla-vai-suspender-producao-do.html
https://abertoatedemadrugada.com/2025/05/tesla-vai-suspender-producao-do.html
<div><a href="https://abertoatedemadrugada.com/2025/05/tesla-vai-suspender-producao-do.html"><img alt="" border="0" width="600" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3vP1fWbiDhF-cHWhkXse0IJefbI2Scep9UhuJkYNWbrsBblK38EGsWHS6tAARoKMhQg-w18NRT3GUNJ8zWZmGTK7oODmLAHQon6RG7TBCFittFvxf6IolnfVRsm66x6gmsI1s5WskeuOigVvFY7Qh1kCv410FzqoYfIAbtQ3WzFntVLxuP2UuEVlcD3WV/s1600/modelY.jpg"></a></div>
Os problemas da Tesla parecem estar a complicar-se, obrigando a suspender a produção do Cybertruck e do novo Model Y.<br><br><a name="more"></a>
A Tesla está a suspender temporariamente a <a href="https://www.businessinsider.com/tesla-model-y-cybertruck-workers-stay-home-memorial-day-2025-5">produção dos Model Y e Cybertruck</a> na fábrica de Austin, no Texas, devido à quebra contínua da procura. Funcionários relataram que foram convidados a tirar uma semana de folga ou a realizar tarefas de limpeza e formação em vez das habituais funções na linha de montagem. Também a linha do Cybertruck irá parar na última semana de maio - fruto do excesso de <a href="https://abertoatedemadrugada.com/2025/05/tesla-acumula-10-mil-cybertrucks.html">carros encravados em stock</a>.<br><br>
Este cenário é preocupante, principalmente porque o Model Y tem sido o carro mais vendido da marca. Não é a primeira vez que a fábrica de Austin ajusta horários, mas a frequência crescente destas pausas mostra dificuldades da Tesla em equilibrar a produção com a procura em queda. Já o Cybertruck, que começou com grande entusiasmo, parece também estar a perder fôlego rapidamente.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX5hQQf_uHGx5XhiW1RzYHcfR0aRt6aTdaZHy_L6f2jKbDUI3zD4wRXjp4Ah1Ij3YSxCg1cbJ8AWYUIB4_6ZeYIr25t9xTBCUHGXciPsGBADG1hncPZM9fuqr-JyxsHbqcrqZABs3yjWL94NH7WXR-DfpKna8j4QfsHmKO2XnOG24GyHuyvhoCqE-92CwX/s1600/cybertruck.jpg"><img alt="" border="0" width="600" data-original-height="901" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX5hQQf_uHGx5XhiW1RzYHcfR0aRt6aTdaZHy_L6f2jKbDUI3zD4wRXjp4Ah1Ij3YSxCg1cbJ8AWYUIB4_6ZeYIr25t9xTBCUHGXciPsGBADG1hncPZM9fuqr-JyxsHbqcrqZABs3yjWL94NH7WXR-DfpKna8j4QfsHmKO2XnOG24GyHuyvhoCqE-92CwX/s600/cybertruck.jpg"></a></div>
O objetivo inicial de Elon Musk de fabricar 250 mil Cybertrucks por ano já foi revisto para 120 mil, mas mesmo essa meta parece difícil de alcançar. Em 2024, a Tesla vendeu cerca de 39 mil unidades, e no primeiro trimestre de 2025 as vendas caíram para apenas 6.406, menos de metade dos trimestres anteriores.<br><br>
Mesmo com o Model Y a receber uma atualização recente, a Tesla está a enfrentar uma quebra nas entregas globais, com uma descida de 13% no último ano – o pior registo em dois anos. Nos Estados Unidos, as vendas caíram 5,6%, enquanto o mercado automóvel no geral cresceu 7,3%, aumentando a pressão sobre a marca num cenário de concorrência cada vez mais forte.<br><br>Thu, 15 May 2025 17:30:00 +0000Alexsandro Felix: Dominando Loops em Python: Guia Completohttps://blog.ffelix.eti.br/dominando-loops-em-python-guia-completo/
https://blog.ffelix.eti.br/dominando-loops-em-python-guia-completo/
<p>E aí, futuro(a) mestre do Python! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f40d.png" alt="🐍"> Preparado(a) para dar um chega pra lá nas tarefas repetitivas e deixar o computador trabalhar por você? Se a resposta é “SIM, PELO AMOR DE TUDO QUE É MAIS SAGRADO!”, então você está no lugar certo! Hoje vamos mergulhar no universo dos loops em Python, os superpoderes que vão te permitir automatizar o tédio e focar no que realmente importa: criar coisas incríveis</p>
<p>Imagine ter que escrever print(“Olá!”) 100 vezes. Que chatice, né? É aí que os loops entram em cena, como verdadeiros heróis da produtividade! Em Python, temos dois tipos principais de loops que vão se tornar seus melhores amigos: o for e o while.</p>
<h2>O Loop for: Seu Parceiro para Iterar em Sequências</h2>
<p>O loop <code>for</code> é o cara quando você precisa percorrer itens em uma sequência, como uma lista, uma tupla, uma string ou até mesmo um intervalo de números gerado pela função range(). Pense nele como um detetive que examina cada pista (item) em uma cena do crime (sequência).</p>
<h3>Sintaxe básica:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="for variavel_temporaria in sequencia:
# Bloco de código a ser executado para cada item
# Faça alguma coisa com a variavel_temporaria" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>for</span><span> variavel_temporaria </span><span>in</span><span> sequencia</span><span>:</span></span>
<span><span> </span><span># Bloco de código a ser executado para cada item</span></span>
<span><span> </span><span># Faça alguma coisa com a variavel_temporaria</span></span></code></pre></div>
<p>Vamos ver na prática?</p>
<h2>Exemplo 1: Percorrendo uma lista de compras</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='lista_de_compras = ["Maçãs", "Bananas", "Leite", "Pão", "Café"]
print("Minha lista de compras:")
for item in lista_de_compras:
print(f"- {item}") # Usando f-string para formatar a saída!' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>lista_de_compras </span><span>=</span><span> </span><span>[</span><span>"</span><span>Maçãs</span><span>"</span><span>,</span><span> </span><span>"</span><span>Bananas</span><span>"</span><span>,</span><span> </span><span>"</span><span>Leite</span><span>"</span><span>,</span><span> </span><span>"</span><span>Pão</span><span>"</span><span>,</span><span> </span><span>"</span><span>Café</span><span>"</span><span>]</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>Minha lista de compras:</span><span>"</span><span>)</span></span>
<span><span>for</span><span> item </span><span>in</span><span> lista_de_compras</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"- </span><span>{</span><span>item</span><span>}</span><span>"</span><span>)</span><span> </span><span># Usando f-string para formatar a saída!</span></span></code></pre></div>
<h3>Saída esperada:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Minha lista de compras:
- Maçãs
- Bananas
- Leite
- Pão
- Café" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Minha lista de compras</span><span>:</span></span>
<span><span>-</span><span> Maçãs</span></span>
<span><span>-</span><span> Bananas</span></span>
<span><span>-</span><span> Leite</span></span>
<span><span>-</span><span> Pão</span></span>
<span><span>-</span><span> Café</span></span></code></pre></div>
<p>Viu só? O item assume o valor de cada elemento da lista_de_compras a cada “rodada” (iteração) do loop. Mágico, né?</p>
<h2>Exemplo 2: Usando range() para contar até 5</h2>
<p>A função range() é super útil para gerar sequências numéricas.</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='print("\nContando de 0 a 4:")
for numero in range(5): # range(5) gera números de 0 a 4
print(f"Número atual: {numero}")
print("\nContando de 1 a 5:")
for numero in range(1, 6): # range(inicio, fim_exclusive)
print(f"Número atual: {numero}")
print("\nContando de 2 em 2 até 10:")
for numero in range(2, 11, 2): # range(inicio, fim_exclusive, passo)
print(f"Número atual: {numero}")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Contando de 0 a 4:</span><span>"</span><span>)</span></span>
<span><span>for</span><span> numero </span><span>in</span><span> </span><span>range</span><span>(</span><span>5</span><span>):</span><span> </span><span># range(5) gera números de 0 a 4</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Número atual: </span><span>{</span><span>numero</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Contando de 1 a 5:</span><span>"</span><span>)</span></span>
<span><span>for</span><span> numero </span><span>in</span><span> </span><span>range</span><span>(</span><span>1</span><span>,</span><span> </span><span>6</span><span>):</span><span> </span><span># range(inicio, fim_exclusive)</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Número atual: </span><span>{</span><span>numero</span><span>}</span><span>"</span><span>)</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Contando de 2 em 2 até 10:</span><span>"</span><span>)</span></span>
<span><span>for</span><span> numero </span><span>in</span><span> </span><span>range</span><span>(</span><span>2</span><span>,</span><span> </span><span>11</span><span>,</span><span> </span><span>2</span><span>):</span><span> </span><span># range(inicio, fim_exclusive, passo)</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Número atual: </span><span>{</span><span>numero</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<h3>Saída esperada:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Contando de 0 a 4:
Número atual: 0
Número atual: 1
Número atual: 2
Número atual: 3
Número atual: 4
Contando de 1 a 5:
Número atual: 1
Número atual: 2
Número atual: 3
Número atual: 4
Número atual: 5
Contando de 2 em 2 até 10:
Número atual: 2
Número atual: 4
Número atual: 6
Número atual: 8
Número atual: 10" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Contando de </span><span>0</span><span> a </span><span>4</span><span>:</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>0</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>1</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>2</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>3</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>4</span></span>
<span></span>
<span><span>Contando de </span><span>1</span><span> a </span><span>5</span><span>:</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>1</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>2</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>3</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>4</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>5</span></span>
<span></span>
<span><span>Contando de </span><span>2</span><span> em </span><span>2</span><span> até </span><span>10</span><span>:</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>2</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>4</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>6</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>8</span></span>
<span><span>Número atual</span><span>:</span><span> </span><span>10</span></span></code></pre></div>
<h2>Exemplo 3: Iterando sobre os caracteres de uma string</h2>
<p>Sim, strings são sequências de caracteres!</p>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="palavra = "Python"
print(f"\nSoletrando a palavra '{palavra}':")
for letra in palavra:
print(letra.upper()) # .upper() deixa a letra maiúscula" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>palavra </span><span>=</span><span> </span><span>"</span><span>Python</span><span>"</span></span>
<span><span>print</span><span>(</span><span>f</span><span>"</span><span>\n</span><span>Soletrando a palavra '</span><span>{</span><span>palavra</span><span>}</span><span>':"</span><span>)</span></span>
<span><span>for</span><span> letra </span><span>in</span><span> palavra</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>letra</span><span>.</span><span>upper</span><span>())</span><span> </span><span># .upper() deixa a letra maiúscula</span></span></code></pre></div>
<h3>Saída esperada:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Soletrando a palavra 'Python':
P
Y
T
H
O
N" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Soletrando a palavra </span><span>'</span><span>Python</span><span>'</span><span>:</span></span>
<span><span>P</span></span>
<span><span>Y</span></span>
<span><span>T</span></span>
<span><span>H</span></span>
<span><span>O</span></span>
<span><span>N</span></span></code></pre></div>
<h2>O Loop while: Repetindo Enquanto a Condição for Verdadeira</h2>
<p>Enquanto o for é ótimo para sequências com um número definido de itens, o loop while (que significa “enquanto” em inglês) é perfeito para quando você quer repetir um bloco de código enquanto uma determinada condição for verdadeira. É como dizer: “Enquanto não chover, vou continuar na praia!”.</p>
<h3>Sintaxe básica:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="while condicao:
# Bloco de código a ser executado
# IMPORTANTE: Algo aqui dentro deve, eventualmente,
# tornar a 'condicao' falsa para o loop não ser infinito!" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>while</span><span> condicao</span><span>:</span></span>
<span><span> </span><span># Bloco de código a ser executado</span></span>
<span><span> </span><span># IMPORTANTE: Algo aqui dentro deve, eventualmente,</span></span>
<span><span> </span><span># tornar a 'condicao' falsa para o loop não ser infinito!</span></span></code></pre></div>
<p>Alerta de Perigo! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f6a8.png" alt="🚨"> Cuidado com os loops infinitos! Se a condição do while nunca se tornar falsa, seu programa vai ficar preso rodando para sempre (ou até você interrompê-lo à força). É como um hamster na rodinha, só que menos fofo e mais problemático.</p>
<h2>Exemplo 1: Contagem regressiva para o Ano Novo!</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='contador = 5
print("\nContagem regressiva para o Ano Novo (imaginário!):")
while contador > 0:
print(f"{contador}...")
contador = contador - 1 # Decrementamos o contador a cada iteração
print("FELIZ ANO NOVO!!! 🎉")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>contador </span><span>=</span><span> </span><span>5</span></span>
<span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Contagem regressiva para o Ano Novo (imaginário!):</span><span>"</span><span>)</span></span>
<span><span>while</span><span> contador </span><span>></span><span> </span><span>0</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"</span><span>{</span><span>contador</span><span>}</span><span>..."</span><span>)</span></span>
<span><span> contador </span><span>=</span><span> contador </span><span>-</span><span> </span><span>1</span><span> </span><span># Decrementamos o contador a cada iteração</span></span>
<span><span>print</span><span>(</span><span>"</span><span>FELIZ ANO NOVO!!! 🎉</span><span>"</span><span>)</span></span></code></pre></div>
<h3>Saída esperada:</h3>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Contagem regressiva para o Ano Novo (imaginário!):
5...
4...
3...
2...
1...
FELIZ ANO NOVO!!! 🎉" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>Contagem regressiva para o Ano </span><span>Novo</span><span> </span><span>(</span><span>imaginário!</span><span>):</span></span>
<span><span>5</span><span>...</span></span>
<span><span>4</span><span>...</span></span>
<span><span>3</span><span>...</span></span>
<span><span>2</span><span>...</span></span>
<span><span>1</span><span>...</span></span>
<span><span>FELIZ ANO NOVO!!! 🎉</span></span></code></pre></div>
<p>Percebeu como o contador = contador – 1 é crucial? Sem ele, contador seria sempre 5, e a condição contador > 0 seria sempre verdadeira. Adeus, sanidade!</p>
<h2>Exemplo 2: Pedindo uma senha até o usuário acertar (simplificado)</h2>
<div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='senha_secreta = "abracadabra"
tentativa = "" # Inicializamos a variável tentativa
print("\n--- Mini Jogo da Senha ---")
while tentativa != senha_secreta:
tentativa = input("Digite a senha secreta: ")
if tentativa != senha_secreta:
print("Ops! Senha incorreta. Tente novamente.")
print("Parabéns! Você descobriu a senha!")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>senha_secreta </span><span>=</span><span> </span><span>"</span><span>abracadabra</span><span>"</span></span>
<span><span>tentativa </span><span>=</span><span> </span><span>""</span><span> </span><span># Inicializamos a variável tentativa</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>\n</span><span>--- Mini Jogo da Senha ---</span><span>"</span><span>)</span></span>
<span><span>while</span><span> tentativa </span><span>!=</span><span> senha_secreta</span><span>:</span></span>
<span><span> tentativa </span><span>=</span><span> </span><span>input</span><span>(</span><span>"</span><span>Digite a senha secreta: </span><span>"</span><span>)</span></span>
<span><span> </span><span>if</span><span> tentativa </span><span>!=</span><span> senha_secreta</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Ops! Senha incorreta. Tente novamente.</span><span>"</span><span>)</span></span>
<span></span>
<span><span>print</span><span>(</span><span>"</span><span>Parabéns! Você descobriu a senha!</span><span>"</span><span>)</span></span></code></pre></div>
<p>Neste caso, o loop continua até que o usuário digite “abracadabra”.</p>
<h2>Controlando o Fluxo do Loop:</h2>
<p>Às vezes, você precisa de um pouco mais de controle sobre seus loops. Python oferece algumas palavras-chave para isso:</p>
<ul><li><strong>break</strong>: Interrompe o loop imediatamente, mesmo que a condição do while ainda seja verdadeira ou que ainda hajam itens no for. É o “CHEGA! Cansei!” do seu código.</li>
</ul><div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='print("\nProcurando o número 3 (e parando quando achar):")
numeros = [1, 2, 3, 4, 5]
for n in numeros:
print(f"Verificando: {n}")
if n == 3:
print("Achei o 3! Saindo do loop...")
break # Sai do loop for
print("Fim da busca.")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Procurando o número 3 (e parando quando achar):</span><span>"</span><span>)</span></span>
<span><span>numeros </span><span>=</span><span> </span><span>[</span><span>1</span><span>,</span><span> </span><span>2</span><span>,</span><span> </span><span>3</span><span>,</span><span> </span><span>4</span><span>,</span><span> </span><span>5</span><span>]</span></span>
<span><span>for</span><span> n </span><span>in</span><span> numeros</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Verificando: </span><span>{</span><span>n</span><span>}</span><span>"</span><span>)</span></span>
<span><span> </span><span>if</span><span> n </span><span>==</span><span> </span><span>3</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>"</span><span>Achei o 3! Saindo do loop...</span><span>"</span><span>)</span></span>
<span><span> </span><span>break</span><span> </span><span># Sai do loop for</span></span>
<span><span>print</span><span>(</span><span>"</span><span>Fim da busca.</span><span>"</span><span>)</span></span></code></pre></div>
<ul><li><strong>continue</strong>: Pula para a próxima iteração do loop, ignorando o restante do código dentro do bloco naquela iteração específica. É o “Essa parte não me interessa, próximo!”.</li>
</ul><div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code='print("\nImprimindo apenas números ímpares (pulando os pares):")
for i in range(1, 11): # Números de 1 a 10
if i % 2 == 0: # Se o número for par (resto da divisão por 2 é 0)
continue # Pula para a próxima iteração
print(f"Ímpar encontrado: {i}")' aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Imprimindo apenas números ímpares (pulando os pares):</span><span>"</span><span>)</span></span>
<span><span>for</span><span> i </span><span>in</span><span> </span><span>range</span><span>(</span><span>1</span><span>,</span><span> </span><span>11</span><span>):</span><span> </span><span># Números de 1 a 10</span></span>
<span><span> </span><span>if</span><span> i </span><span>%</span><span> </span><span>2</span><span> </span><span>==</span><span> </span><span>0</span><span>:</span><span> </span><span># Se o número for par (resto da divisão por 2 é 0)</span></span>
<span><span> </span><span>continue</span><span> </span><span># Pula para a próxima iteração</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"Ímpar encontrado: </span><span>{</span><span>i</span><span>}</span><span>"</span><span>)</span></span></code></pre></div>
<ul><li><strong>else em loops</strong>: Uma característica menos conhecida, mas útil! O bloco else em um loop for ou while é executado <strong>apenas se o loop terminar normalmente</strong>, ou seja, sem ser interrompido por um break.</li>
</ul><div data-code-block-pro-font-family="Code-Pro-JetBrains-Mono"><span><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewbox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="print("\nBuscando um item que NÃO está na lista:")
lista_frutas = ["banana", "maçã", "laranja"]
fruta_procurada = "uva"
for fruta in lista_frutas:
if fruta == fruta_procurada:
print(f"'{fruta_procurada}' encontrada!")
break
else: # Este else pertence ao 'for'
print(f"'{fruta_procurada}' não foi encontrada na lista.")" aria-label="Copy"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre tabindex="0"><code><span><span>print</span><span>(</span><span>"</span><span>\n</span><span>Buscando um item que NÃO está na lista:</span><span>"</span><span>)</span></span>
<span><span>lista_frutas </span><span>=</span><span> </span><span>[</span><span>"</span><span>banana</span><span>"</span><span>,</span><span> </span><span>"</span><span>maçã</span><span>"</span><span>,</span><span> </span><span>"</span><span>laranja</span><span>"</span><span>]</span></span>
<span><span>fruta_procurada </span><span>=</span><span> </span><span>"</span><span>uva</span><span>"</span></span>
<span><span>for</span><span> fruta </span><span>in</span><span> lista_frutas</span><span>:</span></span>
<span><span> </span><span>if</span><span> fruta </span><span>==</span><span> fruta_procurada</span><span>:</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"'</span><span>{</span><span>fruta_procurada</span><span>}</span><span>' encontrada!"</span><span>)</span></span>
<span><span> </span><span>break</span></span>
<span><span>else</span><span>:</span><span> </span><span># Este else pertence ao 'for'</span></span>
<span><span> </span><span>print</span><span>(</span><span>f</span><span>"'</span><span>{</span><span>fruta_procurada</span><span>}</span><span>' não foi encontrada na lista."</span><span>)</span></span></code></pre></div>
<p>Se “uva” estivesse na lista, o break seria executado e o else não.</p>
<h2>Dominando os Fundamentos para Voos Mais Altos!</h2>
<p>Ufa! Vimos bastante coisa, né? Loops são uma parte fundamental da programação. Eles são a base para criar algoritmos mais complexos, processar grandes volumes de dados e, basicamente, fazer qualquer coisa útil de verdade com Python.</p>
<p>Dominar esses laços é crucial, e se você quer acelerar sua jornada do zero ao “herói do Python”, solidificando não apenas os loops, mas todos os conceitos essenciais de forma clara e direta, eu tenho uma dica de ouro: o e-book “<a href="https://go.hotmart.com/F13340196Y" target="_blank" rel="noopener" title="">Python de A-Z, guia de primeiros passos com a linguagem</a>“. Pense nele como seu mapa do tesouro pessoal para desbravar o mundo Python sem se perder. É um investimento certeiro para construir uma base sólida e confiante! Dê uma espiada <a href="https://go.hotmart.com/F13340196Y" target="_blank" rel="noopener" title="">aqui</a>.</p>
<h2>Que Tal um Livro Físico para Acompanhar?</h2>
<p>Para quem, como eu, adora ter um livro físico para rabiscar, consultar e ter sempre à mão, uma excelente recomendação é o “<a href="https://amzn.to/43vtwod" target="_blank" rel="noopener" title="">Introdução à Programação com Python</a>” da Nilo Ney Coutinho Menezes. É um clássico que aborda os fundamentos de forma muito didática e completa, perfeito para complementar seus estudos online. Você pode encontrá-lo <a href="https://amzn.to/43vtwod" target="_blank" rel="noopener" title="">aqui</a>.</p>
<figure><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="424" data-attachment-id="1031" data-permalink="https://blog.ffelix.eti.br/livro_paperback_600/" data-orig-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?fit=600%2C424&ssl=1" data-orig-size="600,424" data-comments-opened="1" data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="livro_paperback_600" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?fit=300%2C212&ssl=1" data-large-file="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?fit=600%2C424&ssl=1" src="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?resize=600%2C424&ssl=1" alt="" srcset="https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?w=600&ssl=1 600w, https://i0.wp.com/blog.ffelix.eti.br/wp-content/uploads/2025/05/livro_paperback_600.webp?resize=300%2C212&ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px"></figure><h2>Continue a Jornada!</h2>
<p>E aí, curtiu essa aventura pelos loops em Python? Espero que sim! Lembre-se: a prática leva à perfeição. Então, abra seu editor de código, experimente os exemplos, modifique-os, crie seus próprios desafios. Quanto mais você “brincar” com os loops, mais natural eles se tornarão.</p>
<p><strong>Gostou do artigo</strong>? Deixe seu comentário abaixo! Qual foi sua maior dificuldade com loops até agora? O que mais você gostaria de aprender sobre Python? Explore outros artigos aqui no blog para continuar sua jornada de aprendizado e, claro, <strong>não se esqueça de assinar nossa newsletter</strong> para receber dicas fresquinhas, tutoriais e novidades do mundo Python diretamente no seu e-mail!Até a próxima, e bons códigos! <img src="https://s.w.org/images/core/emoji/15.1.0/72x72/1f609.png" alt="😉"></p><p>The post <a href="https://blog.ffelix.eti.br/dominando-loops-em-python-guia-completo/">Dominando Loops em Python: Guia Completo</a> first appeared on <a href="https://blog.ffelix.eti.br/">Alexsandro Felix</a>.</p>Thu, 15 May 2025 15:36:36 +0000Aberto até de Madrugada: Coluna BT Tronsmart T7 Lite a €33.99https://abertoatedemadrugada.com/2025/05/coluna-bt-tronsmart-t7-lite-3399.html
https://abertoatedemadrugada.com/2025/05/coluna-bt-tronsmart-t7-lite-3399.html
<div><a href="https://abertoatedemadrugada.com/2025/05/coluna-bt-tronsmart-t7-lite-3399.html"><img alt="" border="0" width="600" data-original-height="910" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmrRXeFMmihyphenhyphenyYU2P_SSrj7jYM-IZqFXzJlqTuIOhtjxrMft4gaoD8agj-aLLVXkGmfgc6Hc8TpEtlHsrmoRtSCOxuWS0ds_gU5nNN2v_XFX2hErUG_5knCMqCYtLIKxoil0CzR_ynQ3nUsETvCJ8l0UWVD5jo9YvSp36slfrcBYQb8CVkAIaN4gkcfJQC/s1600/tronsmart.jpg"></a></div>
Quem já tiver passado pelas colunas Bluetooth de baixo custo e agora procurar algo com um pouco mais de potência, irá ficar satisfeito com esta Tronsmart T7 Lite.<br><br><a name="more"></a>O desaparecimento da ficha dos headphones tem fomentado a utilização de colunas BT em cada vez mais situações (muitas vezes torna-se a única opção possível, a não ser que se recorra a <a href="https://abertoatedemadrugada.com/2020/01/receptor-bluetooth-para-headphones-ou.html">adaptadores BT para ficha de 3.5mm</a>). Em muitos casos acaba também por se revelar uma solução mais conveniente, permitindo que se chegue a casa e se comece a ouvir a música na coluna em vez de se sofrer com a tentativa do smartphone reproduzir os sons graves com os seus altifalantes diminutos. E no caso desta <a href="https://amzn.to/482y4Sh">Tronsmart T7 Lite</a>, temos volume com fartura mas mantendo um tamanho relativamente compacto.<br><div><a href="https://amzn.to/49xTZRR"><img alt="" border="0" data-original-height="1000" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh33TUrkDsBKOGxvJxaLTIEjq8er5-c9YYB4V78SUpfjhGcMPYQr01ujWjxmsbkgFojlpefI8zkWGSAMckpkQy3uaoF79ddqDF8SkGZfzIXreJxX2-kX19oDW4W-Zv4sBkTO8zR3lNr5WWt6zDDzYLo4CYQWuHjTaZHgqG5jVfMD3bGpeUVHN0UweAjQKL6/s1600/T7Lite.jpg" width="600"></a></div>
Esta coluna BT <a href="https://amzn.to/49xTZRR">Tronsmart T7 Lite</a> está disponível por 33.99 euros na Amazon Espanha - activar desconto de 15%.<br><br>
Vem com uma bateria generosa para garantir que as sessões de música podem prolongar-se por 24 horas com o volume a 50%, demorando cerca de 3 a 4 horas a recarregá-la. Conta também com porta USB-C, microfone para funcionar como sistema mãos livres ao efectuar chamadas telefónicas, cartão de memória para reprodução de músicas, e para quem quiser duplicar a potência sonora, pode emparelhar-se com uma coluna adicional para funcionar em modo stereo real.<br><br>
Acompanha as melhores promoções diárias no nosso canal <a href="https://www.facebook.com/groups/AadM.Promos/?sorting_setting=CHRONOLOGICAL">AadM Promos</a>.<br><br>Thu, 15 May 2025 15:30:00 +0000Aberto até de Madrugada: Xiaomi SU7 enfrenta queixas por capot opcional desportivohttps://abertoatedemadrugada.com/2025/05/xiaomi-su7-enfrenta-queixas-por-capot.html
https://abertoatedemadrugada.com/2025/05/xiaomi-su7-enfrenta-queixas-por-capot.html
<div><a href="https://abertoatedemadrugada.com/2025/05/xiaomi-su7-enfrenta-queixas-por-capot.html"><img alt="" border="0" data-original-height="897" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6uujxxRTRZeW6uPGNNBzrPyE8ss8HRJcZxK9Pu-qBpAjbGfwGASU5kDw_I9TLVZWqsoWbXyiZJu7_voCMpljBTg_dwKYz-rHohb_Ij62E62UDT2f0669i2rDayaBZRdZo95fpn2E5DQ6YjvBlGyLPLG2xKqFNn0455Ck3MWY1sO95GIWxYUUSTE3lyjNb/s1600/su7ducts.jpg" width="600"></a></div>
O capot desportivo opcional em fibra de carbono do Xiaomi SU7 está a revelar-se um grande dor de cabeça para a marca.<br><br><a name="more"></a>
Apesar das vendas impressionantes, o Xiaomi SU7 está a gerar polémica devido a problemas de qualidade. O modelo ficou em último lugar no ranking chinês de qualidade de grandes veículos elétricos a bateria, acumulando <a href="https://carnewschina.com/2025/05/13/xiaomi-su7-finished-dead-last-in-the-2025-q1-quality-rating-among-large-bev-sedans/">muitas mais queixas</a> do que a concorrência. Para agravar a situação, mais de 400 proprietários terão avançado com um processo coletivo contra a Xiaomi, acusando-a de publicidade enganosa.<br><br>
O conflito gira em torno do <a href="https://carnewschina.com/2025/05/13/xiaomi-dual-air-duct-controversy-escalates-over-400-su7-ultra-owners-join-legal-action/">capot opcional em fibra de carbono</a> do SU7, anunciado como tendo "dois túneis de ar" funcionais para melhorar a refrigeração e aerodinâmica. Contudo, testes feitos pelos donos mostram que não há qualquer fluxo de ar ou benefícios térmicos, levando a acusações de fraude publicitária. A Xiaomi já pediu desculpa e ofereceu pontos de fidelização e a troca pelo capot em alumínio, mas muitos clientes recusaram, apontando longos prazos de espera (quase um ano!) e compensações insuficientes.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbcjX1tB16utHzaXaspVjVjjpjVC-rL92RcpeNUe2D7nfnHuu8M5tBagO6N8InDIMAgIndRIWxjwN72_x0tAhpU7X21WZVTfTHoJAK9v4uboLfrXnElVT1f02ZZ8loeZOKz_huqfFpXxS2mVw2__1YaVYScnqBWtbiSD-0df5QWRVxpsRYij4y8DgrstKc/s1200/su7.jpg"><img alt="" border="0" data-original-height="674" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbcjX1tB16utHzaXaspVjVjjpjVC-rL92RcpeNUe2D7nfnHuu8M5tBagO6N8InDIMAgIndRIWxjwN72_x0tAhpU7X21WZVTfTHoJAK9v4uboLfrXnElVT1f02ZZ8loeZOKz_huqfFpXxS2mVw2__1YaVYScnqBWtbiSD-0df5QWRVxpsRYij4y8DgrstKc/s600/su7.jpg" width="600"></a></div>
Este caso está a tornar-se um grande problema para a divisão automóvel da Xiaomi, com o CEO Lei Jun a admitir que atravessam o período mais difícil desde o lançamento da marca. Especialistas alertam que, se testes independentes confirmarem que os dutos são meramente estéticos, a Xiaomi poderá enfrentar sanções ao abrigo das leis de publicidade da China.<br><br>
Além da disputa legal, a polémica pode prejudicar o lançamento do SUV Xiaomi YU7 e abalar a imagem da marca. Alguns analistas acreditam que esta situação poderá obrigar os fabricantes a rever a forma como promovem componentes de performance no futuro.<br><br>Thu, 15 May 2025 13:30:00 +0000A Minha Alegre Casinha: Raspberry Pi melhora soldadura e reduz devoluçõeshttp://aminhaalegrecasinha.com/2025/05/raspberry-pi-melhora-soldadura-e-reduz.html
http://aminhaalegrecasinha.com/2025/05/raspberry-pi-melhora-soldadura-e-reduz.html
<div><a href="http://aminhaalegrecasinha.com/2025/05/raspberry-pi-melhora-soldadura-e-reduz.html"><img alt="" border="0" data-original-height="901" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglPXZlDpqbfKwNCt5XqE1zN8_mrmUQcrdqrLVdUBaCH0YesyZkdN1yAiptLZzO7cOIZxKZ0Qj_9gZnwdgfyaTYanjYwO6HGu70AvX8swxW8BNtm6W-LJ5p0_4n-XVkA-0Pv39DLzUrtgmynuuE-FwSrJrILSC_qspQ7Cw2MfzKvpGaVNVHnjFavYsI3T6B/s1600/rpi5.jpg" width="600"></a></div>
Os populares Raspberry 5 passam a ser ainda mais fiáveis e robustos devido a um novo processo de soldadura dos componentes.<br><br><a name="more"></a>
A Raspberry Pi anunciou ter feito <a href="https://www.raspberrypi.com/news/sustainable-solutions-with-raspberry-pi-how-intrusive-reflow-soldering-boosted-our-efficiency-and-cut-our-carbon-footprint/">alterações no método de soldadura</a>, que reduziu para metade o número de devoluções. Em vez de usar processos separados para os pequenos elementos SMD e para componentes maiores, como portas USB, a marca adoptou uma técnica chamada "intrusive reflow soldering" que permite soldar tudo de uma só vez. O resultado? Menos problemas e uma produção mais rápida.<br><br>
Antes, as placas exigiam duas fases de soldadura: uma para os componentes de montagem na superfície (SMD) e outra para as peças maiores com pinos que atravessam a placa, como o conector GPIO de 40 pinos. Estas peças maiores, por estarem mais expostas ao desgaste físico, exigem ligações mais robustas. Agora, ao aplicar pasta de soldar em ambos os tipos de ligação, tudo é processado numa única passagem por um forno de reflow.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEPSGkHIqqheqyXn5uVENmbtNePP2s_jewFI2IE8pHMVTVYM54e0lzAiO16l91v8e8UuR9y3UooDCKr8E_LEdPPwbie0oCLq5yuOq0VneoMko1nE2ZUJBD-9_NRH_dXys9YEu3z0CkbNSaS2qeljYCbvWB9i2wT3z66Urre_g2kKssZ7istmxJH50NfhYE/s800/rpi5back.jpg"><img alt="" border="0" data-original-height="534" data-original-width="800" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEPSGkHIqqheqyXn5uVENmbtNePP2s_jewFI2IE8pHMVTVYM54e0lzAiO16l91v8e8UuR9y3UooDCKr8E_LEdPPwbie0oCLq5yuOq0VneoMko1nE2ZUJBD-9_NRH_dXys9YEu3z0CkbNSaS2qeljYCbvWB9i2wT3z66Urre_g2kKssZ7istmxJH50NfhYE/s600/rpi5back.jpg" width="600"></a></div>
<br><div></div>
<br>
Este novo método, afinado em parceria com a Sony no Reino Unido (que trata do processo de montagem dos Raspberry Pi), permitiu reduzir as devoluções em 50% e acelerar a produção em 15%. A empresa também conseguiu tornar o processo mais ecológico, eliminando um banho de soldadura que se traduz num corte de 43 toneladas de emissões de CO2 por ano.<br><br>Thu, 15 May 2025 12:33:00 +0000Aberto até de Madrugada: Apple prepara gestão AI da bateria dos iPhoneshttps://abertoatedemadrugada.com/2025/05/apple-prepara-gestao-ai-da-bateria-dos.html
https://abertoatedemadrugada.com/2025/05/apple-prepara-gestao-ai-da-bateria-dos.html
<div><a href="https://abertoatedemadrugada.com/2025/05/apple-prepara-gestao-ai-da-bateria-dos.html"><img alt="" border="0" width="600" data-original-height="900" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK_Q9oU7Dm3u8xYH7ftTfrwssT34-lfrFlAEIhHo9xQwhWRGAjwYMTsT30hDOBYaBZAcvn6HpGNDvkQE6L70JvuQ88Jf7-4Lc-FzprIwUOak8TtVU-weq_SzpurgtLwew9Lj2C1NXy3oHrjfLonFoOKr-hwmc5E9QWGe6S1L_vY1IkwUVtuU5kV0NYkRJH/s1600/iphoneaibat.jpg"></a></div>
Com o iOS 19, os iPhones poderão aumentar a autonomia graças a uma nova gestão da bateria com tecnologia AI.<br><br><a name="more"></a>
A Apple está a preparar uma nova funcionalidade de <a href="https://www.bloomberg.com/news/articles/2025-05-12/apple-plans-ai-powered-battery-management-mode-for-devices-in-ios-19">poupança de bateria alimentada por inteligência artificial</a>, que deverá chegar com o iOS 19. O sistema vai aprender os hábitos diários de cada utilizador e ajustar a atividade em segundo plano para prolongar a autonomia ao longo do dia. Ao contrário de soluções anteriores, a Apple está a usar uma grande base de dados para treinar a AI, garantindo uma abordagem mais abrangente antes de se adaptar a cada utilizador.<br><br>
Embora já existam funções semelhantes em smartphones Android, nenhuma recorreu a AI nem a dados em larga escala, o que poderá tornar a proposta da Apple mais eficaz. Esta tecnologia poderá ser essencial para garantir uma boa autonomia no alegado iPhone 17 Air, que, devido ao seu design ultrafino, deverá contar com uma bateria mais pequena.<br><br>
A Apple está claramente a apostar em software inteligente para contornar limitações de hardware, com a AI a reduzir dinamicamente o consumo de energia com base na hora do dia e nos padrões de utilização das apps. Espera-se que a empresa mostre uma antevisão desta funcionalidade já em junho, durante o WWDC. Dito isto, será também difícil que este sistema faça "milagres" faça aos sistemas de poupança já existentes - mas no que diz respeito à autonomia, todos os minutos extra são sempre bem vindos.<br><br>Thu, 15 May 2025 11:00:00 +0000Aberto até de Madrugada: Hub USB 3.0 Vkusra 7-portas com interruptores individuais a €24https://abertoatedemadrugada.com/2025/05/hub-usb-30-vkusra-7-portas-com.html
https://abertoatedemadrugada.com/2025/05/hub-usb-30-vkusra-7-portas-com.html
<div><a href="https://abertoatedemadrugada.com/2025/05/hub-usb-30-vkusra-7-portas-com.html"><img alt="" border="0" data-original-height="928" data-original-width="1472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDUEY4sLq8xAu7dKJDcPNF2u4PXxcld6zKcegZ0BGxPIIwz-xs1Z4RUsJj3cIwaCpqTy2UmLrpOBlg6F-KPaniHnTDDXYJGYtSRo8nOtDHZ3qU7gIxwyENggfUj9m51T6uPiT8iQndqtY/s1600/hubusb.jpg" width="600"></a></div>
Precisam de um hub USB 3.0 com quantidade generosa de portas, mas que também permita desligá-las individualmente sem tirar / meter fichas? Então espreitem este hub.<br><br><a name="more"></a>
Os hubs USB tornaram-se uma necessidade da vida moderna, especialmente para acompanharem os portáteis que vêm equipados com poucas portas USB, que rapidamente se esgotam assim que ligamos um teclado e rato externo. Adicionalmente, há casos particulares, de pessoas que precisam de um número superior de portas USB. Este <a href="https://amzn.to/3tfLk7w">hub da Vkusra tem 7 portas</a> que permitem maior liberdade na quantidade de dispositivos USB que podemos utilizar, mas o que o torna mais especial é o facto de todas as portas contarem com o seu próprio botão para que possam ser ligadas ou desligadas individualmente.<br><div><a href="https://amzn.to/3tfLk7w"><img alt="" border="0" data-original-height="642" data-original-width="1000" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiln8MMtqnFbGPG7sVLUAlS58CGhyd_YvLljJxkeIgkFB-gBEbi5FHCh4OQz5UZrWW0u5x_yNVEzJyapscyYrRZ5p3rnn9pDvK68S84NoEdCDngFnbpdetqosFKTgegxhLxU9ZmJV7tO2c/s560/hubusb_.jpg"></a></div>
O <a href="https://amzn.to/3tfLk7w">hub USB 3.0 Vkusra 7-portas com interruptores</a> está disponível por apenas 24 euros na Amazon Espanha, e inclui fonte de alimentação - activar desconto de 20%.<br><br>
Pode ser o companheiro ideal para quem tiver que fazer a replicação de pens USB em média escala (se precisar de mais, pode sempre investir num <a href="https://amzn.to/3ThfHVU">hub de 16 portas</a>, também com interruptores), ou simplesmente que tenha uma série de equipamentos USB que deseje manter acessíveis (por exemplo: gravador CDs externo, scanner, câmaras digitais, webcam, discos externos, etc.) mas com a possibilidade de os poder desligar sem retirar a ficha - algo que até pode funcionar como medida de protecção, prevenindo que uma infecção de ransomware se possa espalhar a um disco externo de backup, que apenas se ligue para os backups e depois se mantenha desligado.<br><br><br>
Acompanha as melhores promoções diárias no nosso grupo <a href="https://www.facebook.com/groups/AadM.Promos?sorting_setting=CHRONOLOGICAL">AadM Promos</a>.<br><br>Thu, 15 May 2025 09:00:00 +0000Aberto até de Madrugada: Google revela Material 3 Expressivehttps://abertoatedemadrugada.com/2025/05/google-revela-material-3-expressive.html
https://abertoatedemadrugada.com/2025/05/google-revela-material-3-expressive.html
<div><a href="https://abertoatedemadrugada.com/2025/05/google-revela-material-3-expressive.html"><img alt="" border="0" data-original-height="902" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9Gp7ZfZALaaDaiTdhPfBaNv6z3D6R79cylKjxN4AvzvznSy6mE68kcPmPIg4BrjpVLp5oOFvrCCGmSkdwYbZ9vJNuyKFqzewBThLqXaF3QG7pYyeraYDHrNES-ycdvTRErtLzDH_oelI9e0uMddyrf7s3JNOgk5NrIxB0i6TP4SQuukubwvPJvqvwHHMi/s1600/material3.jpg" width="600"></a></div>
Depois dos leaks, chega o momento em que a Google oficializa o Material Design 3 Expressive, a mais recente versão do seu "look" para o Android (e não só).<br><br><a name="more"></a>
A Google revelou o <a href="https://blog.google/products/android/material-3-expressive-android-wearos-launch/">Material 3 Expressive</a>, a nova linguagem de design que vai estrear no Android 16 e no Wear OS 6. Esta atualização reforça o Material You com mais opções de personalização, cores mais ousadas e animações mais fluidas, dando um ar mais moderno e expressivo ao ecossistema Android.<br><br>
No Android 16, haverá animações mais dinâmicas, feedback háptico melhorado e um novo painel de definições rápidas, agora redimensionável, reorganizável e com fundo desfocado. As paletas de cores dinâmicas também recebem um upgrade, e as apps da Google serão as primeiras a adotar o novo visual. O sistema vai ainda introduzir as Live Updates - notificações dinâmicas para atividades como navegação ou entregas, visíveis até no Always-on Display.<br><br><div></div>
<br>
O Wear OS 6 vai seguir o mesmo caminho, com uma interface otimizada para ecrãs redondos, melhor aproveitamento de espaço e cores personalizadas em todo o sistema. A Google promete também animações mais suaves, autonomia 10% superior e a chegada do assistente Gemini AI aos relógios.<br><br>
Os utilizadores beta do Android 16 poderão experimentar o Material 3 Expressive numa atualização futura, enquanto o novo visual para o Wear OS 6 só chega mais tarde este ano. Mais detalhes sobre o Android 16 serão revelados na conferência Google I/O na próxima semana.<br><br>Thu, 15 May 2025 07:00:00 +0000Aberto até de Madrugada: Google vai pagar $1.37B para encerrar caso de privacidade de dados no Texashttps://abertoatedemadrugada.com/2025/05/google-vai-pagar-137b-para-encerrar.html
https://abertoatedemadrugada.com/2025/05/google-vai-pagar-137b-para-encerrar.html
<div><a href="https://abertoatedemadrugada.com/2025/05/google-vai-pagar-137b-para-encerrar.html"><img alt="" border="0" data-original-height="897" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbolN2jSMFT6zQuU5EXrG3uxpq2cD_6VZcA-u5tY7ce0_bZHIdTEEetM1MhG8Rn3Gvh-i4_Dgbvj8sczBvlz8CdAMpyj0-j00gz6RPFlLWd5_PtXHej2D04N-2mJieRb0dzuLOVtW2wccriQpl1W2TkpGwLkWkI_r-3eFe_5Hz0eR7b6lUtU_VpEevo-oY/s1600/gooogle.jpg" width="600"></a></div>
Apesar das gigantes tecnológicas frequentemente culparem a UE por ser demasiado restritiva nas políticas de dados, a Google não se livra de um pagamento "bilionário" no Texas.<br><br><a name="more"></a>
A Google vai pagar 1,375 mil milhões de dólares para encerrar um <a href="https://www.bleepingcomputer.com/news/legal/google-to-pay-1375-billion-to-settle-texas-data-privacy-violations/">processo de privacidade de dados no Texas</a>, tornando-se a maior indemnização estatal de sempre contra a gigante tecnológica. O caso, iniciado em 2022, acusava a Google de recolher dados biométricos dos texanos, como scans faciais e de voz, sem o devido consentimento, violando as leis de privacidade do estado.<br><br>
Segundo o processo, a Google usava esses dados desde 2015 para potenciar o seu negócio de publicidade direcionada, além de monitorizar localização e pesquisas dos utilizadores, mesmo em modo incógnito no Chrome. O caso é considerado uma "vitória histórica", ultrapassando largamente outros acordos semelhantes noutras jurisdições.<br><br>
A Google afirmou que este acordo encerra reclamações antigas que já levaram a alterações nos seus produtos e políticas, não sendo necessárias mais ações. A empresa sublinhou ainda que o acordo não representa qualquer admissão de culpa.<br><br>
Este não é o primeiro embate do Texas com gigantes da tecnologia. Em 2024, o estado fechou um acordo de 1,4 mil milhões de dólares com a Meta por uso indevido de reconhecimento facial, e no início deste ano processou a Allstate e a Arity por recolha ilegal de dados de condução de milhões de americanos.<br><br>Wed, 14 May 2025 20:00:00 +0000Aberto até de Madrugada: DJI lança Mavic 4 Pro com mais autonomia e qualidadehttps://abertoatedemadrugada.com/2025/05/dji-lanca-mavic-4-pro-com-mais.html
https://abertoatedemadrugada.com/2025/05/dji-lanca-mavic-4-pro-com-mais.html
<div><a href="https://abertoatedemadrugada.com/2025/05/dji-lanca-mavic-4-pro-com-mais.html"><img alt="" border="0" data-original-height="840" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOGa5t729cp0sTTWMxHg6aVERR78Dffiy_nZd4s_1UWFF5HBdY076S2Uyb2qPjAL77_UADDgr6yent-OKutJjv3IYKF8atOTiunGHPrqaNzneqeZ696cwiDm-E76_jKBxUPbaMcG8v7oQo7u0ACTDy219zsRMQslPl08D7PwZITLWPnFelNhQuH2tKM225/s1600/djimavic4pro.jpg" width="600"></a></div>
A DJI reforça o seu catálogo com o novo drone Mavic 4 Pro com mais autonomia, qualidade de imagem melhorada, e novo gimbal 360° Infinity.<br><br><a name="more"></a>
A DJI revelou oficialmente o <a href="https://www.dji.com/uk/media-center/announcements/dji-release-mavic-4-pro">Mavic 4 Pro</a>, que chega com melhorias em praticamente todos os aspetos. O destaque vai para o novo gimbal 360° Infinity, que permite rodar completamente as câmaras para capturar vídeos verticais e ângulos criativos. Este gimbal suporta três câmaras renovadas: uma principal Hasselblad de 100MP, uma telefoto média de 48MP e uma telefoto longa de 50MP, todas com reprodução de cores consistente e capacidades de vídeo até 6K.<br><br>
Em termos de desempenho, o Mavic 4 Pro traz uma bateria de 95Wh, garantindo até 51 minutos de voo e velocidades que podem chegar aos 90km/h. O sistema de transmissão O4+ foi melhorado, permitindo um alcance máximo de 41km, com transmissão de vídeo HDR de 10 bits até 30km.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIx2KBpxWDVjeqzjDVE26_2_6-2zIV8-WXA64rRmUlaO85s4ttaHKjnSAhZZpBcCZG6PSj7M6tcYsMvpGn_wbx7dLSoRzA2ExtNVFiWygEOlb035ClIhKVgQbYI-kAVKdyBvhkZ_77-fzDAyN3PlCICelKAMaHdljbs0RaoWiOTl6LXoBTkTtxCZrxHVs9/s1195/mavic4prospecs.jpg"><img alt="" border="0" data-original-height="1195" data-original-width="880" height="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIx2KBpxWDVjeqzjDVE26_2_6-2zIV8-WXA64rRmUlaO85s4ttaHKjnSAhZZpBcCZG6PSj7M6tcYsMvpGn_wbx7dLSoRzA2ExtNVFiWygEOlb035ClIhKVgQbYI-kAVKdyBvhkZ_77-fzDAyN3PlCICelKAMaHdljbs0RaoWiOTl6LXoBTkTtxCZrxHVs9/s600/mavic4prospecs.jpg"></a></div>
A segurança e funções inteligentes também receberam melhorias. O drone conta com seis câmaras olho de peixe com melhor desempenho em pouca luz, além de dois processadores para navegação e deteção de obstáculos, mesmo sem GPS. O sistema ActiveTrack 360° atualizado permite seguir veículos até 200 metros de distância, mesmo que parcialmente ocultos.<br><br>
A DJI lança ainda o novo comando RC Pro 2 com ecrã mini-LED de 7"e o Parallel Charging Hub, que carrega três baterias de forma eficiente ou funciona como power bank de 100W. O Mavic 4 Pro já está disponível na Europa a partir dos €2.100, com opções mais completas a chegarem aos €3.540.<br><br><div></div>Wed, 14 May 2025 17:30:00 +0000Aberto até de Madrugada: Monitor 27" 4K ASUS ROG Strix XG27UCS de 160Hz a €329https://abertoatedemadrugada.com/2025/05/monitor-27-4k-asus-rog-strix-xg27ucs-de.html
https://abertoatedemadrugada.com/2025/05/monitor-27-4k-asus-rog-strix-xg27ucs-de.html
<div><a href="https://abertoatedemadrugada.com/2025/05/monitor-27-4k-asus-rog-strix-xg27ucs-de.html"><img alt="" border="0" data-original-height="888" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWAYAaMigVU-7MjR7t8gU8pW_DlzcrrIHcG-n5XjgUBQ7ZHuuRZQAzdb3zKJHNL0ZqBUsn6ITaRfjJbtaqa5k5cGGKQqKLgZLr01wI0FlR7h3MoTydZuGn_SFkCUWqKO0HVqrlVyLDzQH5jXHUHSeq30ATbmocWLmq-j0WfY50w14Lm68orhteNqnji9pS/s1600/ASUS_ROG_Strix_XG27UCS.jpg" width="600"></a></div>
Ideal para quem procura um monitor 4K para entrar na área do gaming de alta-frequência este ASUS ROG Strix XG27UCS permite dar o salto dos 60 Hz para os 160 Hz.<br><br><a name="more"></a>
O <a href="https://amzn.to/3Wwdt5X">ASUS ROG Strix XG27UCS</a> é um monitor 4K UHD (3840 x 2160 pixeis) de 27" com G-Sync e FreeSync Premium Pro, que chega com um design atractivo e margens reduzidas no topo e nos lados, o que também facilita a sua utilização em modo multi-monitor para um setup gaming mais envolvente.<br><br><div><a href="https://amzn.to/3Wwdt5X"><img alt="" border="0" data-original-height="750" data-original-width="1500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjng-au4FPuDsczPSzqvO0SNXe6p_n94_ZjQZLZRw54tQf2D2sNCGXgk0Uc9xNq78LIIrAuKPlm_s5doM7aRpu7w1gD1nLxRF_u2zPVszB8ir58X9MbNiUA0JOphtq9h4GRLSmPdHpPOtOz0W05ulbnubywh8bgXN3YRcG2Jr3sQtUpRfNrQwK3D5Bu0HQx/s600/StrixXG27UCS.jpg" width="600"></a></div>
Este monitor <a href="https://amzn.to/3Wwdt5X">ASUS ROG Strix XG27UCS</a> está disponível por 329 euros na Amazon Espanha.<br><br>
Ainda por cima estamos a falar de um monitor com painel IPS (Fast IPS), que garante a reprodução de todas as tonalidades de cor com exactidão, combinando essa qualidade com a fluidez que é possível obter com os 160 Hz. Mas claro que, para isso, será também conveniente assegurar que se tem um computador e placa gráfica capazes de aguentar com os jogos a essas frequências, caso contrário não estaremos a tirar total partido das suas capacidades. A nível das entradas temos 1x HDMI 2.1, 1x DisplayPort 1.4, e 1x USB-C, permitindo a fácil ligação de múltiplos dispositivos.<br><br><br>
Acompanha as melhores promoções diárias no nosso grupo <a href="https://www.facebook.com/groups/AadM.Promos?sorting_setting=CHRONOLOGICAL">AadM Promos</a>.<br><br>Wed, 14 May 2025 15:30:00 +0000Aberto até de Madrugada: Xiaomi 16 chega em Setembro com Snapdragon 8 Elite 2https://abertoatedemadrugada.com/2025/05/xiaomi-16-chega-em-setembro-com.html
https://abertoatedemadrugada.com/2025/05/xiaomi-16-chega-em-setembro-com.html
<div><a href="https://abertoatedemadrugada.com/2025/05/xiaomi-16-chega-em-setembro-com.html"><img alt="" border="0" width="600" data-original-height="1000" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUQCNw09C7kEqiANbuIdb11aud6djPwU2Ee_qa6h7N6L4d0N0VqsScVYJ6WAnplJMKdK_rCUTzrFaJHx9wzmvamPb4XfkJvK_ijGmCW7LXTpzu4XmHmnYXHcucrW1YpdXX1vizyI7lS6fhBqBSMr1MRsuD44F05iHG3cSasPFN4jTgZUMcFcuiff2YJ314/s1600/xiaomi16.jpg"></a></div>
O Xiaomi 16 poderá ser o primeiro smartphone no mercado com um Snapdragon 8 Elite 2, e chegar antes do tempo esperado.<br><br><a name="more"></a>
A Xiaomi poderá antecipar o lançamento do Xiaomi 16, <a href="https://weibo.com/5888095979/Prk8Zk8Z4#comment">com rumores</a> a apontarem para uma apresentação em setembro. O equipamento deverá ser o primeiro a estrear o novo Snapdragon 8 Elite 2, inicialmente apenas na China, com uma exclusividade que, ao que tudo indica, durará poucos dias.<br><br>
O grande destaque vai mesmo para a bateria, com o Xiaomi 16 a ser testado com uns impressionantes 6.800 mAh de capacidade, algo inédito num smartphone deste tamanho, já que o ecrã não deverá crescer muito face ao modelo anterior. A confirmar-se, terá também carregamento rápido a 100W, colocando-o entre os topos de gama com maior autonomia do mercado.<br><br>
Na fotografia, espera-se uma câmara principal de 50 MP, complementada por uma lente telefoto periscópica, oferecendo mais versatilidade no zoom. O ecrã também promete liderar na sua categoria, podendo superar facilmente a concorrência.<br><br>
Com este lançamento antecipado, tudo indica que a Qualcomm também deverá apresentar o seu Snapdragon 8 Elite 2 em setembro, mais cedo do que é habitual.<br><br>Wed, 14 May 2025 13:30:00 +0000Aberto até de Madrugada: Samsung lança Galaxy S25 Edge com 5.8mm de espessurahttps://abertoatedemadrugada.com/2025/05/samsung-lanca-galaxy-s25-edge-com-58mm.html
https://abertoatedemadrugada.com/2025/05/samsung-lanca-galaxy-s25-edge-com-58mm.html
<div><a href="https://abertoatedemadrugada.com/2025/05/samsung-lanca-galaxy-s25-edge-com-58mm.html"><img alt="" border="0" data-original-height="952" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuIxOdJCxoH14zGBOZSC8lT-eAZz5nhamZHHO2LHd5pxuzRtwYGEteYa8t4p8w5QMER85IQZKjAT4pmUU7tH44ASzWmk7jaZu8PMuGG3HXQx-MCfl_-TXUm9qK8bMWSgC6mgHr2iDEsIkqFcIu9MjoihNost_Q280boQsPC8559uuzUGU_CDBsV_58Nws6/s1600/s25slim.jpg" width="600"></a></div>
Embora seja discutível se o mercado quer smartphones ultra-finos, a Samsung avança com o seu Galaxy S25 Edge com 5.8mm de espessura.<br><br><a name="more"></a>
A Samsung apresentou oficialmente o <a href="https://news.samsung.com/global/meet-the-samsung-galaxy-s25-edge-an-engineering-marvel-of-new-slim-hardware-innovation">Galaxy S25 Edge</a>, posicionando-o como o seu smartphone ultra-fino para enfrentar o futuro iPhone 17 Air. Com apenas 5,8 mm de espessura e 163 g de peso, o S25 Edge aposta num design elegante, embora isso implique uma bateria mais modesta de 3.900 mAh. O ecrã é um Dynamic AMOLED 2X de 6,7" com resolução QHD+ e taxa de atualização variável até 120 Hz, protegido por Gorilla Glass Ceramic 2. No interior, conta com o processador Snapdragon 8 Elite for Galaxy, 12 GB de RAM e até 512 GB de armazenamento.<br><br>
Na fotografia, destaca-se uma câmara principal de 200 MP que possibilita zoom óptico 2x, acompanhada por uma ultrawide de 12 MP com capacidades macro. As selfies ficam a cargo de uma câmara frontal de 12 MP. O telemóvel inclui ainda certificação IP68, estrutura em titânio, e corre Android 15 com One UI 7.<br><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZd0OMx5BmLKUbnqD4XfGpKmD3J1ijDGsr6qQ-60fe8zj40810mak6Q08pomZ5Sd4eQawFw0JsP55oGvViPamp6KRkPF6STNV8risn81V0TjZLA-sOJfbIHJPiQhlhHi2Bb6hstB6kDIOyQpNU4Ro0bqAKK9EJGsJLlSHhrashW57oNJknL-OoXyBG2Jft/s1200/s25edge.jpg"><img alt="" border="0" data-original-height="641" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZd0OMx5BmLKUbnqD4XfGpKmD3J1ijDGsr6qQ-60fe8zj40810mak6Q08pomZ5Sd4eQawFw0JsP55oGvViPamp6KRkPF6STNV8risn81V0TjZLA-sOJfbIHJPiQhlhHi2Bb6hstB6kDIOyQpNU4Ro0bqAKK9EJGsJLlSHhrashW57oNJknL-OoXyBG2Jft/s600/s25edge.jpg" width="600"></a></div>
O Galaxy S25 Edge fica disponível nas cores Titanium Silver, Titanium Jetblack e Titanium Icyblue. Os preços recomendados para Portugal são 1.419€ para a versão de 512GB e 1.299€ para a versão de 256GB, com as primeiras entregas marcadas para 30 de maio.<br><br>Wed, 14 May 2025 11:00:00 +0000