Dodawanie zaufanych adresów email do Safe Senders List w Outlook 2007 via GPO

Pewnie każdy w firmie ma jakieś wewnętrzne systemy, które co jakiś czas spamują userów różnego rodzaju informacjami, przypomnieniami itp.. Składnia tych maili jest czasami tak pokraczna, że outlook kwalifikuje te wiadomości jako spam i wrzuca je sobie do junk mails.

 

Rozwiązanie problemu wygląda banalnie:  Za pomocą GPO dodać  własną safe senders list i wyeksportować ją do użytkowników.

 

A więc tworzymy nowe GPO, ładujemy templatke Outlk12.adm i przechodzimy do:

User Configuration->Policies->Administrative Templates-> Microsoft Office Outlook 2007->Tools | Options…->Preferences->Junk E-mail

Wybieramy Specify path to Safe Senders list, po czym wskazujemy lokalizacje pliku w którym będziemy trzymać ową listę, np.:\domena.corpNETLOGONoutlooksafesenderslist.txt

Owa lista to nic innego jak plik tekstowy, w którym w wierszach są wpisane zaufane adresy mailowe, np:

adres@domena.com

adres2@domena.corp

 

Warto się jeszcze zastanowić nad opcją: Overwrite or Append Junk Mail Import List,

która ustawia czy nasza lista ma nadpisać listę użytkownika, czy zostać dopisana do już istniejącej.

 

Podpinamy jeszcze tylko nasze GPO do odpowiednich OU i szczęśliwi, że udało się szybko rozwiązać zadanie zaczynamy je testować.

 

No i dupa. Okazuje się, że do poprawnego działania tego mechanizmu, należy jeszcze zmienić wartość rejestru na stacjach klienckich.

 

Do klucza:

HKey_Current_UserSoftwareMicrosoftOffice12.0OutlookOptionsMail

należy dodać wartość DWORD

JunkMailImportLists=1

 

Po wprowadzeniu tej modyfikacji rejestru, wszystko pięknie działa.

 

Samą modyfikację rejestru oczywiście najszybciej i najwygodniej zrobić za pomocą GPO.

Tutaj przydaje się  Windows 2008 i Group Policy Preferences, które w znaczny sposób ułatwiają  modyfikacje rejestru na końcówkach.

MDT, WDS, PXE i inne dziwne skróty

Jakiś czas temu (tak na prawdę dawno – pół dekady) Peki oswajał linuksy na RISie http://www.umniedziala.pl/RISaInstalacjiCzescVOswajaniePingwina.aspx. Powoli zbliża się czas aktualizacji komputerów do W7, więc trzeba było pomyśleć nad wdrożeniem Widnows Deployment Services. Żeby było łatwiej – zainstalowałem i skonfigurowałem Microsoft Deployment Toolkit 2010 (posiłkując się między innymi artykułem nexora – http://www.microsoft.com/poland/technet/article/art0173.mspx). Wszytko pięknie. Przygotowałem boot images z zestawem sterowników. Zmodyfikowany customsettings.ini:

[Settings]
Priority=Default
Properties=MyCustomProperty

[Default]
OSInstall=Y
SkipBDDWelcome=NO
SkipProductKey=YES
SkipComputerName=NO
SkipDomainMembership=NO
JoinDomain=pjwstk.edu.pl
DomainAdminDomain=PJWSTK
MachineObjectOU=OU=newstud,OU=TESTOWA,DC=pjwstk,DC=edu,DC=pl
SkipUserData=YES
SkipLocaleSelection=YES
InputLocale=0415:00000415; 0409:00000409; 0411:00000411
KeyboardLocale=pl-PL
UserLocale=pl-PL
SkipTimeZone=YES
TimeZoneName=Central European Standard Time
SkipAdminPassword=YES
SkipBitLocker=YES
DoNotCreateExtraPartition=YES
SkipComputerBackup=YES
SkipFinalSummary=YES
SkipAppsOnUpgrade=YES
SkipCapture=NO
SkipApplications=NO
SkipPackageDisplay=NO
SkipDeploymentType=NO
SkipWizard=NO
SkipSummary=YES
_SMSTSOrgName=PJWSTK
UserDomain=pjwstk

