poniedziałek, 12 czerwca 2017

Stacja pogodowa WS1080

Zakupiłem używaną (z przeznaczeniem do rejestrowania parametrów pogody w innym miejscu BTW -- nie żebym chciał używać dwie różne stacje na raz w tym samym miejscu). Ponieważ akurat pod ręką był c.h.i.p (aka the world's first 9USD computer), podłączyłem na razie stację do chipa.

chip@chip:~/Crontab$ lsusb 
Bus 002 Device 003: ID 1941:8021 Dream Link WH1080 \
 Weather Station / USB Missile Launcher

root@chip:~# apt-get update 
root@chip:~# apt-get install python-pip
root@chip:~# pip install pywws
...
Successfully installed pywws tzlocal pytz
Cleaning up...
root@chip:~# pywws-hourly -v /home/chip/Logs/weather\
  >> /home/chip/Logs/weather/Hourly.log
cat /home/chip/Logs/weather/Hourly.log
Unknown weather station type. Please edit weather.ini
and set 'ws type' to '1080' or '3080', as appropriate.
Your station is probably a '1080' type.

# wpisać 1080 w weather.ini
# zmienić wpis dotyczący /tmp/weather w weather.ini

root@chip:~/Crontab#  pywws-hourly -v /home/chip/Logs/weather\
 >> /home/chip/Logs/weather/Hourly.log
03:07:00:pywws.Logger:pywws version 16.12.0, build 1367 (e917ba9)
03:07:00:pywws.Logger:Python version 2.7.9 (default, Mar  1 2015, 13:48:22) 
[GCC 4.9.2]
03:07:00:pywws.WeatherStation.CUSBDrive:using pywws.device_libusb1
03:07:02:pywws.DataLogger:Synchronising to weather station
03:09:00:pywws.weather_station:live_data missed
03:09:44:pywws.DataLogger:Fetching data
03:09:45:pywws.Process:Generating summary data
03:09:45:pywws.Calib:Using default calibration

I działa...

środa, 7 czerwca 2017

Podsumowania rowerowe 200 tys/7 tys

Jeszcze się nie skończył czerwiec a ja już nabiłem rekordowe 7 tysięcy kilometrów przejechanego rocznego dystansu (4 czerwca dokładnie to się stało). Do tej pory mój rekord to było 6 tys na koniec czerwca, teraz wygląd, że będzie z łatwością osiem.

Nawiasem mówiąc 24 maja osiągnąłem 200 tys na liczniku życiowego dystansu (może da się dociągnąć do 250 tys?).

Z tej okazji podsumowałem mój życiowy dystans (bez lat 1992--1991, dla których nie mam detalicznych danych) z podziałem na pierwsze/drugie półrocze. Wyniki są następujące:

----------------------------------------------------
kwartał km    %%      |  kwartał km    %%     razem%
----------------------------------------------------
1993_1  2330  44.13   |  1993_2  2950  55.87  100.00
1994_1  2805  62.06   |  1994_2  1715  37.94  100.00
1995_1  1710  47.90   |  1995_2  1860  52.10  100.00
1996_1  1546  33.90   |  1996_2  3014  66.10  100.00
1997_1  2055  40.73   |  1997_2  2990  59.27  100.00
1998_1  2530  38.13   |  1998_2  4105  61.87  100.00
1999_1  3065  47.63   |  1999_2  3370  52.37  100.00
2000_1  4910  43.82   |  2000_2  6295  56.18  100.00
2001_1  5255  48.86   |  2001_2  5500  51.14  100.00
2002_1  6240  59.68   |  2002_2  4215  40.32  100.00
2003_1  5130  48.72   |  2003_2  5400  51.28  100.00
2004_1  3575  41.16   |  2004_2  5110  58.84  100.00
2005_1  4415  49.33   |  2005_2  4535  50.67  100.00
2006_1  0000   0.00   |  2006_2  2880 100.00  100.00
2007_1  1855  46.73   |  2007_2  2115  53.27  100.00
2008_1  2380  36.12   |  2008_2  4210  63.88  100.00
2009_1  2535  45.97   |  2009_2  2980  54.03  100.00
2010_1  3060  47.81   |  2010_2  3340  52.19  100.00
2011_1  3535  43.45   |  2011_2  4600  56.55  100.00
2012_1  3285  45.44   |  2012_2  3945  54.56  100.00
2013_1  3710  45.13   |  2013_2  4510  54.87  100.00
2014_1  4020  54.55   |  2014_2  3350  45.45  100.00
2015_1  4100  46.80   |  2015_2  4660  53.20  100.00
2016_1  5365  47.80   |  2016_2  5860  52.20  100.00
2017_1  7155 100.00   |  2017_2  0000   0.00  100.00
----------------------------------------------------
Średnio: kw1 = 46.63 kw2 = 53.37 razem% = 100.00 (25 lat)
Razem: 200835.00

Zawsze mi się wydawało, że w drugim półroczu przejeżdżam mniej a tu proszę--faktycznie jest dokładnie odwrotnie.

czwartek, 1 czerwca 2017

Publikowanie z bazy danych

Absolutnie minimalistyczny przykład wykorzystania LaTeXa do publikowania zawartości bazy danych:

1. Dane są w bazie sqlite (można ją utworzyć/dodawać rekordy w prosty sposób wykorzystując coś co się nazywa sqlitebrowser)

W przykładzie (poniżej) plik kleinertest.db3 zawiera tabelę Kursanci, z której pobierane są pola ImieNazwisko, PlecOcena.

2. Do drukowania uruchamiamy skrypt w języku Perl. Skrypt jest tak prosty że do dopasowania go do konkretnej tabeli nie potrzeba znajomości Perla a wystarczy zdrowy rozsądek (co zmienić zaznaczono @@)

Perl dla Windows do pobrania z https://www.activestate.com/

3. Skrypt uruchamia pdflatexa i drukuje zawartość bazy do pliku pdf

4. Można skomplikować skrypt, np podając argument na wejściu. Dajmy na to nazwisko delikwenta do wydrukowania. Żeby nie drukować wszystkiego. Do tego potrzeba minimalnej znajomości Perla

#!/usr/bin/perl -w
# Potrzebne są moduły Perla DBI DBD-SQLite DBD-SQLite2
#
use strict;
use utf8;
use DBI;

binmode(STDOUT, ":utf8");

my $dbfileName= "kleinertest.db3"; ## @@ nazwa pliku z bazą
my $tmpfileName = "kleinertest.tex"; ## @@ nazwa pliku .tex
my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfileName", "", "");

## @@ Pobranie danych z tabeli Kursanci (pola: ImieNazwisko, Plec Ocena)
my $sth = $dbh->prepare("SELECT
   ImieNazwisko,
   Plec,
   Ocena
   FROM Kursanci ");
$sth ->execute();

## PreAmBuła ### ### ### ### ###
open (TEX, ">$tmpfileName");

print TEX "\\documentclass{article}\\usepackage{mydbiprint}\\begin{document}\n";

## MidBuła: drukowanie rekordów z bazy ## ### ### ###
## ImieNazwisko = $r[0], Plec = $r[1], Ocena = $r[2] itd...
while ( my @r = $sth->fetchrow_array() ) {
     print TEX "\\Dyplom{ $r[0] }{$r[1]}{ $r[2] }\n"; ## @@ dopasować do konkretnej tabeli
   }

## PostAmBuła ## ### ### ### ###
print TEX "\\end{document}\n";

$dbh->disconnect || warn "Nie moge zamknac bazy $dbfileName\n";

## TeXowanie pliku: ## ## ### ### ### ### ###
close(TEX);
system("pdflatex", "$tmpfileName");

## koniec 

Przykładowy pakiet mydbiprint.sty:

%% Minimalistyczny szablon do drukowania z bazy
\RequirePackage[utf8]{inputenc}
\RequirePackage{polski}
\RequirePackage{ifthen}
\pagestyle{empty}
\newcommand{\Dyplom}[3]{%%
  \begin{center}\fontsize{30}{40}\selectfont DYPLOM\end{center}
    \ifthenelse{\equal{#2}{K}}
               {\DyplomDlaPani{#1}{#3}}
               {\DyplomDlaPana{#1}{#3}}
 }
\newcommand\DyplomDlaPani[2]{%
   \begin{center}Pani #1\end{center}
  Zdała egzamin z oceną #2\newpage}
\newcommand\DyplomDlaPana[2]{\begin{center}Pan #1\end{center}
    Zdał egzamin z oceną #2\newpage}
\endinput