sobota, 19 grudnia 2009

Analizy odwiedzin bloggera (Google Analytics)

Tworząc bloga warto pokusić się o zapewnienie sobie możliwości śledzenia ilości odwiedzin i charakterystyk użytkowników. Od jakiegoś czasu jednym z najciekawszych, a na dostatek w pełni darmowych, rozwiązań jest Google Analytics. System ten jest dostepny dla każdego i w łatwy sposób można korzystać z niego aby analizować użycie swojego bloga.

Na początek musimy zarejestrować się na Google Analytics. Jeśli mamy już bloggera, to praktycznie nie nastręcza to problemów - w końcu to też Google.

Podajemy swoje dane kontaktowe.


Następnie tworzymy nowy profil analityczny dla naszej strony.




Podajemy adres http do naszego bloga i wciskamy zakończ.

W kolejnym oknie otrzymujemy fragment kodu, który musimy wkleić w szblonie HTML naszego bloga.

Dla bezpieczeństwa wykonujemy kopię zapasową naszego kodu HTML: "Układ" -> "Edytuj kod HTML", zaznaczamy "ptaszek" przy "Rozszerz szablony widżetów" i wybieramy "pobierz pełny szablon". Zapisujemy plik na dysku komputera.

W oknie kodu HTML schodzimy na sam dół i tuż przed znacznikiem
</body>
wklejamy kod wygenereowany przez Google Analytics.

Teraz musimy odczekac kilka minut.

Wracamy do witryny google analytics i wyświetlamy nasz profil. Adres naszego bloga powinien już być zarejestrowany. aby zweryfikować, że kod "się przyjął" klikamy "Edytuj" z prawej strony.

Na następnej stronie mamy raport dla danej subskrybcji analizy.

Klikamy "Sprawdź status" i powinniśmy otrzymać informację "Oczekiwanie na dane" lub "Odbieranie danych". (W razie potrzeby mamy tu tez dostęp do poprawnego kodu jaki wklejaliśmy do naszego szablonu).

W przypadku błędu trzeba sprawdzić czy nie pomyliliśmy się w adresie naszej strony i czy poprawnie wkleiliśmy kod do naszego szablonu.

Raporty będą dla nas dostępne już następnego dnia z poziomu profilu Google Analytics. Wystarczy kliknąć "Wyświetl raport".


sobota, 12 grudnia 2009

Poziome menu w nagłówku bloggera

Często chcemy dodać pasek menu na górze strony, czyli w nagłówku (pod lub nad bannerem).
W standardowych szablonach bloggera nie ma takiej możliwości, ale można osiągnąć taki efekt bawiąc się trochę kodem szablonu bloga dostępnym w ustawieniach, w opcji "Edytuj kod HTML".

W tym przykładzie będę pracował na szablonie "Minima Black", ale dla innych szablonów rodzaj wprowadzanych modyfikacji i sam sposób jest analogiczny. Naszym celem jest umożliwienie dodania kolejnych widżetów do nagłówka (tam gdzie znajduje się tytuł bloga i/lub banner).

Na początek wykonujemy kopię zapasową naszego kodu HTML: "Układ" -> "Edytuj kod HTML", zaznaczamy "ptaszek" przy "Rozszerz szablony widżetów" i wybieramy "pobierz pełny szablon". Zapisujemy plik na dysku komputera.

Musimy odnaleźć następujący fragment kodu:
<b:section class='header' id='header' maxwidgets='1' showaddelement='no'>
W tym kodzie istotne są dwa parametry:
maxwidgets - który określa maksymalną ilość widżetów w danym oknie,
showaddelement - który okresla, czy jest widoczny skrót umozliwiający dodanie nowego widżeta.

Modyfikujemy tę sekcje w następujący sposób:
<b:section class='header' id='header' maxwidgets='2' showaddelement='yes'>
Dzięki temu będziemy mogli dodać jeszcze jeden widżet.

Kolejną modyfikacja powinno być swtorzenie odpowiedniego stylu prezentacji danych (linków) wyliczeniowych w elemencie nagłówka (header). w tym celu musimy dodać definicję odpowiedniego stylu. Na przykład takiego:
#header ul li {
display: inline;
padding: 0 5px;
}
Styl ten należy wkleić w sekcji zawierajacej definicje styli CSS w kodzie HTML tuż przed nastepującym wpisem:
]]></b:skin>
</head>
Teraz otwieramy "Układ" -> "Elementy strony" i widzimy, że w nagłówku możemy dodać widżet.
Możemy dodać na przykład widżet "Lista linków", za pomocą, którego podłączamy nasze statyczne strony bloggera.