Plik C:Program FilesMicrosoft Deployment ToolkitTemplateswinpeshl.ini zmieniony, żeby wyłączyć F8 (odizolowanie CMD):

[LaunchApps]
%SYSTEMROOT%System32bddrun.exe,/bootstrapNoSF8

Obrazy lite touch dodane do WDS. wszytko się bootuje. instaluje i ogólnie jak w podręczniku :) I tu pierwszy problem – jak zabezpieczyć hasłem serwer WDS? No bo fajnie by było wrzucić na niego DaRT (Software Assurance rządzi ;) ) Z pomocą przyszło forum Social@TechNet :) Johan Arwidmark napisał fajny sposób na podmianę boot loadera na WDS na R2 – http://deployvista.com/Home/tabid/36/EntryID/126/language/en-US/Default.aspx

Z pxelinux dzięki Pekiemu jestem zaznajomiony, więc niewiele myśląc przygotowałem konfigi i działa :D

image

Jeszcze dwie ciekawostki:

pxeboot haszuje hasła z solą, więc do przygotowywania haseł sugeruję korzystać z dołączonego generatora haszy napisanego w perlu (wymaga libcrypto*)

Serwer WDS standardowo zawiera część funkcjonalności serwera DHCP – odpowiada DHCP Offer z opcją Next server IP address:

image 

Jak widać na obrazku poszły dwie DHCP Offer – pierwsza z WDS, druga z rzeczywistego DHCP-a. Aby temu zapobiec i pozostawić opcje DHCP na jednym pudełku należy na serwerze WDS zaznaczyć opcję “Do not listen on port 67”

image

To by było na tyle – teraz zostało tylko przygotowanie źródłowego, wielojęzycznego obrazu W7, ale to temat na inny wpis :)

BOOTMGR is missing: smutny żart microsoftu

podczas przenoszenie konfiguracji z pojedynczego dysq na RAID przywitał mnie taki śliczny komunikat: “BOOTMGR is missing”. z podobnymi problemami borykałem się wiele razy, więc pomyślałem sobie “jakiś to problem”… szybko okazało się, że problem jest całkiem niebłahy, a inżynierowie eMeSa zrobili chyba wszystko, żeby to utrudnić.

jak wiadomo od visty/w2k8 zmienił się sposób obsługi startu systemu – zupełnie nowy bootmanager, obsługa GPT itp itd… w moim przypadq był to server w2k8 R2. podstawą jest oczywiście płyta instalacyjna serwera, odpalamy i… upsss…nie ma na płycie serwera opcji reperacji – to pierwsza miła niespodzianka. najwyraźniej ktoś wyszedł z założenia, że serwer się nie psuje albo że admin jako geek poradzi sobie z linii poleceń. no i co ma sobie nie poradzić? przecież wszystkie polecenia znam dobrze:

  • shift-F10 do konsoli
  • sprawdziłem katalog boot [nie ma]
  • skopiowałem pliki z CD do c:boot
  • bootrec /reinstallbcd

ślicznie. tylko nie działa. no to następnym razem jeszcze /fixmgr oraz /fixboot [z bootrec].. nie działa… google, fora no i w sumie wszyscy podają takie same rozwiązania, i co by nie zrobić nic nie działa – wciąż wita mnie ten sam milusi komunikat. była nawet taka jedna podpowiedź “weź płytę z klientem, odpal, użyj opcji ‘repair startup problems’” – co za lamerka, no ale dobra. spróbowałem… i nadal nie działa.

