Что такое скиммер?

Что такое скиммер?
Скиммер-это устройство которое используется кардерами, оно одевается на банкомат.
Принцип работы скиммера примерно такой: считывается информация о карте с магнитной ленты, впоследствии с помощью этого можно изготовить дубликат вашей карты.
Для того что бы узнать PIN используют такую штуку как накладная клавиатура. Или для этих целей можно использовать скрытую камеру.
Вот несколько фоток этих девайсов (не мои):
Камера

Unknown

Последний вечер весенних каникул. Завтра в школу. Но хорошо то, что четверть последняя, и небольшая, надеюсь все будет ок...

Delphi. Готовые алгоритмы (Стивенс Р)



Программирование всегда было достаточно сложной задачей. Эта книга поможет вам легко преодолеть возникающие трудности с помощью библиотеки мощных алгоритмов, полностью реализованных в исходном коде Delphi. Вы узнаете, как выбрать способ, наиболее подходящий для решения конкретной задачи, и как добиться максимальной производительности вашего приложения. Рассматриваются типичные и наихудшие случаи реализации алгоритмов, что позволит вам вовремя распознать возможные трудности и при необходимости переписать или заменить часть программы. Подробно описываются важнейшие элементы алгоритмов хранения и обработки данных (списки, стеки, очереди, деревья, сортировка, поиск, хеширование и т.д.). Приводятся не только традиционные решения, но и методы, основанные на последних достижениях объектно-ориентированного программирования.Книга предназначена для начинающих программистов на Delphi, но благодаря четкой структуризации материала и богатой библиотеке готовых алгоритмов будет также интересна и специалистам.
Deposit (30.87 mb)
Rapishare

Ричард Столлмен - Проект GNU

Предлагаю вам прочитать известную статью Ричарда Столлмана. Для любителей *nix и программирования под них, статья будет особенно интересна.

Впервые опубликовано в книге "Open Sources"

Первое общество "программной взаимопомощи"

Когда я начинал работать в MIT Artificial Intelligence Lab (Лаборатория искусственного интеллекта Массачусетского Технологического Института, далее AI Lab) в 1971, я стал членом общества "программной взаимопомощи" (software-sharing community), существовавшего уже много лет. Подобная взаимопомощь не была ограничена нашим сообществом: она была столь же стара, как сами компьютеры, подобно тому, как привычка делиться рецептами---ровесница кулинарии. Но мы делали это более активно, чем другие.

В AI Lab использовалась операционная система с разделением времени, называемая ITS (Несовместимая Система Разделения Времени, Incompatible Timesharing System), которую хакеры1, работавшие в лаборатории, спроектировали и реализовали на ассемблере Digital PDP-10, одного из тогдашних компьютеров. Мне, как члену этого общества и системному хакеру AI lab, предстояло развивать систему.

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

Гибель сообщества

Ситуация резко изменилась в начале 1980-х, когда Digital отказалась от дальнейшего развития семейства PDP-10. Ее архитектура, элегантная и мощная для 60-х, не позволяла легко увеличить размер адресного пространства, что стало возможным в 80-х. Это значило, что почти все программы, составляющие ITS, устарели.

Сообщество хакеров AI lab распалось незадолго до этого. В 1981 развивающаяся компания Symbolics наняла почти всех хакеров AI lab, после чего наше сообщество обезлюдело настолько, что уже не могло поддерживать само себя. (Книга "Хакеры" (Hackers), Стива Леви (Steve Levy), описывает эти события, также давая четкую картину сообщества в его первозданном виде.) Когда AI lab приобрела новую PDP-10 в 1982, администрация решила использовать несвободную ОС Digital вместо ITS.

Современные компьютеры тех лет, такие, как VAX или 68020, имели собственные операционные системы, но ни одна из них не была свободной: вы обязаны были подписать обязательство нераспространения даже чтобы получить исполнимый код.

Это значило, что первым шагом в использовании компьютера стало обещание не помогать окружающим. Сотрудничество тем самым было запрещено. Собственники программ установили правило: "Если вы поделились программой с вашим соседом, вы пират. Если вам требуются модификации, умоляйте нас реализовать их."

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

Когда производители программ рассуждают о "соблюдении" своих "прав" либо "искоренении пиратства", их слова вторичны. Истинное содержание этих заявлений кроется в неявных предположениях, которые полагают, как данность. Подразумевается, что публика примет их без обоснования. Но давайте же все обсудим.

Одним из предположений является то, что компании, производящие программы, располагают не подлежащими обсуждению естественными правами владения ПО, и поэтому имеют власть над всеми его пользователями. (Если это "естественные права", то неважно, какой вред наносится обществу, мы не можем возражать.) Интересно, что Конституция США и правовые традиции отвергают эту точку зрения: авторское право не является естественным, а всего лишь данная правительством монополия, ограничивающая естественное право пользователей копировать это ПО.

Другое подразумеваемое предположение состоит в том, что единственным важным свойством программы является возможность выполнять с ее помощью некоторые действия---т.е. что мы, пользователи, не должны беспокоиться о том, какое общество нам позволено иметь.

Третье предположение в том, что мы никогда не имели бы полезных программ (либо программы для некоторой конкретной задачи), если бы не вручили компании власть над пользователями. Это предположение могло казаться состоятельным, пока движение за свободное ПО не продемонстрировало, что мы можем создать множество полезных программ, не заковывая их в цепи.

Если мы откажемся от этих априорных утверждений и оценим ситуацию, основываясь на общепринятых моральных нормах, наделяя преимуществом пользователей, мы придем к совершенно иным выводам. Оказывается, что пользователям следует иметь право модифицировать программы, чтобы удовлетворить свои нужды, и право распространять программы, поскольку помогать друг другу является основой общества.

Объем публикации не оставляет места для более подробного разъяснения этого вывода, поэтому читателям следует обратиться к странице http://www.gnu.org/philosophy/why-free.ru.html.

Проблема морального выбора

Когда наше сообщество распалось, жить по-прежнему стало невозможным. Вместо этого я очутился перед моральной дилеммой.

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

Я мог бы зарабатывать деньги этим путем, и возможно, даже наслаждался бы, создавая программы. Но я знал, что в конце своей карьеры оглянусь назад, на годы, потраченные на возведение стен между людьми, и пойму, что истратил свою жизнь, делая наш мир хуже.

Мне уже довелось увидеть, как подписка о неразглашении выполняет свои функции, когда мне и MIT AI lab было отказано в исходных текстах программы, управляющей нашим принтером. (Нехватка некоторых возможностей в этой программе делала использование принтера исключительно неудобным.) После этого я уже не мог сказать себе, что подписка о неразглашении бывает безвредной. Меня очень рассердило то, что с нами отказались поделиться; я не мог в свою очередь поступить так же с кем-то еще.

Другим выбором, прямолинейным и неприятным, было бросить заниматься компьютерами. В этом случае мои способности не были бы использованы во вред, но пропали бы зря. Я не был бы виновен в разобщении и ограничении пользователей компьютеров, но это все равно случилось бы.

Поэтому я начал искать способ, с помощью которого программист будет в состоянии улучшить ситуацию. Я спросил себя, могу ли я написать какую-либо программу или программы, чтобы оживить наше сообщество?

Ответ был ясен: первым делом нам требовалась операционная система. Это ПО критически важно для использования компьютера. Используя ОС, можно делать множество вещей, а без нее вы вообще не запустите компьютер. Располагая свободной ОС, мы смогли бы возродить общество сотрудничающих хакеров, и пригласить в него всех желающих. Каждый смог бы работать, не скрывая ничего и не теряя своих друзей.

Как разработчик операционных систем, я обладал требуемыми для этой работы навыками. Поэтому, хоть я и не ожидал непременного успеха, я чувствовал, что могу выполнить ее. Было решено сделать систему совместимой с Unix и переносимой, так что пользователи Unix могут легко перейти к ней. Название GNU было выбрано согласно хакерским традициям, как рекурсивный акроним "GNU's Not Unix" (GNU, не Unix).

Операционная система---это не только ядро, которого хватает только на то, чтобы запускать другие программы. В 1970-х каждая операционная система, достойная этого названия, включала командные процессоры, ассемблеры, компиляторы, интерпретаторы, отладчики, редакоторы текстов, почтовые программы и многое другое. Все это было в ITS, в Multics, VMS и Unix. Система GNU также должна включать эти компоненты.

Позднее я услышал такие слова, автором которых считается Гиллель2:

Если не я за себя, то кто за меня?
Если я только за себя, то зачем я?
Если не сейчас, то когда же?

Решение начать разработку проекта GNU основано на похожих принципах.

"Свободный"---не значит "даром"

Термин "свободное ПО" часто понимают неправильно---он не имеет общего с ценой. Речь ведется о свободе. Таким образом, вот определение свободного ПО: программа является свободной для вас, конкретного пользователя, если:

  • Вы вольны запускать программу с любыми целями.
  • Вы можете модифицировать программу под свои нужды. (Чтобы сделать эту свободу практически эффективной, вы должны иметь доступ к исходным текстам, поскольку изменять программу без них очень сложно.)
  • Вы имеете право распространять копии, как бесплатно, так и за деньги.
  • Вы свободны распространять свои модификации, чтобы общество могло извлечь из них пользу.

Поскольку "свободный" подразумевает свободу, а не цену, нет противоречий между продажей копий и свободным ПО. Фактически, свобода продажи копий является существенной: продажа коллекций свободного ПО на CD-ROM важна для общества и является хорошим способом получить средства на разработку свободного ПО. Следовательно, программы, которые невозможно включить в такие коллекции, не являются свободными.

Вследствие неоднозначности слова "free" (которое в английском языке употребляется как в значении "свободный", так и "бесплатный",--- прим. перев.) многие пытались найти ему замену, но пока что это никому не удалось. Английский язык содержит множество различных способов отображения самых тонких нюансов, но в нем нет простого, однозначного слова, которое подразумевало бы "free", как свободу; ближе всего по смыслу к этому приближается "unfettered" ("лишенное оков", "нестесненное"). Такие альтернативы, как "liberated" (освобожденный), "freedom" (свобода) и "open" (открытость) имеют либо неверное значение, либо иные недостатки.

Программы GNU и система GNU

