piątek, maja 18, 2012

Notatki deweloperskie

Różnorodne linki:

Fenix de Icaza

Okazało się, że żywotność Mono jest wielka, kiedy wydawało się, że to koniec drogi gdy firma Novel (opiekun i właściciel praw do Mono i Mono Touch) została wykupiona przez Attachmate. Jednak twórca Mono założył nową firmę Xamarix i nabył prawa do używania Mono. W wyniku tego mamy nowe wersje, już płatne MonoDeveloper IDE 2.8, MonoTouch Enterprise (dla Apple), Mono for Android oraz wtyczkę do VS pod nazwą Mono for Android Visual Studio plug-in. Nie wiadomo czy idea programowania w C# na telefony z Androidem wypali (java w końcu nie różni się tak bardzo od C#) ale z drugiej strony Mono for Android tworzy aplikacje natywne najbardziej zbliżone do GUI aplikacji w Javie. Żróło - http://www.devproconnections.com/content1/topic/xamarin-monotouch-mono-android-141871/catpath/mobile-development. Zawsze podziwiałem Mono za jego żywotność i wielość różnych bibliotek dostępnych dla programistów w .NET.

Osobiście myślę, że lepiej będzie skupić się na narzędziach do tworzenia aplikacji dostępnych od Google (nawet AppInventor) lub Phone Gap.

wtorek, maja 15, 2012

Raport na temat Crystal Reports

Źródło - http://wiki.sdn.sap.com/wiki/x/7YPqDQ

Niełatwo się połapać w zawiłościach wersji CR firmy SAP. Ogólnie można powiedzieć, że mamy dwie wersje:

  1. Crystal Reports 2011 (najnowsze wydanie)  pakietu przeznaczonego dla “zwykłych” deweloperów nie mających potrzeb integrowania się z maszynerią backend-ową SAP (a więc BI 4.0), pragnących jedynie sprawnego narzędzia do podłączenia się do źródła danych i ładnego sformatowania wyników. Takich narzędzi jest na rynku wiele np.: Jasper, iReport, Delphi też coś ma, MS. CR 2011 jest płatne ale okrojone wersje, dla deweloperów Java (CR for Eclispse)  i .NET (CR for VS2010) do zabudowania w istniejące aplikacje, są za darmo.
  2. Crystal Reports for Enterprise – jak nazwa wskazuje ukierunkowane na wykorzystanie w ciężkich warunkach korporacyjnych i wraz z BusinessObjects BI 4.0 (ciekawa kombinacja słów BO i BI co przez to chciano zakomunikować?) ma przeciągnąć klientów korporacyjnych (czytaj – związać) z SAP-owską platformą BI oraz z połączeniem do danych innych systemów SAP-owskich np. SAP BW.

Ten dualizm będzie kontynuowany z uwagi na szeroką bazę istniejących rozwiązań i przywiązań deweloperów. Mówi się o dołączeniu do CR4E możliwości z CR ale to może potrwać. Nawet po tym fakcie zbliżenia CR będzie nadal rozwijany i ulepszany dlatego, że nie wszystkie możliwości funkcjonalne oraz związane z nimi SDK obecne w CR będą przeniesione do CR4E. Jest to nieudolne tłumaczenie tego paragrafu z oficjalnej strony SAP z artykułu pt. “From Crystal Reports 2008 to SAP Crystal Reports 2011 or SAP Crystal Reports for Enterprise” (kto się nie zgadza z taką interpretacją niech mi da znać):

