SDJ 12.2010 PL.pdf

(12546 KB) Pobierz
382003495 UNPDF
382003495.026.png
12/2010 (192)
SPIS TREŚCI
BIBLIOTEKA MIESIĄCA
PROGRAMOWANIE JAVA
4 STL w praktyce:b usuwanie elementów –
biblioteki STL.
Rafał Kocisz
Programisto C++! Czy jesteś pewien, że wykorzystujesz
w praktyce potencjał swojej wspaniałej biblioteki standar-
dowej? Jeśli chcesz się przekonać, czy Twoja wiedza na
temat usuwania elementów z STL-owych kontenerów jest
pełna, to koniecznie przeczytaj ten artykuł!
28 Java – Problemy wydajnościowe.
Narzędzia, strategie oraz sposoby
z maszyną wirtualną Java
Marcin Kalas
Nawet najlepiej napisana aplikacja zrobi na użytkowni-
ku niekorzystne wrażenie, jeżeli pojawią się w niej proble-
my wydajnościowe. Długie okresy, w których program nie
odpowiada, lub też konieczność restartu aplikacji po kil-
ku godzinach pracy mogą zniechęcić użytkownika. Arty-
kuł przedstawia narzędzia oraz strategie, które możemy
wykorzystać w sytuacjach, gdy w naszej aplikacji pojawi
się właśnie taki problem.
KLUB TECHNICZNY
Auditing – Śledzenie systemu aplikacji
Piotr Tucholski
OpenEdge obsługuje wszystkie podstawowe usługi słu-
żące zabezpieczaniu procesów biznesowych. Zabezpie-
czenia te dotyczą kilku funkcji takich jak: uwierzytelnia-
nie, autoryzacja, poufność, integralność, zarządzanie toż-
samością i auditing. Auditing jest zintegrowanym i w pełni
konfigurowalnym serwisem, pozwalającym kontrolować
bazy danych OpenEdge, narzędzia bazodanowe oraz
aplikacje ABL i SQL.
CLOUD COMPUTING
44 Zrób to w chmurze – Porównanie
Amazon EC2 i Google App Engine
Konrad Kaplita, Dominik Radziszowski, Maciej Rząsa,
Łukasz Suder, Marcin Wardyński, Arkadiusz Wójcik
Katedra Informatyki AGH pokaże Ci, w jaki sposób pa-
trzeć na chmury z rozjaśnioną twarzą
14 Flex + Facebook = Lubię to!
Olga Grabek
Niedawno Adobe udostępniło deweloperom nowy zestaw
narzędzi ActionScript, które zapewniają integrację Platfor-
my Flash z jednym z najbardziej popularnych serwisów
społecznościowych na świecie - Facebook-iem. Dzięki
nim napisanie aplikacji Flex, komunikującej się z Facebo-
ok-iem, stało się bardzo proste.
50 Starcie gigantów – Automatyczna
skalowalność aplikacji na platformach
Amazon WS i Google App Engine
Konrad Kaplita, Dominik Radziszowski, Maciej Rząsa,
Łukasz Suder, Marcin Wardyński, Arkadiusz Wójcik
Katedra Informatyki AGH nauczy Cię, jak osiągnąć wy-
soką wydajność aplikacji wdrażanych w chmurze.
PROGRAMOWANIE C++
ZARZĄDZANIE PROJEKTEM
INFORMATYCZNYM
– wyjścia. Biblioteka boost::asio
Robert Nowak
Urządzenia wejścia – wyjścia działają znacznie wolniej
niż procesor, dlatego w czasie oczekiwania na odpowiedź
urządzenia warto go zwalniać. Współczesne systemy
operacyjne dostarczają udogodnień, które pozwalają to
osiągnąć bez angażowania niezależnych wątków.
58 Szacowanie nakładów na wytwarzanie
oprogramowania – Metoda punktów
przypadków użycia (Use Case Points)
Mateusz Kurleto
Artykuł prezentuje metodę szacowania nakładów na
wytwarzanie oprogramowania metodą punktów przy-
padków użycia. Na prostym przykładzie ilustruje kolej-
2
12/2010
2
382003495.027.png 382003495.028.png 382003495.029.png 382003495.001.png 382003495.002.png
 