Разработка целой системы---очень большой проект. Чтобы довести его до завершения, я решил приспосабливать и пользоваться существующими свободными программами, когда это было возможно. Например, с самого начала предполагалось применять TeX как основную систему подготовки текстов, несколькими годами позднее было решено воспользоваться X Window System, нежели разрабатывать для GNU другую оконную систему.

Благодаря этому, система GNU не является просто коллекцией всех программ GNU. Система GNU включает программы, которые не созданы в рамках проекта GNU, а были разработаны иными людьми в своих собственных целях, но которые мы можем использовать, поскольку они свободны.

Зарождение проекта

В январе 1984 г. я завершил свою работу в MIT и начал писать программы для проекта GNU. Покинуть MIT было необходимо, чтобы MIT ничем не был связан с распространением GNU, как свободного ПО. Если бы я оставался в штате, в MIT могли бы претендовать на право собственности и навязать свои собственные условия распространения, либо даже превратить программы в собственнические. Я не хотел проделать большую работу, лишь чтобы увидеть, как она становится бесполезной для своей цели: создания нового сообщества, в котором возможно делиться программами друг с другом.

В то же время профессор Уинстон (Winston), глава MIT AI Lab, любезно предложил мне продолжать пользоваться возможностями лаборатории.

Первые шаги

Вскоре после начала проекта GNU я услышал о Free University Compiler Kit (Набор Компиляторов Свободного Университета), также известном как VUCK. (Голландское слово, обозначающее "free", т.е. "свободный", пишется через V.) Этот компилятор был разработан для поддержки множества языков, включая C и Pascal, и множества целевых платформ. Я запросил у автора разрешение использовать его для GNU.

Он ответил с иронией, заявив, что университет свободный, а компилятор---нет. Тогда я и решил, что моей первой разработкой в рамках проекта GNU будет многоязыковый многоплатформенный компилятор.

В надежде избежать разработки компилятора целиком, я раздобыл исходники компилятора Pastel, многоплатформного компилятора, разработанного Lawrence Livermore Lab. Он поддерживал (и сам был написан) расширенный диалект языка Pascal, предназначенный для системного программирования. Я добавил в него поддержку C, и начал переносить его на Motorola 68000. Но мне пришлось отказаться от этого, когда я обнаружил, что компилятору требуются мегабайты под стек, в то время, как доступная на 68000 Unix-система ограничивается лишь 64k.

Оказалось, что компилятор Pastel сначала строил по всему входному файлу дерево разбора, далее конвертировал его в цепочку "инструкций", а затем генерировал целиком выходной файл, вовсе не освобождая памяти. На этом этапе я заключил, что все-таки придется написать новый компилятор с самого начала. Новый компилятор известен сегодня как GCC; никакие части Pastel в нем не использованы, но мне довелось адаптировать и использовать уже написанный мной код поддержки C. Но все это случилось несколькими годами позднее, а в то время я работал над GNU Emacs.

GNU Emacs

Работа над GNU Emacs началась в сентябре 1984 г., и в начале 1985 он уже был пригодным к использованию. Это позволило мне начать использовать Unix-системы для подготовки текстов---не имея желания изучать vi либо ed, я был ранее вынужден заниматься редактированием на других платформах.

В это время общество начало проявлять интерес к GNU Emacs, что подняло вопрос, как его распространять. Конечно, я поместил его на ftp-сервер с анонимным доступом на одном из доступных мне компьютеров MIT. (Этот сервер, prep.ai.mit.edu, стал впоследствие основным ftp-сайтом GNU; несколькими годами позднее он был закрыт, и мы дали это имя нашему новому ftp-серверу.) Но в то время многие заинтересованные люди не имели доступа в Интернет и не могли скачать себе копию. Спрашивается, что я мог предложить им?

Я мог бы им сказать: "Найдите того, кто имеет доступ в Сеть и может скачать его для вас." Еще я мог поступить, как это было с оригинальной версией Emacs для PDP-10 и заявить: "Вышлите мне ленту и я верну ее вам с Emacs." Но я не имел работы и разыскивал способы зарабатывать на свободном ПО. Поэтому я объявил, что вышлю всем желающим ленту за $150. Тем самым было положено начало бизнесу, связанному с распространением свободных программ, предшественник фирм, которые сегодня распространяют завершенные системы GNU/Linux.

Свободен ли каждый пользователь программы?

Если программа свободна, когда покидает руки своего автора, это не всегда означает, что она будет свободной для всех пользователей, располагающих копией. Например, программы "общественной собственности" (public domain software, т.е. ПО, не имеющее владельца авторских прав) свободны, но каждый в состоянии выпустить собственническую слегка модифицированную версию. Аналогично, многие свободные программы имеют владельца авторских прав, но распространяются с простыми либеральными лицензиями, которые позволяют выпуск собственнических модификаций.

Классическим примером этой проблемы служит X Window System. Разработанная в MIT и выпущенная как свободное ПО с либеральной лицензией, она вскоре была взята на вооружение множеством компаний. Они включали X в свои собственнические Unix-системы исключительно в виде исполнимых файлов и помещали под ту же самую подписку о неразглашении. Эти копии X были свободны не более, чем Unix.

Разработчики X Window System не считали это проблемой---такого развития событий они ожидали. Их целью была не свобода, а лишь "успех", определяемый как "наличие многих пользователей." Никого не интересовало, будут ли пользователи свободными, а лишь их многочисленность.

Это ведет к парадоксальной ситуации, когда два разных способа оценить степень свободы программы дают различный ответ на вопрос: "Эта программа свободна?" Если ваша оценка основана на свободе, предоставленной условиями распространения MIT, можно утверждать, что X является свободной системой. Но если измерить свободу среднего пользователя X, придется заключить, что эта система собственническая. Большинство пользователей X применяли собственнические версии, поставляемые с Unix, а не свободные.

Принцип "авторского лева" и GNU GPL

Целью GNU было дать пользователям свободу, а не только завоевать популярность. Следовательно, нам были нужны условия распространения, которые защитят программы GNU от превращения в собственнические. Используемая методика получила название "авторское лево" (в противоположность "праву"), или "copyleft"3.

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

Центральная идея "авторского лева" в том, что мы даем каждому разрешение запускать, копировать, изменять программу и распространять измененные версии---но не разрешение добавлять ограничения от себя. Этим критические свободы, которые определяют "свободное ПО" гарантируются каждому, кто имеет копию, они становятся неотчуждаемыми.

Эффективность "авторского лева" возможна, лишь если модифицированные версии также свободны. Этим обеспечивается, что производные продукты, в случае их публикации, будут доступны нашему обществу. Когда программисты добровольно участвуют в улучшении программ GNU, "авторское лево" защищает их от нанимателей, которые могут сказать: "Вы не можете свободно распространять свои модификации, поскольку мы собираемся сделать их нашей собственнической версией программы."

Требование, чтобы модификации также были свободны, необходимо, если мы хотим гарантировать свободу каждого пользователя программы. Компании, которые прихватизировали X Window System, обычно вносят в нее некоторые изменения, чтобы приспособить к своей системе и аппаратуре. Эти модификации невелики по сравнению с общим объемом системы X, но они были нетривиальны. Если внесение модификаций может служить оправданием лишению пользователей свободы, найдется много желающих воспользоваться подобным обоснованием.

Аналогичные проблемы возникают при комбинировании свободной программы и несвободного кода. При этом теряется часть свобод: все, что запрещено для несвободной части кода, будет запрещено и для результата в целом. Разрешить эти комбинации означает нанести кораблю свободного ПО пробоину ниже ватерлинии. Следовательно, критически важным требованием "авторского лева" является устранение этой угрозы: все, что добавляется или комбинируется с программой, подчиняющейся "авторскому леву", должно быть таким, что результат должен также быть свободным на условиях "авторского лева".

Частная форма "авторского лева" используется для большинства программ GNU --- это Универсальная Общественная Лицензия GNU (GNU General Public License, или GNU GPL). Мы также имеем другие виды "авторского лева" для особых случаев. Документация GNU также подчинена "авторскому леву", но в значительно более мягкой формулировке, поскольку изощренность GNU GPL избыточна для документации.

Фонд Свободного ПО

Интерес к использованию Emacs возрастал, в работу над проектом GNU включались новые участники, и мы решили, что пора снова искать источники финансирования. Поэтому в 1985 нами был создан Фонд Свободного ПО (Free Software Foundation, FSF), благотворительный фонд (tax-exempt charity), поддерживающий разработку свободного ПО. FSF также взял на себя распространение лент с Emacs, позднее на них было добавлено и другое свободное ПО (как GNU, так и не-GNU), а также продажу свободной документации.

FSF принимает пожертвования, но большая часть поступлений приходит от продаж копий свободного ПО и смежных услуг. Сегодня мы продаем компакт-диски с исходными текстами, с бинарниками, красиво оформленные руководства (все это с разрешением свободного распространения и модификации), и Deluxe Distributions (которая представляет собой всю нашу коллекцию программ, откомпилированную под любую платформу на ваш выбор).

Персоналом Free Software Foundation разработаны и сопровождаются многочисленные программные пакеты, к примеру, C-библиотека и командный интерпретатор (shell). Библиотека GNU C используется всеми программами в системе GNU/Linux как посредник в общении прикладной программы с Linux. Она была разработана сотрудником FSF Роландом МакГрафом (Roland McGrath). Командный интерпретатор, использующийся в большинстве систем GNU/Linux --- BASH, Bourne Again Shell4, написанный служащим FSF Брайаном Фоксом (Brian Fox).

Мы финансировали реализацию этих программ, поскольку проект GNU не был сконцентрирован исключительно на инструментальных средствах. Нашей целью была полноценная операционная система, и эти программы нужны для достижения цели.

Поддержка свободного ПО

Философия свободного ПО отвергает методы, общепринятые в бизнесе, но мы не отвергаем идею бизнеса вообще. Когда предприниматель уважает свободу пользователей, мы желаем ему успеха.

Продажа копий Emacs демонстрирует одну разновидность бизнеса на свободном ПО. Когда этот вид деятельности перешел в руки FSF, мне довелось искать другие способы зарабатывать на жизнь. Я нашел их в продаже сервиса, касающегося свободного ПО, которое было разработано мной. Это включает, к примеру, обучение таким вопросам, как, например, программировать GNU Emacs и настраивать GCC, а также разрабатывать программы, в основном, как переносить GCC на новые платформы.

