February 21st, 2011

humster

анапа

Недавно в интернете попалась на глаза ссылка на Анапа курортная!И я решил пройти по ней и прочесть в чем как бы суть предложения.Я много узнал благодаря этой статье приведенной на сайте мне понравилось те предложени якоторые там приводятся.Для того чтобы еще больше понять в чем суть вы можете сами прочитать и оценить текст.
Предназначенный сайт об Анапе как вы уже догадались.Там приведенна информация которая способствовала бы отдыхающим проследовать на данный курорт и отдохнуть по полной катцшке.Я думаю что этим руководством стоит воспользоватся каждому который отправляется в анапу на отдых.вообще то изначально стоит руководствоваться конечно же своей головой при выборе.А потом сразу же статьей.никто вас насильно не к чему не принуждает.Каждый отдыает как хочет.!
Но если вам все же будет интересна Ореховая роща и все что связанно с ней то вы могли бы так же заглянуть и на данный раздел сайтаюЯ не имею право приводить ссылки из текста.Но тот человек который создал этот сайт явно постарался на славу.Он сьездил в очень крассивые места и сделал замечательные фото.ззаходите и оцените сами его работу.А так же он не забыл защитить их от копи паста. Умное решение.
А вам что либо известно про Утриш?
Это Уникальнейший можжевелово-фисташковый лес на Черном море – заказник “Большой Утриш”. Я сам этого не знал и был удивлен той информацией которая та была представленна!
Ребят если вам нравится работа то оставляйте свои коментарии на сайте и здесь!Я думаю автор будет доволен!
humster

artgopop.com

Мне на глаза недавно попался АРТ Дизайн .
Sieht aus wie Bill Gross ' UberMedia hatte seine API-Zugriff wieder für mindestens zwei seiner apps an diesem Sonntag Nachmittag, nach einer dramatischenАРТ Дизайн .
Wendung der Ereignisse führte zu ihnen geschlossen Freitag wird nach unten auf. Im App Rückkehr, Client UberTwitter wird Blackberry zu ändern ihren Namen in UberSocial und Android App twidroyd werden machen keine Namensänderungen - АРТ Дизайн .
Beide haben Verletzungen eingehalten Twitter Forderungen zur Behebung der beanstandeten.

Von Twitter Support :

"Wir haben die Entwickler von twidroyd und UberSocial für Blackberry АРТ Дизайн .
(ehemals UberTwitter) Zugang zu den Twitter-API gegeben erneut. Unsere erste Bilanz zeigt, dass Schritte unternommen wurden, um die Verletzungen für diese Anwendungen zu beheben.

Wenn der Entwickler Updates und twidroyd Ubersocial,АРТ Дизайн .
kannst du den Download ihrer Aktuelles zu Tweets wieder Zugriff auf diese Anwendungen. "

Kein Wort noch, ob die apps sind wirklich funktioniert, wie es jetzt ist bis zu UberMedia Entwickler Updates zur Verfügung stellen, und dieАРТ Дизайн .
Benutzer müssen die neuen Versionen der Anwendungen herunterladen, um Tweets zu sehen. Das iPhone apps UberCurrent und UberSocial АРТ Дизайн .
(ehemals UberTwitter) noch in der Review-Prozess fest.
humster

арт и дизайн

АРТ Дизайн .
Die Leute sagen immer die Dinge ändern sich schnell im Silicon Valley. Hier und in anderen Gemeinden rund um unternehmerische unserem Land, Ideen kollidieren, Unternehmen zu bilden, ist Geld injiziert, Talent zugeordnet ist, und das Tempo der Innovation Kannen. Unternehmerische Initiative istАРТ Дизайн .
so zugänglich, die besten Talente strömen hierher, um Unternehmen wie Google gefunden. Heute ist es schwieriger für die ausländischen Unternehmer zu uns kommen in erster Linie, die Anlass gegeben hat, die Startup Visa Bewegung, eine bestimmte Politik innerhalb Startup Amerika . Diese sind notАРТ Дизайн .
wendig, bewegt sich unser Land braucht, um zu Google behält die internationalen Talente trainieren wir und zu pflegen Ökosysteme neben bauen.

Während wir Politik versuchen, langsam zu beheben unsere inländischen, ist die Welt weniger Patienten. Mobile soziale Technologien haben Libyen stieß Bürger auf die Straßen in Tunesien, Ägypten, Iran, Algerien, Bahrain, und jetzt. Es ist nicht zu leugnen einem riesigen Einfluss in diesen Bewegungen: soziale Netzwerke. Soziale Netze nicht die Ursache für diese Revolten, aber sie eingefettet die Räder. In Ägypten, ein Facebook Fan-Seite gehandelt, wie der Stein, während es Feuerstein ist ein Bürger zusammengeschlossen, wie. Das Ergebnis war АРТ Дизайн .
ein Funke. Und Funke war, dass Twitter angefacht durch eine Trommel, die von Kerosin so entflammbar Google, Twitter und SayNow dich zusammen , um Bürgern die Möglichkeit zu ägyptischen Tweets kommunizieren außerhalb der nationalen Grenzen durch die Schaffung von mobilen Netzwerken, in denen das Telefon in übersetzen Anrufe könnten.

All diese Aktivitäten haben mich zum Nachdenken über das, was wird die nächste Phase in der Social-Networking-Revolution sein, was Massenmarkt Skala erreichen, werden globale und generieren wirkliche soziale und finanzielle Auswirkungen. АРТ Дизайн .
Es gibt vielleicht keine größere Markt zu stören. Die Schnelllebigkeit der Politik heute, ob im "reifen" Märkten wie den USA oder "neuer Märkte" wie in Ägypten, haben den Weg für den Einzelnen, sich und ihre Interessen in einem politischen Kontext ausdrücken gepflastert.
humster

