Showing posts with label narzędzia. Show all posts
Showing posts with label narzędzia. Show all posts

21/12/2014

Czego prawdopodobnie nie wiedzieliście o Excel'u

Home

Sądzę, że wielu z Was otarło się na studiach o programowanie liniowe oraz algorytm sympleks. Ja uczyłem się o tym na przedmiocie zwanym w skrócie POBO, co rozwija się dumnie brzmiące Podstawy badań operacyjnych. Od czasów studiów nie zajmowałem się tym zagadnieniem, aż do dzisiaj. Pomagając siostrze w rozwiązywaniu zadań na studia dowiedziałem się o możliwościach Excel'a, których w ogóle nie byłem świadomy, a są naprawdę super i każdy ma do nich dostęp. Mam tutaj na myśli dodatek Solver, który, między innymi, implementuje algorytm sympleks w bardzo przystępnej formie. Tyle tytułem wstępu. Spójrzmy na prosty przykład.

Zaczynamy od uruchomienia Excel'a. Następnie klikamy tą fikuśną okrągłą ikonę w lewym górnym roku okna i wybieramy Opcje programu Excel. Dalej przechodzimy do zakładki Dodatki i klikamy przycisk Przejdź.



W oknie, jakie się pojawi, wybieramy Dodatek Solver i zatwierdzamy.



Po zatwierdzeniu w zakładce Dane na wstążce pojawi się nowa opcja.



Teraz spróbujmy rozwiązać przykładowe proste zadanie. Załóżmy, że mamy 5 fabryk i chcemy znaleźć lokalizację centrum dystrybucyjnego tak aby suma odległości od wszystkich fabryk była minimalna. Dodatkowe ograniczenie jest takie, że odległość od każdej z fabryk nie może być większa niż 60. Położenia fabryk podane są we współrzędnych kartezjańskich. Odległość pomiędzy fabrykami, a centrum obliczamy przy pomocy standardowego wzoru. Sytuacja początkowa wygląda tak. Dla ułatwienia naniosłem położenia fabryk i początkowe położenie centrum na wykres.



Teraz uruchamiamy Solver. Jako komórkę celu wybieram pole z sumą odległości i zaznaczam, że tą wartość chcę minimalizować. Jako komórki zmieniane wybieram współrzędne centrum. Dodajemy też ograniczenie na odległość każdej z fabryk od centrum. Na koniec uruchamiam obliczenia i klikam Rozwiąż.



Wynik końcowy wygląda w następujący sposób:



To tylko wierzchołek góry lodowej. Dodatek Solver ma dużo większe możliwość i wiele opcji. Można go wykorzystać do harmonogramowania, zdefiniować wiele ograniczeń, ustalić maksymalny czas obliczeń, dokładność uzyskanego wyniku i wiele więcej. Sądzę, że warto sobie zapamiętać, że Excel ma takie możliwości i w razie potrzeby doczytać i douczyć się jak z tego korzystać.

08/12/2014

Wykrywanie nieużywanych elementów bibliografii

Home

Moim zdaniem LaTeX ma wspaniałą obsługę cytowań i bibliografii. Jest to jeden z powodów, dla którego tak lubię go używać np.: bardzo łatwo znaleźć cytowania w formacie rozumianym przez LaTeX'a, nie musimy martwić się o formatowanie, odpowiednie posortowanie czy numerowanie.

Domyślnie jest dodamy jakąś pozycję do bazy danych odnośników literaturowych, a jej nie zacytujemy to w finalnym dokumencie wygenerowanym przez LaTeX'a (np.: PDF) zostanie ona pominięta. Może to być zachowanie pożądane lub nie. Jeśli nie jest z pomocą przychodzi komenda \nocite, w szczególności jej forma \nocite{*}, która powoduje, że cokolwiek dodamy do spisu odnośników to znajdzie się to w finalnym dokumencie w sekcji z bibliografią. W pewnym momencie możemy jednak chcieć uporządkować bazę odnośników i sprawdzić co używamy, a czego nie. Przy dużym dokumencie, z dziesiątkami lub setkami cytowań nie jest to sprawa oczywista.

W takiej sytuacji z pomocą przychodzi, odkryty przeze mnie ostatnio, pakiet refcheck. Po jego włączeniu dla każdego nieużywanego elementu bibliografii, ale także dla każdej nieużywanej etykiety zostanie wygenerowane ostrzeżenie. Dodatkowo nieużywane elementy zostaną oznaczone w wygenerowanym dokumencie przy pomocy etykiet na marginesie dokumentu.