Сегодня каждая из этих разновидностей бизнеса на свободном ПО практикуется множеством предприятий. Одни распространяют свободное ПО на CD-ROM; другие предлагают платную поддержку, начиная ответами на вопросы и устранением ошибок и завершая добавлением новых возможностей. Начинают появляться даже компании, занимающиеся выпуском новых свободных программ.

Однако, будьте осторожны---многие из тех, кто заявляет о следовании идее "открытых исходных текстов" в действительности основой своего бизнеса делают несвободные программы, которые работают совместно со свободными. Эти компании далеки от свободного ПО, это разработчики собственнических программ, которые искушают пользователей позабыть свободу. Они называют это "добавлением стоимости" (value added), отражая этим ценности, которые хотят навязать нам: удобства превыше свободы. Если мы предпочитаем свободу, нам следует называть подобные программы "с уменьшением свободы" (freedom subtracted).

Технические цели

Принципиальная цель GNU---быть свободным ПО. Даже если система GNU не имела бы технического превосходства над Unix, она обладала бы социальным преимуществом, позволяя пользователям сотрудничать, и этическим, уважая их свободу.

Но можно считать вполне обоснованным применение широко известных "правил хорошего тона"---например, использование динамических структур данных неограниченных размеров, а также поддержка всех возможных 8-битных кодов, когда это имеет смысл.

Дополнительно, мы отвергли принятую в Unix экономию памяти, отказались от поддержки 16-битных машин (было ясно, что 32-битные архитектуры станут общепринятыми, когда система GNU будет готова), и не предпринимали попыток сократить объем используемой памяти, пока он не превышал мегабайта. В программах, для которых работа с очень большими файлами не была важной, мы предлагали программистам сначала считать исходные данные целиком в память, а затем работать уже с ней, не используя ввод/вывод.

Такие решения позволили многим программам GNU превзойти свои Unix-аналоги в надежности и скорости.

Пожертвование компьютеров

С ростом репутации проекта GNU нам стали жертвовать машины с системой Unix. Это было очено полезно, поскольку простейшим способом разработать компоненты системы GNU было сделать это на Unix-системе и заменить ее компоненты одну за одной. Но при этом возникло этическое противоречие: можем ли мы использовать для этой работы Unix?

Система Unix была (и есть) собственнической, а философия проекта GNU гласит, что мы не должны пользоваться собственническим ПО. Но, применив те же доводы, которыет приводят к заключению, что насилие в целях самозащиты правомочно, я решил, что использование собственнического пакета оправдано, если это необходимо для разработки свободного аналога, который поможет другим прекратить применение собственнического.

Но, хоть это и было оправданным злом, оно все-таки оставалось злом. Сегодня мы более не имеем ни одной копии Unix, поскольку заменили их свободными операционными системами. Если мы не были в состоянии заменить на машине ОС, мы вместо этого меняли саму машину.

Список задач проекта GNU

По мере развития проекта GNU и роста количества системных компонент, которые мы разыскивали либо разрабатывали, стало желательным сделать список остающихся прорех. Мы использовали его для привлечения желающих написать недостающие компоненты. Этот список стал известным как "список задач проекта GNU" (GNU project task list). В дополнение к отсутствующим компонентам Unix мы включили в него другие полезные проекты разработки программ и документации, которые, по нашему мнению, должна иметь действительно завершенная система.

Сегодня немногие компоненты Unix остались в списке задач проекта GNU---они все уже сделаны, за исключением нескольких не очень важных. Но в списке по-прежнему много проектов, которые многие считают "приложениями". Любая программа, которая полезна не только узкому кругу пользователей, может быть полезной составной частью операционной системы.

В список задач включались даже игры, и так было с самого начала. Игры входят в состав Unix, и, естественно, так должно быть и в GNU. Но совместимость не является важной в этом случае, так что мы не следовали в точности набору игр, которые были в Unix. Вместо этого мы выбрали широкий спектр игр, которые могут понравиться пользователям.

Библиотечная Лицензия GNU

Библиотека GNU C использует особую разновидность "авторского лева", называемую Библиотечной Лицензией GNU (GNU Library General Public License, в настоящий момент изменила свое название на GNU Lesser General Public License---Прим. перев.), которая дает разрешение компоновать библиотеку с собственническими программами. Зачем сделано это исключение?

Это не было делом принципа: нет принципа, согласно которому разработчикам собственнического ПО дается право использовать наш код. (Зачем нам участвовать в развитии проекта, который определенно не будет сотрудничать с нами?) Использование LGPL для стандартной C-библиотеки либо другой, является стратегическим ходом.

C-библиотека делает общую работу: каждая собственническая система или компилятор поставляется со своей C-библиотекой. Следовательно, если сделать нашу C-библиотеку доступной исключительно для свободного ПО, это не даст свободным программам никаких преимуществ, а лишь уменьшит использование нашей библиотеки.

Одна система является исключением: в системе GNU (включая GNU/Linux), библиотека GNU C --- единственная C-библиотека. Поэтому условия распространения библиотеки GNU C определяют, в каких случаях допустима компиляция собственнической программы под систему GNU. Нет повода способствовать появлению собственнических приложений в ее составе, было бы стратегически неверным запрещать их, что лишь сократило бы применение системы GNU, а не поощряло разработку свободных программ.

Вот почему использование Библиотечной Лицензии GNU удобно для C-библиотеки. В случае других библиотек, стратегия их лицензирования должна выбираться индивидуально. Когда библиотека реализует специфические возможности, которые помогают в написании определенных видов программ, то выпуск ее на условиях обычной GPL ограничит сферу ее применения исключительно свободным ПО и даст этим преимущество разработчикам свободных программ над разработчиками собственнических.

Рассмотрим GNU Readline, библиотеку, которая обеспечивает BASH средствами редактирования командных строк. Readline распространяется с обычной GNU GPL, не с библиотечной GPL. Это, возможно, снижает число пользователей Readline, но это для нас не потеря. В то же время, по крайней мере одна полезная программа обрела свободу именно потому, что нуждалась в использовании Readline и это является действительно нужным обществу.

Разработчики собственнических программ имеют преимущество в деньгах, а создатели свободного ПО должны создавать преимущества друг другу. Я надеюсь, что однажды мы соберем обширную коллекцию библиотек, подчиняющихся GPL, которые не будут иметь аналогов среди собственнического ПО, и полезных в качестве строительного материала для новых свободных программ. Этим будет создано большое преимущество для разработчиков свободного ПО.

Профессиональный зуд?