art for you

АРТ Дизайн .
Kulturelle Relativität ist eine erstaunliche Sache. Während die amerikanischen Eltern Facebook Sorgen um ihre Kinder zu über, Eltern sind АРТ Дизайн .
ägyptische Namensgebung ihrer Kinder "Facebook" zum Gedenken an die Ereignisse rund um die # Jan25 Revolution.

Laut Al-Ahram (eine der beliebtesten Zeitungen in Ägypten) eine etwas mehr als zwanzig ägyptischen Mannes "genannt hat seinen ersten TochterАРТ Дизайн .
geboren" Facebook in Gedenken an die Rolle der Social Media Service jenseits spielte bei der Organisation der Proteste in Tahrir-Platz und.

Helmed von heute berühmten Googler Wael Ghonim, die "We Are Khaled Said" Seite zeigte Facebook innerhalb von 5 Tagen nach Saids Tod im Juni und diente als Drehscheibe für Dissidenz gegen ägyptische Polizei Brutalität sowieАРТ Дизайн .
eine Möglichkeit, die Verbreitung logistischen Informationen über eskalierende Proteste gegen die Regierung bis Mubarak Resignation. Andere Aktivisten Seiten wie man eigentlich als "Tahrir-Platz" nachher kurz aufgetaucht.

АРТ Дизайн .
humster

арт и дизайн

Anmerkung der Redaktion : Gast Autor Semil Shah ist ein Unternehmer Netze interessiert in den digitalen Medien, Internet-Konsum und sozial. Shah ist Alto in Palo und Sie können ihn auf Twitter folgen @ semilshah

Die Leute sagen immer die Dinge ändern sich schnell im Silicon Valley. Hier und in anderen Gemeinden rund um unternehmerische unserem Land, Ideen kollidieren, Unternehmen zu bilden, ist Geld injiziert, Talent zugeordnet ist, und das Tempo der Innovation Kannen. Unternehmerische Initiative ist so zugänglich, die besten Talente strömen hierher, um Unternehmen wie Google gefunden. Heuteнедавно на глаза попался мне АРТ Дизайн
ist es schwieriger für die ausländischen Unternehmer zu uns kommen in erster Linie, die Anlass gegeben hat, die Startup Visa Bewegung, eine bestimmte Politik innerhalb Startup Amerika . Diese sind notwendig, bewegt sich unser Land braucht, um zu Google behält die internationalen Talente trainieren wir und zu pflegen Ökosysteme neben bauen.

Während wir versuchen, Politik langsam fix unsere inländischen, ist die Welt weniger Patienten. Mobile soziale Technologien haben Libyen stieß Bürger auf die Straßen in Tunesien, Ägypten, Iran, Algerien, Bahrain, und jetzt. Es ist nicht zu leugnen einer riesigen Einfluss in diesen Bewegungen: soziale Netzwerke. Soziale Netze nicht die Ursache für diese Revolten, aber sie eingefettet die Räder. In Ägypten, ein Facebook Fan-Seite gehandelt, wie der Stein, während es Feuerstein ist ein Bürger zusammengeschlossen, wie. Das Ergebnis war ein Funke. Und Funke war, dass Twitter angefacht durch eine Trommel, die von Kerosin so entflammbar Google, Twitter und SayNow dich zusammen , um Bürgern die Möglichkeit zu ägyptischen Tweets kommunizieren außerhalb der nationalen Grenzen durch die Schaffung von mobilen Netzwerken, in denen das Telefon in übersetzen Anrufe könnten.

All diese Aktivitäten haben mich zum Nachdenken über das, was wird die nächste Phase in der Social-Networking-Revolution sein, was Massenmarkt Skala erreichen, werden globale und generieren wirkliche soziale und finanzielle Auswirkungen. Es gibt vielleicht keine größere Markt zu stören. Die Schnelllebigkeit der Politik heute, ob im "reifen" Märkten wie den USA oder "neuer Märkte" wie in Ägypten,недавно на глаза попался мне АРТ Дизайн
haben den Weg für den Einzelnen, sich und ihre Interessen in einem politischen Kontext ausdrücken gepflastert. Regierungen und gewählten Beamten können letztlich keine andere Wahl haben zu überwachen und zu versorgen, um diese Aktivitäten. Dies könnte der Beginn der nächsten Massenmarkt Trend, politische Meinungsäußerung und Organisation über soziale Netzwerke direkt gewählte Regierungsbeamte werden.

Wo Facebook verbindet Freunde rund um Marken und Ursachen, und wo Tweets verstärken Informationen in Echtzeit, was nach den Wahlen geschieht, oder nach Regierungen gestürzt? Wenn die Bürger von Natur aus ihren Präferenzen innerhalb einer demokratischen Republik zum Ausdruck bringen wollen, wird, wie diese Interessen am besten organisiert werden, priorisiert und ausgeführt? Und wer wird zur Rechenschaft gezogen werden? Diese Werkzeuge sind gegenwärtig wirksam Rallyesport Bürger in einer Wahl oder zu protestieren. Aber was ist mit dem Akt des Regierens? Die Realität ist, dass die Bürger häufig das Interesse verlieren, und halten hohe Bürgerbeteiligung nach einer Wahl (oder Regimewechsel) in die Feinheiten der tatsächlichen Rechtsetzung ist nicht einfach. Könnte Social Networking-Tools gebaut zu motivieren und die Bürger, ihre Interessen zu halten Burning Bright während des Aktes zu regieren werden?