(opis tworzenia statycznych stron na bloggerze znajduje się w serii wpisów: "Statyczne strony w bloggerze (cz.1, cz.2, cz. 3)"

niedziela, 6 grudnia 2009

Strony statyczne w bloggerze (cz. 3)

Mamy za sobą następujące kwestie:
  • pozbyliśmy się nagłówka z datą we wpisie pełniącym rolę strony statycznej (cz. 1),
  • strony statyczne nie są wyświetlane w widżecie "Archiwum" (cz. 2).
To oczywiście działa w przypadku odpowiedniego publikowania postów w zadanej dacie, najlepiej w roku poprzedzającym rozpoczęcie działalności blogowej.

Teraz zajmiemy się kwestią nawigacji na naszych pseudo-statycznych stronach.

Jak pewnie zauwazyliście, na dole tych stron nadal dostępna jest nawigacja "Nowszy post" - "strona główna" - "Starszy post" - a w przypadku stron statycznych nie jest to potrzebne, a wręcz niewskazane.

Do dzieła!

Standardowo zaczynamy od wykonania kopii zapasowej naszego kodu HTML: "Układ" -> "Edytuj kod HTML", zaznaczamy "ptaszek" przy "Rozszerz szablony widżetów" i wybieramy "pobierz pełny szablon". Zapisujemy plik na dysku komputera.

W kodzie musimy odnaleźć następujący fragment odpowiadający za wyświetlanie nagłówka daty posta.:
<b:include name='nextprev'/>
Zamieniamy ten cały fragment na następujący:
<b:if cond='data:post.dateHeader != "wtorek, 1 stycznia 2008"'>
<b:include name='nextprev'/>
</b:if>
Jak widać dodatliśmy warunek, który przez interpreter bloggera zostaje odczytany w następujący sposób: "Jeśli data posta jest różna od "wtorek, 1 stycznia 2008" to wyświetl nawigację dla posta".

W przeciwnym razie nawigacja nie zostanie wyświetlona.

Zapisujemy szablon i tesujemy.

Jeśli mamy już kilka stron testowych, które robiliśmy na podstawie poprzednich porad (cz.1 i cz. 2) to w ramach testów wystarczy podejrzeć wynik działań na tych opublikowanych wpisach.

czwartek, 3 grudnia 2009

Strony statyczne w bloggerze (cz. 2)

Postępując zgodnie z instrukcjami z poprzedniego posta otrzymaliśmy jako efekt stronę opublikowaną z datą wsteczną (poza kalendarzem działania naszego bloga), w której nagłówku nie jest wyświetlana data. Teraz trzeba się zająć widżetem "Archiwum", który wyświetla tę stronę - a my przecież chcemy, żeby tam były tylko posty.

Na początek wykonujemy kopię zapasową naszego kodu HTML: "Układ" -> "Edytuj kod HTML", zaznaczamy "ptaszek" przy "Rozszerz szablony widżetów" i wybieramy "pobierz pełny szablon". Zapisujemy plik na dysku komputera.

Zapamiętujemy to i przechodzimy do "Układ" -> "Edytuj kod HTML". Zaznaczamy "ptaszek" przy "Rozszerz szablony widżetów".

Teraz w zależności od tego czy wykorzystujemy "Hierarchię", "Płaską listę" czy "Menu rozwijane" należy wykonać następujące instrukcje:

W przypadku wybrania opcji "Hierarchii" w kodzie musimy odnaleźć następujący fragment odpowiadający za wyświetlanie zawartości archiwum:


<b:includable id='interval' var='intervalData'>
Całą sekcję rozpoczynaną przez ten znacznik (includabe) należy zamienić na następujący fragment:

<b:includable id='interval' var='intervalData'>
<b:loop values='data:intervalData' var='i'>
<b:if cond='data:i.name != "2008"'>
<ul>
<li expr:class='"archivedate " + data:i.expclass'>
<b:include data='i' name='toggle'/>
<a class='post-count-link' expr:href='data:i.url'><data:i.name/></a>
<span class='post-count' dir='ltr'>(<data:i.post-count/>)</span>
<b:if cond='data:i.data'>
<b:include data='i.data' name='interval'/>
</b:if>
<b:if cond='data:i.posts'>
<b:include data='i.posts' name='posts'/>
</b:if>
</li>
</ul>
</b:if>
</b:loop>
</b:includable>
Jak widać dodatliśmy warunek w pętli, który przez interpreter bloggera zostaje odczytany w następujący sposób: "Jeśli rok publikacji posta jest różny od "2008" to wyświetl w archiwum i uzględnij posta w liczniku".
W takim zapisie, w widżecie "archiwum" nie będzie wyświetlany cały rok 2008.

 W przypadku wybrania opcji "Płaskiej listy" w kodzie musimy odnaleźć następujący fragment odpowiadający za wyświetlanie zawartości archiwum:
<b:includable id='flat' var='data'>
Całą sekcję rozpoczynaną przez ten znacznik (includabe) należy zamienić na następujący fragment:
<b:includable id='flat' var='data'>
<ul>
<b:loop values='data:data' var='i'>
<b:if cond='data:i.name != "styczeń 2008"'>
<li class='archivedate'>
<a expr:href='data:i.url'><data:i.name/></a> (<data:i.post-count/>)
</li>
</b:if>
</b:loop>
</ul>
</b:includable>

Jak widać dodatliśmy warunek w pętli, który przez interpreter bloggera zostaje odczytany w następujący sposób: "Jeśli miesiąc i rok publikacji posta jest różny od "styczeń 2008" to wyświetl w archiwum i uzględnij posta w liczniku".
W takim zapisie, w widżecie "archiwum" nie będzie wyświetlany cały miesiąc styczeń 2008.

W przypadku wybrania opcji "Menu rozwijanego" w kodzie musimy odnaleźć następujący fragment odpowiadający za wyświetlanie zawartości archiwum:
<b:includable id='menu' var='data'>
Całą sekcję rozpoczynaną przez ten znacznik (includabe) należy zamienić na następujący fragment:
<b:includable id='menu' var='data'>
<select expr:id='data:widget.instanceId + "_ArchiveMenu"'>
<option value=''><data:title/></option>
<b:loop values='data:data' var='i'>
<b:if cond='data:i.name != "styczeń 2008"'>
<option expr:value='data:i.url'><data:i.name/> (<data:i.post-count/>)</option>
</b:if>
</b:loop>
</select>
</b:includable>
Jak widać dodatliśmy warunek w pętli, który przez interpreter bloggera zostaje odczytany w następujący sposób: "Jeśli miesiąc i rok publikacji posta jest różny od "styczeń 2008" to wyświetl w archiwum i uzględnij posta w liczniku".
W takim zapisie, w menu rozwijanym widżeta "archiwum" nie będzie wyświetlany cały miesiąc styczeń 2008.

Zapisujemy szablon i tesujemy.

W "Zamieszczanie postów" -> "Nowy post" wpisujemy tytuł i treść posta. Klikamy "Opcje posta". Następnie w opcji "Data i godzina posta" zaznaczamy "Zaplanowano na" i wpisujemy wybraną przez nas datę (w odpowiednim formacie) - u mnie "08-01-01".

Publikujemy posta i sprawdzamy na blogu. W widżecie "Archiwum" nie powinien być wyświetlany ten post.
Nadal możemy się do niego dostać za pomocą nawigacji "starszy post" - "nowszy post".

Pozostaje nam wyświetlić ten konkretny wpis bloga, który będzie nam słuzył za stronę statyczną, skopiować jego adres i w menu za pomocą widżeta "Lista linków" lub "HTML/Java script" dodać jako odnośnik w menu bocznym.

poniedziałek, 30 listopada 2009

Strony statyczne w bloggerze (cz. 1)

Pewnie wielu z początkujących bloggerów zastanawia się jak za pomocą blogspota uzyskać efekt strony statycznej. Chodzi o stronę, którą można podłączyć w menu, a nie posta prezentowanego z datą publikacji na liście i dodatkowo dostępnego z widżeta "Archiwum".
W przeciwieństwie do innycn platform (takich jak wordpress), blogger nie ma funkcji stron statycznych. Ale bawiąc się trochę kodem szablonu bloga dostępnym w ustawieniach, w opcji "Edytuj kod HTML", wprowadzając drobne modyfikacje, możemy osiągnąć bardzo zbliżony efekt.

W kilku kolejnych wpisach postaram się pomóc osiągnąć ten efekt. Mam nadzieję, że niektórym osobom się to przyda. W przykładach będę pracował na szablonie "Minima Black", ale dla innych szablonów rodzaj wprowadzanych modyfikacji i sam sposób jest analogiczny.

Wykonujemy kopię zapasową naszego kodu HTML: "Układ" -> "Edytuj kod HTML", zaznaczamy "ptaszek" przy "Rozszerz szablony widżetów" i wybieramy "pobierz pełny szablon". Zapisujemy plik na dysku komputera.

Na początek zacznijmy od sprawienia, aby publikowana za pomocą mechanizmu postów nasza pseudo-statyczna strona nie miała nagłówka daty.

W tym celu musimy sprawdzić w aki sposób prezentowana jest dana w nagłówku posta. W menu "Ustawienia" -> "Formatowanie" sprawdzamy opcję "Format nagłówka daty". W moim przypadku jest "poniedziałek, 30 listopada 2009". Zapamiętujemy format daty.

Wybieramy sobie datę sprzed rozpoczęcia działalności blogowej w naszym blogu. Pod tą datą będziemy publikować wszystkie posty, które chcemy traktować jak strony statyczne. W moim przypadku jest to data "wtorek, 1 stycznia 2008".

Zapamiętujemy to i przechodzimy do "Układ" -> "Edytuj kod HTML". Zaznaczamy "ptaszek" przy "Rozszerz szablony widżetów".

W kodzie musimy odnaleźć następujący fragment odpowiadający za wyświetlanie nagłówka daty posta:


<b:if cond='data:post.dateHeader'>
<h2 class='date-header'><data:post.dateHeader/></h2>
</b:if>
Zamieniamy ten cały fragment na następujący:

<b:if cond='data:post.dateHeader != "wtorek, 1 stycznia 2008"'>
<b:if cond='data:post.dateHeader'>
<h2 class='date-header'><data:post.dateHeader/></h2>
</b:if>
</b:if>

Jak widać dodatliśmy warunek, który przez interpreter bloggera zostaje odczytany w następujący sposób: "Jeśli data posta jest różna od "wtorek, 1 stycznia 2008"to wyświetl nagłówek posta".
W przeciwnym razie data nie zostanie wyświetlona.

Zapisujemy szablon i tesujemy.

W "Zamieszczanie postów" -> "Nowy post" wpisujemy tytuł i treść posta. Klikamy "Opcje posta". Następnie w opcji "Data i godzina posta" zaznaczamy "Zaplanowano na" i wpisujemy wybraną przez nas datę (w odpowiednim formacie) - u mnie "08-01-01".

Publikujemy posta i sprawdzamy na podglądzie, gdzie nie powinniśmy widzieć nagłówka posta.

Rozwiązanie to zastosowałem na swoim blogu "Martwa Strefa", gdzie możecie sprawdzić czym różnią się strony statyczne od zwykłych postów po zastosowaniu moich porad.
UWAGA: proszę zastosować odpowiednie daty, a wybierając datę publikacji pseudo-statycznych stron najlepiej wybrać datę z któregoś z poprzedzających lat - a czemu? O tym w następnej poradzie. Zapraszam wkrótce...

sobota, 24 października 2009

Windows Server 2008 R2 i Exchange 2007 niezgodny

Nowe zadanie: wdrożenie Exchange Server 2007 (na 2010 nie możemy czekać bo bardzo się spieszy).

No to przygotowaliśmy sprzęt, macierze i przystępujemy do akcji.

Zdecydowaliśmy się na najnowszy "okienkowy" system operacyjny Windows Server 2008 R2 Enterprise x64 (Enterprise, bo mailbox ma być klastrowany).

Czekała nas jednak niemiła niespodzianka.
Jak się okazało, Exchange Server 2007 jest NIEKOMPATYBILNY z Windows Server 2008 R2 i po prostu nie da się zainstalować na nim roli mailbox (Hub i Client Acces poszło bez problemu).

"Error: An error occurred. The error code was 3221684346. The message was The data area passed to a system call is too small…"

Jeśli ktoś chce być prawdziwym “hardkorem” to może pokusić się o instalację w trybie zgodności z Microsoft Vista (instalacja w trybie zgodności z Windows Server 2008 również się nie udała). Jednak nie wydaje się to rozsądnym rozwiązaniem dla produkcyjnego środowiska, bo takie rozwiązanie na pewno nie będzie supportowane przez Microsoft i partnerów.

Sytuacja dość niecodzienna bo wcześnie raczej nie zdarzało się, żeby produkty Microsoft w miarę nowe, nie były kompatybilne. Wygląda to na początki nowej polityki, bo teraz mamy do wyboru albo instalować Windows Server 2008, albo czekać na ExchangeServer 2010.

czwartek, 22 października 2009

Windows 7 w skrótach

Dziś oficjalna premiera Windows 7, a u mnie zestaw ciekawych skrótów, które mogą ułatwić pracę:

Win+h - Maksymalizuje aktualne okno
Win+i - Ustawia aktywne okno do normalnego rozmiaru, lub minimalizuje jeśli nie jest zmaksymalizowane
Win+m - Minimalizuje aktywne okno
Win+d - Minimalizuje wszystkie okna odsłaniając pulpit
Win+Home - Minimalizuje wszystko oprócz aktywnego okna
Win+Shift+strzałka - Przenosi aktywne okno na alternatywny ekran
Win+g - Przełącza gadżety
Win+l - Blokuje pulpit
Win+r - Otwiera okno "uruchom"
Win+f - Otwiera okno wyszukiwania
Win+p - włącza trym prezentacji (widok na ekranie i projektorze)
Win+e - Włącza Explorer
Win+u - Włącza ułatwienia dostepu
Win+t - Włącza Aero Peek dla każdego elementu paska
Win+Spacja - Aero Peek
Ctrl+Win+Tab - Open persistent task selection window, roll mouse over each icon to preview item and minimize others
Ctrl+Alt+i - włącza Integrated Scripting Environment (ISE) - wizualna konsolę PowerShell.

piątek, 9 października 2009

Windows 7 Informacje OEM (OEM logo, OEM info)

Często zdarza się, że chcemy, aby we właściwościach komputera wyświetlane były konkretne informacje (i logo) - tak jak to robią duże przedsiębiorstwa i firmy sprzedające gotowe komputery i notebooki. Nie jest to trudne, wystarczy wpisać informacje OEM.

W Windows XP wystarczyło do system32 wgrać plik oemlogo.bmp i oeminfo.ini. W Windows Vista/7 wygląda to trochę inaczej.

Najprościej jest wyedytować klucz rejestru
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation

dodając następujące parametry jako ciągi znaków:

Logo - ścieżka do bitmapy (120x120 px)
Manufacturer - producent sprzętu
Model - model sprzętu
SupportHours - godziny serwisu
SupportPhone - telefon do serwisu
SupportURL - link który chcemy żeby się otwierał po naciśnięciu linku "pomoc techniczna online"
HelpCustomized - (true -1/false - 0) - czy ma być wyświetlane nasze info

Poniżej zamieszczam zawartość przykładowego pliku modyfikującego te wpisy rejestru (wystarczy skopiować, uzupełnić, zapisać jako plik z rozszerzeniem .reg i uruchomić)

Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\OEMInformation]