aż nie trafiłem na tą instrukcję:

    1. Boot from your Windows Server 2008 R2 x64 DVD.
    2. Repair
    3. Command Prompt
    Note: I only had one drive and that drive was set for C: as  the boot so the setup was fairly basic… if your setup is more complex you may want to consider this a bit more… but it should still work.
    4. rename c:bootBCD bcd.old : this will backup your bcd file just in case you want it.
    5. Delete c:bootbcd
    6. Restart your computer
    7. Remove your WS2008R2 DVD and insert the W7x64 DVD.
    8. Boot from the DVD and do a repair.
    9. It will offer to repair automatically accept.
    10. Reboot and this is the "trick" boot the DVD again and do a repair.  Keep doing this process until it does not find anything wrong.
    11. Your server should boot again.

“wykonuj ten proces póty, póki nie wykryje więcej błędów” – WTF? to jakiś smutny dowcip? no ale kiedy nie ma się nic do stracenia [czasu i tak już straciłem ZA DUŻO] – porestartowałem sobie troszq…

…no i zadziałało! w sumie 4 restarty, 3 reperacje. O CO C’MON?

szukałem dobrego artu na temat reperacji BCD i tego, co się w zasadzie dzieje podczas owej reperacji z płyty – czemu wszystkie opisy pokazują narzędzie bootsect, bootrec, bcdedit, ale żaden nie wskazuje narzędzi wykorzystywanych podczas reperacji tak, jak się dzieje z GUI i w końcu czemu, do cholery czemu! na płycie serwera nie ma tego toola?

to się nazywa poprawić mechanizm bootowania? idealny materiał na podrążenie tematu i opisanie tego porządnie … tylko czasu brak no i jakiś rozwalony komp by się przydał – bo trzeba na czymś testy porobić [chyba wiem, jak to popsuć, ale na pewno na tym serwerze już nie będę testował (; ]

eN.

Mistrzowie kodu

Fragment pliku konfiguracyjnego oprogramowania Symfonia firmy Sage, dawniej Matrix. Podobno znane od dawna..

[_WR_FORMAT_AM_2]
;kolejne sekcje maja w prefiksie n, bo nie jestesmy w stanie wykrywac,
;ktora zmienna sekcji DOK jest ostatnia i trzeba dac n – najwyzej beda puste linie
SEKCJA_PREFIX=n”
SEKCJA_SUFFIX=”
WARTOSC_L_PREFIX=;
WARTOSC_T_PREFIX=;”
WARTOSC_T_SUFFIX=”
POLE_PREFIX=BEZ_NAZWY_POLA
SEKCJA_KONIEC=n
DOMYSLNA=1

mapdrive script:automatyzacja mapowania dysków z serwera plików

prosta idea [nie zawsze wykonalna] – wedle podręcznikowego przydzielania uprawnień i zarządzania grupami polega na tym, że dla każdego udziału na FS tworzona jest grupa security-domain local – np. Share_FS01_RW_public. tej grupie nadawane są uprawnienia [w tym przypadq RW] a całe zarządzanie przydzielaniem uprawnień polega na dodaniu grupy funkcyjnej do grupy dostępowej. przykład w praktyce:

  1. zakładam w AD jednostkę organizacyjną OU=AccessGroups
  2. zakładam w AD jednostkę organizacyjną OU=Accounting
  3. zakładam grupę funkcyjną security-global ‘Accounting’ i dodaję odpowiednich userów). te 3 kroki oczywiście definiują miniaturkę podstawowego środowiska lab
  4. księgowość musi mieć swój prywatny katalog na FS więc:
  1. zakładam grupę Security-Domain Local o nazwie “AG_FS01_RW_Accounting” w OU-AccessGroups – to przykładowa notacja która pozwala w łatwy sposób odróżnić grupy dostępowe od innych, zawiera nazwę serwera, którego dotyczy, uprawnienia [dzięki temu można łatwo odróżniać grupy RW od R] oraz jakiego udziału dotyczą.
  2. zakładam katalog ‘Accounting’ na FS01 i publiqję go jako ‘\FS01Accouting’
  3. jedyne uprawnienia jakie zakładam na katalogu to “authenticated users:M” na poziomie udziału oraz “AG_FS01_RW_Accounting:RW” na poziomie NTFS
  4. teraz aby nadać uprawnienia do katalogu wystarczy, że dodam grupę ‘Accounting’ do ‘AG_FS01_RW_Accounting’