Unternehmen greifen dieses Problem beruht: im Silicon Valley Ein Votizen . Ich weiß nicht viel über sie (Stealth), andere als Jason Kincaid's Profil im letzten Jahr. Es ist klar, das Team Hintergrund ist stellaren , die Anleger erfahren sind einige der am meisten, und es ist Timing könnte groß sein. Am Quoren , Mitbegründer недавно на глаза попался мне АРТ Дизайн
Jason Putorti schreibt: "Wir bauen derzeit ein Produkt, das wird sich grundlegend ändern Bürgerbeteiligung und das Gleichgewicht der Macht in unserer Demokratie. $ 8B wird Einfluss verbrachte über politische, viel davon im Fernsehen, es ineffizient ist massiv und dieser Markt wird definitiv Jahren ändern in den nächsten 10 ... unsere Tools ermöglichen wahlberechtigten Bürgern, votizens, und anerkannt werden gehört durch gewählte Beamte ohne Rückgriff auf Schreien oder Extremen. "Das Team baut eine Lösung für den amerikanischen Markt, aber auch Signale für Unternehmer in anderen Ländern zu holen auf der Trend-und Design-Systeme für ihre eigenen Länder. Meine Überzeugung ist, dass einmal ändern Regime oder lockern ihre Griffigkeit, die Bürger müssen weiter Druck, die Aufnahme der ebenso harte Arbeit der Selbstdarstellung und der Regierung, und dass diese Tätigkeit ist am besten organisierte online.

Relativ gesehen, haben wir die Dinge ziemlich gut in den USA, so gut in der Tat, dass wir alle nicht stimmen (~ 50% + nur in Presidential Rennen), und wenn wir wollen, wir sortieren Kandidaten durch Vorwahlen, die Stunden unbequem gehalten werden während und Extremen gerecht zu feiern. Das Verfahren erzeugt einen Showdown, wo die Kandidaten Zentrum sind stieß auf, im Tausch für die Änderung Wahlversprechen. Und viele Einzelpersonen und Unternehmen Geld Trades Händen. Politiker nutzen Facebook und Twitter auf Messeständen Rallye Wähler an die, aber was passiert nach der Wahl? Wir alle kennen die Realität. Die gewählten Volksvertreter haben die Aussichten berechnen ihre Wiederwahl, über die Schulter sehen alle zwei, vier oder sechs Jahren, und am Ende mit nichts anderes übrig, Rechnungen Ohrmarke ursprünglich gut gemeint, um sicherzustellen, dass sie nach Hause bringt, Speck.

Dies ist das Schweinefleisch gefüllte Wurst-Herstellung der amerikanischen Politik. Es ist für uns lag die Schuld auf sie leicht, aber es kann auch sein, dass wir Outsourcing zu viele unserer Kernthemen die öffentlichen Beamten, die sehr unterschiedliche Anreize für tatsächlich machen, dass unsere Interessen erfüllt sind zu tragen. Wir können hoffen, dass unsere Interessen berücksichtigt werden,недавно на глаза попался мне АРТ Дизайн
aber die Hoffnung nur so weit geht. Kritiker zu Recht für die Rechenschaftspflicht zu fragen, aber Changing Horses jeder Furlong kann kurzfristig für die Zukunft zu opfern.

Die meisten Bürger im Nahen Osten haben nicht diesen Luxus für uns selbstverständlich. Für sie bieten Nationen wie GMail, Facebook und Twitter diesem Ort, eine gemeinsame Plattform, die sie erschließen, zu verfeinern und Express ein Sortiment von aufgestauten Wünsche hilft, und wie wir gesehen haben, erzeugen enorme kinetische Energie am Deiche nicht standhalten kann. Ich weiß noch Votizen недавно на глаза попался мне АРТ Дизайн
Bauprodukt für den US-Markt politischen, aber ich würde wetten, wenn er fertig war heute und abgestimmte global, hörte Millionen würden registrieren, zu interagieren, und ihre Stimme.
humster

http://artgopop.com

Es kann sein, dass Unternehmer in anderen Teilen der Welt Lösung sind fleißig weg a bis zu versorgen, sei für die Welt oder ihr Land. Wenn Sie wissen Schicht von Startups Angriff dieses Problem mit einem sozialen, lass es mich wissen . Hier in Amerika, sind Unternehmer versuchen, Technologien zu nutzen, um verschiedene Analysen zu verbessern Fundraising, Werbung, Wahlen Sicherheit, Betrug, Wahlbeteiligung und post-mortem. Jede soziale Online-Tätigkeit, kann erziehen zu verbinden, motivieren und fördern die Wähler selbst wiederum auf Wahltagen ist ein großer Sieg. Darüber hinaus Menge Geld, die gegenwärtig in Kampagnen, vor allem die amerikanischen Präsidentschaftswahlen Rennen ist das eine spannende und lukrative Industrie zu stören, die alle durch die Verankerung eines Produkts http://artgopop.com
innerhalb der Gedanke, dass Menschen immer mehr und mehr bequem teilen ihre Ansichten.

Ich meine nicht zu schlagen diese sich sanft oder schnell gehen. Soziale Schichten auf der politischen Interessen herauszuarbeiten Präferenzen der Wähler. Einige Wähler bereit sein, ein wenig des eminent domain im Austausch für die Chance auf Hochgeschwindigkeitszüge. Manche mögen eher bereit, Steuern zu zahlen, wenn sie pflichtgemäß die Größe der Regierung Programme würden abgeholzt werden versichert wurde. Ein soziales Netzwerk auf diese Impulse ausgerichtet gewählt helfen könnten Beamten, genau herauszufinden, "wer" will, "was" und wie schlecht. Zahlen und Identität Sache hier. Gewählten Regierungen sollten ein Interesse daran haben zu wissen, was ihre Wählerschaft will. Je mehr sie liefern, desto größer ist die Wahrscheinlichkeit sie an der Macht bleiben werde. Die andere Seite der Abmachung ist, dass die Bürger gehen zu müssen, die Realität zu akzeptieren, dass nicht alle ihre persönlichen Interessen erfüllt werden. Das ist das Risiko Bürger nehmen mit dieser Art von Netzwerk zu ändern, aber ohne ein Risiko, Wähler kann nie das ändern sie wollen.