"HelpCustomized"="0"
"Manufacturer"="Lenovo"
"Model"="T500"
"SupportHours"="8:00 - 16:00"
"SupportPhone"="int. 1234"
"SupportURL"="http://intranet/helpdesk"
"Logo"="C:\\Windows\\oemlogo.bmp"

Można też skorzystać z OEMInstallerów.

W przypadku przedsiębiorstw korzystających z obrazowania zaleca się stosowanie sysprep z oobe i odpowiednio przygotowany plik xml,

czwartek, 17 września 2009

Witryna MySite i główna nawigacja

Implementując MOSS'a w mojej organizacji zdecydowano, że nie będziemy udostępniać użytkownikom możliwości tworzenia własnych witryn MySite (nie pytajcie dlaczego - tak uznano).

Za to zdecydowano się na skorzystanie z możliwości importu profili z Active Directory i wykorzystania wyszukiwania kontaktów jako książki telefonicznej. I tylko do tego miały służyć informacje z SSP - żadnych publikacji dokumentów, żadnych blogów itp.

Po instalacji okazało się, że zwykły użytkownik przeglądając szczegóły kontaktu nie widzi górnego paska łączy. Przeglądając własny profil widzi tylko guzik "mój profil" i nic więcej. Oczywiście witryna została podłączona (Ustawienia witryny > Połączenie witryny portalu) z głównym portalem i za pomocą paska "chlebowego" (zawsze śmieszy mnie to tłumaczenie, ale ja nie znam lepszego) można wrócić do strony głównej. Ale użytkownicy zwykle są wygodni (inaczej mówiąc niespostrzegawczy lub niegrzeszący intelignecjią) i chcą na witrynie MySite takie samo menu jak na stronie głównej.