Эрик Реймонд (Eric Raymond) сказал, что: "Работа над каждой хорошей программой начинается автором для удовлетворения своего профессионального зуда" (scratching a developer's personal itch). Возможно, так иногда и бывает, но многие важные составляющие GNU были разработаны с целью создать полноценную свободную ОС. Они появились на свет благодаря нашему видению проблемы и плану действий, а не вследствие импульсивного решения.

Например, мы разработали библиотеку GNU C потому, что Unix-подобная система требует такой библиотеки, и Bourne-Again Shell (bash), поскольку Unix-подобная система требует командного интерпретатора, а также GNU tar, так как аналог Unix должен иметь программу tar. То же самое справедливо и в отношении моих собственных программ --- компилятора GNU C, GNU Emacs, GDB и GNU Make.

Некоторые программы GNU разрабатывались, чтобы устранить конкретную угрозу нашей свободе. Так, мы написали gzip взамен программы сompress, которая была потеряна обществом из-за патентованного алгоритма LZW. Мы разыскали желающих реализовать LessTif, а позднее начали проекты GNOME и Harmony, чтобы решить проблемы, созданные некоторыми собственническими библиотеками (см. далее). Нами разрабатывается GNU Privacy Guard для замены популярного несвободного криптографического ПО, поскольку пользователи не должны выбирать между конфиденциальностью и свободой.

Конечно, программы создаются благодаря личной заинтересованности авторов, а многие их возможности добавляются различными людьми для удовлетворения собственных нужд. Но это не единственная причина существования программ.

Незапланированные разработки

В начале работы над проектом GNU я полагал, что нам следует разработать систему GNU целиком, а лишь затем выпустить ее. Все произошло по-другому.

Поскольку каждый компонент системы GNU разрабатывался под Unix, все они могли работать в ней задолго до появления завершенной системы GNU. Некоторые такие программы завоевали популярность и пользователи начали их расширение и перенос на различные несовместимые версии Unix, а также на другие системы.

Этот процесс сделал программы более мощными и привлек к проекту GNU большее количество средств и жертвователей. Но также он возможно задержал выпуск минимальной работающей системы на несколько лет, поскольку разработчики тратили свое время на поддержку пользовательских модификаций вместо разработки очередного компонента.

GNU Hurd

В 1990 система GNU была почти завершена; единственной важной нехваткой было ядро. Мы решили реализовать его как набор процессов-серверов, работающих поверх Mach. Mach --- это микроядро, разработанное в университете Карнеги-Меллон (Carnegie Mellon University) и позднее в университете штата Юта (University of Utah); GNU HURD --- коллекция серверов, (или ``стадо гну'', ``herd of gnus''), выполняемая поверх Mach и реализующая различные функции ядра Unix. Начало работ было задержано ожиданием выпуска Mach как свободного ПО, как нам пообещали.

Одной из причин выбора такой архитектуры было желание избежать самой тяжелой части работы: отладки ядра без отладчика высокого уровня. Такая работа уже была сделана для Mach, и мы собирались отлаживать серверы HURD как пользовательские программы, при помощи GDB. Но прошло немало времени, пока это стало возможным, и многопотоковые серверы, обменивающиеся сообщениями оказались очень сложны в отладке. Интеграция частей HURD затянулась на много лет.

Alix

Изначально ядро GNU не планировалось называть HURD. Его первым названием было Alix (Аликс)--имя женщины, которую я любил тогда. Она была администратором Unix-системы и однажды заметила, как хорошо ее имя подходит под общий принцип именования клонов Unix. В шутку она сказала своим друзьям: "Кому-то следует назвать ядро в мою честь." Я промолчал, но решил сделать ей сюрприз, назвав свое ядро Alix.

Но все произошло по-другому. Майкл Бушнел (Michael Bushnell, ныне Thomas), главный разработчик ядра, предпочитал название HURD, и назвал Alix некоторую часть ядра, которая перехватывала системные вызовы и обрабатывала их посылкой сообщений серверам HURD.

В конце концов, Аликс и я разошлись, она сменила имя; в то же время дизайн HURD также изменился и C-библиотека смогла посылать сообщения непосредственно серверам, так что компонент Alix исчез.

Но до того, как это случилось, ее друг набрел на имя Alix в исходных текстах HURD и сообщил ей об этом. Так что имя свою роль все же сыграло.

Linux и GNU/Linux

GNU Hurd еще не готов для реального использования. К счастью, доступно другое ядро. В 1991 г. Линус Торвальдс (Linus Torvalds) разработал Unix-совместимое ядро, которое назвал Linux. В течение 1992 г. ядро Linux было объединено с незавершенной системой GNU в полноценную ОС. (Конечно, такое объединение само по себе было сложной работой.) Именно благодаря Linux мы можем работать с версией системы GNU уже сегодня.

Мы назваем такую версию GNU/Linux, выражая тем самым, что она скомбинирована из системы GNU и Linux в качестве ядра.

Угрозы нашему будущему

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

Эти угрозы обсуждаются ниже.

Засекречивание оборудования

Производители аппаратного обеспечения все активнее пытаются сохранить в тайне его спецификации. Это затрудняет разработку свободных драйверов, чтобы Linux и XFree86 могли работать с новым "железом". Сегодня мы располагаем полноценной свободной системой, но не будем иметь ее завтра, если не сможем поддерживать компьютеры, которые у нас будут.

Есть два пути решить эту проблему. Программисты могут делать реконструкцию (reverse engineering) устройств, чтобы понять, как с ними работать. Все остальные в состоянии выбирать только те устройства, которые поддерживаются свободным ПО. С ростом нашего сообщества засекречивание спецификаций обернется против его инициаторов.

Реконструкция --- сложная работа; найдем ли мы программистов, решимости которых хватит довести дело до конца? Да, если мы создадим в обществе стойкое убеждение, что свобода является делом принципа, и несвободные драйверы неприемлемы. И будет ли большинство из нас тратить дополнительные средства и, возможно, время, чтобы использовать свободный драйвер? Да, если решимость иметь свободу получит широкое распространение.

Несвободные библиотеки

Несвободная библиотека, используемая в свободной ОС, может стать ловушкой для разработчиков свободных программ. Привлекательные возможности этой библиотеки служили приманкой, если вы начинали пользоваться библиотекой, вы оказывались в западне, так как ваша программа уже не может быть частью свободной ОС. (Строго говоря, мы можем включить вашу программу в состав дистрибутива, но вы не сможете запустить ее в отсутствие библиотеки.) Что еще хуже, если такая программа завоюет популярность, это может завлечь в ловушку других ничего не подозревающих программистов.

Первым примером этой проблемы, проявившимся еще в 1980-е годы, был Motif. Хотя в те времена не было свободных ОС, было ясно что Motif создаст множество проблем позднее. Проект GNU ответил двумя путями: призывал разработчиков использовать в своих проектах альтернативные свободные библиотеки X widgets наряду с Motif, и обратился к желающим создать свободный заменитель Motif. Работа потребовала многих лет: LessTif, разработанный Hungry Programmers, приобрел возможности, достаточные для большинства Motif-приложений, лишь в 1997 г.

Между 1996 и 1998 гг. другая несвободная библиотека компонент пользовательского интерфейса, называемая Qt, была использована в значительной коллекции свободных программ, оболочке KDE.

Свободные системы GNU/Linux не могли применять KDE, поскольку не были в состоянии использовать библиотеку. В то же время, некоторые коммерческие дистрибьюторы GNU/Linux, которые не ограничивались исключительно свободным ПО, включали KDE в свои дистрибутивы, получая систему с большими возможностями, но с меньшей свободой. Группа разработчиков KDE активно поощряла все большее количество программистов использовать Qt, и миллионы новых "пользователей Linux" даже и не подозревали о проблеме, скрытой здесь. Ситуация была зловещей.

Ответом общества свободного ПО были GNOME и Harmony.

GNOME (Модель Сетевой Объектной Среды GNU, GNU Network Object Model Environment) является проектом создания GNU-десктопа. Начатый в 1997 Мигелем де Иказа (Miguel de Icaza) и разрабатываемый при поддержке Red Hat Software, GNOME будет поддерживать схожие со своими аналогами возможности, но исключительно при помощи свободного ПО. У него есть и технические преимущества, такие, как поддержка широкого спектра языков, не только C++. Но главной целью была свобода --- исключение зависимости от несвободных программ.

Harmony --- это библиотека, предназначенная для работы с программами KDE не используя Qt.

В ноябре 1998 г. разработчики Qt объявили об изменении своей лицензии, которое должно сделать Qt свободным ПО. Нельзя утверждать наверняка, но я считаю, что отчасти это следствие жесткой реакции общества на проблемы, созданные Qt, когда она была несвободной. (Новая лицензия неудобна и неуравновешена, так что по-прежнему желательно избегать использования Qt.)

Как мы ответим на очередную соблазнительную несвободную библиотеку? Сможет ли общество понять необходимость обойти эту ловушку? Или многие из нас предпочтут удобство свободе, создав тем самым серьезную проблему? Наше будущее зависит от нашей философии.

Программные патенты

Серьезнейшей угрозой для нас являются патенты, которые лишают разработчиков свободного ПО права использовать алгоритмы и возможности на срок до 20 лет. Патенты на алгоритм сжатия LZW были выданы в 1983, и мы по-прежнему не можем выпустить свободное ПО, генерирующее правильные файлы формата GIF. В 1998 свободная программа сжатия аудиозаписей методом MP3 была исключена из дистрибутива под угрозой патентного иска.

Существуют способы бороться с патентами: можно разыскать доказательства. что патент недействителен, а можно сделать работу другим путем. Но оба эти метода работают не всегда: когда оба они терпят неудачу, патент может лишить свободное ПО некоторых возможностей, которые требуются пользователям. Как они поступят в этом случае?

Те из нас, кто ценит в свободном ПО его свободу, останется с нами в любом случае. Мы сделаем нашу работу, не используя патентованных возможностей. Но те, кто ценит свободное ПО за его техническое превосходство, вероятно, сочтут катастрофой ситуацию, когда патент лишит нас возможности конкурировать на равных. Поэтому недостаточно говорить о практической эффективности "соборной" ("cathedral") модели разработки программ, о надежности и богатых возможностях конкретных свободных программ. Мы также должны говорить о свободах и принципах.

Свободная документация

Наиболее дефицитной составляющей свободных операционных систем является на сегодня не программное обеспечение, а хорошие свободные руководства, которые могут включаться в их состав. Многие из наших важнейших программ не полностью документированы. Документация представляет собой неотъемлемую часть любого программного пакета; когда важный свободный программный продукт ее не имеет, в этом его основной недостаток. На сегодня мы имеем много подобных прорех.

Свобода документации, подобно свободному ПО, подразумевает свободу, а не цену. Критерии свободы документации примерно те же, что и свободного ПО: предоставляются ли пользователям определенные свободы. Дальнейшее распространение (включая коммерческое) должно разрешаться, так что руководство может сопутствовать каждой копии программы, причем как на бумаге, так и в электронном виде.

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

Но есть одна ситуация, в которой свобода модификации критична для руководств по свободным программам. Когда люди реализуют свое право модифицировать программы, и добавляют либо изменяют их возможности, то если они добросовестны, эти изменения также будут отражены и в руководстве, так что документация будет точной и полезной для пользователей измененной программы. Руководство, запрещающее программистам проявить добросовестность и завершить работу, не удовлетворяет нужд нашего сообщества.

Некоторые ограничения на проведение модификаций возражений не вызывают. Например, требование сохранить оригинальное уведомление об авторском праве, условия распространения или список авторов вполне обосновано. Также не является проблемой обязательно сообщать для измененных версий, что они были исправлены, либо даже определить целые разделы, которые не могут изменяться либо удаляться, если они затрагивают нетехнические вопросы. Такие разновидности ограничений не создают проблем, так как они не препятствуют добросовестным программистам в адаптации руководства к измененной программе. Другими словами, они позволяют нашему сообществу извлечь из документации максимум пользы.

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

Найдут ли разработчики свободного ПО достаточные знания и решимость, чтобы выпустить полный набор документации? И в этом случае наше будущее зависит от нашей философии.

Мы должны пропагандировать свободу

Сегодня количество пользователей систем GNU/Linux, таких, как Debian GNU/Linux или Red Hat Linux, оценивается в десять миллионов. Свободное ПО приобрело такие полезные свойства, что пользователи переходят на него даже из чисто практических соображений.

Положительные последствия очевидны: больший интерес к разработке свободного ПО, увеличение количества потребителей услуг бизнеса свободного ПО и возможность поощрять компании к разработке свободных коммерческих программ вместо собственнических.

К сожалению, интерес к программам растет быстрее, чем осведомленность о философии, на которой они основываются, и это ведет к неприятностям. Наша способность противостоять угрозам, описанным ранее, зависит от нашей решимости остаться свободными. Чтобы знать наверняка, что в нашем обществе живет такая решимость, мы должны знакомить с этой идеей всех, кто присоединяется к нам.

Но мы не в состоянии сделать это: способы привлечь в наше сообщество новых членов намного превосходят наши возможности разъяснить им принципы нашего сообщества. Нам нужно заниматься и тем, и другим. но сохранять при этом равновесие.

"Открытые исходные тексты"

Обучать свободе новых пользователей стало еще труднее, когда в 1998 часть нашего сообщества решила не использовать более термин "свободное ПО" ("free software"), а вместо него предложила понятие "ПО с открытыми исходными текстами" ("open source software").

Некоторые из сторонников нового термина намеревалась устранить путаницу "свободного" ("free") с "бесплатным" ("gratis")---хорошая цель. Другие, в то же время, собирались отправить за борт дух нашего сообщества и те принципы, которые служат мотивацией для движения за свободу ПО и проекта GNU, а вместо них ориентироваться на руководителей компаний и предпринимателей, многие из которых ставят прибыль превыше свободы, превыше интересов общества, превыше моральных принципов. Поэтому ораторские способности сторонников "открытых исходных текстов" направлены на перспективы создания высококачественных и мощных программ, но не на идеи свободы и сотрудничества.

Журналы, посвященные Linux служат ярким примером---они переполнены рекламой собственнических программ, работающих под GNU/Linux. Когда появится очередной Motif или Qt, будут ли эти журналы предостерегать программистов от их использования, или будут рекламировать их?

Поддержка бизнеса может принести пользу нашему обществу может осуществляться многими способами; при прочих равных, все они полезны. Но завоевание привязанности предпринимателей путем замалчивания свободы и наших принципов может быть разрушительным: дисбаланс между ростом сообщества и уровнем сознательности в нем еще более ухудшится.

Термины "свободное ПО" и "ПО с открытыми исходными текстами" описывают, более или менее, одну и ту же категорию ПО, но различаются в том, что именно говорится о программах и о моральных ценностях. Проект GNU продолжает использование понятия "свободное ПО", выражая тем самым, что важна идея свободы, а не просто технологии.

Пытайтесь!

Философия Йоды ("Не пытаться") выглядит логично, но не работает в моем случае. Я решал многие из поставленных перед собой задач, сомневаясь в том. смогу ли я сделать это, и в неуверенности, что моей работы окажется достаточно для достижения цели. Но я все же пытался, поскольку больше некому было спасти мой город от завоевателей. К моему удивлению, иногда я достигал успеха.

Бывало, я терпел поражение, и мне приходилось сдавать свои позиции. Но я отыскивал другой город, которому угрожала опасность, и снова готовился к битве. С течением времени я научился определять потенциальную угрозу и становился на ее пути, призывая других хакеров встать рядом.

Сегодня зачастую я не один. С облегчением и радостью вижу я полки хакеров, закрепляющиеся на рубеже обороны, и чувствую, что угроза миновала --- сегодня. Но опасность растет с каждым годом, и сегодня Micro$oft явно выбрала мишенью наше сообщество. Мы не вправе полагать будущее свободы как данность. Не воспринимайте ее как данность! Если вы хотите сохранить свою свободу, будьте готовы защитить ее.


Примечания автора

1) Слово "хакер" неверно используется в значении "компьютерный взломщик" некоторыми журналистами. Мы, хакеры, отказываемся принять такое его толкование и продолжаем подразумевать под ним смысл "кто-то, кто любит программировать и получает удовольствие от этого".