Man kann sagen, einige dieser Spannung Startup Visa Kontroverse wurde ausgebildet im. Es dauerte eine engagierte, flinke Team von namhaften Unternehmern und Investoren Jahren harter Arbeit zu Recht Keil Schlüssel Visum Bestimmungen in einer der nächsten. Critics frage mich, ob es wird genug . Wer weiß? Ein soziales Kanal im oberen Teil der, jenseits Fan-Seiten und 140 Zeichen könnten Wahlen Kabelbaum Bürger Schwung nach der Euphorie und tragen es in die Realitäten der Rehttp://artgopop.com
chtsetzung, und noch wichtiger, auf den Rücken verteilt den Großteil dieser Arbeit über die von mehr als nur ein paar engagierte Bürger.

Persönlich bin ich für diejenigen, die für diese Reformen gekämpft haben dankbar, und während es immer Kritik an neuen Gesetzen, finde ich es höchshttp://artgopop.com
t interessant zu sehen, wie Unternehmer reagieren. Ich bin für die Unternehmer, die sozialen Online-Tools, um Politik zu bringen, sowohl hier als auch im Ausland wollen Verwurzelung. Wir müssen Politik-spezifischen sozialen Netzwerken zu erhöhen Engagement rund um lokale, staatliche Hilfe, und die nationalen Wahlen, sondern auch während des Gesetzgebungsverfahrens, um die Wärme an die Politiker halten. Gleichzeitig haben die Bürger zu arbeiten, um die Wärme anwenden, oder sie werden die Regierunhttp://artgopop.com
gen sie verdienen. Meine Hoffnung ist, dass Unternehmer dieser atemberaubenden Fahrt entwickelnden Welle von Social Networking in seine nächste Phase. Es ist eine massive Welle, und da die globalen Ereignisse des vergangenen Monats unter Beweis gestellt haben, ist es noch nicht überall in Ufernähe.
humster

(no subject)

Die meisten Bürger im Nahen Osten haben nicht diesen Luxus für uns selbstverständlich. Für sie bieten Nationen wie GMail, Facebook und Twitter diesem Ort, eine gemeinsame Plattform, die sie erschließen, zu verfeinern und Express ein Sortiment von aufgestauten Wünsche hilft, und wie wir gesehen haben, erzeugen enorme kinetische Energie am Deiche nicht standhalten kann. Ich weiß noch Votizen Bauprodukt für den US-Markt politischen, aber ich würde wetten, wenn er fertig war heute und abgestimmte global, hörte Millionen würden registrieren, zu interagieren, und ihre Stimme.

Дизайн
humster

курсовые на заказ минск

очу рассказать про инструмент для Java на который я недавно наткнулся и не нашел на хабре ни одного упоминания о нем. Называется он Metawidget и его предназначение — генерировать формы в Java.

Лично мне больше всего понравилось то что он делает это в realtime. Я работал с как-то с одним проектом, который генерировал Java бины на этапе компиляции и могу сказать что мне это совсем не понравилось. Во первых сгенерированные классы трогать нельзя т.к. они могут быть в любое время перегенерированны. Исходный материал выглядит странно т.к. не является чистой Java. IDE эти «прибамбасы» тоже не распознает. Ну и появляется дополнительное время при компиляции/генерации, то ли чтоб кофе попить, то ли чтоб зубами проскрипеть от негодования.

Следующие особенности сего инструмента не менее важны:
Metawidget генерирует очень много каких форм. Я имею ввиду что это могут быть SWING, JSF, JSP и еще всякие другие View технологии Java'ы (полный список есть на сайте). Правда не все он генерирует так как хотелось бы мне, но об этом попозже.
Этот инструмент может работать с любыми POJO объектами и умеет грамотно использовать аннотации JPA/Hibernate если такие есть в объекте. То есть например, если создается выпадающий список (HTML select) и есть JPA аннотация @Column( nullable = true ), то тогда первой опцией списка будет null, если же nullable = false — пустой опции не будет.

Приведу краткий пример использования Metawidget для генерации JSF форм.
Вначале опишем наш ManagedBean:
@ManagedBean
public class MetawidgetBB {
@EJB
private FlexibleDAO flexibleDAO;

public UIMetawidget getMetawidget() {
HtmlMetawidget metawidget = new HtmlMetawidget();
initMetawidget(metawidget);
return metawidget;
}

public void setMetawidget(UIMetawidget metawidget) {
initMetawidget(metawidget);
}

private void initMetawidget(UIMetawidget metawidget) {
metawidget.setValue(Musician.class);
}
}

В строке «metawidget.setValue(Musician.class);» указываем, какой класс использовать как бин.

Затем JSF шаблон:
....
xmlns:m="http://metawidget.org/faces"
....



....


Бин приводить не буду, но в общем это может быть любой класс с публичными свойствами или с геттерами/сеттерами. В моем случае еще были отношения (relationship) ManyToMany.Недавно на глаза попалась на глаза предложение курсовые на заказ минск.Меня заинтересовало!!
humster

champagne party

Много примеров начального и среднего уровней по юнит-тестированию в любом языке показывают как просто можно проверять логику Ваших приложений с помощью юнит-тестов. Однако, не все так просто бывает при тестировании приложений, в которых центральную роль играет база данных, а именно таких большинство среди веб-приложений. Те, кто занимается юнит-тестированием своих приложений, думаю, не раз сталкивались с проблемой тестирования БД. Почти 2 года назад на хабре уже была статья на эту тему, но хотелось бы ее раскрыть больше.

DbUnit