Kolejny raz okazuje się, że czegokolwiek bym sobie nie zamarzył to istnieje już pakiet, który to zapewnia :)

05/12/2014

Latex i drzewa

Home

Wczoraj już późno w nocy zamarzyło mi się umieścić w dokumencie tworzonym w LaTeX'u rysunki drzew binarnych. Początkowo myślałem o narysowaniu ich w jakimś programie graficznym, a następnie wyeksportowaniu do jpg z czym LaTeX już sobie poradzi. Potem pomyślałem jednak, że to nie ma sensu bo z pewnością już ktoś miał taki problem i stworzył odpowiedni pakiet gotowy do użycia. Nie pomyliłem się. Bardzo szybko znalazłem pakiet qtree i już 5 minut później miałem w swoim artykule piękne drzewka. Przykład użycia:.
\Tree[.{L0 - Root} 
 [.{L1 - Left child} 
  [.{L2 - Left child} ] 
  [.{L2 - Right child} ]]
 [.{L1 - Right child} ]]
Efekt końcowy wygląda natomiast następująco:



LaTeX z pewnością jest trudniejszy w użyciu niż taki Word, ale jak już się go poznasz to zrobisz wszystko. Społeczność około LaTeX'owa stworzyła tyle różnych pakietów, że nie pozostaje nic innego jak brać i korzystać.

01/11/2014

Własne komendy w menu kontekstowym Windows'a

Home

Kiedy napiszę jakieś narzędzie to często chcę mieć do niego łatwy dostęp z poziomu menu kontekstowego Windows'a. Już od dłuższego czasu robię to przez dodanie odpowiednich wpisów do rejestru systemowego. W ogólności grzebanie w rejestrze nie jest bardzo przyjemne i istnieje ryzyko, że się coś popsuje. Dlatego też korzystam z następujących wypróbowanych wzorców.

Jeśli polecenie ma być dostępne dla wszystkich plików
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\Shell\COMMAND_NAME]
[HKEY_CLASSES_ROOT\*\Shell\COMMAND_NAME\command]
@="COMMAND"
Jeśli polecenie ma być dostępne dla określonych plików
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.EXTENSION\Shell\COMMAND_NAME]
[HKEY_CLASSES_ROOT\.EXTENSION\Shell\COMMAND_NAME\command]
@="COMMAND"
Jeśli polecenie ma być dostępne dla katalogów
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Shell\COMMAND_NAME]
[HKEY_CLASSES_ROOT\Directory\Shell\COMMAND_NAME\command]
@="COMMAND"

[HKEY_CLASSES_ROOT\Directory\Background\Shell\COMMAND_NAME]
[HKEY_CLASSES_ROOT\Directory\Background\Shell\COMMAND_NAME\command]
@="COMMAND"
W powyższych wzorcach COMMAND_NAME oznacza nazwę opcji jaka pojawi się w menu kontekstowym np.: Shred, EXTENSION to rozszerzenie pliku np.: txt i w końcu COMMAND to skrypt/polecenie jakie ma zostać wykonane po wybraniu przez użytkownika określonej opcji z menu kontekstowego np.: T:\\bin\\shred -n 10 -v -z \"%1\". Zwróćcie uwagę, że przy podawaniu ścieżki stosuję podwójny ukośnik tj. \\ oraz, że cudzysłów wewnątrz polecenia jest poprzedzony ukośnikiem tj. \". Na koniec uzupełnione wzorce należy zapisać w pliku z rozszerzeniem *.reg i przez podwójne kliknięcie na takim pliku dodać go do rejestru. Zmiany będą widoczne natychmiast.

06/10/2014

OxyPlot i nieciągłe przedziały

Home

Od dłuższego czasu używam biblioteki OxyPlot i bardzo ją sobie chwalę. Ostatnio zamarzyło mi się stworzenie wykresu przedziałowego. Na początek stwierdziłem, że wystarczy zastosować zwykły wykres liniowy czyli klasę LineSeries. Załóżmy, że chcemy zaprezentować na wykresy przedziały tj.; (2,3), (4,6) oraz (8,10). Spróbujmy, więc czegoś takiego:
var s = new LineSeries();
s.Title = "Nieciągłe przedziały";
s.Points.Add(new DataPoint(2, 1));
s.Points.Add(new DataPoint(3, 1));
           
s.Points.Add(new DataPoint(4, 1));
s.Points.Add(new DataPoint(6, 1));
        