2) Как атеист, я не подчиняюсь ни одному религиозному лидеру, но иногда меня восхищают их высказывания.

3) В 1984 или 1985 Дон Хопкинс (Don Hopkins) (обладатель очень богатого воображения) прислал мне письмо. На конверте он написал несколько забавных фраз, включая такое: "Copyleft--all rights reversed." Я использовал слово "copyleft", чтобы назвать концепцию распространения программ, котрую разрабатывал в это время.

4) "Bourne again Shell" --- шуточная переделка ``Bourne Shell'', названия обычного командного интерпретатора под Unix.

В оригинале на английском статью можно почитать здесь

.

Лучшая бесплатная программа для создания файлов PDF

Все входящие в этот обзор бесплатные программы работают путем «установки» в систему PDF-принтера. Распечатка на нем текстового, графического или какого-либо иного из поддерживаемых типов файлов и приводит к созданию документа в формате PDF. Различаются рассматриваемые программы только количеством и качеством поддерживаемых функций.

Создание документов PDF упомянутым выше образом накладывает некоторые ограничение на тип исходного файла. В самом деле — для того чтобы распечатать какой-то файл, его нужно открыть, тоесть иметь программу распознающую его формат.

Поэтому, если кто-то пришлет вам файл в формате, для открытия которого требуется программа отсутствующая в вашей системе, вы не сможете его конвертировать в PDF. К двум онлайн-конверторам это конечно не относится. В их случае, количество распознаваемых форматов ограничено только параметрами самих сервисов.

Обзор программ

После удаления платных, адварных (тоесть с рекламой) и урезанных версий, в списке осталось только шесть программ: Bullzip PDF Writer, CutePDF, doPDF, PDFCreator, PrimoPDF, и TinyPDF. Какая же из них лучше всех?

Это очень зависит от ваших потребностей.

В данный момент, на первом месте среди моих предпочтений находится Bullzip PDF Printer. Эта программа работает безупречно и имеет все нужные мне функции. Единственный минус — в созданных Bullzip PDF файлах может не работать поиск. Например, если PDF «распечатывается» из текстового редактора то в нем поиск работает, а при создании из Excel — не очень. Другие рассмотренные ниже программы такой проблемы не имеют.

Основные возможности Bullzip PDF Printer:

- Возможность создания запароленных файлов с защитой. Среди рассматриваемых програм только PrimoPDF и PDFCreator также умеют это делать.
- Возможность использовать 40 или 128-битное шифрование файлов. Только PDFCreator также умеет это делать.
- Возможность наложения водяных знаков. Только PDF Creator имеет подобные (но более ограниченные) возможности.
- Возможность присоединять файлы. PrimoPDF и PDFCreator также могут это делать.
- Возможность выбора различных уровней качества документа PDF. Все рассматриваемые здесь программы (кроме CutePDF и TinyPDF) умеют это делать.
- Возможность добавлять и редактировать метаданные. PrimoPDF и PDFCreator также умеют это делать.

PDFCreator все еще остается моим вторым выбором и имеет почти все плюсы Bullzip PDF Printer за исключением наличия версии для 64-битной системы. Также, как уже упоминалось выше, он имеет более ограниченные инструменты для наложения водяных меток. Но самый неприятный минус — частые ошибки при конвертации веб-страниц.

Однако есть у PDFCreator и свои оригинальные преимущества. Его можно установить и как отдельную программу, и как серверное приложение. Это предоставляет возможность использования одной программы большим количеством пользователей локальной сети, что делает PDFCreator предпочтительным выбором для бизнеса (если в этом случае не требуются возможности которые предлагает Bullzip).

CutePDF Writer и TinyPDF можна отнести к самым простым программам для конвертации в PDF. Они обе предоставляют только базовые функции и создают документы без паролей, шифрования, метаданных и множества других желательных опций. С другой стороны обе эти программы имеют самый маленький размер инсталлятора.

Еще одна «минималистическая» программа doPDF похожа на две предыдущие, но в отличии от них имеет возможность выбора различных уровней качества PDF. Поэтому, я не вижу причин не рекомендовать ее как более предпочтительную, по сравнению с CutePDF Writer и TinyPDF, особенно если вы часто конвертируете в PDF графические документы.

Пользователи всех вышеупомянутых программ часто задаются вопросом — какая из них создает PDF наименьшего размера? Могу сообщить результаты моих тестов — в результате конвертации большого текстового файла без графики, программы doPDF и tinyPDF создали файл размером 1.4 MB, CutePDF и PDFCreator — 1.8 MB, Bullzip — 1.9 MB. При этом, документы созданные с помощью CutePDF, PDFCreator и Bullzip имели разрешение 600 dpi, а doPDF и tinyPDF, не имея возможности изменить выходные параметры — 300dpi.

Как видите, разница между размерами файлов недостаточна для того чтобы сделать какие-либо выводы. Поэтому требуется дополнительный тест. Например, конвертация большого файла с многочисленными изображениями. В результате такого теста TinyPDF и CutePDF создали файл размером 3.5 MB (при разрешении 300dpi), PrimoPDF и Bullzip — 7.8 MB (600dpi) и doPDF — 13.3 MB (600dpi). PDFCreator не смог корректно обработать страницу и выдал сообщение о ошибке.

Онлайн-конверторы

В тех случаях, когда инструменты для конвертации файлов PDF нужны не часто, или на компьютере на котором вы работаете запрещена установка программ, или же вы не имеете программы для открытия исходного файла, можно порекомендовать специальные онлайн-сервисы. Конечно, в этом случае можно забыть о многих дополнительных опциях (установка пароля, шифрование и т.д.).

Несмотря на то, что PrimoPDF не входит в список рекомендуемых программ, в этом обзоре присутствует его онлайн-версия. Для создания документа нужно загрузить начальный файл на сайт сервиса (подробнее). Готовый документ в формате PDF приходит на email пользователя.

Второй из рассматриваемых сегодня онлайн-сервисов является продуктом известной компанией HP, и ориентирован на печать с мобильных устройств. Если при проверке своей почты с мобильника вы обнаружили вложение которое нельзя просмотреть, можете отправить его на сервис CloudPrint и получить SMS с оригинальным ID. Впоследствии (после доступа к компьютеру с подключением к Интернет) можно зайти на этот сервис и распечатать готовый документ. Подобным образом можно конвертировать и распечатать изображения снятые на фотокамеру мобильного телефона.

CloudPrint может быть полезен для тех кто много путешествует, или находится в постоянных разъездах между офисами. Я же лично для себя пользы от такого сервиса не вижу, тем более что при его использовании отсутствует возможность загрузки готового файла на компьютер.

Дополнительные программы

Если вы уже выбрали программу по своему вкусу, но она не имеет некоторых нужных опций, то вам возможно понравятся приложения предоставляющие дополнительные функции. Вот некоторые из них:

PDF-XChange Viewer является одним из самых быстрых просмотрщиков файлов PDF и кроме того позволяет добавлять к этим файлам заметки. Измененный таким образом файл можно сохранить или распечатать (как с заметками так и без них).

PDFTK Builder позволяет запаролить файл PDF и ограничить его использование другими методами (путем запрета печати, добавление заметок и копирования). Но шифрование файлов он не поддерживает.

И наконец JPDF Tweak, в дополнение к распечатке и копированию документов PDF, позволяет наложить на них водяные знаки, установить пароль и зашифровать.

О грустном

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

По материалам сайта TechSupportAlert.com.Все входящие в этот обзор бесплатные программы работают путем «установки» в систему PDF-принтера. Распечатка на нем текстового, графического или какого-либо иного из поддерживаемых типов файлов и приводит к созданию документа в формате PDF. Различаются рассматриваемые программы только количеством и качеством поддерживаемых функций.

Создание документов PDF упомянутым выше образом накладывает некоторые ограничение на тип исходного файла. В самом деле — для того чтобы распечатать какой-то файл, его нужно открыть, тоесть иметь программу распознающую его формат.

Поэтому, если кто-то пришлет вам файл в формате, для открытия которого требуется программа отсутствующая в вашей системе, вы не сможете его конвертировать в PDF. К двум онлайн-конверторам это конечно не относится. В их случае, количество распознаваемых форматов ограничено только параметрами самих сервисов.

Обзор программ