Итак, DbUnit. Изначально был разработан для JUnit (фреймворк для юнит-тестирования Java-приложений) для сетапа БД перед запуском тестов. В итоге расширение развивалось и мигрировало и на другие фреймворки xUnit, в частности на PHPUnit. На данный момент поддерживаются MySql, PostgreSql, Oracle и Sqlite.

Зачем DbUnit?

Для тестирования взаимодействия Вашего приложения с базой данных Вам надо дополнительно проделать следующие шаги:
Учесть структуру БД и таблиц
Поризвести вставку первоначальных данных при необходимости
Провести проверку состояния БД после выполнения каких-либо операций бизнес-логики
Очистить базу и повторить заново для каждого теста (иначе последующие тесты будут зависеть от предыдущих)

Если писать такое вручную с использованием SQL-запросов, то довольно скоро начинаешь проклинать юнит-тестирование в принципе. Кроме того, это не соответствует одному из главных принципов юнит-тестирования — тесты должны быть минимально сложны и максимально читабельны.

По порядку

Итак, как же правильно должен проходить тест взаимодействия с базой?
Очистка базы. При первом запуске мы не знаем в каком состоянии находится БД, поэтому мы обязаны «начать с чистого листа»;
Вставка начальных данных (фикстур). Обычно приложению нужны какие-либо начальные данные, которые оно извлекает из базы для последующей обработки. именно их и надо вставить в только что очищенную базу;
Собственно выполнение тестов и проверка результатов. Без комментариев.

PHPUnit Database Test Case

Если в случае обычного тест-кейса в PHPUnit Вы должны просто унаследовать класс PHPUnit_Framework_TestCase, то в случае с тестированием БД все несколько сложнее:
require_once "PHPUnit/Extensions/Database/TestCase.php";

class MyTest extends PHPUnit_Extensions_Database_TestCase
{
public function getConnection()
{
$pdo = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');
return $this->createDefaultDBConnection($pdo, 'testdb');
}

public function getDataSet()
{
return $this->createFlatXMLDataSet(dirname(__FILE__).'/_files/guestbook-init.xml');
}
}


Недавно попалось очень интересное предложение от champagne party!Интересно ?Заходите и ознакомтесь!
humster

игра покер

Вы должны реализовать два абстрактных метода — getConnection() и getDataSet(). Первый необходим для установления соединения с базой, второй для заполнения базы таблицами и заполнения собственно таблиц.
Важно заметить, что getConnection() должен использовать PDO для подключения к базе, но Ваше приложение не обязано использовать PDO для запросов к базе. Соединение, устанавливаемое методом getConnection() используется лишь для подготовки БД к тестам и ассертов.
Начальное содержимое базы абстрагируется с помощью интерфейсов PHPUnit_Extensions_Database_DataSet_IDataSet и PHPUnit_Extensions_Database_DataSet_IDataTable. Метод getDataSet() вызывается методом setUp() для получения и вставки фикстур. В примере мы использовали фабричный метод createFlatXMLDataSet() для получения датасета из XML-представления.

DataTables & DataSets

Итак, что же это такое? Это ключевые понятия рассматриваемого расширения. DataTable и DataSet — это абстракция для таблиц и записей в реальной БД. Довольно несложный механизм позволяет скрыть реальную БД за объектами, которые в свою очередь могут быть реализованы различными способами.
Такая абстракция необходима для сравнения ожидаемого контента базы и реального. Ожидаемый контент может быть представлен в различных видах благодаря абстракции — например, XML, CSV, массивы PHP. Интерфейсы DataTable и DataSet позволяют проводить сравнение данных из источника ожидаемых с реальными из БД.
Также DataSet и DataTable используются для задания начального состояния базы данных перед выполнением теста.
Ниже рассмотрим различные варианты датасетов.

Flat XML DataSet

Это наиболее простой вид датасета. Каждый элемент внутри корневого представляет собой одну запись из БД. Имя элемента должно соответствовать имени таблицы, а атрибуты и значения — поля и значения полей соответственно, например:






Это эквивалентно таблице post в БД с 2 записями
post_id title date_created contents rating
1 My First Post 2008-12-01 12:30:29 This is my first post 5
2 My Second Post 2008-12-04 15:35:25 This is my second post NULL

В общем-то, довольно просто и понятно.
Пустая таблица эквивалента пустому элементу, например, пустая таблица current_visitors:





NULL-значения для записи представляются как отсутствие соответствующего атрибута (см. пример с blog, поле rating), однако, тут следует учесть один момент. Для flat XML DataSet структуру таблицы определяет первый элемент, т.е. если в первом элементе нет каких-либо атрибутов, а в последующих элементах для той же таблицы они есть, то эти атрибуты будут проигнорированы. Например, если в примере с таблице blog из первого элемента убрать атрибут date_created с его значением, то во втором элементе этот атрибут не будет учитываться и в таблице не будет поля date_created.
Использование с помощью метода createFlatXmlDataSet():
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function getDataSet()
{
return $this->createFlatXmlDataSet('myFlatXmlFixture.xml');
}
}


XML DataSet

Данный вариант представления в XML лишен недостатков Flat XML, но и несколько сложнее:


post_idtitledate_createdcontentsrating 1 My First Post 2008-12-01 12:30:29 This is my first post 5 2 My Second Post 2008-12-04 15:35:25 This is my second post



Таблица полностью представляется элементом , в который вложены для определения полей таблицы и для представления записей. В свою очередь, в могут быть вложены для представления значащих полей и для NULL-значений. Пустая таблица представляется как таблица без элементов: <table name="current_visitors"> current_visitors_id ip



Использование с помощью метода createXMLDataSet():
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function getDataSet()
{
return $this->createXMLDataSet('myFlatXmlFixture.xml');
}
}


CSV Data Set