s.Points.Add(new DataPoint(8, 1));
s.Points.Add(new DataPoint(10, 1));
To jednak nie zadziała gdyż w rezultacie otrzymamy linię ciągłą, czego zresztą należało się spodziewać ponieważ LineSeries po prostu łączy kolejne punkty. Wypróbowałem więc inne rodzaje wykresów, bawiłem się ustawieniami, ale bez rezultatów. Rozwiązanie okazało się jednak bardzo proste. Jeśli nie chcemy, aby dwa punkty zostały połączone linią to pomiędzy nimi należy umieścić punkt o współrzędnych (Double.Nan, Double.NaN).
var s = new LineSeries();
s.Title = "Nieciągłe przedziały";
s.Points.Add(new DataPoint(2, 1));
s.Points.Add(new DataPoint(3, 1));
s.Points.Add(new DataPoint(Double.NaN, Double.NaN));            
s.Points.Add(new DataPoint(4, 1));
s.Points.Add(new DataPoint(6, 1));
s.Points.Add(new DataPoint(Double.NaN, Double.NaN));       
s.Points.Add(new DataPoint(8, 1));
s.Points.Add(new DataPoint(10, 1));
Na koniec jeszcze przykład tak skonstruowanego wykresu:

17/05/2014

Przydaś do rysowania wykresów

Home

Od jakiegoś czasu sporo pracuję z różnymi seriami danych numerycznych np.: sekwencje identyfikatorów metod wywołanych w programie. Serie takie mogą być bardzo długie i potrzebowałem narzędzia, które łatwo i szybko pozwoli mi je wizualizować czyli wygenerować wykres, tak abym mógł szybko ocenić co znajduje się w danym pliku. Kombajnów do rysowania wykresów jest dużo, choćby Excel, ale ja potrzebowałem czegoś jeszcze prostszego. Idealnie abym mógł po prostu zaznaczyć plik z danymi i z menu kontekstowego wybrać polecenie Narysuj wykres. Możliwe, że znalazłbym coś takiego, ale napisanie takie narzędzia samemu zajęło mi dosłownie chwilę.

Po pierwsze zdecydowałem się użyć biblioteki OxyPlot bo jest bardzo prosta w użyciu, a także radzi sobie z długimi seriami danych i pozwala narysować wiele różnych typów wykresów. W drugim kroku stworzyłem bardzo prostą aplikację z jednym oknem w WPF'ie. Do projektu dodałem referencje do bibliotek OxyPlot oraz OxyPlot.Wpf. XAML dla głównego i jedynego okna wygląda w następujący sposób:
<Window x:Class="DrawPlot.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:oxy="http://oxyplot.codeplex.com"
        xmlns:local="clr-namespace:DrawPlot"
        Title="DrawPlot" Height="350" Width="525">
    <Window.DataContext>
        <local:MainViewModel/>
    </Window.DataContext>
    <Grid>
        <oxy:Plot Model="{Binding MyModel}"/>
    </Grid>
</Window>
Trzeci krok to napisanie klasy MainViewModel, która stworzy i zainicjuje obiekt klasy PlotModel. Obiekt ten będzie zawierał informacje potrzebne do narysowania wykresu i przy pomocy binding'u zostanie przekazany do kontrolki Plot. W podstawowej wersji kod tej klasy jest bardziej niż prosty. Zakładam z góry określony format pliku wejściowego tj. każda linia zawiera jedną liczbę, a część ułamkowa musi być oddzielona od części całkowitej kropką. Użyłem klasy LineSeries czyli rysuję wykres liniowy. W poniższym kodzie celowo pominąłem również bardziej przyjazną obsługę błędów czyli jeśli coś się nie powiedzie to po prostu wyświetlam treść błędu i zamykam aplikację.
namespace DrawPlot
{
    public class MainViewModel
    {
        public PlotModel MyModel { get; private set; }

        public MainViewModel()
        {
            try
            {
                var args = Environment.GetCommandLineArgs();

                var lines = File.ReadAllLines(args[1]);

                var lineSeries = new LineSeries();
                for (var i = 0; i < lines.Length; ++i)
                    lineSeries.Points.Add(new DataPoint(i, Double.Parse(lines[i], CultureInfo.InvariantCulture)));

                var model = new PlotModel(Path.GetFileName(args[1]));
                model.Series.Add(lineSeries);
                MyModel = model;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                Application.Current.Shutdown();
            }
        }
    }
}
Ostatni krok to dodanie nowej pozycji do menu kontekstowego. Uzyskałem to przy pomocy dodania odpowiedniego wpisu w rejestrze. W moim przypadku skompilowana aplikacja znajduje się w lokalizacji T:\bin\DrawPlot\DrawPlot.exe.
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell\Draw plot]