wadą takiego rozwiązania jest niezliczona ilość grup w złożonym środowisq – a więc czasem podręcznikowe rozwiązanie nie może być zastosowane. zalet jednak jest bardzo dużo:

  • wszystko zarządzane z jednego miejsca za pomocą ADUaC bez potrzeby logowania/sprawdzania na serwerach plików
  • ..czyli centralizacja zarządzania uprawnieniami
  • łatwość delegacji zarządzania uprawnieniami
  • utrzymywanie spójnej, prostej struktury: przejrzystość
  • prostota automatyzacji mapowania: ujednolicone/uniwersalne skrypty mapowania
  • automatyczne mapowanie dysków dla użytkowników zaraz po dodaniu do grupy funkcyjnej

poniżej zamieszczam przykładowy skrypt logowania mapujący dyski, który ma możliwość mapowania na podstawie przynależności do grupy. ponieważ użytkownicy nie należą bezpośrednio do grupy dostępowej, sprawdzany jest drugi poziom zagnieżdżenia – atrybut memberof. jest możliwość włączenia rekursywnego sprawdzania zagnieżdżenia ale ma to kilka mankamentów:

  • jest dość powolne w realnym środowisq, gdzie grup jest sporo
  • istnieje niebezpieczeństwo przypadkowego zmapowania katalogu z powodu powiązań pomiędzy grupami
'*******************************************************************************
'* map network drives lib for logon script                                     *
'*   can be used to map multiple drives. possible error handling               *
'*   user must have proper permissions - providing credentials not handled     *
'*                    nexorek(at)gmail.com           25.iii.2kd                *
'*EXAMPLE USE:                                                                 *
'*addMapping "m","\192.168.1.100c$"                                          *
'*addMapping "n","\192.168.1.100d$"                                          *
'*mapNetworkDrives                                                             *
'*                                                                             *
'*EXECUTE WITH ERROR HANDLING:                                                 *
'*addMapping "m","\192.168.1.100c$"                                          *
'*addMapping "n","\192.168.1.100d$"                                          *
'*if mapNetworkDrives<>0 then                                                  *
'* wscript.echo "do something with "&mapNetworkDrives                          *
'*else                                                                         *
'* wscript.echo "netdrives mapped successfully"                                *
'*end if                                                                       *
'*                                                                             *
'*MAP USER-named DRIVE                                                         *
'*addMapping "h","\servershare"&logonName                                   *
'*                                                                             *
'*CONDITIONAL MAP DRIVE ON USER MEMBERSHIP                                     *
'*if isMember("group name") then addMapping "s","\serversharename"           *
'*                                                                             *
'*******************************************************************************
ON ERROR RESUME NEXT
Const FileServer="\put.servername.here"

Dim dictMappings
Dim oADSystemInfo
Dim oUser, groupList, loginName, dictGroups, g
dim tempname

'*******************************************************************************
'*                                 MAIN                                        *
'*******************************************************************************
'used for store information about mapping drives
set dictMappings=CreateObject("Scripting.Dictionary")

'Object for user/computer information
set oADSystemInfo=CreateObject("ADSystemInfo")
'USER
set oUser=GetObject("LDAP://"&oADSystemInfo.UserName)
loginName=oUser.SAMAccountName
'USER GROUPS MEMBERSHIP
set dictGroups=CreateObject("Scripting.Dictionary")
groupList=oUser.getEx("memberOf")
for each g in groupList
  if not strcomp(lcase( left( getObject("LDAP://"&g).objectCategory,8) ),"cn=group" ) then
    enumGroupsInGroup("LDAP://"&g)
  end if
  tempname=lcase(mid(g,4,InStr(g,",")-4))
  if not dictGroups.exists(tempname) then dictGroups.add tempname, g