Представление таблицы в формате CSV (Comma Separated Values — простейший формат для хранения таблиц). Все довольно понятно:
post_id,title,date_created,contents,rating
1,My First Post,2008-12-01 12:30:29,This is my first post,5
2,My Second Post,2008-12-04 15:35:25,This is my second post,

Использование несколько сложнее чем в случае XML:
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function getDataSet()
{
$dataSet = new PHPUnit_Extensions_Database_DataSet_CsvDataSet();
$dataSet->addTable('post', 'post.csv');
return $dataSet;
}
}

Для использования нам необходимо создать объект класса PHPUnit_Extensions_Database_DataSet_CsvDataSet. Конструктор принимает три аргумента, которые определяют формат CSV:
public function __construct($delimiter = ',', $enclosure = '"', $escape = '"'){}

После этого добавляем таблицы в датасет методом addTable — один файл — одна таблица.

PHP массивы

На данный момент нет стандартной реализации датасетов с помощью массивов, но ее нетрудно реализовать ;)

Предположим, что нам надо хранить датасеты в таком формате:
array(
'post' => array(
array(
'post_id' => 1,
'title' => 'My First Post',
'date_created' => '2008-12-01 12:30:29',
'contents' => 'This is my first post',
'rating' => 5
),
array(
'post_id' => 2,
'title' => 'My Second Post',
'date_created' => '2008-12-04 15:35:25',
'contents' => 'This is my second post',
'rating' => null
),
),
)


Реализация:
require_once 'PHPUnit/Extensions/Database/DataSet/AbstractDataSet.php';
require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTableIterator.php';
require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTable.php';
require_once 'PHPUnit/Extensions/Database/DataSet/DefaultTableMetaData.php';

class ArrayDataSet extends PHPUnit_Extensions_Database_DataSet_AbstractDataSet
{
protected $tables = array();

public function __construct(array $data)
{
foreach ($data as $tableName => $rows) {
$columns = array();
if (isset($rows[0])) {
$columns = array_keys($rows[0]);
}

$metaData = new PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData($tableName, $columns);
$table = new PHPUnit_Extensions_Database_DataSet_DefaultTable($metaData);

foreach ($rows as $row) {
$table->addRow($row);
}
$this->tables[$tableName] = $table;
}
}

protected function createIterator($reverse = FALSE)
{
return new PHPUnit_Extensions_Database_DataSet_DefaultTableIterator($this->tables, $reverse);
}
}

Немного комментариев — для своего датасета мы наследуем абстрактный датасет (который наследуют flat XML, XML, CSV и другие). В конструктор мы передаем оговоренный ранее массив. Как и в случае с flat XML струткура таблицы определяется первой записью, но в данном случае это не критично, потому что мы имеем возможность явно указать NULL-значения. Структура, кстати, определяется с помощью создания объекта PHPUnit_Extensions_Database_DataSet_DefaultTableMetaData. После этого создаем собственно таблицу, передав в нее структуру и добавляем записи в таблицу с помощью метода addRow(). Так же нам необходимо реализовать абстрактный метод createIterator, но в этом нет ничего сложного :)

Использование:
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function getDataSet()
{
return new ArrayDataSet(array(
'post' => array(
array(
'post_id' => 1,
'title' => 'My First Post',
'date_created' => '2008-12-01 12:30:29',
'contents' => 'This is my first post',
'rating' => 5
),
array(
'post_id' => 2,
'title' => 'My Second Post',
'date_created' => '2008-12-04 15:35:25',
'contents' => 'This is my second post',
'rating' => null
),
),
));
}
}


Query/Database Dataset

Для ассертов нам потребуются не только ожидаемые датасеты, но и реальные из базы данных. В этом нам поможет QueryDataSet
$ds = new PHPUnit_Extensions_Database_DataSet_QueryDataSet($this->getConnection());
$ds->addTable('post');

или с явным использованием запроса:
$ds->addTable('post', 'SELECT * FROM post ORDER BY post_id');

Также можно использовать существующее подключение для автоматического получения датасетов из существующих таблиц с помощью метода PHPUnit_Extensions_Database_DB_DefaultDatabaseConnection::createDataSet() (это объект, создаваемого в getConnection()). Если не передавать параметр в createDataSet(), то будет создан датасет из всех существующих таблиц. Если передать в качестве параметра массив с именами таблиц в базе, то датасет будет создан только из этих таблиц.

Replacement DataSet

Я уже упоминал о проблеме NULL-значений для flat XML датасета (для CSV проблема та же — невозможно явно задать NULL-значение в фикстуре). Это можно решить с помощью специального декоратора — ReplacementDataSet:
require_once 'PHPUnit/Extensions/Database/DataSet/ReplacementDataSet.php';

class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function getDataSet()
{
$ds = $this->createFlatXmlDataSet('myFlatXmlFixture.xml');
$rds = new PHPUnit_Extensions_Database_DataSet_ReplacementDataSet($ds);
$rds->addFullReplacement('##NULL##', null);
return $rds;
}
}

Теперь мы можем использовать ##NULL## в XML для обозначения NULL-значения:







Фильтрация датасетов

В случае больших датасетов можно применить фильтрацию с помощью DataSetFilter:
require_once 'PHPUnit/Extensions/Database/DataSet/ReplacementDataSet.php';

class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function testIncludeFilteredPost()
{
$dataSet = $this->getConnection()->createDataSet();

$filterDataSet = new PHPUnit_Extensions_Database_DataSet_DataSetFilter($dataSet);
$filterDataSet->addIncludeTables(array('post'));
$filterDataSet->setIncludeColumnsForTable('post', array('post_id', 'title'));
// ..
}