Na początek wypróbowałem (ten sposób opisuje źródło1)  "Łącza do witryn personalizacji" dostępne w SSP "Profile użytkowników i Moje witryny". Dodałem kilka testowych łączy, ustawiłem właścicieli na "wszyscy" (authenticated users"), ale efekt był marny.

Łącza pokazywały się tylko przy przeglądaniu własnego profilu.

Nie zrażając się pomyślałem "Nic prostszego!", przygotowując się do edycji strony wzorcowej witryny MySite za pomocą nieśmiertelnego SharePoint Designer'a.

Ale nie było wcale łatwo.

Przeszukałem internet (źródło2, źródło3) i okazało się, że:
  • w stronie wzorcowej umieszczona jest placeholder "PlaceHolderHorizontalNav" z kontrolką "TopNavigationMenu" generującą menu za pomocą dostawcy "SPNavigationProvider",
  • doprowadzenie do tego, żeby kontrolka wyświetlała menu głównego portalu jest możliwe poprzez zmianę tego dostawcy.

Okazało się, że rozwiązanie to działa i menu jest generowane na podstawie witryny głównej, ALE zwykli użytkownicy NADAL GO NIE WIDZĄ. Zacząłem podejrzewać, że kontrolki lub całe placeholdery są w jakiś sposób ukrywane, ale nigdzie nie mogłem znaleźć atrybutów, które coś takiego by sugerowały.

COFAMY NASZE ZMIANY (posługując się na przykład historią wersji strony wzorcowej) bo póxniej okaże się, że nie są konieczne.

Szperając dalej (źródło4, źródło5, źródło6) okazało się, że:
  • "TopNavigationMenu" jest ukrywane, ale nie przez parametr, ale POPRZEZ SPECJALNY KOD.
  • można to obejść kompilując własny kod (instrukcje w źródłach),
  • kombinując z nowymi placeholderami,
  • wykorzystując mój sposób!

protected override void OnPreRender(EventArgs e)
{
if (base.IsProfileError || !base.Profile.IsSelf)
{
Control master = base.Master;
if (master != null)
{
master = master.FindControl("PlaceHolderTopNavBar");
}
if (master != null)
{
master = master.FindControl("PlaceHolderHorizontalNav");
}
if (master != null)
{
master = master.FindControl("TopNavigationMenu");
}
if (master != null)
{
master.Visible = false;
}
}
base.OnPreRender(e);
}

Jak widać funkcja szuka na stronie konkretnego obiektu "TopNavigationMenu" i na koniec ustawia wartość atrybutu visible na false!

Jak sobie z tym poradzić? Źródła sugerują podmianę kodu i definicji witryny, ale przecież musi być jakiś prostszy sposób. Może trzeba jakoś "zmylić" tę funkcję i "przerwać" jej działanie?

Wracamy do kodu naszej strony wzorcowej.

Zmieniamy następujące linie:
<asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">
na
<asp:ContentPlaceHolder id="PlaceHolderHorizontalNav1" runat="server">
Co zrobiliśmy? Sprawiliśmy, że funkcja przeszukująca stronę NIE ZNAJDZIE naszego placeholdera, a co za tym idzie nie znajdzie obiektu "TopNavigationMenu" i go nie ukryje! Po prostu przełamaliśmy łańcuch przeszukiwania na samym początku.
<SharePoint:DelegateControl runat="server" ControlId="TopNavigationDataSource">
na
<SharePoint:DelegateControl runat="server" ControlId="TopNavigationDataSource1">
To jest troszeczkę bardziej zawiłe.
W tej definicji możemy zmieniać dostawcę dla menu i kombinować z początkowym węzłem (jak podają źródła, które przytoczyłem) aby wygenerować nasze menu, ale metodą prób i błędów okazało się, że wystarczy tylko zmienić ID tej kontrolki.

I TO WYSTARCZY.

Zapisujemy stronę wzorcową, i podglądamy wyniki. Wszystkim użytkownikom pokazuje się menu witryny głównej.

poniedziałek, 24 sierpnia 2009

SharePoint błędy: 6398, 7076, 6482 i 7076

W dzienniku zdarzeń zauważyłem wiele powtarzających się sekwencji błędów 6398, 7076, 6482 i 7076 oraz fakt, że nie wykonywały się zaplanowane zadania SharePoint'a. Dodatkowo nie było możliwe zarządzanie IIS poprzez konsolę mmc (pojawiał się błąd: the path specified cannot be used at this time).

Śledztwo zacząłem od przejrzenia kilku blogów, ale wpisy sugerujące restart IIS (iisreset) i usługi Windows SharePoint Services Timer Service (SPTimerV3) u mnie nie pomogły, choć autorzy zarzekali się, że u nich jest inaczej.
Event Type: Error
Event Source: Windows SharePoint Services 3
Event Category: Czasomierz
Event ID: 6398
Date: 24/8/2009
Time: 13:45:34
PM User: N/A
Computer: COMPUTERNAME
Description:
Metoda Execute definicji zadania Microsoft.Office.Server.Administration.ApplicationServerAdministrationServiceJob (identyfikator 504f09f5-a0c2-4124-8b68-eb6d6ab264f5) zwróciła wyjątek. Więcej informacji znajduje się poniżej.Attempted to read or write protected memory. This is often an indication that other memory is corrupt.For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

Event Type: Error
Event Source: Office SharePoint Server
Event Category: Usługi udostępnione serwera Office Server
Event ID: 6398
Date: 24/8/2009
Time: 13:45:35
PM User: N/A
Computer: COMPUTERNAME
Description:
Wystąpił wyjątek podczas wykonywania zadania administracyjnego serwera aplikacji.Komunikat: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.Szczegóły dotyczące pomocy technicznej:
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Rozwiązaniem problemu jest hotfix, który może zostać przesłany przez Microsoft.

Hotfix i szczegóły dostępne są pod adresem: http://support.microsoft.com/?id=946517

UWAGA:
Przed zaplikowaniem hotfixa (który nie został jeszcze w pełni przetestowany) należy bezwzględnie wykonać kopię bezpieczeństwa.
Ponadto hotfix wymaga restartu serwera.

piątek, 21 sierpnia 2009

Instalacja Windows 7: Cannot boot from CD - Code: 5

CDBOOT Cannot boot from CD - Code: 5
Powyższy problem pojawia się na komputerach ze starszymi płytami głównymi. Na wielu forach sugeruje się różne rozwiązania (sterowniki, nagrywanie płyt wolniej), ale to nie w tym rzecz.

Błąd ten występuje wyłącznie podczas bootowania z płyt DVD i świadczy o tym, że BIOS płyty głównej nie obsługuje bootowania z płyt DVD (bootowanie z CD działa bez problemu).

Windows XP był rozpowszechniany na płycie CD, a wielu użytkowników ominęło Vistę. Po premierze Windows 7 (jest już dostępna wersja RTM, patrz link) instalator jest na płycie DVD.

Co z tym zrobić?
Oto moje propozycje:
1. Poszukać na stronie producenta płyty głównej nowszej wersje BIOSu i go zaktualizować,
2. Uruchomić instalator z linii poleceń (cmd) zainstalowanego systemu Windows XP lub Windows Vista (z instalacyjnej płyty DVD uruchomić setup.exe) i instalować Windows 7,
3. Zainstalować OS z pendrive’a USB 2.0.,
4. Skorzystać z WinPE,
5. Wymienić płytę główną na nowszą ;)