next

'PUT MAPPINGS HERE. example:
if isMember("AG_FS01_RW_Accounting") then addMapping "i","\FS01Accounting"
mapNetworkDrives

'*******************************************************************************
'*                              SUBS'N'FUNCS                                   *
'*******************************************************************************
Sub addMapping(drvLetter, srvPath)
  dictMappings.add ucase(drvLetter)&":", srvPath
End Sub

Function mapNetworkDrives()
  ON ERROR RESUME NEXT
  Dim wshNetwork
  Dim AllDrives, i

  Set WshNetwork = WScript.CreateObject("WScript.Network")
  Set AllDrives = WshNetwork.EnumNetworkDrives()

  For each i in dictMappings
    'unmap before mapping - just to be sure that drive letter is not used
     if dictMappings.Exists(i) then
       WShNetwork.RemoveNetworkDrive AllDrives.Item(i)
     end if
    WShNetwork.MapNetworkDrive i, dictMappings(i)
    mapNetworkDrives=cstr(hex(err.number))
  next
End Function

Function isMember(gName)
  if dictGroups.Exists(lcase(gName)) then
    isMember=TRUE
  else
    isMember=FALSE
  end if
End Function

Sub enumGroupsInGroup(gname)
  ON ERROR RESUME NEXT
  Dim grpList, gentry

  grpList=getObject(gname).getEx("memberOf")
  for each gentry in grpList
    if not strcomp(lcase( left( getObject("LDAP://"&gentry).objectCategory,8) ),"cn=group" ) then
      dictGroups.add lcase(mid(gentry,4,InStr(gentry,",")-4)), gentry
      'next line is recursion for multilevel nesting. for performance purposes assumed 2-level structure
      'so it is disabled. there should be no more then second-level nesting for permissions
      'in fact it can be even dengerous - someone may have accidently mapped drive  
      'enumGroupsInGroup("LDAP://"&gentry)
    end if
  next

End Sub

jak się okazuje, czasem teoria przekłada się na praktykę – mówię tu o podręcznikowym projektowaniu grup (global/domain local i standardowe AGDLP).

eN.

aplikacje i ustawienia proxy

najprostsze rzeczy wcale nie są takie proste. ostatnio ciągle walczę z ustawieniami proxy i potwornie mnie wqrza to, jak to jest obsługiwane przez aplikacje:

  • duża cześć aplikacji korzysta z ustawień systemowych/IE – już to samo w sobie jest denerwujące zwłaszcza, że część z aplikacji nie ma możliwości konfiguracji ręcznej.
  • po włączeniu w opcjach flagi “automatically configure” powoduje, że niektóre aplikacje pobierają ustawienia skonfigurowane na zakładce, ale niektóre je olewają i odpytują DNS o wpis WPAD – co w przypadq korpo sqtqje tym, że aplikacja zamiast przez lokalny proxy próbuje łączyć się przez zagraniczny. opisywałem to tutaj.
  • aplikacje napisane w java to kolejny wspaniały temat
  • duża część aplikacji nie obsługuje SSO. najśmieszniejsze są te, które korzystają z ustawień systemowych – czyli nie mają ręcznej konfiguracji, a mimo to nie radzą sobie z uwierzytelnieniem.
  • nie wiedzieć czemu [nie chciało mi się badać netmonem], niektóre aplikacje nie potrafią się uwierzytelnić na ISA – czy to wpisując usera w postaci “domainuser” czy “user” – po prostu zwracają acc denied i tyle. trafiłem już na dwie takie
  • większość aplikacji próbuje logować się do proxy wiele razy na raz. co sqtqje tym, że po zmianie hasła co chwile jakaś aplikacja bloqje konto. czy to jakiś standard qrde, żeby próbować wiele razy?? tak trudno po pierwszym komunikacie ‘acc denied’ zwrócić jakieś info?