public function testExcludeFilteredPost()
{
$dataSet = $this->getConnection()->createDataSet();

$filterDataSet = new PHPUnit_Extensions_Database_DataSet_DataSetFilter($dataSet);
$filterDataSet->addExcludeTables(array('foo', 'bar', 'baz'));
$filterDataSet->setExcludeColumnsForTable('post', array('date_created', 'rating'));
// ..
}
}

В первом случае мы оставили в датасете только таблицу post и содержимое ее записей только для полей post_id и title. Во втором — мы исключили из датасета таблицы 'foo', 'bar' и 'baz', а из записей таблицы post убрали значения для полей 'date_created' и 'rating'.

Композиция датасетов

Мы можем соединять несколько датасетов в один. В случае, если датасеты имеют одинаковые таблицы, то записи в них будут добавлены, например:
dataset-1.xml





dataset-2.xml





Аггрегируем их:
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function getDataSet()
{
$ds1 = $this->createFlatXmlDataSet('dataset-1.xml');
$ds2 = $this->createFlatXmlDataSet('dataset-2.xml');

$compositeDs = new PHPUnit_Extensions_Database_DataSet_CompositeDataSet();
$compositeDs->addDataSet($ds1);
$compositeDs->addDataSet($ds2);

return $compositeDs;
}
}


Asserts

Часто бывает необходимо проверить количество записей в таблице. Это можно сделать с помощью обычного assertEquals:
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function testAddEntry()
{
$this->assertEquals(2, $this->getConnection()->getRowCount('post'));

$blog = new Blog();
$blog->addPost("My third post.", "This is my third post.");

$this->assertEquals(3, $this->getConnection()->getRowCount('post'));
}
}

Метод getRowCount() возвращает количество записей в указанной таблице.

Для сравнения таблиц используется метод assertTablesEqual():
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function testTables()
{
$queryTable = $this->getConnection()->createQueryTable('post', 'SELECT * FROM post');
$expectedTable = $this->createFlatXmlDataSet("myFlatXmlFixture.xml")->getTable("post");
$this->assertTablesEqual($expectedTable, $queryTable);
}
}

Необходимо помнить о том, что тест может сфейлится при проверке даты — если у вас в фикстуре есть установленная дата, а в базу записывается текущее время, то Вы получите фейл, если эти даты не совпадают. Поэтому зачастую из ожидаемого результат убирают даты и, соответственно, изменяют получение реального датасета:
$queryTable = $this->getConnection()->createQueryTable('post', 'SELECT post_id, title, date_created, contents, rating FROM post');

И наконец, можно сравнивать непосредственно датасеты с помощью assertDataSetsEqual():
class MyTestCase extends PHPUnit_Extensions_Database_TestCase
{
public function testTables()
{
$dataSet = $this->getConnection()->createDataSet(array('post'));
$expectedDataSet = $this->createFlatXmlDataSet("myFlatXmlFixture.xml");
$this->assertDataSetsEqual($expectedDataSet, $dataSet);
}
}



всегда для вас игра покер в новой версии.Заходите играйте!
humster

заработок в интернете

В последнее время много пишут о том, что всякие тренинги по заработку в интернет – это якобы полная фигня и лохотрон. Скажу честно, я сам так думал до недавнего времени. А именно – до 7 февраля, когда я записался на тренинг Андрея Парабеллума и Николая Мрочковского «Быстрые деньги в интернет»

Решил посмотреть сайты авторов Андрея Парабеллума и Николая Мрочковского, почитал отзывы тех, кто уже проходил у них тренинги, – вроде всё нормально, уж точно не «разводка». И все же сомнения оставались: реально ли быстро заработать в интернет? Законно ли это? Смогу ли я это освоить? Скажу сразу, после прохождения тренинга у меня не только развеялись сомнения, но на своем опыте я понял, что те технологии, о которых рассказывают Андрей и Николай, отлично работают! Каждый из нас изо дня в день посещает разные форумы, ЖЖ, В контакте и т.д. Так почему бы на этом не заработать?!
Только быстро внедряй и получай сразу же результат! Только работай, сразу же бери и делай, и тогда успех неминуемо тебя настигнет:)))

Последним аргументом для меня в пользу приобретения этого тренинга стала гарантия. Во-первых, Николай обещал, что если вам не понравится его тренинг – неважно по какой причине, все деньги будут немедленно вам выплачены назад. Кстати, из 400 человек, записавшихся на тренинг, только 9 попросили вернуть им деньги. Согласитесь, это о чем-то говорит! А во-вторых, давалась гарантия, что в ходе тренинга каждый из его участников заработает как минимум 1000 рублей. Просто, чтобы показать, что те технологии, которым учат Андрей Парабеллум и Николай Мрочковский, отлично работают!

Так вот, из 401 участника 261 заработали более 1000 рублей; 114 заработали более 4000 рублей и уже окупили вложения в тренинг; 15 человек заработали более 10 000 рублей, а
6 человек заработали более 35 000 рублей и борются за суперприз (у лидера пока 100500 рублей)!!! Можете сами убедиться в этом на сайте Николая:

Лично я на этом тренинге заработал 42 500 рублей: 1 500 рублей за продажу ненужного мне 3G модема, 10 000 рублей за продажу знакомым старого фотоаппарата, 1 000 рублей за выполнение одного из заданий тренинга, 30 000 рублей за консалтинг знакомого бизнесмена по увеличению продаж в его нише! И это только начало, ведь самым вкусным куском тренинга стало именно обучение успешному консалтингу (помимо этих 30 000, мы с этим бизнесменом договорились о % с продаж, которые я ему увеличу). Самое главное, что всё объясняется доступным человеческим языком. Как это сделать – в вашей ситуации, в вашем городе. И что делать дальше, чтобы зарабатывать на постоянной основе такие же цифры, только еще с одним ноликом на конце:)))

А теперь расскажу свои впечатления от тренинга по дням – как происходило смещение моих мозгов в сторону быстрого зарабатывания денег.