После удаления платных, адварных (тоесть с рекламой) и урезанных версий, в списке осталось только шесть программ: Bullzip PDF Writer, CutePDF, doPDF, PDFCreator, PrimoPDF, и TinyPDF. Какая же из них лучше всех?

Это очень зависит от ваших потребностей.

В данный момент, на первом месте среди моих предпочтений находится Bullzip PDF Printer. Эта программа работает безупречно и имеет все нужные мне функции. Единственный минус — в созданных Bullzip PDF файлах может не работать поиск. Например, если PDF «распечатывается» из текстового редактора то в нем поиск работает, а при создании из Excel — не очень. Другие рассмотренные ниже программы такой проблемы не имеют.

Основные возможности Bullzip PDF Printer:

- Возможность создания запароленных файлов с защитой. Среди рассматриваемых програм только PrimoPDF и PDFCreator также умеют это делать.
- Возможность использовать 40 или 128-битное шифрование файлов. Только PDFCreator также умеет это делать.
- Возможность наложения водяных знаков. Только PDF Creator имеет подобные (но более ограниченные) возможности.
- Возможность присоединять файлы. PrimoPDF и PDFCreator также могут это делать.
- Возможность выбора различных уровней качества документа PDF. Все рассматриваемые здесь программы (кроме CutePDF и TinyPDF) умеют это делать.
- Возможность добавлять и редактировать метаданные. PrimoPDF и PDFCreator также умеют это делать.

PDFCreator все еще остается моим вторым выбором и имеет почти все плюсы Bullzip PDF Printer за исключением наличия версии для 64-битной системы. Также, как уже упоминалось выше, он имеет более ограниченные инструменты для наложения водяных меток. Но самый неприятный минус — частые ошибки при конвертации веб-страниц.

Однако есть у PDFCreator и свои оригинальные преимущества. Его можно установить и как отдельную программу, и как серверное приложение. Это предоставляет возможность использования одной программы большим количеством пользователей локальной сети, что делает PDFCreator предпочтительным выбором для бизнеса (если в этом случае не требуются возможности которые предлагает Bullzip).

CutePDF Writer и TinyPDF можна отнести к самым простым программам для конвертации в PDF. Они обе предоставляют только базовые функции и создают документы без паролей, шифрования, метаданных и множества других желательных опций. С другой стороны обе эти программы имеют самый маленький размер инсталлятора.

Еще одна «минималистическая» программа doPDF похожа на две предыдущие, но в отличии от них имеет возможность выбора различных уровней качества PDF. Поэтому, я не вижу причин не рекомендовать ее как более предпочтительную, по сравнению с CutePDF Writer и TinyPDF, особенно если вы часто конвертируете в PDF графические документы.

Пользователи всех вышеупомянутых программ часто задаются вопросом — какая из них создает PDF наименьшего размера? Могу сообщить результаты моих тестов — в результате конвертации большого текстового файла без графики, программы doPDF и tinyPDF создали файл размером 1.4 MB, CutePDF и PDFCreator — 1.8 MB, Bullzip — 1.9 MB. При этом, документы созданные с помощью CutePDF, PDFCreator и Bullzip имели разрешение 600 dpi, а doPDF и tinyPDF, не имея возможности изменить выходные параметры — 300dpi.

Как видите, разница между размерами файлов недостаточна для того чтобы сделать какие-либо выводы. Поэтому требуется дополнительный тест. Например, конвертация большого файла с многочисленными изображениями. В результате такого теста TinyPDF и CutePDF создали файл размером 3.5 MB (при разрешении 300dpi), PrimoPDF и Bullzip — 7.8 MB (600dpi) и doPDF — 13.3 MB (600dpi). PDFCreator не смог корректно обработать страницу и выдал сообщение о ошибке.

Онлайн-конверторы

В тех случаях, когда инструменты для конвертации файлов PDF нужны не часто, или на компьютере на котором вы работаете запрещена установка программ, или же вы не имеете программы для открытия исходного файла, можно порекомендовать специальные онлайн-сервисы. Конечно, в этом случае можно забыть о многих дополнительных опциях (установка пароля, шифрование и т.д.).

Несмотря на то, что PrimoPDF не входит в список рекомендуемых программ, в этом обзоре присутствует его онлайн-версия. Для создания документа нужно загрузить начальный файл на сайт сервиса (подробнее). Готовый документ в формате PDF приходит на email пользователя.

Второй из рассматриваемых сегодня онлайн-сервисов является продуктом известной компанией HP, и ориентирован на печать с мобильных устройств. Если при проверке своей почты с мобильника вы обнаружили вложение которое нельзя просмотреть, можете отправить его на сервис CloudPrint и получить SMS с оригинальным ID. Впоследствии (после доступа к компьютеру с подключением к Интернет) можно зайти на этот сервис и распечатать готовый документ. Подобным образом можно конвертировать и распечатать изображения снятые на фотокамеру мобильного телефона.

CloudPrint может быть полезен для тех кто много путешествует, или находится в постоянных разъездах между офисами. Я же лично для себя пользы от такого сервиса не вижу, тем более что при его использовании отсутствует возможность загрузки готового файла на компьютер.

Дополнительные программы

Если вы уже выбрали программу по своему вкусу, но она не имеет некоторых нужных опций, то вам возможно понравятся приложения предоставляющие дополнительные функции. Вот некоторые из них:

PDF-XChange Viewer является одним из самых быстрых просмотрщиков файлов PDF и кроме того позволяет добавлять к этим файлам заметки. Измененный таким образом файл можно сохранить или распечатать (как с заметками так и без них).

PDFTK Builder позволяет запаролить файл PDF и ограничить его использование другими методами (путем запрета печати, добавление заметок и копирования). Но шифрование файлов он не поддерживает.

И наконец JPDF Tweak, в дополнение к распечатке и копированию документов PDF, позволяет наложить на них водяные знаки, установить пароль и зашифровать.

О грустном

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

По материалам сайта TechSupportAlert.com.

Создание сетевых приложений приложений в среде Linux (Шон Валтон)


Многие наверно уже научились создавать приложения для Windows с помощью WinAPI функций. Но наверняка многие любители и не только ОС Linux будут рады научиться созданию приложений под Linux. Эта электронная книга поможет вам в освоение азов создания приложений под Linux.
deposit (2.38 MB)

Небольной пример на тему программирование в Linux

Привет. Это заметка о кодинге в системе Линукс.
Мы разберем написание одной простенькой программы.
Для компилирования программ будем использовать компилятор gcc.
В качестве редактора я взял vi, можешь взять любой, программировать будем в лучших юникс традициях а т.e. в консоли и для консоли =).
Итак, задача у нас довольно проста - нужно вывести список элементов данной директории.
Создаем новый тестовой файл:

$vi /viewdir.c

И начинаем писать код -

#include
#include

int main(int argc,char ** argv)
{
DIR * d;
struct dirent * entry;
if(argc!=2)
{
printf("Использование:%s<директория>\n",argv[0]);
return 0;
}
d=opendir(argv[1]);
if(d==NULL)
{
printf("Ошибочка");
return 1;
}
while(entry=readdir(d))
printf("%s inode=%i\n",entry->d_name,entry->d_ino);
closedir(d);
return 0;
}

Тут мы используем функции opendir,readdir,closedir.
Эти функции работают с дирикторией, как с обычным файлом
Ну а теперь непосредственно код:
Сначало проверяем - если юзер ничего не ввел в качестве параметра, то мы светим ему пример того как нужно пользоваться программой

if(argc!=2)
{
printf("Использование:%s<директория>\n",argv[0]);
return 0;
}

В консоли программа скажет так:

Использование:/home/stranger/dir<директория>

Далее открываем введеную дирикторию
d - можно навать указателем на дирикторию, в дальшешем мы будем с ним работать
Если функция вернула NULL значит произошла ошибка
Потом запускаеться цикл в котором мы читаем список файлов в дириктории с помощью функции ReadDir. Функция readdir() возвращает тру до тех пор пока не будут прочитаны все элементы дириктории. В процессе поисходит вывод информации, которая храниться в структуре entry.
Думаю там все можно понять интуитивно, могу добавить, что inode это номер программы (у нас элементa).
Теперь компилируем

$gcc -o dir /dir.c
$/dir /

и у нас есть список файлов корневого каталога. Но можно зделать проще - ввести команду ls =)

Кстати код можно оформить так:

#include
#include
int main(int argc,char ** argv){
DIR * d;
struct dirent * entry;
if(argc!=2)
{printf("Использование:%s<директория>\n",argv[0]);
return 0;}
d=opendir(argv[1]);
if(d==NULL){printf("Ошибочка");return 1;}
while(entry=readdir(d))
printf("%s inode=%i\n",entry->d_name,entry->d_ino);
closedir(d);
return 0;}

Крис бы от радости обосрался )))

В колонках Карандаш "1000"

©StraNger (27/03/09)

Крис Касперски, Ева Рокко. Искусство дизассемблирования




Книга посвящена вопросам и методам дизассемблирования, знание которых позволит эффективно защитить свои программы и создать более оптимизированные программные коды. Объяснены способы идентификации конструкций языков высокого уровня таких, как C/C++ и Pascal, показаны различные подходы к реконструкции алгоритмов. Приводится обзор популярных хакерских инструментов для Windows, UNIX и Linux - отладчиков, дизассемблеров, шестнадцатеричных редакторов, API- и RPC-шпионов, эмуляторов. Рассматривается исследование дампов памяти, защитных механизмов, вредоносного программного кода - вирусов и эксплоитов. Уделено внимание противодействию антиотладочным приемам. К книге прилагается компакт-диск с полноцветными иллюстрациями и кодами рассматриваемых примеров. Для программистов и продвинутых пользователей.
Deposit
Rapidshare

Про специфические знаки

Я думаю,многие не знают,как напечатать такие знаки.
А это довольно просто!зажимаем alt,а потом по очереди ,с зажатым альтом набираем четыре цифры НА БОКОВОЙ КЛАВИАТУРЕ(которая справа),потом отпускаем альт.
вот "коды"(четыре цифры):

0167 -параграф §
0169 -знак копирайта ©
0174 -символ зарегистрированного товарного знака ®
0153 -символ товарного знака ™
0176 -знак градуса °
0133 -многоточие … (как один знак,а не как три точки)
0146 -апостроф ’
0149 -жирная точка •
0177 - плюс\минус ±