Wariant 1:
U mnie nie pomógł.

Wariant 2:
W moim przypadku scenariusz przewidywał instalację testową Windows 7 na starszym komputerze o konfiguracji minimalnej. Nie chciałem tracić posiadanej instalacji XP, więc zdecydowałem się przenieść całą partycję XP na dodatkowy czysty dysk.
Wykorzystałem do tego bootowalną płytę CD z programem ghost za pomocą, którego (opcja local partition-> to partition).

Po odpaleniu XP wykonałem instalację wywołując instalator z linii komend.

Wariant 3:
Na początek trzeba przygotować sobie pendrive’a, najlepiej za pomocą narzędzia DISKPART.
I tu niespodzianka: trzeba to zrobić z wersji zainstalowanej w Windows Vista lub Windows 7. A to z prostej przyczyny – tylko te wersje obsługują pendrive’y.
Oto procedura:
W linii poleceń cmd wpisać :
diskpart
list disk

Polecenie to wyświetli listę dysków dostępnych w systemie. I tu należy poprawnie zidentyfikować pendrive. Dalsze polecenia zakładają, że pendrive to dysk 1.
select disk 1
clean
create partition primary

Tworzymy partycję podstawową.
select partition 1
active
format fs=fat32

Aktywujemy partycję i formatujemy ją w systemie fat32
assign
exit