podstawowa rzecz… a tyle problemów. pfffff…

eN.

DigiGirlz

DigiGirlz_logo

Rusza tour DigiGirlz!

Pierwszy przystanek – Warszawa 20 Marca 2010 na Uniwersytecie Warszawskim.

Organizator: Women in Technology

Rejestracja: http://digigirlz.pl

Projekt DigiGirlz powstał z myślą o rozwoju młodych kobiet w dziedzinie IT. Celem projektu jest zachęcenie młodych ludzi, a zwłaszcza kobiet, do studiowania kierunków o specjalności technicznej (kandydaci na studia), a także zachęcenie do rozwijania umiejętności technicznych (gimnazjalistki, przyszłe kandydatki na studia).

Konferencja podzielona jest na 3 części ze względu na grupy docelowe (więcej szczegółów w agendzie spotkania), ale jeżeli każda z grup ma ochotę posłuchać o wszystkim – przyjdźcie koniecznie!

Kolejne przystanki to:

  • 20 marca 2010 – Warszawa, Uniwersytet Warszawski
  • 10 kwietnia 2010 – Gdańsk, Uniwersytet Gdański
  • 24 kwietnia 2010 – Kraków, Akademia Ekonomiczna
  • 22 maja 2010 – Wrocław, Politechnika Wrocławska
  • 29 maja 2010 – Poznań, Instytut Informatyki

Partnerami akcji są firmy Microsoft i Symantec, a z uczestnikami spotkają się przedstawiciele m.in. Uniwersytetu Warszawskiego oraz takich firm jak: TechData Polska, CQURE, Microsoft oraz Symantec, a także grupy Garage Team (Lego Mindstorms).

