войти зарегистрироваться

Ненормальное программированиеЗагрузка динамической библиотеки из памяти в Linux

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

Перехватить функции open, mmap и прочие невозможно, так как ld.so слинкован с библиотекой си статически, исполняемые файлы, загруженные же своим загрузчиком, «неполноценны» (даже с перехватом функций в libdl): они не регистрируются в списке загруженных библиотек и/или их символы не видны через dlsym. Следовательно, остается только перехват системных вызовов.

СофтПобеждаем ELMS Delivery Client

Сначала объясню, о чем речь.
Что такое ELMS? ELMS (e-academy License Management System) — это веб-сайт для распространения ПО, который каждый администратор программы может настроить в соответствии с потребностями своего подразделения. Факультеты-подписчики MSDN Academic Alliance всего мира могут пользоваться ELMS бесплатно, так что ее использование не приведет к дополнительным затратам.

Зачем нужна ELMS? ELMS — это основанная на веб-технологиях система управления, упрощающая распространение ПО среди студентов в соответствии с политикой лицензирования программы MSDN AA.
Ссылка

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

Ненормальное программированиеПрограммируем в dc (desktop calculator) из песочницы

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

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

Каскадные Таблицы СтилейДрессируем box-shadow

image Разработчики W3C сделали box-shadow очень гибким свойством. Благодаря этому можно получать весьма интересные результаты, если использовать это свойство нетривиальным образом. В этой статье я напишу о некоторых эффектах, которые мне удалось получить при помощи «теневых технологий».

Пока я составлял примеры, я неожиданно обнаружил, что браузеры отображают их совсем неодинаково. В итоге, помимо простой демонстрации возможностей box-shadow, получился еще и маленький браузерный тест на поддержку CSS 3. Все примеры снабжены CSS-кодом и картинкой (общий объем всех PNG: 161 КБ). В статье я не стал прописывать свойства с вендорными префиксами -moz- и -webkit-, чтобы не ухудшать читабельность. В суммарной странице со всеми примерами эти префиксы есть (предупреждаю, что у Оперы есть баг с прорисовкой внешних box-shadow при прокрутке).

Персональные блоги Толерантность к ЛГБТ?!

Украина стремится в евро союз. Одним из пунктов приема в евро союз это толерантность к ЛГБТ. А что подразумевается под толерантностью к ЛГБТ в рамках страны?
Существует законопроект по которому (если его примут) в школах должны ввести уроки толерантности, где будут объяснять, что ЛГБТ это нормально!!!
Лично меня это возмущает, так как я это нормальным не считаю! + почему моего ребенка будут пытаться научить тому, что я считаю аморальным! Кто имеет право вмешиваться в моральную сторону обучения моего ребенка?!!!

Что мы можем сделать? Если будет собрано миллион подписей против этого законопроекта то он не пройдет. Сейчас во всех городах идет сбор подписей. В Харькове сбор подписей будет проходить 23-24 августа (скорее всего на м. Университет). Все кому не безразлично придите и подпишитесь.

Больше инфы на сайте http://love-contra.org/

Веб-разработкаКак отправить форму по нажатию на ссылку?

Этот вопрос входит, наверное, в ТОП10 вопросов на форумах :) Скорей всего это требование дизайнера или заказчика.

Итак, решение, на первый взгляд, простое:

<a href="#" onclick="document.getElementById('myform').submit(); return false;">Отправить</a>


Но тут же возникает (как ни странно :) следующий вопрос это, а если JS будет у посетителя отключен?

Персональные блоги 5 cпособов осуществить агрегацию строк в MS SQL

Иногда возникает необходимость осуществить агрегацию строк в SQL запросе, то есть, по такому набору данных:
GroupId Item
1 AAA
2 IS
5 OMG
2 WHAT
2 THE
1 This
получить примерно такой:
GroupId ItemList
1 AAA,This
2 IS,WHAT,THE
5 OMG
MySQL, например, для таких целей обладает встроенной функцией GROUP_CONCAT():
SELECT GroupId, GROUP_CONCAT(Item SEPARATOR ",") AS ItemList
FROM Items

В MS SQL Server'e такой функции нету, поэтому приходится извращаться. Перед тем, как приступить, сделаем скрипт для создания тестовой таблицы:
CREATE TABLE Items(GroupId INT, Item NVARCHAR(10))

INSERT INTO Items(GroupId, Item)
SELECT 1 AS GroupId, 'AAA' AS Item
  UNION ALL
SELECT 2, 'IS'
  UNION ALL
SELECT 5, 'OMG'
  UNION ALL
SELECT 2, 'WHAT'
  UNION ALL
SELECT 2, 'THE'
  UNION ALL
SELECT 1, 'This'

Итак, начнем.

Персональные блоги играем с логическими операторами

вот захотелось поиграться с логическими операторами, с присваиванием и сделать что-то реально полезное…

Персональные блоги Брутально-элегантная верстка

Никогда я так раньше не делал, однако, все по порядку.

Случилось мне сверстать красиво оформленную поисковую форму со всякими PNG-фенечками и кнопкой картинкой. Все бы ничего, пару дней все работало как часы, отправлялось, искало и т.д. А тут мне менеджер проекта и говорит: "Форма не работает". Как так? Глянул в ФФ - работает, в Опере - Ок, в ИЕ7 - работает, на шестерке завал. Блин. Как будто disabled на <input type="image" src="картинка"> выставлен, ан нет - ничего подобного.

Пробую onclick="this.form.submit()" - Фиг вам.
Пробую onclick="document.forms['form_name'].submit()" - Фиг.

Думаю, а что, если дело не в кнопке, ставлю обычный Сабмит - срабатывает только при попадании в два крайних правых пиксела - Блин.

И тут уже пришлось извращаться:

<form method="get" action="/search/" name="form_name">
<table cellpadding="0" cellspacing="0">
<tr>
<td><img src="/img/inner/spacer.gif" width="15" height="22"></td>
<td height="22"><input type="text" name="q" value="Поиск"></td>
<td width="27" height="22" onclick="document.forms['form_name'].submit()">
<input type="submit" value="" style="border-width: 0;
    background-color: transparent;
    background: url('/img/pretty_button.gif') 0px 3px no-repeat;
    width: 27px; height: 22px;">
</td>
</tr>
</table>
</form>


Что характерно, работает везде... :)

UPD: Хотя можно было и просто картинку вставить...