[HKEY_CLASSES_ROOT\*\Shell\Draw plot\command]
@="T:\\bin\\DrawPlot\\DrawPlot.exe \"%1\""
Narzędzie jest bardzo proste, ale spełnia swoje zadanie. Możne je również łatwo rozbudować na przykład użyć innego rodzaju serii aby narysować wykres kołowy, dodać obsługę innych formatów plików wejściowych itd.

29/04/2014

This feature has been disabled by your administrator

Home

Jakiś czas temu zacząłem używać pakiety Office 2013. Wszystko było w porządku dopóki nie zorientowałem się, że OneNote przestał synchronizować się z dyskiem SkyDrive. Dokładniej przy próbie zalogowania się do usługi krzyczał komunikatem:

This feature has been disabled by your administrator

Szybko znalazłem ten artykuł, z którego wynikało, że winne mogą być złe wpisy w rejestrze tj.:

HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\SignIn\SignInOptions
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Internet\UseOnlineContent

W moim przypadku ich brakowało, a więc je dodałem ustawiając na domyślne wartości (odpowiednio 0 oraz 3). Potem zrestartowałem OneNote'a. Po ponownym uruchomieniu aplikacja dłużej zastanawiała się co zrobić, ale w końcu znowu wyświetliła ten samym komunikat.

Postanowiłem, więc użyć programu Process Monitor i zobaczyć jakich kluczy używa jeszcze OneNote. Jest ich bardzo dużo, ale dopisało mi szczęście ponieważ zauważyłem,  że na samym początku odczytywany jest następujący klucz:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\15.0\Common\SignIn\SignInOptions

Nie był on wymieniony we wspomnianym artykule, ale jak łatwo zauważyć ścieżka do tego klucza jest prawie taka sama jak do jednego ze wspomnianych kluczy. Postanowiłem, więc skonfigurować go w taki sam sposób czyli ustawić na wartość 0. Okazało się to strzałem w dziesiątkę i teraz OneNote działa mi poprawnie :)

06/04/2014

Zależności funkcyjne - kiedyś mnie tego uczono

Home

Ostatnia przeglądając pytania na stackoverflow.com natknąłem się na takie dotyczące wyznaczania kluczy głównych na podstawie zależności funkcyjnych. Uczono mnie tego na studiach, ale obecnie w praktyce tego nie stosuję i kiedy projektuję bazę danych to nie zaprzątam sobie tym głowy.

Pytanie skłoniło mnie  jednak do odświeżenia sobie wiedzy i sięgnąłem po klasykę w tej dziedzinie czyli "Systemy baz danych" Connollly'ego raz Begg'a. Po kilku minutach lektury okazało się, że w głowie pozostało więcej informacji niż się spodziewałem. Doszedłem jednak do wniosku, że może i zabawa z zależności funkcyjnymi jest dobra dla naszych szarych komórek, ale jednak jest to żmudny proces i fajnie by to zautomatyzować.

Trochę poszperałem w Internecie i znalazłem narzędzie dostępne on-line, które na podstawie zależności funkcyjnych wyznacza klucze kandydujące, weryfikuje w której postaci normalnej jest baza danych itp. Ma ograniczenia, ale zamieszczam link ku pamięci. A to dwa przykłady użycia tego narzędzi do rozwiązania pytań zadanych na stackoverflow.com:
A tak na marginesie. Czy w swojej praktyce zawodowej stosujecie lub znacie kogoś kto stosuje przy projektowaniu relacyjnych baz danych zależności funkcyjne i na tej podstawie sprawdza czy baza danych jest w odpowiedniej postaci normalnej?

24/02/2014

WolframAlpha - ponownie

Home

Rzadko zdarza się aby jakieś narzędzie zaskakiwało mnie tak często i tak przyjemnie jak WolframAlpha (pisałem już o nim tutaj lub tutaj). Po prostu kiedy potrzebuję coś policzyć, sprawdzić i szukam programu lub strony, która to dla mnie zrobi to bardzo często wracam właśnie do WolframAlpha.

