Owsianka zwykła

Poprzednio było o owsiance proteinowej. Szukałem – nadal gotowej – alternatywy i nie sposób w sklepie nie zauważyć, że producent ma w ofercie także zwykłą owsiankę o nazwie Owsianka z ranka[1]. Cena to jakieś 1,69 zł. Większy wybór smaków, ale z testowanych nadal wygrywa malina z białą czekoladą. To dobrze, będzie łatwiej porównać. Tym razem skład wygląda następująco:

Składniki: 72,9% płatki owsiane, 10,5% cukier puder trzcinowy, 8% mleko w proszku odtłuszczone, 4% kawałki białej czekolady (cukier, tłuszcz kakaowy, mleko w proszku pełne, emuglator: lecytyny), 3,5% kawałki malin liofizowany, aromaty, tapioka.


składnik masa [g]cena [zł]udział [%]masa w porcji [g]ilość porcji w opak.koszt w porcji [zł]
płatki owsiane5002,9974,0048,1010,400,29
czekolada biała1004,004,002,6038,460,10
mleko w pr. Odtł.2509,888,005,2048,080,21
cukier puder trzcin5005,3910,506,8373,260,07
maliny lio.5025,703,502,2821,981,17
suman.d47,9610065n.d1,84

Lekko oszukałem w tabeli – brakowało mi 100%, więc dosypałem płatków, a cenę białej czekolady wziąłem na oko, bo Piotr i Paweł przez internet nie miał, a nie będę kupował tabliczki czekolady na Allegro – na pewno będzie w najbliższym sklepie.

Jak widać, jeśli chodzi o koszty, to tego wariantu zupełnie nie opłaca się robić samemu, przynajmniej nie w takim wygodnym wariancie z zamawianiem przez net – wyjdzie drożej, niż gotowiec. Jedyne na czym można oszczędzić, to mniej śmieci w postaci plastikowych kubeczków.

Niestety, ta wersja mniej mi pasuje niż proteinowa. Rozważam dosypywanie mleka w proszku lub WPC, albo zupełnie DIY. Tak czy inaczej, jak już znajdę idealny wariant, co raczej nieprędko nastąpi, to opiszę.

[1] Geniusz marketingu to wymyślał. Tendencja do ubezdźwięczniania się kłania…

Zasilaczowe perypetie cz. 1 – zasilacz do laptopa Dell

Na urlopie któregoś wieczora włączyłem laptopa (Dell Vostro 1440), a ten powitał mnie przy starcie komunikatem, że nie rozpoznał zasilacza. Dałem kontynuuj i myślałem, że na tym się skończy, ale szybko stwierdziłem, że to za mało. Laptop działał, ale bateria się nie ładowała. Dodatkowo, procesor działał z najniższym możliwym taktowaniem, czyli odpowiednik trybu powersave. Niezbyt komfortowe, delikatnie mówiąc. Sprzęt ma swoje lata (dokładnie pięć) i choć nie był zbyt intensywnie używany, to na urlopie po prostu wrzucałem zasilacz do plecaka, więc stwierdziłem, że może gdzieś się kabel złamał.

Próbowałem poruszać kablem w co bardziej newralgicznych miejscach, ale bez rezultatu. Ponieważ wiedziałem, że zasilacz jest sprawny, postanowiłem poczytać o wewnętrznej żyle, służącej do sygnalizacji. Z innych zabaw z zasilaczami do laptopów wiedziałem, że jest tam obecne napięcie. Liczyłem, że to tylko prosty dodatek i jest zmostkowane z plusem. Postanowiłem zapytać znajomych, czy tak jest faktycznie. Gdyby tak było, to plan był następujący – wziąć wtyczkę i gniazdo i zrobić przedłużacz, który jednocześnie będzie mostkował plus z tą wewnętrzną żyłą.