sent by Paula (:

eN.

co znaczy spieprzony interfejs: odzyskiwanie bazy SQL w Backup Exec 2o1o

słyszałem wiele opinii które sprowadzają się do tego, że odkąd symantec przejął Backup Exec produkt zszedł na psy. nie będę tego komentował, ponieważ nie znam linii veritasa sprzed lat, ale sam również korzystam z Backup Exec – obecnie zupgrade’’owanego do najnowszej wersji – 2o1o. najwięcej zmian – w interfejsie oraz cała masa nowych ficzerów. czy na lepsze? imho nakład pracy poszedł w zaspokojenie marketingowych “NEW GREAT FEATURE” zamiast w dopracowanie produktu. taka anegdotka – 3h walki z trywialnym zadaniem: odzyskanie bazy SQL. może o tyle bardziej skomplikowanym, że chodzi o duplikat bazy aby służyła do testów, a więc trzeba przekierować nazwę bazy i katalogów.

Selection

po kilku nieudanych próbach doszedłem do wniosq, iż wykonuję nieprawidłowy backup, ponieważ w selekcji mam zaznaczony tylko backup bazy przez agenta SQL, a nie mam włączonego backupu na poziomie plików. wydawało mi się to bez sensu [i okazało się, że mam rację] – bo odzyskanie bazy na poziomie plików powinno dać z dużym prawdopodobieństwem niekonsystetną bazę. po to przecież jest ten cholerny agent SQL, nie? finalny wniosek: nie trzeba/nie powinno się zaznaczać plików bazy. tutaj jednak przy okazji ciekawostka: pomimo włączenia korzystania z shadow copy, katalogi bazy w medium backupu i tak pozostały puste. wynika to z tego jak działa provider VSS i jak sobie poczytać dokładnie, jest to logiczne i tak powinno być [chociaż trochę dziwi z ogólnych założeń działania shadow copy].

Restore Job

jak powinien wyglądać restore job?

ponieważ ciągle miałem błędy testowałem różne opcje – w tym próbowałem odzyskiwać z wykorzystaniem file redirection, co oczywiście nie miało większego sensu ale ukazało jedną ze wspaniałości interfejsu BE:

image

cóż to jest za standard zapisu “\Serwer.domena.add:” ? pomieszanie zapisu UNC z lokalnym? no dobra – tutaj nie jest tragicznie ponieważ opcja ‘browse’ wypełnia to sama, i robi to prawidłowo. w tym miejscu okno browse korzysta z predefiniowanej listy selekcji więc można to zrobić szybko. w skrócie: niuans, czepiam się.

w każdym razie file redir nie jest do niczego w tym scenariuszu potrzebny. aby odzyskać bazę należy zaznaczyć samą bazę danych, bez fizycznych plików na dysq:

image

no i teraz clue całej operacji: jak przekierować prawidłowo bazę?
po pierwsze trzeba wpisać serwer SQL na którym będzie odzyskiwana baza i nazwa samej bazy. początkowo ciągle generował błędy i nie do końca byłem pewien czy ta baza powinna już istnieć czy nie – lepiej nie. ważne jest jednak zaznaczenie opcji nadpisania – pokażę później. jak dotąd wszystko proste i logiczne. to na czym spędziłem dobre 2h to opcja przekierowania plików “destination options” – oczywiste, że nie chcę nadpisać działającej. tylko jak zapisać ścieżkę? pierwsza myśl – UNC. niestety zwracane są błędy. w takim razie guzik browse – skoro ja nie umiem, niech interfejs pomoże. to okienko browse wykorzystuje już wyszukiwanie w sieci – a więc osoby, które mają powyłączane browsery w ogóle nie skorzystają, a dla mnie to było ok. 1o min czekania, aż odpyta się o kompy w domenie. ręcznie wpisać się nie da. po teście cierpliwości wybrałem odpowiedni katalog i q mojemu zaskoczeniu miałem rację – należy wpisać ścieżkę UNC!! mimo wszystko przy próbie odzyskania cały czas generowane są błędy. stąd właśnie pomysł na korzystanie z licznych bezsensownych opcji ‘a nóż tak to wymyślili. po jakimś czasie zdesperowany wpisałem po prostu “D:katalog” – w najgorszym przypadq odzyska mi tą bazę na serwerze backupowym. i okazało się to strzałem w dziesiątkę.

image

na koniec w części ‘Settings->Microsoft SQL” trzeba zaznaczyć opcję “overwrite existing database” – pomimo, że wcale nieistnieje – w innym wypadq generowany jest błąd, że nazwa bazy ulega zmianie i nie może zapisać… [taka ciekawostka].

pierdoła: niedopracowany interfejs, a kilka godzin straconych nie mówiąc o wzbogaceniu słownika przekleństw. myślę, że wiele firm zrobiłoby dobrze, gdyby kolejna wersja zamiast sqpiać się na nowościach sqpiła się na poprawie spójności interfejsu, kodu, optymalizacji i ergonomii. może trochę kontrowersyjny przykład ale tak, jak to zrobił emes z vistą (;

eN.

XBoxa można oddać

ciekawe informacje w sprawie braq usługi XBoxLive w polsce: wedle federacji konsumentów „Zgodnie z art. 4 ust. 3 ustawy o szczególnych warunkach sprzedaży konsumenckiej niezgodność towaru[…] W związku z powyższym można reklamować towar z tytułu niezgodności towaru z umową, a ponieważ jest to wada, której usunąć się nie da, należy mu się zwrot ceny za towar zapłaconej[..]”.

biorąc pod uwagę jakie nastroje wywołuje cała sytuacje – ciekawe ile osób skorzysta z tej możliwości. można się spodziewać zalewu historii jak to osoby próbują walczyć w sklepach ze sprzedawcami q:

eN.