Przypisujemy literę dysku do partycji I kończymy pracę z DISKPART.

Teraz należy skopiować zawartość płyty na przygotowany pendrive. Zrobimy to za pomocą xcopy:
xcopy d:\*.* e:\ /e/h/f

d:\ - to napęd DVD
e:\ - to pendrive USB.

Z tak przygotowanego pendrive należy uruchomić ponownie komputer i zainstalować nowe okienka.

Wariant 4:
Istnieje kilka sposobów wykorzystania WinPE:
  • bootowalna płyty CD/DVD (już wiemy, że ma to być CD)
  • bootowalny pendrive z WinPE
  • załadowanie WinPE na partycję dysku docelowego (tego, na którym będziemy instalowali Windows 7), uruchomienie WinPE z tego dysku i uruchomienie instalatora Windows z płyty DVD poprzez linie poleceń WinPE (podobne do Wariantu 2)

Sposoby przygotowania startowej płyty i USB z Windows PE przedstawię już wkrótce. Teraz zajmę się WinPE uruchamianym z dysku.

Na maszynie z Windows XP (lub innym) należy zainstalować Windows AIK (Automated Instalation Kit) dostępny tutaj.

Następnie należy uruchomić linię poleceń WAIK i wpisać w niej:
copype x86 c:\winpe