The first question we usually come across is: Why are you releasing two versions? The reason behind the two versions is due to the need to innovate alongside the need to continue providing our existing customers with the ability to use CR as they have in the past. We have been working on this new version of Crystal Reports for about 4 years. We felt that, with the release of SAP BusinessObjects BI 4.0, it gave us a unique opportunity to release the new designer to a target audience of customers who leverage the BI platform and connect to data from SAP BW.  As mentioned, we wanted to continue providing the features with which our existing customers were familiar. As such, we needed to continue delivering Crystal Reports in it's current form as well. In the future, many of the features with which are customers are familiar from Crystal Reports 2008 will move into the Crystal Reports for Enterprise designer; however, this will take a few minor releases to achieve. Even when we have closed the major gaps between Crystal Reports for Enterprise and Crystal Reports 2008, we will continue to deliver and support minor enhancements to the Crystal Repots 2008 / Crystal Reports 2011 line of products. This will be required as not every feature from the designer and associated SDKs will be moved into the Crystal Reports for Enterprise product line

CR4E jest NOWĄ WERSJĄ CR skierowaną na lepszą integrację z istniejącym rozwiązaniami korporacyjnymi SAP - wykorzystaniem warstwy semantyczne dostępnej w BI 4.0 oraz dostępu do danych w repozytorium SAP BW (połączenie SAP BEx query wykorzystujące SAP BICS connectivity). Ma być podstawą wszystkich przyszłych  wersji CR.

Ciekawe porównanie możliwości obu wersji i zalecenia którą z nich wybrać – jeżeli obecnie korzysta się z CR 2011 i chce się skorzystać z nowej warstwy semantycznej oraz możliwości platformy BI 4.0 (tj. SAP NetWeaver BW 7, Analysis Views, SAP BusinessObjects BI4.0 relational universe (unx), olap universe (unx)) to warto przejść na CR4E, jeżeli potrzebujemy narzędzia do raportowania, dostępu bezpośredniego do różnych źródeł danych, Live Office, Business View, Direct RDBMS/OLAP, SAP ERP czy SAP NetWeaver BW 3.5 to raczej lepiej pozostać przy CR – jest to tłumaczenie z “In general if you are currently using Crystal Reports 2008 and you want to leverage the new semantic layer and the new BI4.0 platform then SAP Crystal Reports for Enterprise is the version of choice. If you require report creation API, direct data access, SAP ERP access then SAP Crystal Reports 2011 is the version of choice.

Dodatkowe informacje:

poniedziałek, maja 14, 2012

Szukanie metadanych w Crystal Reports

Okazuje się, że dzięki doskonałej dokumentacji na stronach SCN SAP można stworzyć programik, który przejdzie po obiektach raportu i jego podraportów i “zaraportuje” swoje wyniki:
 
   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using CrystalDecisions.CrystalReports.Engine;
   6:  using CrystalDecisions.Shared;
   7:  // How to find the ReportObjects in the Crystal Report using Crystal reports .NET SDK? Saurabh Pathak (SCN Community)
   8:  namespace PrzeszukiwanieObiektowRaportuCR
   9:  {
  10:      class PrzeszukiwanieObiektowRaportuCR
  11:      {
  12:          static void Main(string[] args)
  13:          {
  14:              string raport = "dokumentydostawyekkw.rpt";
  15:              raport = "Listprzewozowy.rpt";
  16:              ReportDocument rpDok = new ReportDocument();
  17:              rpDok.Load(raport);
  18:              Console.WriteLine("Opis definicji raportu "+ raport);
  19:              foreach (ReportObject obiekt in rpDok.ReportDefinition.ReportObjects)
  20:              {
  21:                  Console.WriteLine("1"+ obiekt.Name + "\t"+ obiekt.Kind.ToString() + "\t" + obiekt.ObjectFormat.ToString());
  22:              }
  23:              if (rpDok.Subreports.Count > 0)
  24:              {
  25:                  Console.WriteLine("Podraporty...");
  26:                  foreach (ReportDocument rdok in rpDok.Subreports)
  27:                  {
  28:                      Console.WriteLine(" 2 " + rdok.Name);
  29:                      foreach (ReportObject obiekt in rdok.ReportDefinition.ReportObjects)
  30:                      {
  31:                          Console.WriteLine("  3" + obiekt.Name + "\t" + obiekt.Kind.ToString() + "\t" + obiekt.ObjectFormat.ToString());
  32:                      }
  33:                  }
  34:              }
  35:              else
  36:              {
  37:                  Console.WriteLine("Ten raport nie ma zagnieżdżonych raportów");
  38:              }
  39:              Console.ReadLine();
  40:          }
  41:      }
  42:  }