Niestety, szybkie rozpytanie i rzut oka w wyszukiwarkę ujawniły, że jest to nieco bardziej skomplikowane: wewnętrzna żyła służy do komunikacji 1-wire zasilacza z laptopem. Natomiast sama usterka faktycznie jest popularna. Na tyle, że można kupić gotowe kable do przylutowania w zasilaczu. Tyle, że wspomniana przejściówka byłaby wielokrotnego użytku i prostsza w montażu…

Postanowiłem zmodyfikować podejście i zobaczyć, czy da się tani zrobić oszusta, czyli przedłużacz jak wyżej, ale udający zasilacz. Czyli trzeba by doczytać o komunikacji 1-wire na linii zasilacz-laptop i układach, które ją realizują. Już rozmyślałem, kto ze znajomych ma oscyloskop, ale sprawa okazała się o wiele prostsza. Ktoś już sprawdził komunikację, opisał format, a nawet zamieścił kod źródłowy i schematy. Tutaj znajdziecie cykl bardzo interesujących wpisów nt. komunikacji laptopów Dell z zasilaczami (oczywiście po angielsku) oraz repo GitHub. Jak widać autor również wpadł na pomysł przejściówki, tyle, że motywowany nieco inną potrzebą.

A jak się sprawa zakończyła u mnie? Nie zależy mi na debugu i zabawie, więc powyższe rozwiązanie nie bardzo ma sens ekonomiczny. Stosowne chipy do komunikacji 1-wire co prawda nie są drogie, bo – jeśli dobrze pamiętam – wychodziło ok. 2 zł za sztukę, ale w paczkach po 5-10 sztuk i przy sprowadzaniu z Chin. Dodatkowo trzeba jeszcze je zaprogramować, programator jest dość drogi, a nikt posiadający takie urządzenie nie przychodził mi do głowy.

Ponieważ korzystanie z laptopa na najniższym taktowaniu było zauważalnie męczące, nie bylem pewny, czy uda mi się otworzyć zasilacz w taki sposób, że złożę go z powrotem, a także nie miałem pewności, czy faktycznie chodzi o kabel, czy też może o uszkodzony układ do komunikacji, szybko kupiłem zastępczy zasilacz oraz… dwa kable. Planuję spróbować zreanimować stary zasilacz przez wymianę kabla – przy odrobinie szczęścia na parę lat starczy, a przejściówka… może innym razem. Kable dwa, bo od sprzedawcy zasilacza, więc wysyłka gratis, a kosztowały niecałe 5 zł za sztukę.

Przy okazji: otworzyć zasilacz do laptopa można wkładając nóż w szczelinę i delikatnie pukając w niego młotkiem. Sposób jest niestety inwazyjny, bo są one klejone – po naprawie trzeba albo skleić klejem (wersja trwała/ładna), albo złożyć i brzydko skleić taśmą z wierzchu.

PUM

Jakiś czas temu zacząłem korzystać z Uptime Monitor. Przyznaję, że jestem zadowolony, do pełni szczęścia brakowało mi czegoś, co wystawi moje uptime’y na WWW. Tzn. jest sporo fajnych narzędzi, rysujących ładnie i live, tzn. z autoodświeżaniem, ale… nie byłem przekonany do pomysłu publikacji kluczy API. Tym bardziej, że w niektórych przypadkach udostępnienie klucza wiąże się z z podaniem danych hosta, loginu i hasła do htpasswd itp.