Tym razem potrzebował czegoś, co wyznaczy mi linię trendu czyli nic dodać nic ująć tylko tzw. prosta regresja liniowa. Okazało się, że w WolframAlpha służy do tego komenda linear fit. Linia prosta to oczywiście bardzo prosty model, który nie zawsze będzie dobrze działać, ale przy tej okazji odkryłem, że WolframAlpha wspiera również bardziej zaawansowane modele, na przykład komenda cubic fit generuje model w postaci równania trzeciego stopnia. Po więcej przykładów odsyłam do tej strony, zachęcam do zapoznania się i własnych poszukiwań.

A do czego takie modele mogą się przydać? Na przykład do predykcji cen, długości życia w zależności od różnych czynników, liczby odwiedzin strony...

23/12/2013

Problem z Resharper 7.1 i VS 2012 Update 4

Home

Od czasu sławetnej promocji JetBrains jestem szczęśliwym posiadaczem Resharper'a 7.1 Nie będę pisał, że to bardzo dobre narzędzie bo o tym chyba już każdy wie. Niestety jakiś czas temu przestała mi działać opcja Run Unit Tests w Visual Studio 2012 tj. po jej wybraniu testy nie były poprostu uruchamiane. Problem zbiegł się z instalacją Visual Studio Update 4, a więc miałem podejrzenie, że w tym tkwi problem. Ostatnio natknąłem się na ten wątek i okazało się, że miałem rację. Szczęśliwie zainstalowanie najnowszej wersji Resharper'a 7.1 rozwiązało problem.

10/12/2013

"Sztuczka" dla pracujących z danymi hierarchicznymi

Home

Pracuję przy projekcie, którego ważnym elementem jest obsługa tzw. profili inwestycyjnych np.:

Fundusz A inwestuje 10% w Fundusz B i 30% w Fundusz C, a Fundusz C 100% w Fundusz D, który...

Pisząc zapytanie wyciągające takie hierarchiczne chcę szybko podejrzeć wynik w formie graficznej. W końcu jeden obraz wart więcej niż tysiąc rekordów zwróconych przez zapytanie. Kolega (dziękuję Łukasz) polecił mi stronkę GraphViz Workspace, która na życzenie generuje grafy/drzewa na podstawie opisu zgodnego z formatem obsługiwanym oczywiście przez Graphviz.

Ok, ale jak to wykorzystać aby łatwo i szybko wizualizować wynik zapytania? Oto prosty przykład. Zacznijmy od utworzenia tabeli z danymi hierarchicznymi.
CREATE TABLE dbo.Hierarchy
(
 Parent INT,
 Child INT
);

INSERT INTO dbo.Hierarchy(Parent, Child)
VALUES (1,2), (1,3), (1,4), (2,5), (2,6), (4,5), (5,7), (7,8), (6,8);
Następnie wyciągniemy z niej dane, bazując na tym, że w formacie GraphViz węzeł rodzic i węzeł dziecko połączone są strzalką ->:
SELECT CAST(Parent AS VARCHAR) + '->' + CAST(Child AS VARCHAR)
FROM dbo.Hierarchy
Wynik zapytanie wystarczy skopiować i umieścić na stronie GraphViz Workspace:

digraph g{TUTAJ}

Aby otrzymać taki wynik:



Prosto, łatwo i przyjemnie.

01/11/2013

Nowy laptop + SharpKeys

Home

Od kilku tygodni jestem posiadaczem laptopa MSI GE60 2OE-043XPL-128SSD. Czas pokaże więcej, ale w tej chwili poza kilkoma mniejszymi rzeczami jestem zadowolony z dokonanego wyboru. Jednym z takich niedociągnięć jest umieszczenie przycisku "\" pomiędzy spacją, a przyciskiem "Alt". Powodowało to, że notorycznie wciskałem ten pierwszy, kiedy chciałem wpisać polskie litery diakrytyczne. Z pomocą przyszedł mi program SharpKeys. Kilka chwil i udało mi się zmapować kłopotliwy przycisk "\" (który znajduje się również w innym miejscu klawiatury) na "Alt". SharpKeys to program, którego używa się raz i potem się do niego wraca, ale z pewnością potrafi poprawić komfort pracy.

Czy recenzja laptopa MSI GE60 2OE-043XPL-128SSD będzie dla Was interesująca?

16/10/2013

MiKTeX i menadżer pakietów

Home

Częścią MiKTeX'a (implementacja TeX/LaTeX dla Windows'a) jest Menadżer pakietów, który pozwala znaleźć i zainstalować potrzebne nam pakiety, a są ich setki. Co więcej menadżer ten odpala się automatycznie w czasie komplikacji, w momencie kiedy kompilator znajdzie brakujący pakiety, a więc nawet nie musimy dokładnie wiedzieć czego nam brakuje.