все буквы и знаки с клавиатуры тоже можно ввести таким способом,но зачем?!
//Эти 4 цифры, просто номер символа в таблице ASCII, их можно найти в одноименной таблице

Процессы и потоки для новичков!!!

Это мини-статья для новичков по теме ОС, а конкретнее про процессы и потоки, то есть про понимание этих вещей.
Так как статья для новичков буду объяснять ее на примере явлений которые окружают каждого человека для лучшего понимания предмета.
Для того чтобы обеспечить многозадачность, ОС должна разделять всю свою работу на более маленькие части, благодоря этому разделению
ОС распределяет ресурсы компьютера между этими частями. Одна такая часть, как раз и называется процесс. Процесс в свою очередь делится
на одну или более мелких частей - потоков. Другими словами процесс заказывает ресурсы компа, такие как количество оперативной памяти, место на дисчке и т.д
Единственное что не входит в компетенцию такого вот заказа это время выполнения (процессорное время). Для понимания этого приведу пример из жизни:
Человек захотел в туалет, для этого он выделяет для себя "адресное" пространство - толчек (если он свободен) и унитаз целиком
(если хочется посрать, т.к. поссать в один унитаз смогут и два мужика, а это уже тема другой статьи) Также человек готовит для себя туалетную бумагу
(переферию так сказать). Единственное что человек не знает точно это то сколько он в толчке просидит. Так вот, процесс в ОС
это тоже самое как у человека процесс оправления. Где же здесь поток спросите вы, поток это и есть какашка. Какшка лезет независимо от того
где человек находится в данный момент, какшке это не важно, т.к. процесс в начале позаботился обо всем, и по завершении потока (все высрали) процесс уничтажет следы выполнения
(подтирает попу, смывает, моет руки, брызгает освежителем). Очень часто, процесс включает не один поток, например человек пошел посрать ну и поссать заодно решил
в таком случае если один поток выполняется за время т1 (поссать) а второй поток за время т2(какашки), то общее время процесса т,
будет т=т1+т2 (конечно затарчивается еще куча времени на открытие\закрытие процесса, ну там открыть унитаз, вытереть попу и т.д. но здесь мы это опустим),
куда эффективнее многопоточность, когда во время сранья т2 можно и поссать т1, т.е. потоки выполняются параллельно, общее время процесса
в таком случае будет такое же как и самый долгий поток (какаха), а это уже экономичнеое и правельное разделение ресурсов.
Вобщем как то так, надеюсь понятно объяснил
©Scipio

Арнольд Роббинс - Linux. Программирование в примерах


Очень хорошая книга. Выпускалась довольно давно, но до сих пор актуальна. Мне очень помогла.
Рецензия:
В книге рассмотрены вопросы, связанные с программированием под Linux: файловый ввод/вывод, метаданные файлов, основы управления памятью, процессы и сигналы, пользователи и группы, вопросы интернационализации и локализации, сортировка, поиск и многие другие. Много внимания уделено средствам отладки, доступным под GNU Linux. Все темы иллюстрируются примерами кода, взятого из V7 UNIX и GNU. Эта книга может быть полезна любому, кто интересуется программированием под Linux.
Deposit (19.05 MB)
Rapidshare

Клиент сервер на основе WinSock

Привет всем юным кодерам! Сегодня я расскажу о написании клиент серверного приложения на winapi библиотеке Winsock.
Как известно клиент-серверное приложение состоит из клиента и сервера. Клиент у нас будет программой визуальной, т.е. это центр управление, с которого мы будет посылать команды не визуальному серверу, который будет из анализировать и выполнять.
Что касается компилятора то я буду использовать Borland c++. (Я уже вижу, как в меня летят тухлые помидоры =)).
Начнем с простого – клиент.
Как ты помнишь это программа визуальная. На главной форме должны присутствовать такие компоненты:
Текстовое поле для ввода IP адреса(Edit).
Кнопки для подключение и отключения сервера(Button).
Кнопки для управлением сервера (Button). (На ваш вкус)



Да, и не забудь подключить библиотеку:

#include

Первое что бы сделаем это подключение к серверу.

{
WSADATA wsd;
If (WSAStartup(MAKEWORD(1,1), &wsd) != 0) // загрузка библиотеки и проверка на //ошибки
{
// если ошибки есть, то проинформировать юзера
Form1->Memo1->Lines->Add("Error load WinSock");
return ;
}
// создание нового потока
HANDLE hThread;
DWORD idThread;
hThread = CreateThread(NULL, 0, Thread, 0, 0, & idThread);
}

Что тут происходит? Да пока ничего. Мы просто загрузили библиотеке функцией
WSAStartUp и создали новый поток, в нем мы уже будет создавать сокет и соединяться с сервером. В первом аргументе функции WSAStartUp мы указали MAKEWORD(1,1) т.е. версия библиотеки 1. Второй аргумент это указатель на структуру WSADATA. В ней будет храниться информация о библиотеки.
Итак, поток создан, теперь можно работать с ним.
Сначала нужно объявить глобально следующие переменные

SOCKET sClient;
int ret, i;
struct sockaddr_in server;
struct hostent *host = NULL;
bool status;

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


DWORD WINAPI Thread(LPVOID lpParam)
{

char* szServerName= new char;
szServerName="12345";
szServerName=strcpy(szServerName,(Form1->Edit1->Text.c_str()));

//создание сокета
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
MessageBox(0, "Can't create socket", "Error", 0);
return 1;
}
//заполненеие структуры sockaddr_in
server.sin_family = AF_INET;
server.sin_port = htons(7070);
server.sin_addr.s_addr = inet_addr(szServerName);

//само соеденение

if (connect(sClient, (struct sockaddr *)&server,
sizeof(server)) == SOCKET_ERROR)
{

Form1->Memo1->Lines->Add("connect failed");
return 1;
}
char szRecvBuff[1024];
//принимаем данные
ret = recv(sClient, szRecvBuff, strlen(szRecvBuff), 0);
if (ret == SOCKET_ERROR)
{

Form1->Memo1->Lines->Add("recv failed");
}
// выводим данные
String q=szRecvBuff;
Form1->Memo1->Lines->Add(q);
status=true;

}

Перед основным кодом мы заносим в переменную szServerName значение текстового поля, в который пользователь введет ip адрес.
Сначала создаем сокет функцией socket.
Первый аргумент это семейство протоколов.
Нам нужен TCP, так что указываем AF_INET.
Второй аргумент этот спецификация для сокета, т.е. что мы с ним будем делать.
Нам нужно установить соединение и передать данные, поэтому указываем SOCK_STREAM.
Третий аргумент собственно сам протокол. IPPROTO_TCP соответствуют протоколу TCP.
Теперь нам нужно заполнить структуру типа sockaddr_in. В ней храниться информация о созданном сокете. Напомню что переменую (server) данного типа (sockaddr_in) мы объявили глобально. В процессе заполнения структуры нам встречается функция htons.
Она осуществляет перевод целого короткого числа из порядка байт, принятого на компьютере, в сетевой порядок байт.
Ну и само соединение. Функция connect. Первый параметр это созданный сокет.
Второй – указатель на структуру типа sockaddr_in третий размер этой структуры.
Если все пройдет успешно, то можно принять данные функцией recv и вывести в текстовое поле. Первый аргумент функции recv это созданный сокет, второй – буфер который мы предварительно создали, третий аргумент это размер буфера (функция strlen возвращает размер строки). И, наконец, последний аргумент это флаги, определяющие метод получения. Они нам не нужны, поэтому указываем 0.
В конце кода мы приводим логическую переменную status в значение true. Это нужно чтобы впоследствии избежать ненужного повторного подключения.
Кстати, так как мы работаем с классно string в начале файла нужно добавить

#include

Мы научились соеденяться с сервером, теперь нужно добавить функцию отправки команд.
Для этого мы напишам функцию GetComand, ее единственным аргументом будет команда которую нужно отправить.

void GetCommand(char* str){ /
//если мы подлючены то…
if(status==true)
{
char* szMessage= new char;
szMessage="0000";
// копируем в буферв вписаную нами команду
strcpy(szMessage, str);
// отправка команды
ret = send(sClient, szMessage, strlen(szMessage), 0);
if (ret == SOCKET_ERROR)
{
} Form1->Memo1->Lines->Add("send failed");


//получение ответа
char szRecvBuff[1024];
ret = recv(sClient, szRecvBuff, 1024, 0);
if (ret == SOCKET_ERROR)
{

Form1->Memo1->Lines->Add("recv failed");
}
String q=szRecvBuff;
//вывод ответа
Form1->Memo1->Lines->Add(q);
}
else
{
//если мы не подключены то осведомить пользователя
Form1->Memo1->Lines->Add("The server is not connected");

}
}

Сначала происходит проверка переменной status. Если она равна true то мы подключены и можно выполнять дальнейший код.
А далее мы копируем в буфер szMessage значение переменной str.
И потом отправляем это значение серверу функцией send;
Первый ее аргумент это сокет второй это буфер третий размер буфера.
После этого мы получаем ответ функцией recv он аналогична send.
После этого выводим ответ в текстовое поле.
Ответы мы будем формировать сами при разработке сервера.
Замечу, что в коде есть проверка на ошибки.
Функция готова к использованию.
Например при нажатии на кнопку «Перезагрузка» нужно выполнить такой код:

{
GetCommand("RB");
}

Кстати смотри не запутайся в командах т.к. в сервера из нужно будет анализировать.
Вот мои:
«Поменять кнопки мыши» -«AMB»
«Блокировать стол» - «BT»
«Сообщение» - «MSG»
Итак, простейший клиент готов. Подведем итог.
Клиент может подключаться к серверу отправлять и принимать команды. Пока это все.

Теперь можно приступить к разработке сервера.
Как я уже говорил сервер это программа не визуальная.
В нем, как и в клиенте нужно загрузить бибилиотеку создать сокет и подключиться.
Так же мы встретимся с привязкой к локльному адресу (функция bind) и прослушиванию порта (функция listen).
Опять же глобально нужно объявить следущие переменные:

SOCKET sServerListen, sClient;
struct sockaddr_in localaddr,
clientaddr;
HANDLE hThread;
DWORD dwThreadId;
int iSize;
WSADATA wsaData;


Итак начнем вот код главной функции:

{
//загрузка библиотеки
WSAStartup(MAKEWORD(1, 1), &wsaData);
Создание сокета
sServerListen = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
заполнение струтуры адреса
localaddr.sin_addr.s_addr = htonl(INADDR_ANY);
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(7070);
//привязка адреса к сокету
bind(sServerListen, (struct sockaddr *)&localaddr,sizeof(localaddr));
//простушиваниче порта
listen(sServerListen, 2);
while (1)
{
iSize = sizeof(clientaddr);
//разрешение на соеденение
sClient = accept(sServerListen, (struct sockaddr *)&clientaddr,&iSize);
//создание потока для приема и отправки данных
hThread = CreateThread(NULL, 0, ClientThread,(LPVOID)sClient, 0, &dwThreadId);
CloseHandle(hThread);
}
closesocket(sServerListen);
return 0;
}

До заполнения структуры адреса все идет так же. После этого вызываеться функция bind.
Она служит для связи сокета с адресом.
Т.е. первым аргументом мы передали сокет, вторым указатель на структуру с адресом, третим – размер структуры.
Теперь сокет готов к работе и можно прослушивать порт на соеденение со стороны клиента.
Функция listen. У нее два параметра. Сокет и кол-во клиентов которые могут подключиться к серверу. Т.к. сервер должен постоянно находиться в памяти и принимать соеденения, то мы запускаем бесконечный цикл.
Функция accert проверяет подключающийся клиент и разрешает соеденения.
Первый параметр это сокет. Второйуказатель на структуру типа sockaddr ну и третий размер структуры. sClient будет указателем на новый сокет.
После этого создаем новый поток для обмена данными.
Вот этот поток:


DWORD WINAPI ClientThread(LPVOID lpParam)
{

SOCKET sock=(SOCKET)lpParam;


string a="";
char szRecvBuff[1024],szSendBuff[1024] ;
int ret;
strcpy(szSendBuff,"Server connect!");
send(sock, szSendBuff, sizeof(szSendBuff), 0);


while(1)
{
//Получаем данные
ret = recv(sock, szRecvBuff, 1024, 0);

if (ret == 0)
break;
else if (ret == SOCKET_ERROR)
{
MessageBox(0, "Recive data filed", "Error", 0);
break;
}
szRecvBuff[ret] = '\0';
//записываем в стринговую переменную для дальнейшей обработки
a=szRecvBuff;
//Проверка команд
//если команда перезагрузки то…
if(a=="RB")
{
ExitWindowsEx(EWX_REBOOT, 0);
strcpy(szSendBuff,"Computer reboot =) ");
send(sock, szSendBuff, sizeof(szSendBuff), 0);

}
else
//если команда поменять кнопки мышки то…
if(a=="AMB")
{

SwapMouseButton(false);

strcpy(szSendBuff,"The buttons on the mouse were displaced");
send(sock, szSendBuff, sizeof(szSendBuff), 0);
}
Else
//если команда для вывода сообщения то…
if(a=="MSG")
{
MessageBox(0, " It is time to you to be hung up", "Error", 0);
strcpy(szSendBuff," The message is sent");
send(sock, szSendBuff, sizeof(szSendBuff), 0);

}
Else
//если команда для блокирования стола
if(a=="BT")
{
HWND h=GetDesktopWindow();
EnableWindow(h, FALSE);
strcpy(szSendBuff,"The working table is blocked");
send(sock, szSendBuff, sizeof(szSendBuff), 0);

}


}

Сначала мы передаем клиенту сообщение о том, что сервер успешно подключен и готов к работе. Далее мы получаем команды и записываем полученную команду в стринговую переменную (не забудь добавить #include ) для того, что бы дальше ее проанализировать. Команд у нас не много поэтому здесь происходит проверка условием.
Надеюсь, смысл команд понятен. Замечу, что после выполнения каждой команды мы посылаем клиенту уведомление об успешности выполнения. Например, вот участок кода:

if(a=="BT")
{
HWND h=GetDesktopWindow();
EnableWindow(h, FALSE);
strcpy(szSendBuff,"The working table is blocked");
send(sock, szSendBuff, sizeof(szSendBuff), 0);

}

После того как стол заблокирован мы отправляем клиенту сообщение ,"The working table is blocked" – что означает рабочий стол заблокирован.
Все мы подготовили простейший макет клиент – сервера и даже внедрили некоторые функции. Чтое еще можно зделать? Все информация которую мы передаем в winsock передаеться байтами поэтому можно передать любой файл. Например скриншот экрана.
Если подумать, то можно организовать даже потоковое видео. Вот примерный алгоритм

на стороне сервера храним текущий кадр и прошлый, сверяем разницу между ними, получаем битовую маску, она сжимается нефигово, потом передаем изменившиеся части(только их, сплошным потоком) клиент уже смотря по маске подставляет эти части в нужные места
Правда программно я это не проверял. Может ты зделаешь?
Это все. До свидания.


StraNger aka reaL StraNger

Простите HZ =/

HackZona - Территория Взлома
Вот так:
кстати сегодня ровно месяц после великой чистки))
но не в этом суть. ХЗ превратилась в ламо сайта(не мое выражение)
По сути она довольно давно является таковой. Я как бы сам ламер, возможно не мне судить, но это мастдай - половина адекватных людей ушло. Остались единицы. Форум засран тупыми вопросами и не менее тупыми ответами. Администрация делает какие то жалкие попытки спасти портал (и в отношении элитки), но все тщетно. Сейчас портал превратился в какой то сборник баянов. Как говориться - "Я по форуму хакзоны без улыбки не хожу." =)
Так вот - если координально ничего не измениться, то портала как такового скоро существовать не будет.

Прошу не воспринимать все это всерьез. Это просто мои мысли. Я всего лишь глупая малолетка.

Взлом программного обеспечения.




Эта книга рассказывает о том, как взламывать программный код. Самым подробным образом, чем это было сделано когда-либо ранее, высококвалифицированные авторы расскажут о технологии проведения атак и взлома программного кода. Книга насыщена примерами кода из реальных программ атаки и исправлений, вносимых хакерами в популярные приложения. Читателям наглядно демонстрируется, как выявлять неизвестные уязвимые места в программном обеспечении и как можно их использовать для взлома компьютеров. Книга предназначена для профессионалов в области программного обеспечения и может использоваться как пособие для создания более безопасного кода.
Deposit(13.28 MB)

Шалим в реестре.

Опять публикую одну из своих старых статей. В принципе все это довольно старо, но возможно кому то пригодиться.



В этой статье я хочу рассказать про некоторые интересные разделы системного реестра
Вызвать программу для просмотра реестра можно с помощью команды RegEdit.exe.
Потыкав по вкладкам можно найти много интересных вещей.

Например сделаем так чтобы при запуске виндоус, появлялось сообщение.

Идем по этому пуути

HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon


У раздела WinLogon есть параметры

LegalNoticeCaption
LegalNoticeText

Она служат для вывода текста сообщение.
Первый это заголовок а второй сам теkст
Поскольку они пусты то ничего и не происходит.
Ты можешь записать туда нужный тебе текст.

Возможно ты заметил что при работе с всплывающим меню скорость его не большая. Иногда это раздражает. Чтобы изменить скорость иди сюда

HKCU\Control Panel\Desktop


Параметр MenuShowDelay равен по дефолту 400. чтобы увеличить скорость уменьшай значение, для уменьшения скорости, соответственно увеличивай.

Теперь мы напишем вместо часиков какое либо слово (приличное)

HKCU\Control Panel\International


И изменяем sTimeFormat
В него можно записать слово но не более 8 символов
Можно ускорить действие файловой системы, (если позволяет оперативная память) увеличив параметр типа DWORD IoPageLockLimit от заданных по умолчанию 512 КБ до 4 МБ и более в разделе

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

Этот параметр представляет максимальное число байт, которые могут быть блокированы для операций I/O. Когда значение параметра равно 0, то система использует встроенный алгоритм определения необходимой памяти и использует объем 512 КБ. Установка максимального значения должна основываться на объеме памяти в Вашей системе.
Таблица рекомендуемых значений

Размер памяти значение
32 4096000
64 8192000
128 16384000
256+ 65536000

Если ты знаешь что такое WSH то его можно отключить таким способом:

HKLM\Software\Microsoft\Windows Script Host\Settings

Строковый параметр Enabled равный "0" отключает работу скриптов WSH, а 1 соответственно включает.

При возникновении сбоя в Office XP утилита DW.exe пытается отправить отчет о нем в Microsoft. Если вы не хотите заниматься ловлей багов, то можете отключить эту функцию. Существует несколько различных параметров, находящихся в разделе

HKEY_CURRENT_USER\Software\Policies\ Microsoft\Office\10.0\Common

• Параметр типа DWORD DWNeverUpload со значением 1 отключает отправку данных и не выводит соответствущее сообщение
• Параметр типа DWORD DWNoExternalURL со значением 1 отключает соединение с сервером Майкрософт и не выводит соответствущее сообщение
• Параметр типа DWORD DWNoFileCollection со значением 1 не высылает файлы, запрашиваемые сервером обработки ошибок
• Параметр типа DWORD DWNoSecondLevelCollection со значением 1 не высылает файлы особого рода (записи в реестре, версия файлов, используемые программы), запрашиваемые сервером обработки ошибок
Отсутствие этих параметров (по умолчанию) или установка в 0 включает эти настройки обратно

Можно подключать собственных персонажей к приложениям Office. Для этого перейдите в раздел

HKEY_CURRENT_USER\Software\Microsoft\Office\Common\Assistant
и создайте строковый параметр AsstFile, в котором пропишите полный путь к вашему acs-файлу персонажа
Этот способ удобен, если ваш персонаж находится не в стандартной папке персонажей, который сканируется Office для выбора нового персонажа. Например, таким образом вы можете подключить персонаж Magic Gooddy, который находится в своей папке
При загрузке Windows после неправильного выключения запускается проверка дисков. При этом пишется что-то вроде "Через 10 секунд начну проверять...". Чтобы уменьшить время ожидания надо в разделе
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager

создать или отредактировать параметр AutoChkTimeOut типа DWORD и присвоить ему значение в секундах. По умолчанию установлена пауза в 10 секунд. Если вы присвоите ему значение больше чем 259200 секунд (около 3 дней), то будет использоваться значение по умолчанию

Copyleft (Ɔ); StraNger ideas