День 1. Началось всё с того, что отказал канал для проведения интернет-семинара. В глубине сознания возникла мысль: «ну вот, я же чувствовал, что это плохо кончится», но тут же я получил на свою почту письмо с указанием резервного канала. Всё заработало! В первый же день Николай и Андрей рассказали всё о том, как можно заработать на чужих услугах и продуктах, причем опять-таки не заумно, а так, чтобы ты понял – ты сможешь это сделать!

День 2. Весь день делал домашки первого дня, ведь в этом тренинге надо много работать и внедрять! На вечернем касте меня буквально порвало от информации о том, как можно зарабатывать на тех предметах, о которых ты и думать забыл.

День 3. Что за примитивный метод заработка они предлагают, что за фигня!!! Но ничего, буду делать, ведь еще в самом начале тренинга договорились, что рассуждать о правильности методик тренинга не будем, будем только брать и делать. Причем быстро. А уже по результатам обсудим.

День 4. Так, уже интереснее. Выполнил все задания, а также прикинул, каким образом можно улучшить финансовые результаты второго дня тренинга – именно об этом рассказывал Парабеллум. Причем улучшить очень серьезно. Заставляю себя быстро взять и сделать:)

День 5. Всё понятно, вот зачем они давали эти, на первый взгляд, скучные и не очень интересные задания в третьем и четвертом дне! Здесь у меня появился опыт, которого до тренинга вообще не было! Андрей и Николай рассказали о ключевых успешных принципах работы – будь ты фрилансером, интернет-бизнесменов или простым предпринимателем. Особенно зацепил меня рассказ Андрея про консалтинг. Ребята, это реально работает!

День 6. А вот тут значительно набираем обороты. Оказывается, всё, что мы проходили до этого, было, выражаясь в терминах компьютерных игр, только первым уровнем. Дальше лежат совсем другие деньги. Добиваю задание пятого дня, а также предлагаю свои консалтинговые услуги всем своим знакомым предпринимателям! С десятой попытки сработало! Внедряем!

День 7. Ну, это просто фонтан идей о способах заработка. Правда, к седьмому дню я обнаружил серьезный недостаток тренинга – у меня практически не остается времени на сон! Все свободное время уходит на выполнение заданий, даже домашние стали ругаться. Ну, ничего, ругать меня они перестали, когда увидели, сколько я заработал буквально за одну неделю!

И последнее, что я хочу сказать вам по тренингу Андрея Парабеллума и Николая Мрочковского «Быстрые деньги в интернет». Успешного человека от того, кто ничего не зарабатывает, а только всех критикует, отличает одно: он сразу же внедряет идеи, получает результат и идет дальше на новый уровень. Как это сделать, подробно рассказывается в тренинге. Кстати, с 12 часов 22 февраля до 24 часов 23 февраля Николай Мрочковский производит на этот тренинг второй набор. И набор этот будет сильно ограничен, поскольку многие рассмотренные методы заработка работают не столь эффективно, если их начинают использовать огромные толпы, а некоторые методы вообще перестают работать. Сейчас есть возможность вписаться в тренинг до официального объявления о его старте, после него он будет доступен только 36 часов. Поверьте, лучшего подарка самому себе или близкому человеку к 23 февраля сложно придумать. Проверено на собственном опыте))). Мой совет – зарегистрируйтесь, примите участие и получите результат, иначе это сделает кто-то другой, но потом обижаться можно будет только на себя, т.к. вы эту возможность упустите.
humster

java

Хочу рассказать про инструмент для Java на который я недавно наткнулся и не нашел на хабре ни одного упоминания о нем. Называется он Metawidget и его предназначение — генерировать формы в Java.

Лично мне больше всего понравилось то что он делает это в realtime. Я работал с как-то с одним проектом, который генерировал Java бины на этапе компиляции и могу сказать что мне это совсем не понравилось. Во первых сгенерированные классы трогать нельзя т.к. они могут быть в любое время перегенерированны. Исходный материал выглядит странно т.к. не является чистой Java. IDE эти «прибамбасы» тоже не распознает. Ну и появляется дополнительное время при компиляции/генерации, то ли чтоб кофе попить, то ли чтоб зубами проскрипеть от негодования.

Следующие особенности сего инструмента не менее важны:
Metawidget генерирует очень много каких форм. Я имею ввиду что это могут быть SWING, JSF, JSP и еще всякие другие View технологии Java'ы (полный список есть на сайте). Правда не все он генерирует так как хотелось бы мне, но об этом попозже.
Этот инструмент может работать с любыми POJO объектами и умеет грамотно использовать аннотации JPA/Hibernate если такие есть в объекте. То есть например, если создается выпадающий список (HTML select) и есть JPA аннотация @Column( nullable = true ), то тогда первой опцией списка будет null, если же nullable = false — пустой опции не будет.

Приведу краткий пример использования Metawidget для генерации JSF форм.
Вначале опишем наш ManagedBean:
@ManagedBean
public class MetawidgetBB {
@EJB
private FlexibleDAO flexibleDAO;

public UIMetawidget getMetawidget() {
HtmlMetawidget metawidget = new HtmlMetawidget();
initMetawidget(metawidget);
return metawidget;
}

public void setMetawidget(UIMetawidget metawidget) {
initMetawidget(metawidget);
}

private void initMetawidget(UIMetawidget metawidget) {
metawidget.setValue(Musician.class);
}
}

В строке «metawidget.setValue(Musician.class);» указываем, какой класс использовать как бин.

Затем JSF шаблон:
....
xmlns:m="http://metawidget.org/faces"
....



....


Недавно на глаза попалось очень интересное предложение!курсовые на заказ минск
Если вам интересно курсовые на заказ минск то вы на правильном пути!