Domyślne ustawienia tego narzędzia mogą jednak sprawić kłopoty. Otóż, jeśli tego nie zmienimy, wybrane pakiety będą ściągane z losowo wybranej lokalizacji. Co w tym złego? Otóż, ustawienie to powoduje, że Menadżer pakietów ordynarnie przestaje działać bez żadnego komunikatu o błędzie. Na systemie Windows 7 zachowanie to zaobserwowałem tylko przy automatycznym ściąganiu pakietów. W Windows 8.1 Menadżer pakietów w ogóle nie chciał mi działać.

Nie wiem od czego to dokładnie zależy, ale rozwiązanie jest w każdym razie proste, wystarczy wskazać konkretną lokalizację zamiast losowej. W Menu Start wybieramy MiKTeX X.Y\Maintenance\Settings, następnie zakładkę Packages, klikamy przycisk Change, zaznaczamy opcję Packages should be installed from the Internet i na koniec wybieramy konkretną lokalizację i zatwierdzamy.

28/09/2013

Szybkie tworzenie tabel w TeX/LaTeX

Home

TeX/LaTeX jest potężnym środowiskiem pracy ale ma to swoją cenę. Między innymi niektóre rzeczy robi się w dużo trudniejszy sposób niż w programach takich jak Word czy Excel. Dobrym przykładem jest tworzenie tabel. W TeX/LaTeX trzeba się napracować i wpisać odpowiednią sekwencję poleceń formatujących. Przy małych tabelach można jeszcze zagryźć zęby, ale przy dużych wielokolumnowych zbiorach danych szkoda nerwów. Ja akurat potrzebował przenieść kilka tabel z dokumentu Word do swojego artykułu.

Najpierw skopiowałem, więc tabele z Word'a do Excel'a, a potem skorzystałem z dodatku do Excel'a o nazwie Excel2LaTeX, który dodaje w zakładce Dodatki dwa polecenia: Convert table to LaTex oraz Convert all stored tables to LaTex. Wystarczy zaznaczyć interesujący nas zestaw komórek, wybrać polecenie, a potem wkleić wygenerowaną tabelę do dokumentu *.tex. Ja jeszcze dodatkowo musiałem zaimportować brakujący pakiet tj.: \usepackage{booktabs}.

Polecam też ten artykuł, w którym autor zebrał kilka sposób te wyeksportowanie tabel z programu Excel to TeX/LaTeX.

16/09/2013

Gdzie znaleźć cytowania w formacie BibTeX

Home

BibTeX to narzędzie do tworzenia bibliografii używane przez LaTeX'a. Wpis w bibliografii w formacie wymaganym przez BibTeX'a wygląda na przykład tak:
@inproceedings{komorowski2010configuration,
  title={Configuration management of mobile agents based on SNMP},
  author={Komorowski, Micha{\l}},
  booktitle={Rough Sets and Current Trends in Computing},
  pages={456--465},
  year={2010},
  organization={Springer}
}
Przykład zawiera tylko część z możliwych atrybutów i może być dużo bardziej rozbudowany. Kiedy piszę artykuł nie mam ochoty samemu tworzyć takich wpisów, ale niestety nie zawsze razem z artykułem znajdziemy przygotowany wcześniej wpis dla BibTeX'a. W takim wypadku polecam skorzystać ze strony ACM Digital Library lub Google Scholar.

W pierszym portalu po znalezieniu artykuły u góry, z prawej strony zobaczymy pole Tools and Resources, a w nim link BibTeX. Po jego kliknięciu otrzymamy sformatowane cytowanie. W przypadku Google Scholar po znalezieniu publikacji klikamy link Cytuj, a następnie Zaimportuj do programu BibTeX. Z mojego doświadczenia wynika, że cytowania wygenerowane przez oba programy są sobie równoważne, te wygenerowane przez ACM Digital Library są trochę obszerniejsze ale przeważnie i tak nie używamy wszystkich możliwych atrybutów.

14/09/2013

LEd i nowa wersja MiKTeX

Home