Wolałbym mieć możliwość ukrycia nazwy/IP i ogólnie nie podawania zbyt wielu informacji, zwł. klucza API. Zauważyłem też, że nie ma (a przynajmniej nie znalazłem) nic do obsługi Uptime Monitora w Perlu. Stwierdziłem, że generowanie statycznego HTML (docelowo) z crona jest zupełnie wystarczające, a ew. autoodświeżanie prosto można załatwić JSem czy IIRC nawet polem META w HTML (koła nie odkrywam, „konkurencja” też tak robi.

I w ten sposób powstał PUM czyli Perl Uptime Monitor. 😉 Jest możliwość nadpisania nazwy, jest możliwość generowania uptime dla danego okresu (ilość dni wstecz). Brakuje opakowania wyniku w HTML (wyniki na STDOUT póki co…), ale to wkrótce… W sumie nie ma problemu z pobraniem danych do wykresu czasu odpowiedz, ale nie planuję póki co. Zachęcam do forkowania i zgłaszania pull requestów, ew. pomysłów w komentarzach.

Na kogo głosować czyli Latarnik Wyborczy DIY

W poprzednim wpisie pokazałem, czemu nie należy zbytnio sugerować się wynikami zwracanymi przez Latarnika Wyborczego. Postanowiłem zrobić własną wersję algorytmu, która będzie wolna od opisanych wad. Z różnych względów (zajęcia poza kompem, cisza wyborcza, która jest bez sensu i pewnie nie ma zastosowania, ale dmucham na zimne) zeszło mi więcej czasu z publikacją, niż planowałem, więc wypuszczam as is. Całość zajęła nie 45 minut, tylko bardziej 1,5h (bardziej myślenie, niż klepanie), po poprawkach błędów różnych.

Założenia

  • KISS
  • Brak odpowiedzi na pytanie jest traktowany tak samo jak neutralność w danej kwestii lub nie mam zdania.
  • Wynik jest wartością -100% do 100% (lub, w wersji drugie, bardziej zgodnej z LW 0-100%).
  • Waga pytania nie powoduje drastycznej zmiany wyniku

Rozwiązanie

Stwierdziłem, że tak naprawdę da się to sprowadzić do liczenia korelacji. Czyli nie programowanie, tylko arkusz kalkulacyjny. Zresztą łatwiej debugować błędy. Kwestię prostoty i neutralności łatwo osiągnąć przez przypisanie wartości -1 (nie), 0 (brak zdania), 1 (tak). Zarówno dla odpowiedzi kandydatów, jak i odpowiadających. Ciocia matematyka zapewni, że zwykły iloczyn użytkownika i kandydata da 1 dla zgodności, -1 dla wartości przeciwnych i 0, jeśli którakolwiek ze stron nie ma zdania.

Powstał wiec arkusz z czterema zakładkami

Odpowiedzi kandydatów

Przepisane żywcem z wyników zebranych i publikowanych przez Latarnika Wyborczego (prośba o sprawdzenie, przepisywanie do arkusza to nudna część i łatwo o pomyłkę, więc nie wykluczam błędów, choć starałem się wypełnić rzetelnie). Część stała, nie wymaga żadnej ingerencji.

Odpowiedzi i istotność

To jest część, którą tak naprawdę wypełnia użytkownik odpowiadając na pytania w Latarniku Wyborczym. Brzydka forma, bo nie o UI mi chodziło. Dla każdego pytania podawana jest odpowiedź [-1, 0, 1] oraz istotność (po prostu mnożnik, zakres tak naprawdę dowolny[1], intencją był zakres 0-2, przyjąłem zmianę o 20%, nie musi być równa dla wszystkich pytań). Pola wypełnione na żółto wypełnia użytkownik (w arkuszu wypełnione są przykładowymi, losowymi danymi).

Obliczenia wyników

Tu zaszyty jest algorytm. Prosty, bo po prostu jest to iloczyn uzyskanego wyniku (suma ilorazów wagi, odpowiedzi kandydata i użytkownika) i maksymalnej teoretycznej zgodności[1]. Część stała, nie wymaga ingerencji.

Wynik

Tu jest to, co użytkownik dostaje na koniec. Podaję w dwóch równoważnych wersjach, różnią się tak naprawdę tylko zakresem. Pierwszy to -100% (zdanie przeciwne do kandydata dla każdego pytania) do 100% (wszystkie odpowiedzi jak kandydat), 0% oznacza wynik neutralny. Drugi wariant to po prostu rzutowanie na 0-100%. 50% oznacza brak jakiejkolwiek zbieżności poglądów z kandydatem, 0% – poglądy dokładnie przeciwne, 100% – poglądy zupełnie zgodne. Mniej więcej odpowiednik tego, co jest teraz w Latarniku Wyborczym (dla neutralnej wagi pytań). Część stała, nie wymaga ingerencji.

Sposób użytkowania

Pobrać arkusz ze strony (format ods, działa w darmowym Libre Office), uruchomić. Przejść do arkusza Odpowiedzi i istotność, wypełnić żółte pola. Po wypełnieniu wynik odczytujemy w zakładce Wynik. Oczywiście całość jest open source, czyli każdy może wprowadzić swoje poprawki i modyfikacje. Oraz poszukać błędów, których nie wykluczam.

Uwagi proszę zgłaszać w komentarzach pod wpisem. Spam, także wyborczy AKA agitacja będzie tępiony.

[1] I tu, kończąc wpis, widzę pierwszy błąd mojego rozwiązania. Powinienem jeszcze przemnożyć odpowiedzi kandydatów przez mnożnik podany przez użytkownika, gdy liczę maksymalny wynik dla kandydata. Teraz możliwe jest uzyskanie wyniku ponad 100%, zwł. dla wyższych mnożników. Błąd znany, poprawka trywialna, ale nie chce mi się teraz tego robić, jak będzie zainteresowanie to poprawię.

Upał

Przejście z jesieni w lato było dość gwałtowne w tym roku. Co prawda wiosna, i to ciepła przyszła już dawno, ale niedawno zrobiło się zimno, pochmurno i w ogóle nieciekawie. Ale od paru dni w Poznaniu zrobiło się lato pełną gębą, z temperaturami rzędu 30 C. Sporo i mocno odczuwalne, z uwagi na gwałtowność zmiany.

Zmiany temperatury o dziwo dotknęły też mojego NAS opartego o Raspberry Pi. Piszę o dziwo, bo w sumie stoi blisko grzejnika i myślałem, że głównie zimą będzie tam gorąco. O ile 40 C na dysku (samo rpi mnie mało interesuje, dopóki się nie wiesza itp.) zostało przekroczone już dawno, to do tej pory utrzymywało się 41-42 C. No chyba, że pojemnik został czymś przykryty, co się zdarzyło raz czy dwa, ale można uznać za nieistotne odstępstwo od normy. Natomiast odkąd zaczęły się upały, dysk zgłaszał cały czas temperatury 44-45 C. Nawet i 46 się zdarzyło, a tak przecież nie mogło zostać. Tym bardziej, że bliźniak leżący luzem (OK, inna lokalizacja) ma w tej chwili 35 C, a 46 to jego życiowy rekord.

Postanowiłem machnąć ręką na uptime (nie, nie zbieram i generalnie nie zwracam uwagi, ale nie lubię wyłączać sprzętu) i dorobić otwory. Z poprzednich sześciu otworów wylotowych u góry obudowy (po 3 sztuki na dwóch ściankach) zrobiło się… 20 (po 5 na każdej ściance). Dodatkowo dorobiłem po 3 sztuki otworów wlotowych w dolnej części ścianek. Mam wrażenie, że filcowe nóżki są jednak trochę za niskie. Zobaczę, czy to coś pomoże… Jeśli nie, to będzie trzeba pomyśleć o jakimś separatorze pomiędzy rpi a kieszenią z dyskiem i może o podwyższeniu nóżek. W sumie w odwrotnej kolejności, bo wpływ podwyższenia nóżek łatwo przetestować prowizorycznie podkładając choćby dwa ołówki. 😉

Przy okazji, skoro już było wyłączenie z prądu, skorzystałem z watomierza i sprawdziłem, ile prądu bierze Raspberry Pi. No, w zasadzie cały zestaw, bo samego rpi nie mierzyłem. Więc hub USB + rpi + dysk 2,5″ biorą u mnie przy normalnym działaniu 5,2W. Przy obciążeniu CPU (prosty Perl) wzrasta to do 5,9W. Najbardziej obciążające jest kopiowanie na dysku USB z partycją NTFS – typowo 7,3W, maksymalnie 8W.