Sataniści łamią wszelkie prawa. Nawet prawo Shannona!
Trafiła mi w ręce książka “Nowe wyznania egzorcysty“. Trafiłem tam na taki fragment (s. 73):
Nagrania poświęcone szatanowi opierają się na czterech zasadach: (…)
Trzecią regułą jest przekazanie sygnału podprogowego. Chodzi o przekazanie sygnału bardzo wysokiego, nie dającego się usłyszeć, sygnału naddźwiękowego, który działa na podświadomość. Jest to dźwięk ogłuszający, – rzędu około 3000 kilocykli na sekundę, którego nie można przechwycić własnymi uszami, właśnie dlatego, że jest ponad dźwiękowy. Wyzwala on w mózgu pewną substancję, której efekt działania jest dokładnie taki sam jak narkotyków. Słuchacz otrzymuje narkotyk naturalny, wyprodukowany przez mózg w następstwie tych bodźców, które zostały przekazane, nie zdających sobie z tego sprawy. W pewnym momencie czujemy się dziwnie. Ten osobliwy stan prowadzi człowieka do poszukiwania prawdziwego narkotyku lub do brania wyższych dawek, jeśli już ktoś jest uzależniony.
Znaczy sygnał o częstotliwości 3 MHz. Ciekawe, zważywszy na to, że w płytach Audio-CD stosuje się próbkowanie 44,1 kHz. A zatem – zgodnie z twierdzeniem Shannona – maksymalna częstotliwość, jaką da się bez zniekształcenia zapisać (tzw. częstotliwość Nyquista) na takiej płycie to 22,05 kHz. Wyższe częstotliwości usuwa się przed próbkowaniem za pomocą filtra dolnoprzepustowego, aby uniknąć zjawiska aliasingu.
Już nawet nie będę się rozwodził, nad maksymalną częstotliwością próbkowania przetwornika C/A w odtwarzaczu, czy pasmem przenoszenia głośników…
Jak to wytłumaczyć? Może…
Istnieje również czwarty element: rytualna konsekracja każdej płyty w czasie czarnej mszy. Zanim płyta zostanie wprowadzona na rynek, zostaje poświęcona szatanowi poprzez szczególny rytuał, który jest prawdziwą formą czarnej mszy.
Już wiem – przez swoje zaklęcia i rytuały sataniści sprawiają, że na płycie przestaje obowiązywać prawo Shannona. Co więcej – po włożeniu takiej płyty do odtwarzacza – w magiczny sposób twoje głośniki zwiększą pasmo przenoszenia do wymaganych 3 MHz!
Motyw szukania w polskiej kinematografii religijnej
Pozdrowienia dla M&M. I nie martwcie się - to, że wy rozumiecie powyższy tytuł, nie znaczy, że rozumie go reszta Polski
Więcej na www.xaverianum.pl.
CSS image map na przykładzie JDM
W HTML-u były znaczniki <map> oraz <area> które pozwalały tworzyć linki we fragmentach obrazka. Mechanizm ten nie satysfakcjonował specjalnie ludzi, którzy rozumieją sens separacji treści od prezentacji, dlatego wymyśla się różne sposoby, aby analogiczny rezultat osiągnąć za pomocą samego tylko CSS.
Oto, jak zrealizowałem mapkę z propozycjami wakacyjnymi na stronie Xaverianum.
Zacznijmy od kodu XHTML:
<h1 id="homepage-map">A co z wakacjami?</h1>
<ul id="homepage-map">
<li id="jdm">
<a href="/wakacje/jdm" title="Jubileuszowe X Jezuickie Dni Młodzieży (JDM) w Świętej Lipce na Mazurach">
<strong>Jezuickie Dni Młodzieży</strong>
<small>w Świętej Lipce</small>
<span></span>
</a>
</li>
<li id="pielgrzymka">
<a href="/wakacje/pielgrzymka" title="Pielgrzymka parafialna (pomarańczowa trójka)">
<strong>Pielgrzymka</strong>
<small>na Jasną Górę</small>
<span></span>
</a>
</li>
<li id="bialy">
<a href="/wakacje/bialy" title="26. obóz adaptacyjny duszpasterstw akademickich Wrocławia i Opola w Białym Dunajcu w Tatrach">
<strong>Obóz adaptacyjny</strong>
<small>w Białym Dunajcu</small>
<span></span>
</a>
</li>
</ul>
Mamy zatem zwykłą listę zawierającą linki, ze zwykłymi tekstami. Jedyne, co tutaj szczególne, to pusty znacznik <span/> – w idealnym świecie niepotrzebny, zaś w świecie wciąż zamieszkałym przez Internet Explorera 7 i starsze – konieczne, aby osiągnąć zamierzony cel.
W tle listy wstawmy obrazek z mapą Polski, używając atrybutu padding przesuńmy napisy, żeby jej nie zasłaniały i – uwaga – włączmy pozycjonowanie relatywne (przyda się za chwilę).
ul#homepage-map {
position: relative;
margin: 0; padding: 140px 0 0 0;
background: url(../images/homepage-map.png) no-repeat left top;
height: 460px;
}
Elementom listy <li/> ustawmy ładne tła.
#jdm {
background: url(../images/jdm-bg-hover.png) no-repeat;
}
Podobnie można ustawić tła linkom (które mają wyświetlanie blokowe i wypełniają cały obszar <li/>).
#jdm a {
background: url(../images/jdm-bg.png) no-repeat;
}
Teraz pierwsze czary-mary: Tło pod <li/> będzie tym “podświetlonym”, zaś tło pod <a/> – tym “niepodświetlonym”. Jesli dodamy teraz
#jdm a:hover {
background: none;
color: #503830;
}
to po najechaniu myszką, tło pod <a/> będzie znikać, ozsłaniając tło pod <li/>. Dzięki tej prostej sztuczce – przeglądarki pobierać będą oba obrazki od razu. Gdybyśmy ustawiali “zwyczajnie” – jedno tło dla a, a drugie dla a:hover, te drugie pobrałoby się dopiero w momencie wskazania myszką linka i przez to nie wyświetliło natychmiast.
Przejdźmy jednak do istoty zagadnienia. Tajemniczemu elementowi <span/> nadajmy pozycję absolutną i ustawmy go we właściwym miejscu mapki:
ul#homepage-map span {
display: block;
position: absolute;
cursor: pointer;
}
#jdm span {
left: 375px;
top: 160px;
width: 120px;
height: 140px;
}
Zwróć teraz uwagę, drogi czytelniku, względem czego ten span będzie się pozycjonował. Otóż, względem najbliższego przodka, który ma pozycjonowanie relatywne lub absolutne. Zarówno <a/>, jak i <li/> mają pozycjonowanie statyczne, a więc szukając punktu odniesienia, <span/> trafi na <ul/>.
Ot, cała filozofia. Działający przykład tego rozwiązania znajdziecie na stronie promującej Jezuickie Dni Młodzieży, na które – swoją drogą – serdecznie zapraszam.
Na koniec nie przetestowana idea: teoretycznie, można się pozbyć tego elementu <span/>, który zaśmieca kod i zamiast niego zastosować pseudoelement a::after. Gdyby tylko IE7 zniknęło z rynku…
Przyczyna grzechu
Przyczyną grzechu zdaje się być nie to, że pragniemy za dużo, lecz że pragniemy za mało.
Origami CD
W menu głównym comprendo.info pojawiła się nowa pozycja: Okładki. Jest to generator szablonu origami pozwalający poskładać elegancją okładkę na płytę CD z kartki A4. Wpisujemy autora i tytuły, drukujemy wygenerowany plik PDF i postępujemy wg. zamieszczonego instruktażu wideo.
Do generowania szablonu wykorzystałem TCPDF.
Zdarzenia w C#
Przypuśćmy że mamy zdarzenie
public event EventHandler<EventArgs> Bang;
Aby je wywołać, wystarczy napisać Bang(this, EventArgs.Empty);
Nie… Jeśli do zdarzenia nie jest podpięta żadna procedura obsługi tegoż, otrzymamy NullReferenceExcepion.
A zatem if (Bang != null) Bang(this, EventArgs.Empty);
Budzik
Od mniej więcej roku jako budzika używam komputera. A dokładniej programu WakeupOnStandBy. Jest to mały programik, który potrafi wybudzić komputer ze stanu uśpienia bądź hibernacji (to drugie nie na każdym komputerze) i uruchomić zadany program. Np. odtwarzacz multimedialny. Aplikacja ma bardzo dużo opcji co daje jej wielką uniwersalność. Ale z drugiej strony, ja potrzebowałem tylko budzika, a nie kombajnu.
W końcu ten nadmiar przycisków, checkboksów, pól edycyjnych mnie zirytował i postanowiłem napisać sobie budzik samemu. Taki, który będzie robił dokładnie to, czego potrzebuję – budził mnie – i nic więcej.
Aplikacja jest banalnie prosta: na górze okna mamy TimePicker z biblioteki AvalonControlsLibrary w który wprowadzamy pożądaną godzinę budzenia. Aplikacja domyślnie ustawia to pole na za 8 godzin i 10 minut. 8 godzin, bo tyle snu potrzebuje człowiek, a te 10 minut to zapas na jakieś czynności wykonywane tuż przed snem, typu gaszenie świateł, wyłączanie różnych rzeczy, modlitwa, kładzenie się, zasypianie… Pod godziną jest wielki przycisk z budzikiem – wystarczy go kliknąć i można uśpić komputer. O zadanej godzinie komputer sam się obudzi i zagra utwór, którego wybór umożliwia drugi przycisk. Wybór jest zapamiętywany w pliku konfiguracyjnym, więc nie trzeba używać tego przycisku za każdym razem.
Jak to w ogóle działa? Otóż – znów musiałem skorzystać z API Windows. Tym razem potrzebne są funkcje:
[DllImport("kernel32.dll")]
static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes,bool bManualReset, string lpTimerName);
[DllImport("kernel32.dll")]
static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long pDueTime, int lPeriod, IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume);
[DllImport("kernel32.dll")]
static extern bool CancelWaitableTimer(IntPtr hTimer);
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
static extern Int32 WaitForSingleObject(IntPtr handle, uint milliseconds);
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
Uwaga: Funkcja SetWaitableTimer przyjmuje parametr czasu w formacie FILETIME. Obiekt typu DateTime można skonwertować do tego formatu używając metody ToFileTimeUtc().
Program przeznaczony dla systemu Windows Vista z .NET Framework 3.5 (używa klasy GlassWindow z poprzedniego postu).
Download:
Budzik
Budzik – kody źródłowe
PS: Zanim zaufasz budzikowi, upewnij się, czy twój komputer daje się programowo wybudzić z hibernacji. Jak nie, to go na noc tylko usypiaj i upewnij się, że nie zahibernuje się sam.
PPS: Nie biorę odpowiedzialności za szkody wywołane zaspaniem.
O wspólnocie, która objawia oblicze Boga
Wspólnota jest jak wielka mozaika. Każda cząstka z osobna wydaje się mało znacząca. Jeden kawałek jest jasnoczerwony, inny zimnoniebieski albo szarozielony, inny ciepłopurpurowy, jaskrawożółty czy jasnozłoty. Jedne wyglądają szlachetnie, drugie zwyczajnie. Jedne sprawiają wrażenie cennych, drugie bezwartościowych. Jedne są krzykliwe, drugie delikatne. Z każdym poszczególnym kawałkiem osobno nie da się wiele zrobić. Można najwyżej je porównywać, szacować ich piękno i wartość. Kiedy jednak wszystkie te kawałki zostają złożone razem, w jedną wielką mozaikę portretującą oblicze Chrystusa, czy znajdzie się ktoś, kto zakwestionuje ich wartość? Jeśli zabraknie jednego, choćby najmniejszego, oblicze nie będzie kompletne. Każdy kamyczek w mozaice jest nieodzowny i wnosi niepowtarzalny wkład do chwały Boga. Oto wspólnota, braterstwo małych ludzi, którzy dopiero razem sprawiają, że Bóg jest widoczny na świecie.
Henri J. M. Nouwen
Ważne
Ważne są tylko te dni, których jeszcze nie znamy.
Ważne są wszystkie dni, które przeżywamy razem.
Okno ze szkła
Windows Vista udziwnił troszeczkę konstrukcję okna wprowadzając półprzezroczystą część nazywaną Glass (szkło). Jest to ewidentnie wodotrysk i trochę dziwi mnie, dlaczego wprowadzono do API funkcje, które mogą okazać się tylko chwilową modą, która zniknie wraz z nastepną wersją systemu.
No dobrze, w Windows 7 dalej będzie ten wodotrysk, więc skoro już jest, to warto może spróbować go użyć (byle nie nadużyć). Nie oszukujmy się – ludzie lubią wodotryski.
WPF nie daje bezpośredniej możliwości operowania na szkle – potrzebujemy wywołać funkcję API DwmExtendFrameIntoClientArea przyjmującą jako argument uchwyt okna i strukturę MARGINS. A może by tak postarać się trochę i utworzyć DependencyProperty - animowalną, bindowalną i elegancką (na tyle, na ile DependencyProperty można nazywać elegancką) właściwość pozwalającą regulować szklany obszar okna?
Proponuję zrobić to tak:
using System;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interop;
using System.Windows.Media;
namespace WpfExperiments
{
public class GlassWindow : Window
{
struct MARGINS
{
public MARGINS(Thickness t)
{
Left = (int)t.Left;
Right = (int)t.Right;
Top = (int)t.Top;
Bottom = (int)t.Bottom;
}
public int Left;
public int Right;
public int Top;
public int Bottom;
}
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS margins);
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern bool DwmIsCompositionEnabled();
public Thickness GlassFrame
{
get { return (Thickness)GetValue(GlassFrameProperty); }
set { SetValue(GlassFrameProperty, value); }
}
public static readonly DependencyProperty GlassFrameProperty =
DependencyProperty.Register("GlassFrame", typeof(Thickness), typeof(GlassWindow), new UIPropertyMetadata(new Thickness(0, 0, 0, 0), new PropertyChangedCallback(GlassFrameChangedProperty)));
private static void GlassFrameChangedProperty(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
UpdateGlassFrame((Window)d, (Thickness)e.NewValue);
}
private static void UpdateGlassFrame(Window win, Thickness t)
{
if (!DwmIsCompositionEnabled())
{
return;
}
IntPtr hwnd = new WindowInteropHelper(win).Handle;
if (hwnd == IntPtr.Zero)
{
return;
}
win.Background = Brushes.Transparent;
HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent;
MARGINS margins = new MARGINS(t);
DwmExtendFrameIntoClientArea(hwnd, ref margins);
}
protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e);
UpdateGlassFrame(this, GlassFrame);
}
}
}
Teraz – zamiast tworzyć okna na bazie klasy Window, możemy użyć klasy GlassWindow posiadającej właściwość GlassFrame typu Thickness, którą możemy się posługiwać jak każdą inną DependencyProperty.
Ustawiając dodatnie wartości dla GlassFrame, możemy regulować grubość szklaj ramki. Jeśli ustawimy wartości ujemne – całe okno zrobi się szklane.