-x86 oznacza platformę z której korzystamy (dostępne jeszcze amd64 i ia64)
-c:\winpe - to katalog docelowy do którego zostaną skopiowane pliki (w tej chwili najważniejszy jest plik winpe.wim i folder iso)

Następnie należy przekopiować plik obrazu do katalogu ISO zmieniając nazwę z winpe.wim na boot.wim:
copy c:\winpe\winpe.wim c:\winpe\iso\sources\boot.wim /y

Teraz należy przygotować nasz dysk docelowy.
Za pomocą DISKPART lub managera dysków nalezy podzielić go na partycje i nie zapomninając o oznaczeniu partycji instalacyjnej jako AKTYWNEJ.

teraz trzeba skopiować pliki na partycję startową:
xcopy c:\winpe\iso\*.* e:\ /e/h/f

Jeśli posługujemy się Windows XP to musimy jeszcze wyeliminować pewne dodatkowe błędy bootowania. A mianowicie pomimo wgrania obrazu WinPE na dysk, po restarcie pokazuje się błąd "NTLDR Missing". Związane jest z wykorzystaniem przez Windows 7 (i Vista) do bootowania BCD, a nie NTLDR (dokładniejszy opis tutaj).

Wkładamy płytę DVD z Windows 7 do napędu i wydajemy komendę:
D:\boot\Bootsect.exe /NT60 All

- d:\ oznacza literę napędu.

Teraz wystarczy wyłączyć komputer, odłączyć dysk Windows XP i uruchomić maszynę z dysku zawierającego WinPE.

Po uruchomieniu w linii poleceń przejść na napęd DVD zawierający płytę instalacyjną i uruchomić instalator Windows 7.

Tak na marginesie dodam, że WinPE uruchamiany jest całkowicie w pamięci komputera. W związku z tym można swobodnie zainstalować nowy system Windows na partycji, która zawiera WinPE (najlepiej sformatować ją w czasie pracy instalatora).

Wariant 5:
W tym przypadku okazał się niepotrzebny.

więcej o diskpart
więcej o xcopy

piątek, 7 sierpnia 2009

Windows 7 RTM

Microsoft udostepnił już finalną (według swojego mniemania) wersję najnowszego systemu operacyjnego Windows 7 RTM (Ready-To-Manufacture). Na razie system jest dostępny do pobrania dla subskrybentów TechNet i MSDN (także dla klientów posiadających odpowiednie usługi Software Assurance - TechNet Plus SA Media; TechNet Plus (Retail); TechNet Direct (Retail); TechNet Plus (VL); TechNet Plus Direct (VL); TechNet Cert Partner; TechNet Gold Cert Partner; TechNet Plus Consumer Service Professional Pilot;). Udostępniono wersje zarówno 32bitowe jak i 64bitowe w klasycznych odmianach: Home Basic, Home Prepium, Proffessional, Enterprise i Ultimate.

Jednocześnie wersje OEM systemu trafiły do partnerów - producentów sprzętu komputerowego.

Już wkrótce pierwsze testy - zapraszam.

poniedziałek, 8 czerwca 2009

Łatanie SharePoint 2007

Zajmując się MOSS 2007 szczególną uwagę należy zwrócić na aplikowanie odpowiednich łatek – na dodatek w odpowiedniej kolejności zwracając uwagę na dokłądną wersję zainstalowanych pakietów.

Jaką mam wersję MOSS’a?

Zawsze pierwszym etapem powinno być sprawdzenie jaką mamy aktualnie wersję MOSS’a.

Wgrywając aktualizacje należy zwracać również uwagę na wersję WSS 3.0 (Windows SharePoint Services). Aby zainstalaować SP1 lub SP2 dla MOSS’a 2007 najpierw należy zainstalować odpwoiednie Service Packi dla WSS’a.


Pomocne informacje na temat procedur aktualizacji znajdują się w następujących artykułach Microsoft:

Podstawową kwestią ułatwiającą to co robimy to sprawdzenie wersji service packa jaką mamy – można to zrobić w “Panelu sterowania” -> “Dodaj/usuń programy” (po zaznaczeniu opcji “pokazuj aktualizacje”).

Dokładniejsze informacje na temat wersji MOSS’a można uzyskać z narządzi administracyjnych.

Należy wejść do Administracji Centralnej i wybrać “Akcje witryny” -> “Ustawienia witryny”. W polu “Informacje o witrynie” znajdziecie numer wersji (na przykład: 12.0.0.6421).
Wersję można odczytać bezpośrednio z bazy danych konfiguracji MOSS’a. W tym celu należy uruchomić następującą kwerendę (należy uzupełnić nazwę bazy danych konfiguracji):

SELECT [VersionId],[Version],[Id],[UserName],[TimeStamp],[FinalizeTimeStamp],[Mode],[ModeStack],[Updates],[Notes]
FROM [SharePoint_Config].[dbo].[Versions]
WHERE VersionId = ‘00000000-0000-0000-0000-000000000000′
ORDER BY Id DESC

Wynik kwerendy zawiera informację o najbardziej akturalnej wersji w pierwszym wierszu (można również sprawdzić wersje innych baz danych zawartości zmieniając ich nazwę w powyższej kwerendzie).