Nie jest to wcale trudne jak widać!

Szukanie metadanych w Crystal Reports

Okazuje się, że dzięki doskonałej dokumentacji na stronach SCN SAP można stworzyć programik, który przejdzie po obiektach raportu i jego podraportów i “zaraportuje” swoje wyniki:
 
   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using CrystalDecisions.CrystalReports.Engine;
   6:  using CrystalDecisions.Shared;
   7:  // How to find the ReportObjects in the Crystal Report using Crystal reports .NET SDK? Saurabh Pathak (SCN Community)
   8:  namespace PrzeszukiwanieObiektowRaportuCR
   9:  {
  10:      class PrzeszukiwanieObiektowRaportuCR
  11:      {
  12:          static void Main(string[] args)
  13:          {
  14:              string raport = "dokumentydostawyekkw.rpt";
  15:              raport = "Listprzewozowy.rpt";
  16:              ReportDocument rpDok = new ReportDocument();
  17:              rpDok.Load(raport);
  18:              Console.WriteLine("Opis definicji raportu "+ raport);
  19:              foreach (ReportObject obiekt in rpDok.ReportDefinition.ReportObjects)
  20:              {
  21:                  Console.WriteLine("1"+ obiekt.Name + "\t"+ obiekt.Kind.ToString() + "\t" + obiekt.ObjectFormat.ToString());
  22:              }
  23:              if (rpDok.Subreports.Count > 0)
  24:              {
  25:                  Console.WriteLine("Podraporty...");
  26:                  foreach (ReportDocument rdok in rpDok.Subreports)
  27:                  {
  28:                      Console.WriteLine(" 2 " + rdok.Name);
  29:                      foreach (ReportObject obiekt in rdok.ReportDefinition.ReportObjects)
  30:                      {
  31:                          Console.WriteLine("  3" + obiekt.Name + "\t" + obiekt.Kind.ToString() + "\t" + obiekt.ObjectFormat.ToString());
  32:                      }
  33:                  }
  34:              }
  35:              else
  36:              {
  37:                  Console.WriteLine("Ten raport nie ma zagnieżdżonych raportów");
  38:              }
  39:              Console.ReadLine();
  40:          }
  41:      }
  42:  }



Nie jest to wcale trudne jak widać!

czwartek, maja 10, 2012

Zebrane linki z Chrome w domu (wg. mnie ciekawe)

Dla dzieci:

1) http://kopalniawiedzy.pl/
2) http://www.fizykon.org/

Dla dorosłych programistów:

1) Linki do closures w JS - http://www.javascriptkit.com/cgi-bin/search/search.cgi?zoom_query=closure&zoom_per_page=10&zoom_and=1&zoom_sort=0&zoom_cat%5B%5D=1
2) Wyr. reg. - http://www.javascriptkit.com/javatutors/re.shtml np.:
<script language="JavaScript1.2">
    function checkpostal(){
    var re5digit=/^\d{5}$/ //regular expression defining a 5 digit number
    if (document.myform.myinput.value.search(re5digit)==-1) //if match failed
    alert("Please enter a valid 5 digit number inside form")
    }
    </script>

    <form name="myform">
    <input type="text" name="myinput" size=15>
    <input type="button" onClick="checkpostal()" value="check">

    </form>
3) htmlshell - http://htmlshell.com/
4) Kurs jQ z MSDN z serii Aplikacje internetowe - są też i inne:
  http://msdn.microsoft.com/pl-pl/library/jquery--selektory.aspx
  http://msdn.microsoft.com/pl-pl/library/jquery--zdarzenia
  http://msdn.microsoft.com/pl-pl/library/jquery--animacje