Z MiKTeX'a czyli implementacji systemu składu tekstu TeX/LaTeX dla Windows'a oraz programu LEd wspomagającego pracę z TeX/LaTeX'em korzystam już od bardzo dawna. Ponieważ należą do osób, które nie wyczekują wszelkiego rodzaju aktualizacji z drżącym sercem i instaluję je dopiero kiedy jest mi to rzeczywiście potrzebne to do tej pory zadowalałem się wersją MiKTeX 2.5 i pewnie pracowałbym z nią jeszcze długo, gdyby nie okazało się, że nie jest już wspierana i nie mogą ściągnąć potrzebnych mi pakietów.

Pobrałem więc najnowszą wersję 2.9, zainstalowałem, zmieniłem ścieżkę w zmiennych środowiskowych, a także dostosowałem ustawienia LEd'a wskazując katalog z nową wersją Configuration->Options->Application->DVI Viewer->TeX Executables. Następnie uruchomiłem kompilację projektu i LEd bez ostrzeżenia wywalił się. Spróbowałem otworzyć projekt jeszcze raz ale tym razem nawet to było niemożliwe. Usunąłem, więc wszelkie stworzone pliki tymczasowe i spróbowałem jeszcze raz otworzyć projekt. Tym razem udało się ale tak czy inaczej kompilacja znowu się nie powiodła. Kilka kolejnych prób zakończyło się tak samo. W logu systemowym nie znalazłem żadnych błędów.

Zacząłem więc dokładnie przyglądać się konfiguracji LEd'a i okazało się, że przeoczyłem jedną opcję Configuration->Options->Application->DVI Viewer->TeX distribution. Ustawiona była na MiKTex2.5 co wydało mi się podejrzane. Na liście nie widziałem jednak opcji MiKTeX2.9 ale za to znalazłem opcję based on MiKTeX. Spróbowałem i zadziałało.

Mam nadzieję, że to oszczędzi komuś czasu i nerwów.

05/02/2013

WolframAlpha

Home

WolframAlpha to ambitny projekt stworzenia silnika, który umiałby odpowiadać na pytania wyrażone w języku naturalnym, a co więcej odpowiedzią nie byłaby sucha lista stron w Internecie, ale zbiór faktów stanowiących odpowiedź na pytanie. O tym przedsięwzięciu wiedziałem już od dłuższego czasu, ale traktowałem je raczej jako nowinkę i go nie używałem.

Ostatnio kolega zwrócił mi jednak uwagę na możliwość rozwiązywania równań przy pomocy tego silnika. Od tej pory przestałem traktować go tylko jako ciekawostkę i jest pod ogromnym wrażeniem tego projektu, zastosowanych w nim algorytmów, no i oczywiście umiejętności programistów.

Może mały przykład. Jakiś czas temu inny kolega wysłał mail'a z zaproszeniem do poczęstunku z okazji urodzin, ale swój wiek podał w taki oto sposób:



Prawa część równania nie stworzy chyba nikomu problemów. Gorzej jednak z tą całką i sumą szeregu matematycznego, chociaż wyglądają znajomo. Kiedy byłem świeżo po kursie analizy matematycznej pewnie obudzony w środku nocy, po libacji alkoholowej, podałbym wynik bez zastanowienia ;) Teraz jednak, zamiast przypominać sobie wzory, wklepałem to równanie do WolframAlpha:

sum x = 1 to infinity 1/x^2)/(integral from -1 to 1 (1-x^2)^0.5)^2*(2^2^3 - 2^2^2)/2^2

i w mgnieniu oka uzyskałem wynik. Silnik potrafi również rysować wykresy, rozpoznaje rodzaje funkcji np.: powie, że zadane równanie to paraboloida, liczy pochodne, wyznacza nie tylko wartość całki oznaczonej, ale również potrafi policzyć całkę nieoznaczoną, rozwiązuje równania różniczkowe oraz robi pewnie setki innych rzeczy, o których jeszcze nie mam pojęcia. W każdym razie WolframAlpha na stałe zagości w moim przyborniku.

16/11/2011

Hawkeye

Home

Hawkeye .NET Runtime Object Editor to program, który znalazłem w sieci dobre dwa lata temu. W tym czasie wielokrotnie mi się przysłużył, a jest przydatny w szczególności tym, którzy pracują z technologią Windows Forms. W skrócie, pozwala modyfikować UI działającej aplikacji. Jego użycie jest proste. Wskazujemy myszką interesujący nas fragment aplikacji, a Hawkeye oznacza wybraną kontrolkę przy pomocy czerwonej ramki i wyświetla listę właściwości i prywatnych pól klasy, których wartości możemy modyfikować. Jak by tego było mało, Hawkeye pozwala również dynamicznie wywoływać metody dla wybranych obiektów.