SPIS TREŚCI
SPIS TREŚCI
ne kroki pozwalające rzetelnie wycenić koszty wytwo-
rzenia kodu.
nal. Developerzy przez kolejne dwa miesiące mogą re-
alizować swoje pomysły i stworzyć aplikacje, które we-
zmą udział w konkursie i co najważniejsze spodobają się
użytkownikom GG.pl i jury. Możliwości tworzenia aplika-
cji jest wiele, ograniczać je może jedynie bezpieczeń-
stwo użytkowników.
Z ŻYCIA ITOLOGA
na poprawę jakości kodu
Mariusz Chrapko
Inspekcja bardzo źle nam się kojarzy. Mamy Inspekcję
Budowlaną, Transportu Drogowego, Państwową Inspek-
cję Pracy, Inspekcję Weterynaryjną, Sanitarną, Ochrony
Roślin i Nasiennictwa, Inspekcję Zakładową… Można by
wymieniać bez końca… Prawda jest taka, że jak słyszy-
my to słowo, automatycznie wiemy, że ktoś będzie kogoś
lub coś sprawdzał. A my nie lubimy kontroli. Kontrola za-
kłada, że ktoś może być winny. W artykule będzie o zu-
pełnie innym rodzaju inspekcji – Inspekcji Kodu.
FELIETON
70 Niemiecki rynek czeka na polskich
specjalistów IT
Agnieszka Kropelnicka, agencja PRaktycy
Polscy informatycy i programiści są na wagę złota. Dy-
namicznie rozwijający się rynek usług związany z branżą
nowych technologii przyciąga do Polski firmy zagranicz-
ne. Wszystko wskazuje na to, że obecnie najbardziej na-
stawieni na pozyskiwanie naszych specjalistów z branży
IT są Niemcy. Wiele polskich firm dzięki outsourcingowi
już teraz podbija rynek niemiecki, po 2011 roku, gdy Pol-
ska uzyska formalny dostęp do pracy u naszego zachod-
niego sąsiada, może okazać się, że najlepszych zacznie
brakować nad Wisłą.
KONKURS
GG.pl
Trwa Konkurs dla developerów aplikacji do GG.pl i Ga-
du-Gadu, któremu patronuje Software Developer’s Jour-
72 Web 2.0 zagrożeniem dla biznesu?
Marta Szczepańska, agencja PRaktycy
Narzędzia sieci społecznościowych w coraz większym
zakresie wpływają na sposób prowadzenia biznesu.
Trzeba jednak pamiętać, że technologie te wnoszą też
duże ryzyko do przedsiębiorstwa. Przy setkach milio-
nów użytkowników są bardzo atrakcyjnym celem dla ha-
kerów. Lista zagrożeń jest długa: robaki sieci społecz-
nościowych, phishing, trojany, botnety, APT czy wycie-
ki danych. Przy dużym zaufaniu do sieci społecznościo-
wych, a zarazem braku ich kontroli można narazić firmę
na ogromne ryzyko. Jak się go ustrzec?
Miesięcznik Software Developer’s Journal
(12 numerów w roku)
jest wydawany przez Software Press Sp. z o.o. SK
Redaktor naczelny:
Łukasz Łopuszański lukasz.lopuszanski@software.com.pl
Skład i łamanie:
Tomasz Kostro www.studiopoligraficzne.com
Kierownik produkcji:
Andrzej Kuca andrzej.kuca@software.com.pl
Adres korespondencyjny:
Software Press Sp. z o.o. SK,
ul. Bokserska 1, 02-682 Warszawa, Polska
tel. +48 22 427 36 91, fax +48 22 224 24 59
www.sdjournal.org cooperation@software.com.pl
NARZĘDZIA
Dział reklamy: adv@software.com.pl
Redakcja dokłada wszelkich starań, by publikowane
w piśmie i na towarzyszących mu nośnikach informacje i programy
były poprawne, jednakże nie bierze odpowiedzialności za efekty
wykorzystania ich; nie gwarantuje także poprawnego działania
programów shareware, freeware i public domain.
76 FastReport.Net
FastReport.Net jest generatorem raportów z wieloma
funkcjami dla deweloperów, korzystających z Microsoft
Visual Studio 2005 oraz 2010, Delphi Prism lub z dowol-
nego innego narzędzia do opracowywania, które współ-
pracuje z .NET Framework 2.0 i kolejnymi wersjami.
Wszystkie znaki firmowe zawarte w piśmie są własności odpowiednich
firm.
Zostały użyte wyłącznie w celach informacyjnych.
Osoby zainteresowane współpracą prosimy o kontakt:
cooperation@software.com.pl
www.sdjournal.org
3
382003495.003.png 382003495.004.png 382003495.005.png 382003495.006.png 382003495.007.png 382003495.008.png 382003495.009.png
BIBLIOTEKA MIESIĄCA
usuwanie elementów
Efektywne usuwanie elementów przy pomocy biblioteki STL
Programisto C++! Czy jesteś pewien, że wykorzystujesz
w praktyce potencjał swojej wspaniałej biblioteki
standardowej? Jeśli chcesz się przekonać, czy Twoja wiedza
na temat usuwania elementów z STL-owych kontenerów
jest pełna, to koniecznie przeczytaj poniższy artykuł!
Dowiesz się:
• Dlaczego remove() jest najbardziej zdradliwym algorytmem z
biblioteki STL,
• Jak efektywnie usuwać elementy z kontenerów STL-owych.
Powinieneś wiedzieć:
• Solidna znajomość podstaw języka C++;
• Solidna znajomość podstaw biblioteki STL;
ciego artykułu z cyklu STL w praktyce . Mam
nadzieję, iż poprzednie tekst z tej serii ( STL
w praktyce: wyszukiwanie oraz STL w praktyce: sorto-
wanie ) przekonały Cię, że standardowa biblioteka wzor-
ców języka C++ kryje w sobie sporo ciekawych niespo-
dzianek.
Tym razem, chciałbym zainteresować Ciebie tema-
tem usuwania elementów z kontenerów STL.
nieprzyjaciół. Obraz gry przesuwa się z lewej na prawą
stronę. Zza prawej krawędzi ekranu wylatują coraz to
nowi przeciwnicy, a gdy docierają do części lewej – od-
latują i nikną na zawsze w przepastnych głębinach ko-
smosu. Bardzo prosty prototyp takiej gry mógłby wyglą-
dać tak jak pokazano na Rysunku 1.
Twoim pierwszym zadaniem jest oprogramowanie ta-
kiego właśnie prototypu. Jako że jesteś fanem biblio-
teki STL, zdecydowałeś się przechowywać obiekty re-
prezentujące przeciwników w kontenerze std::vector .
Jednakże ciągłe dodawanie elementów do wektora (no-
wi przeciwnicy wlatujący z prawej strony) bez usuwania
ich w żaden sposób, nie wydaje się być dobrym pomy-
Dlaczego właśnie usuwanie?
Patrząc na tytuł niniejszego artykułu zapewne zada-
jesz sobie pytanie: dlaczego właśnie usuwanie! Czy
już nie ma ciekawszych tematów? Cóż, być może i są
takowe, ale usuwanie elementów z kontenerów STL (a
zwłaszcza – z kontenerów zajmujących ciągły obszar
pamięci) kryje w sobie pewien haczyk. Haczyk ten
wiąże się z algorytmem remove() , który śmiało mógł-
by kandydować do miana najbardziej zdradliwego al-
gorytmu wchodzącego w skład biblioteki standardowej
języka C++. Biorąc po uwagę to, iż usuwanie elemen-
tów to, jak by nie patrzeć, jedno z najbardziej elemen-
tarnych działań w codziennej praktyce programisty,
uznałem że warto napisać na ten temat niedługi, ale
za to odrębny artykuł.
Przygoda w kosmosie...
Wyobraź sobie, że piszesz w języku C++ grę – klasycz-
ną kosmiczną strzelaninę – w której atakują Cię hordy
Rysunek 1. Bardzo prosty prototyp kosmicznej strzelaniny
4
12/2010
STL w praktyce:b
D rogi Czytelniku, zapraszam Cię do lektury trze-
382003495.010.png 382003495.011.png
 