5) Dodatek do jQ - Data Tables - http://datatables.net/extras/
6) Addy Osmani o operatorach logicznych w js - http://addyosmani.com/blog/exploring-javascripts-logical-or-operator/
7) Tam też wiele linków do bezpłatnych materiałów np. http://addyosmani.com/toolsforjqueryapparchitecture/
8) O PDF i iText:
    http://www.4guysfromrolla.com/articles/030211-1.aspx
    http://www.4guysfromrolla.com/articles/030911-1.aspx
9) Sign SOAP - http://www.java2s.com/Code/Java/JDK-6/SignSOAPmessage.htm
10) Asymme. Cryptography - http://www.java2s.com/Code/CSharp/File-Stream/Illustratesasymmetriccryptography.htm
11) Wstęp do WCF:
    http://msdn.microsoft.com/en-us/library/ee958158.aspx
    ! http://msdn.microsoft.com/en-us/magazine/dd315413.aspx
    ! http://www.maciejaniserowicz.com/post/2010/03/01/WCF-Auth-starter-zalazek-aplikacji-klient-serwer-z-uwierzytelnianiem-usernamepassword.aspx
Zasoby WCF na eggheadcafe - http://www.eggheadcafe.com/searchform.aspx?search=WCF

Dotnetmaniak - http://dotnetkicks.com/tipsandtricks/C_WebClient_Usage:

Ciekawe strony do ogólnego rozwoju

Nauki ścisłę:

Ważne (jeszcze aktualne)linki do Crystal Reports

środa, maja 09, 2012

Zasoby JS i nie tylko z MSDN

MSDN ma czasopismo “MSDN magazine” (poszukiwanego tematu np. “WCF” można poszukać poprzez wybranie opcji “Topics” na górze) oraz portal “Script Junkie”. Oba te miejsca dosyć gruntownie traktują o technologiach JS i .NET.

Ciekawe pakiety z NuGet dla wsparcia WCF (z wykorzystanie OAuth):

Odwieczny temat, pozbycie się niektórych wad JS (mimo książki “JS Good Parts”) – chodzi o podejście do zamykania (closures).  O tym rozpisywało się wiele autorytetów np. Vogel, Papa, Addy Osmani, Crockford, Hanlock, Hudlock. Tym razem mam inne źródła:

Teraz pora na biblioteki dodatkowe do JS, KnockOut i JQ wraz z wtyczkami do nich:

 

    Co tam panie w CR?

    Jak zwykle dużo jest na facebooku. Tam znalazłem:

    1. Rozbiegówka do Crystal reports - http://scn.sap.com/community/crystal-reports
    2. Video – z zasobów twarzo-ksiażki: http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/60187541-dd10-2e10-41a3-bc5d3f3e4ae9&overridelayout=true

    Skryptowanie w JS

    Nauka jQ - http://www.learningjquery.com/.  Przygotowanie do bindowania - $("div").data("imaDiv", true) – oznacza to przypisanie do jakiegoś div-a nowej zmiennej o wartości ‘true’.

    Fundamentem każdej strony wysyłającej dane od klienta do serwera jest kontrola danych zarówno po stronie klienta jak i po stronie serwera z jednakowym naciskiem na szczegółowość kontroli po obu stronach. Tak twierdzi Tim Kulp na stronach wirtyny MSN ScriptJunkies w artykule “Lockdown Pt 2 – Sanitazation and Data Security”. Pierwszy etap kontroli do tzw. Input Validation, drugi to Sanitazation and Data Security. Niebezpieczeństwo wynika z korzenia architektury maszyn von Neumana – dane są traktowane jako kod. W przypadku JS i HTML powoduje to możliwość ataku poprzez podsunięcie pod ciąg zawierający dane jakiegoś kodu i nosi to nazwę XSS (Cross Site Scripting) – opis tego rodzaju ataków jest omówiony w innym artykule na MSDN. Sanitazacja oznacza wyczyszczenie danych ze szkodliwego kodu. Istnieją po stronie klienta (przeglądarki z JS)  bezpłatne biblioteki do czyszczenia kodu – ESAPI4JS (OWASP) i jquery-encoder (wtyczka do jQ). Przesyłane dane można szyfrować przy pomocy biblioteki jCryption (ma ona wersję zarówno dla php jak i js). Proszę się nie obawiać tego, że algorytmy szyfrowania są dostępne w kodzie źródłowym – bez obaw, podstawą bezpieczeństwa jest KLUCZ a nie sposób jego użycia. Cz. I teo artykułu mówi o procesie Input Validation w oparciu o metodykę NIST i OWASP (OWASP Top Ten project) - http://msdn.microsoft.com/en-us/magazine/hh314542.aspx.

    piątek, kwietnia 13, 2012

    Ciekawostki

    Index Tiobe pokazuje spadek Java (po niechlubnej wpadce z Apple) z pierwszego miejsca na drugie (pierwszą pozycję zajął C!), zaskakuje pojawienie się w pierwszej 50 języka zapuszczonego przez Microsoft – Visual FoxPro (42 miejsce).

    Portal ‘scriptsearch’ ma wiele ciekawych nowości:

    Nauka rozszerzenia z Devexpress –   CodeRush - http://devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/. Bardzo pouczająca jest pierwsza lekcja - http://tv.devexpress.com/#TATIntroCodeRush;CodeRush+with+Refactor!+Pro.product;1, ale czy to nie upośledza programisty i zwalnia go od myślenia?

    Nauka HTML 5 - http://www.htmlgoodies.com/html5/client/unleash-the-power-of-hardware-accelerated-html5-canvas.html?eml=marekw%40coig.katowice.pl#fbid=f7Rae44D2qj

    Nauka w wirtualnym laboratorium MS - https://www.microsoftvirtualacademy.com/Studies/SearchResult.aspx

    Nauka JS – uniwersalny portal JS - http://www.impressivewebs.com/javascript-resources-web-app-developers/ – robi wrażenie, tamże bardzo wyczerpująco o wzorcach projektowych w JS - http://addyosmani.com/resources/essentialjsdesignpatterns/book/#writingdesignpatterns – znanego autora Addy Osmani

    środa, kwietnia 11, 2012

    Od nadmiaru Javy głowa boli

    Artykuł w infoworld na temat zainfekowania wirusem komputerów Apple jest skierowany do zachęcenia zaprzestania korzystania z Javy, w przeglądarce internetowej jest ona równie niebezpieczna jak osławiony ActiveX (MS sam zresztą go pogrzebał, ale wtedy Sun triumfował z jakoby bezpieczną technologią java applet). Teraz widać, że hackerzy przerzucili się na inne platformy jak Android, iOS, Java, Flash gdzie jest jeszcze dużo do zrobienia. Nie bez znaczenia w ułatwianiu ataku jest osłabienie czujności klientów uważających swe platformy za bezpieczne. Ostatni atak wirusa/trojana Flashback nie poszedłby tak gładko na platformie Windows gdzie są bardziej wyedukowaniu ludzi i stosujący regularne patchowanie systemu.

    Artykuł ten wręcz mówi o konieczności zaprzestania korzystania z Java. A jest jej blisko 3 mld instalacji na świecie.

    piątek, marca 30, 2012

    Takie sobie ciekawostki

    Początki języka GO firmy Google – jest już wersja 1.0. Tutoriale są tutaj - https://developers.google.com/appengine/docs/go/gettingstarted/helloworld?hl=pl. Jest to trzeci język obok Java i Python który potrafi obsłużyć Google Apps Engine. Co można powiedzieć o tym kierunku? Idzie o uproszczenie programowania trudnych i powtarzalnych fragmentów kodu, np. pisanie obsługi strony www sprowadza się do utworzenia tzw. handler’a danego zapytania (podobnie jak w WCF_, który nakierowywał by dane żądanie ( wg. wzorca URL w adresie) do odpowiedniej funkcji obsługi. Kiedyś musiało to być szybkie i efektywne (najlepiej w C/C++), potem jak moc komputerów wzrosła i pojawiła się Java to dominujące znaczenie miała prostota – dlatego powstały frameworki do uproszczenia i zwiększenia niezawodności obsługi np. AXIS, REST. Podobnie było w C# i cała technologia REST/WCF.Ale i to nie było dobre ponieważ działały one zanurzone w dość skomplikowanym języku Java. Dalsze, radykalne uproszczenie pojawiło się z nastaniem Pythona wyposażonego w różne “baterie”. Ale Google to za mało – wymyśliła jeszcze bardziej prosty język to jest GO. Język ten jest uniwersalny i można w nim pisać różne rzeczy. Przykład prostego handlera:

    package hello

    import (
        "fmt"
        "net/http"
    )

    func init() {
        http.HandleFunc("/", handler)
    }

    func handler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprint(w, "Hello, world!")
    }

    Z GO jest podobnie jak z NODE.JS – idealnie upraszcza sprawę oprogramowania strony serwerowej aplikacji internetowych, ale gorzej jeżeli chodzi o wydajność. Mało firm może sobie pozwolić na eksperymenty z tymi nowymi skryptowymi językami w sytuacji kiedy nie dysponuje zasobami sprzętowymi jak Google, ciągle liczy się wydajność a nie elegancja kodu.

    Inny temat związany z Google – zapewnienie prywatności i jej monitorowanie. W odpowiedzi na liczne uwagi na ten temat Google udostępni nowy monitor prywatności użytkownika - https://www.google.com/settings/general?hl=en.

    środa, marca 28, 2012

    Ciekawostki programistyczne

    Niezwykle ciekawe linki do dokumentacji o CR:

    Niezwykle ciekawe zasoby z MS:

    Niezwykle ciekawe zasoby nt. Java: http://www.greenfoot.org/download/

    Niezwykle ciekawe na temat JS:

    Niezwykle ciekawe zasoby na temat .NET:

    Nowe narzędzia dla przeglądarek internetowych

    Świetny artykuł w infoworld na temat narzędzi wspomagających WebDevelopera. Oto one:

    Aplikacje na Androida

    Na TechRepublic jest autor piszący dużo na temat tworzenia aplikacji na Androida – William Francis. Jeden z jego artykułów traktuje o obsłudze aplikacji RESTFull - http://www.techrepublic.com/blog/app-builder/calling-restful-services-from-your-android-app/1076?tag=content;siu-container. Warto się temu przyjrzeć. Jeszcze jeden opis pełnej aplikacji - http://www.techrepublic.com/blog/app-builder/create-your-own-android-sound-board/334?tag=content;siu-container.

    Inny portal codeproject zamieścił super artykuł “Android: How to communicate with .NET application via TCP” o komunikacji między Androidem a aplikacją w .NET poprzez użycie niestety płatne dla celów komercyjnej platformy Enter Messaging Framework.

    Porównanie JQ z Kendo UI - http://jqueryuivskendoui.com/

    piątek, marca 09, 2012

    Szczegóły kontrolki DataGridView cz.1

    Jest to drugie pokolenie “siatki” danych po DataGrid, może “łyknąć” do 100 tyś. wierszy i jest jeszcze bardziej skomplikowana od swego poprzednika. Idea działania jest taka: pobierz dane lokalnie, zrób z nimi co chcesz a potem spróbuj zapisać je z powrotem na serwer. Korzysta z zasady buforowania optymistycznego – tj. konflikty w danych rozstrzygane są dopiero przy próbie zapisu, dzięki temu nie ma blokady dostępu.

    W sieci jest mnóstwo zasobów na ten temat, takie najbardziej “ludzkie” to:

    1. http://www.dotnetperls.com/sqldataadapter
    2. http://stackoverflow.com/questions/710064/adding-text-to-datagridview-row-header
    3. kapitalna prezentacja - http://windowsclient.net/learn/video.aspx?v=13402

    czwartek, marca 01, 2012

    Ciekawostki dla programistów

    Firmowana przez portal ZURB strona prezentująca ciekawe skrypty o “wadze” poniżej 10K - http://10k.aneventapart.com/1/Entry/91. Galeria wszystkich oraz wybranych jako najlepsze jest tu - http://10k.aneventapart.com/1/.

    Eric Lippert – znany bloger z MS ma bardzo ciekawe artykuły o wnętrznościach .NET-u - http://blogs.msdn.com/b/ericlippert/archive/tags/brittle+base+classes/

    Wrzawa na temat braku prywatności w sieci - http://blogs.computerworld.com/19770/apple_google_reach_privacy_deal_but_is_it_enough?source=CTWNLE_nlt_blogs_2012-02-23. Masz do  końca lutego czas na wymazanie swojej tożsamości - http://www.itworld.com/security/252290/last-day-tell-google-forget-you?source=ITWNLE_nlt_top10_2012-02-24

    Dlaczego powstają procesory wielordzeniowe? Może tu działa nie zasada Moore’a – coraz trudniej podnieść taktowanie zegara procesora bez podwyższenia jego temperatury, lepiej zrobić tak: wstawić KILKA wolniejszych CPU z mniejszą emisją ciepła, postawić układ koordynujący ich pracę  i nazwać to układem WIELORDZENIOWYM (multicore).

    poniedziałek, lutego 20, 2012

    Ciekawe linki

    Świetny kurs JS - http://jqfundamentals.com/book/index.html, a informacja pochodzi ze strony - http://citizen428.net/blog/2010/08/12/30-free-programming-ebooks/. Praca z PDF-ami. Zapełnienie formularza przygotowanego w PDF-ie poprzez program - http://www.codeproject.com/Articles/23105/Programmatically-Complete-PDF-Form-Fields-using-Vi. Uproszczone wprowadzenie do szyfrowania w .NET - http://www.codeproject.com/Articles/10154/NET-Encryption-Simplified.

    Ciekawy artykuł na temat parsowania formatu PDF - http://www.codeproject.com/Articles/12445/Converting-PDF-to-Text-in-C.  Autor przucił bibliotekę itext na rzecz PDFBox. (piękny link z muzyką - http://pdfbox.org/sugar-hill-gang-apache-jump-on-it/). Aktualny link do ściągnięcia – PDFBOX –> http://sourceforge.net/projects/pdfbox/files/latest/download?source=files. To wszystko działa dzięki IKVM.NET. Inny projekt to scalanie plików PDF - http://www.codeproject.com/Articles/28283/Simple-NET-PDF-Merger.

    Podpis cyfrowy PDF – opis jak to zrobić - http://www.codeproject.com/Articles/14488/E-signing-PDF-documents-with-iTextSharp wraz z kodami źródłowymi oraz podobna biblioteka - http://www.codeproject.com/Articles/29274/Digital-Signatures.

    Super cytat – “He usually works late hours with some heavy music and prefers to test and prove everything to his own satisfaction before committing himself and likes to finish what he starts without interruptions. ” z http://www.codeproject.com/Articles/6623/Porting-Java-Public-Key-Hash-to-C-NET na temat wymiany kluczy między Javą (Unix) a .NET-em.

    Wymienialność kryptograficzna między Javą a .NET-em:

    Informacja o dodatkowej funkcjonalności w C# przy przejściu z wersji 2.0 do 4.0 - http://www.codeproject.com/Articles/327916/C-Language-Features-From-C-2-0-to-4-0