Pokazywanie postów oznaczonych etykietą generator. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą generator. Pokaż wszystkie posty

piątek, 8 lutego 2013

Drukowanie broszurek pod Linuksem

Zdarza się, że potrzeba wydrukować z internetu spory plik papieru w formacie A5 (lub jak kto woli A4 2 strony na 1). Dodatkowo gdy zachodzi potrzeba częstego korzystania z wydruku, warto zrobić sobie z tego książeczkę (broszurkę) zszywaną wzdłuż środka strony (grzbietu złożonej strony A4). Żadne, znane mi, darmowe oprogramowanie nie oferowało takiej funkcjonalności. W efekcie, po krótkim googlowaniu, trafiłem na stronę Evince - printing a booklet. Tam znajduje się "fajny wzór", bez którego nijak sobie z tym problemem (w tym programie) nie można poradzić. Wszystko ok w przypadku niewielkiej objętości wolumenu, ale w przypadku 30+ stron szybciej byłoby napisać automat, który zrobi to za nas.

Ja potrzebowałem przygotować 92 strony do druku. Czy wyszło szybciej? W przypadku jednorazowego wydruku może nie, ale za to przypomniałem sobie o pętlach, instrukcjach warunkowych, logicznych oraz algebraicznych w bashu, a to wszystko w jednym miejscu :).

Oto "broszurkowa formuła" w bashu. Wystarczy ją wkleić do pliku i wykonać.#!/bin/bash # n - liczba stron do wydruku### zmień 0 na liczbę stron w pliku
n=0

# podnieś liczbę n do najbliższej podzielnej przez 4
while [ $[ $n%4 ] -gt 0 ]
  do n=$[ n+1 ]
done

# wygeneruj ciąg, który należy wprowadzić do pola "Strony:"
echo -ne $n
echo -ne ", "
for i in `seq 1 $[ $n/4 ]`
do
  echo -ne $[ $i*2 - 1 ]
  echo -ne ", "
  echo -ne $[ $i*2 ]
  echo -ne ", "
  echo -ne $[ $n - 2*$i + 1 ]
  if [ $i -ne $[ $n/4 ] ]
  then
    echo -ne ", "
    echo -ne $[ $n - 2*$i ]
    echo -ne ", "
  else
    echo ""
  fi
done

czwartek, 19 stycznia 2012

Generator liczb (pseudo)losowych w MySQL

Potrzeba takiego generatora zrodziła podczas produkcji bazy do hurtowni danych. Nie będę ukrywał, że MySQL jest naprawdę kiepskim generatorem takowych liczb, jednak czasem funkcja ta bywa potrzebna np. przy zasilaniu bazy danymi testowymi.
Wystarczy załadować słowniki, i złączyć je po warunku 1 = 1 (iloczyn kartezjański), a następnie posortować po RAND()... a co jeśli potrzebna jest kolumna z liczbami albo wiele takich kolumn? Czy warto tworzyć słownik liczb do tego celu?
Jak pokażę na poniższym przykładzie nie jest to potrzebne. Potrzebna będzie tabela z wektorem inicjującym z dużą liczbą wierszy, jednak gdybyśmy takowej nie posiadali to MySQL po instalacji przychodzi z kilkoma tabelami systemowymi, które można wykorzystać do tego celu. W trakcie moich testów okazuje się, że każdy użytkownik bazy może je sobie przeglądać. SELECT
  RAND() liczba_losowa_zmiennoprzecinkowa,
  CAST( RAND()*10000 AS UNSIGNED ) liczba_losowa_calakowita
FROM
  information_schema.columns
  inner join information_schema.columns inf ON 1 = 1
Wynikiem powyższego zapytania, będą 2 kolumny z liczbami pseudolosowymi: