Skip to content

Instantly share code, notes, and snippets.

@vhogemann
vhogemann / BCM43224_MacbookAir_11_mid2011.md
Last active June 14, 2026 14:03
Fixing Broadcom BCM43224 Wireless on MacBook Air (Mid 2011) with Kubuntu 26.04

Fixing Broadcom BCM43224 Wireless on MacBook Air (Mid 2011) with Kubuntu 26.04

This tutorial outlines the steps to fix the immediate kernel panic/hard freeze caused by the Broadcom BCM43224 wireless card on older MacBook hardware running modern Linux kernels (e.g., 7.0.0+).

The Problem

The internal Broadcom card (BCM43224 [14e4:4353]) often triggers an immediate system freeze when loading the proprietary wl driver or the open-source b43 driver. This is typically due to modern power management or MSI (Message Signaled Interrupts) conflicts on the older MacBook PCI bus.

Prerequisites

  • An external USB Wi-Fi dongle or Ethernet adapter (to maintain internet during the fix).
  • Terminal access.
@vhogemann
vhogemann / download-despesas.sh
Created October 19, 2024 13:33
Shell script para baixar os relatórios de despesas com gastos parlamentares da Câmara de Deputados Federal do Brasil
#!/usr/bin/env sh
if [ ! -f "./legislaturas.json" ]; then
# downloads the file legislaturas.json
curl -s "https://dadosabertos.camara.leg.br/arquivos/legislaturas/json/legislaturas.json" > "./legislaturas.json"
fi
if [ ! -f "./deputados.json" ]; then
# downloads the file deputados.json
curl -s "https://dadosabertos.camara.leg.br/arquivos/deputados/json/deputados.json" > "./deputados.json"

A questão que você está levantando é muito interessante e traz à tona o problema de como as distribuições de probabilidade influenciam o desempenho de modelos como o ChatGPT, que são treinados em dados de linguagem natural, onde as palavras seguem uma distribuição de Lei de Potência (como a Lei de Zipf).

Resumo do raciocínio

  1. Distribuições de Lei de Potência: A distribuição de palavras na maioria dos idiomas segue uma Lei de Potência, com poucas palavras sendo extremamente frequentes e muitas palavras sendo raras (caudas longas).
  2. Distribuições Gaussianas: Modelos como LLMs (Large Language Models) podem estar usando distribuições Gaussianas (normalmente distribuídas) para interpolação e extrapolação, o que é caracterizado por caudas finas e uma variância finita.
  3. Potencial de erro: Como a distribuição das palavras é fortemente não-Gaussiana, argumenta-se que isso poderia levar a um "potencial de erro enorme" ao usar distribuições Gaussianas para capturar padrões de uso de palavras.

@vhogemann
vhogemann / Env.fsx
Created September 2, 2024 11:14
Quick and dirty way to fetch your BlueSky notifications using F# fsi
open System.IO
let load () =
let envFile = Path.Combine(__SOURCE_DIRECTORY__, ".env")
if File.Exists(envFile) then
File.ReadAllLines(envFile)
|> Array.map (fun line -> line.Split('='))
|> Array.map (fun parts -> parts.[0], parts.[1])
|> Map
else
@vhogemann
vhogemann / parse.cs
Last active August 2, 2024 19:42
Converte uma string em double
// Em resposta a https://x.com/zanfranceschi/status/1819413388360810601
/*
O que eu estou fazendo aqui é converter a string em um array de char usando
o método Reverse(), e fazendo cast direto de char pra int. Cada dígito vai
corresponder ao seu valor ASCII. Os números na tabela ASCII começam em 0, com o
valor decimal 48. Então eu só diminuo 48 do valor do caracter pra ter o valor
numérico de 0 até 9.
*/
double parse(string value) {

Keybase proof

I hereby claim:

  • I am vhogemann on github.
  • I am vhogemann (https://keybase.io/vhogemann) on keybase.
  • I have a public key ASA_DuDI3YD6ZS9-IW0PaaZvm-8G0teGzybzSob-JYRsbwo

To claim this, I am signing this object:

@vhogemann
vhogemann / RandomPort.fs
Last active November 15, 2023 12:03
Quick and dirty example of how to get a random open TCP/UDP port using F#
namespace Test
module RandomPort =
open System
open System.Net.NetworkInformation
let isFree port =
let props =
IPGlobalProperties.GetIPGlobalProperties()
let tcpListeners =
props.GetActiveTcpListeners()
//@ts-check
const fs = require("fs");
const axios = require("axios").default;
let bearerToken = process.env.TWITTER_BEARER_TOKEN;
const headers = { 'Authorization': `Bearer ${bearerToken}` };
const client = axios.create({baseURL : 'https://api.twitter.com/1.1/tweets/search/', headers : headers})
@vhogemann
vhogemann / keys.pipe.ts
Created May 26, 2017 11:20
Iterate over an Object keys using *ngFor
/**
* Use like *ngFor="let key of ( object | keys )"
*/
@Pipe({ name: 'keys', pure: false })
export class KeysPipe implements PipeTransform {
transform(value: any, args: any[] = null): any {
if(!value) return [];
return Object.keys(value);
}
}
@vhogemann
vhogemann / debounce.decorator.ts
Created May 26, 2017 11:14
Simple method Debouncer for typescript class methods
export function Debounce(wait: number) {
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
let timeout;
const original:Function = descriptor.value;
const debounced = function() {
const context = this;
const args = arguments;
const later = function() {
timeout = null;
original.apply(context, args);