Analiza numeru wersji można pokazuje jaka wersja MOSS’a jest zainstalowana, jaką ma wersję SP i jakie hotfixy (uwaga: nowe hotfixy SharePoint są często kumulacyjne – zawierają wszystkie poprzedzające wydania – warto zapoznać się z opisami):

MOSS/WSS i fixy
Wersja
MOSS 2007 SP2
12.0.0.6421
MOSS 2007 post SP1 hotfix 957693 & 958567
12.0.0.6331
MOSS 2007 Cumulative update KB956056 & KB956057
12.0.0.6327
MOSS 2007 Infrastructure Update KB951695 & KB951297
12.0.0.6318
MOSS 2007 post SP1 hotfix KB948945
12.0.0.6303
MOSS 2007 post SP1 hotfix KB941274
12.0.0.6301
MOSS 2007 post SP1 hotfix KB941422
12.0.0.6300
MOSS 2007 SP1
12.0.0.6219
MOSS 2007 October public update
12.0.0.6039
MOSS 2007 August hotfix
12.0.0.6036
MOSS 2007 RTM
12.0.0.4518
MOSS 2007 Beta 2 TR
12.0.0.4407
MOSS 2007 Beta 2
12.0.0.4017

Informacje na temat wersji i szczegółów dla pakietu MOSS2003/WSS2.0 znajdziecie na blogu Penny Coventry.


Pamiętajcie, że zarówno SP jak i hotfixy nie dają się odinstalować. Z tego względu warto wykonać kopie bezpieczeństwa (przynajmniej baz zawartości) przed ich instalacją.

środa, 3 czerwca 2009

Windows 7 nadchodzi...

Wielkimi krokami nadchodzi... nadchodzi DUŻE...

Już 23 lipca gotowa będzie wersja Ready-To-Market (potocznie RTM) najnowszego produktu ze stajni Microsoft -a mianowicie Windows 7.

Wiele osób ma obawy - i to uzasadnione. Biorąc pod uwagę porażkę Visty, której nikt już chyba nawet nie broni moglibyśmy być pełni obaw. Nie ukrywajmy - to właśnie rynkowe fiasko Visty stało się główną przyczyną przyspieszenia prac nad nowym systemem.
Jest jednak druga strona. A mianowicie Microsoft już niejednokrotnie udowodnił, że potrafi dostosować się do wymagań rynku i zmienić swój produkt. Prawda, że robią to dość wolno, ale może tym razem wyjdzie lepiej.

Finalna wersja W7 ma się ukazać już 22 października 2009 roku. Wiele firm korzystających z produktów okienkowych czekało z ewentualnymi migracjami do Visty, nawet jeśli mieli taką możliwość bez ponoszenia kosztów (np. umowy EA). Podobna sytuacja miała miejsce już jakiś czas temu, kiedy to wiele firm "odpuściło" sobie Windows 2000 i przeczekało z migracją z NT4 na Windows XP. Teraz może być podobnie. Nie dajmy się zwodzić. Zakończenie wsparcia XP z pewnością przyspieszy ten proces i stanie się trampoliną dla popularności W7.

Tymczasem ciekawi fakt ostatnich doniesień związanych z odwiecznym konfliktem giganta z Redmond z Unią Europejską. Było już wiele procesów, wiele wyroków i odwołań (oczywiście najwięcej na tym zarobili prawnicy - a nie użytkownicy czy pomniejsze firmy). W skutek powyższego będziemy mieć między innymi możliwość całkowitego wyłączenia przeglądarki Internet Explorer.

Ale na tym nie koniec. Bo to przecież nie o to chodzi.
Tym razem słyszy się o "prośbach" UE o wprowadzenie do wersji instalacyjnej nowego systemu przeglądarek konkurentów. No bo przecież jeśli użytkownik nadal będzie mógł wybrać sobie IE podczas instalacji, to czemu nie miałby mieć możliwości wyboru innego produktu?

Nie bardzo rozumiem te ingerencje polityki w biznes. Jak można nakazać komercyjnej firmie promowanie swoim logiem i marką produktów konkurencji? Pod przykrywką "dobra ogółu", czyli użytkowników komputerów, UE wyraźnie ingeruje w biznes. Tu nie chodzi o to, że pozostałe przeglądarki są darmowe. Nie chodzi o to, czy są lepsze, czy nie (nie podejmuję się ocen, choć korzystam z 3 różnych przeglądarek).

Jak UE wyobraża sobie świadczenie usług serwisu i wsparcia technicznego nowego oprogramowania? Czy Microsoft będzie musiał supportować technicznie SWOIMI zasobami produkty innych firm? A co jeśli klient zwróci oprogramowanie (bo może) i uzasadni to czymś związanym z obcą przeglądarką? Microsoft będzie musiał oddać pieniądze i zostanie narażony na straty. A pozostałe marki wypromują się kosztem kanałów dystrybucyjnych i reklam samego Microsoftu.

Nie bronię tej konkretnej firmy, ale ja nie zgadzam się z tymi działaniami UE.
Wywarcie wpływu, aby umożliwić odinstalowanie IE to jedno, ale zmuszanie firmy to działań niezgodnych ze sprawdzonym modelem biznesowym to już zupełnie co innego. Tu z pewnością nie chodzi o obronę uciśnionych użytkowników (bo i tak spora część "piraci" software).