Zastanawiamy się jak nasza aplikacja będzie wyglądać z różowym tłem? Chcemy przesunąć na próbę kontrolkę o 2 piksele w prawo? A może chcemy nacisnąć przycisk, który jest nieaktywny? Te i inne rzeczy osiągamy zmieniając wartości odpowiednich właściwości, w tym przypadku odpowiednio: BackColor, Location, Enabled. W trzecim wypadku możemy też wywołać dynamicznie metodę PerformClick. Pozwala to w łatwy i przyjemny sposób zobaczyć, jak przy danych ustawieniach, będzie w runtime'ie będzie wyglądała nasza aplikacja, bez potrzeby jej rekompilacji.

Hawkeye pozwala również poruszać się w hierarchii kontrolek tworzących interfejs i sprawdzić kto jest rodzicem interesującej nas kontrolki. Podaje też pełną nazwę klasy dla aktualnie wybranego obiektu. Przydaje się to, kiedy pracujemy z dużą, skomplikowaną aplikacją i chcemy dowiedzieć się gdzie u licha znajduje się kod obsługujący aktualnie widoczną kontrolkę. Przykład z życia. Ostatnio kumpel potrzebował znaleźć kod odpowiedzialny za pewną część UI. W tym celu chciał wyświetlić designera dla interesującego go okna i na tej podstawie dojść do kontrolki. Niestety Visual Studio odmówiło posłuszeństwa i przy próbie wyświetlenia designera raportowało błąd. Hawkeye rozwiązał problem w kilka minut.

Uwaga! Na dzień dzisiejszy, na stronie programu znajdują się jego dwie wersje do pobrania. Jedna działa tylko z aplikacjami skompilowanymi na platformę .NET 4, a druga z aplikacjami skompilowanymi na starsze wersje platformy.

24/10/2011

PrintScreen

Home

Ostatnimi czasy zdarzyło się, że musiałem intensywnie korzystać z przycisku Print Scrn, tworzyć wiele zrzutów ekranu, a potem jeszcze edytować je w programie graficznym. W pewnym momencie stwierdziłem, że proces ten trzeba jakoś zautomatyzować. Z pomocą przyszedł program PrintScreen.

W wersji podstawowej jest bezpłatny. Reaguje na standardowy przycisk Print Scrn ale można to zmienić. Zrzuty ekranu wypluwa w wybranym formacie, do wskazanego katalogu. Nazwy plików mogą być generowane automatycznie np.: ScreenSchot001, ScreenSchot002 itd. Bardzo spodobało mi się to, że jeśli usuniemy np.: plik ScreenSchoot002 i w ten sposób powstanie luka w numeracji to zostanie ona zapełniona przez następny plik. Program umie również wyświetlić podgląd zrzutu, a przed zapisaniem na dysk umożliwia np.: zmianę wielkości obrazka. W zależności od konfiguracji robi zrzut całego ekranu, wybranego okna lub wskazanego fragmentu.

Nie jest to nic co przyprawia o zawrót głowy ale doskonale spełnia swoją funkcję - po prostu kawał dobrze wykonanej roboty. Program ten zagości na stale w mojej skrzynce narzędziowej i polecam go każdemu komu nie wystarcza standardowa funkcjonalność systemu operacyjnego dotycząca tworzenia zrzutów ekranu.

27/07/2011

IntelliTrace - Reaktywacja

Home

Już kawał czasu temu w artykule Używanie IntelliTrace poza Visual Studio 2010! opisałem w jaki sposób uruchomić narzędzie IntelliTrace poza środowiskiem Visual Studio 2010. Przedstawiona przeze mnie metoda miała jednak wadę. Log z nagranym przebiegiem wykonania programu zawierał "tylko" informację o wywołaniach metod czyli drzewo wywołań, a brakowało w nim informacji o zdarzeniach diagnostycznych czyli ważnych punkty w historii wykonania programu np.: wykonanie zapytania do bazy danych.

Ostatnio udało mi się znaleźć ostatni element układanki. Otóż aby log IntelliTrace zawierał wszystkie niezbędne informacje wystarczy wykonać, oprócz opisanych już przeze mnie rzeczy, jeszcze jeden krok czyli zmodyfikować plik CollectionPlan.xml z planem działania/konfiguracją narzędzia. Znajdujemy w nim linię:
...
<DiagnosticEventInstrumentation enabled="false">
...
i zamieniamy na:
...
<DiagnosticEventInstrumentation enabled="true">
...