382003495.012.png 382003495.013.png 382003495.014.png 382003495.015.png 382003495.016.png 382003495.017.png
Usuwanie elementów pomocy biblioteki STL
słem. Najprostszym rozwiązaniem wydaje się być usu-
wanie przeciwników, którzy opuścili obszar ekranu gry.
Spróbujmy coś takiego zrealizować. Aby nieco ubar-
wić nasze zadanie załóżmy, że obiekty reprezentują-
ce przeciwników alokujemy dynamicznie i trzymamy
je za pomocą inteligentnych wskaźników, które z ko-
lei są przechowywane w kontenerze. Na początek zde-
finiujmy sobie prostą klasę reprezentującą przeciwnika
(patrz: Listing 1).
Klasa ta zawiera dwa pola: nazwę oraz flagę określa-
jącą czy przeciwnik jest aktywny. Kod renderujący na-
szego przeciwnika celowo został uproszczony (po pro-
stu wypisujemy jego nazwę na standardowym wyjściu).
Oprócz tego dołączona jest również definicja typu dla
sprytnego wskaźnika na obiekt typu Enemy oraz global-
na funkcja sprawdzająca stan jego aktywności (rola tej
funkcji będzie wyjaśniona kilka akapitów niżej). W ko-
lejnym kroku zdefiniujemy klasę reprezentującą grupę
przeciwników (patrz: Listing 2).
Zadaniem tej klasy jest opakowanie wektora inte-
ligentnych wskaźników na przeciwnika i udostępnie-
nie prostego, użytecznego interfejsu do zarządzania
grupą obiektów. Na tym etapie jest tam wszystko cze-
go potrzebujemy: możliwość dodania nowych przeciw-
ników do grupy, możliwość narysowania wszystkich
przeciwników z grupy i – to co nas najbardziej intere-
suje – możliwość usunięcia z grupy przeciwników któ-
Listing 2. Implementacja klasy EnemyGroup
#include <vector>
#include <boost/foreach.hpp>
#deine foreach BOOST_FOREACH
class EnemyGroup
{
public :
typedef std :: vector < EnemyPtr > EnemyPtrVec ;
typedef EnemyPtrVec :: iterator EnemyPtrVecIter ;
typedef EnemyPtrVec :: const_iterator
EnemyPtrVecConstIter ;
Listing 1. De�nicja klasy reprezentującej przeciwnika
#include <iostream>
#include <string>
#include <boost/shared_ptr.hpp>
void Render ()
{
foreach ( EnemyPtr enemy , m_enemies )
{
enemy -> Render ();
}
}
class Enemy
{
public :
Enemy ( const std :: string & name , bool isAlive = true )
:
m_name ( name ) ,
m_isAlive ( isAlive )
{}
EnemyPtr At ( int index )
{
return m_enemies [ index ];
}
void Render () { std :: cout << m_name << std ::
endl ; }
bool IsAlive () const { return m_isAlive ; }
void SetIsAlive ( bool isAlive ) { m_isAlive =
isAlive ; }
void AddEnemy ( EnemyPtr enemy )
{
m_enemies . push_back ( enemy );
}
private :
std :: string m_name ;
bool m_isAlive ;
} ;
void RemoveDeadEnemies ()
{
// TODO.
}
typedef boost :: shared_ptr < Enemy > EnemyPtr ;
int Size () const { return m_enemies . size (); }
bool IsNotAlive ( EnemyPtr enemy )
{
return ! enemy -> IsAlive ();
}
private :
std :: vector < EnemyPtr > m_enemies ;
} ;
www.sdjournal.org
5
382003495.018.png 382003495.019.png 382003495.020.png 382003495.021.png 382003495.022.png 382003495.023.png 382003495.024.png 382003495.025.png
 
Zgłoś jeśli naruszono regulamin