Search
Write a publication
Pull to refresh
-5
0
Send message

JAVA+Swing в 2013. Стоит ли?

Reading time8 min
Views98K
На Хабре Swing не любят. Поиск по «Swing» дает либо нейтральные, либо негативные упоминания. Вот некоторые из них:
  • «Java-апплеты (доразвивались до смертельной болезни под названием Swing)»
  • «Swing — мягко говоря не самый оптимальный UI фреймворк»
  • «Swing был ужасен»

Я не возьмусь утверждать, что Swing — идеал. Это неправда. Однако я постараюсь описать те плюсы и минусы с которыми пришлось столкнуться.
Читать дальше →

Вставка в середину: ArrayList против LinkedList

Reading time5 min
Views87K
Как-то на собеседовании мне задали вопрос: какая реализация списка выполнит вставку в середину быстрее: ArrayList или LinkedList? С первого взгляда вопрос простой — нужно посчитать алгоритмическую сложность каждого варианта и сравнить их.
Читать дальше →

Сборщик почты (делаем простые вещи сложно)

Reading time21 min
Views27K

В качестве предисловия


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

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

Кому достаточно приведенного ниже кода — дальше могут не читать:

         foreach (var mailbox in mailboxes)
                using (var client = new Pop3Client())
                {
                    client.Connect(Hostname, Port, false);
                    client.Authenticate(User, Password);

                    var count = client.GetMessageCount();
                    for (var i = 0; i < count; i++)
                    {
                        Mail = client.GetMessage(i + 1);
                        var cat = SortMail(Mail);
                        DoSomething(Mail, cat);
                    }
                }

Читать дальше →

Полная энергетическая автономия или как выжить с солнечными батареями в глубинке (часть 1. теоретическая)

Reading time5 min
Views327K


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

image
Как все начиналось

Интересный и одновременно простой слайдер на чистом CSS3

Reading time5 min
Views313K
Я никому не открою Америку, не удивлю публику новым фокусом и не взорву мозг тем, кто в CSS3 плавает, как аквалангист. Расскажу простой способ, как создать слайдер с помощью простых функций CSS3 без необходимости использовния javascript.
Читать дальше →

Фрактальное пламя — алгоритм построения

Reading time4 min
Views29K


Фрактальное пламя (или фрактальные искры, англ. fractal flame) – алгоритм, предложенный Скоттом Дрейвсом (Scott Draves) и использующий для построения изображений системы итерируемых функций (СИФ). Благодаря разным значениям seed для генератора псевдослучайных чисел можно получить множество разнообразных «картин». Хотя фрактальность в них просматривается далеко не всегда, результаты получаются очень интересными.

Под катом – краткое описание основных моментов реализации алгоритма.
Читать дальше →

Пишем бота для MMORPG с ассемблером и дренейками. Часть 3

Reading time8 min
Views22K
Привет, %username%! Итак, продолжим написание нашего бота. Из прошлых статей, мы научились находить адрес перехватываемой функции для DirectX 9 и 11, а так же исполнять произвольный ассемблерный код в главном потоке игры и прятать от различных методов защиты. Теперь все эти знания можно применить в реальных боевых условиях. И начнем мы с исследования программы, для которой мы и пишем бот.
Взглянуть в микроскоп

Собственная реализация https с использованием crypto++ для начальной загрузки I2P

Reading time7 min
Views14K
Каждый новый узел I2P при первом запуске должен откуда то получить начальный список узлов. Для этого существуют специальные сервера (reseed), адреса которых жестко прописаны в коде. Раньше загрузка осуществлялась по http, однако с недавних пор reseed-ы стали переходить на https. Для успешной работы «пурпурного» I2P также потребовалось внести соответствующие изменения. Используемая там криптографическая библиотека crypto++ не поддерживает ssl. Вместо использования дополнительной библиотеки типа openssl, фактически дублирующей криптографию, был выбран рассмотренный ниже вариант.
Начальная загрузка это единственное место в I2P, где используется https.
С другой стороны, статья будет интересно тем кому интересно понять, как работает ssl и попробовать самому.

Читать дальше →

Гибридные приложения в Qt на примере использования D3.js

Reading time6 min
Views29K
D3 — мощная JavaScript библиотека для визуализации данных. На мой взгляд — просто рай для web-разработчика, казалось бы недоступный для Qt-программиста. Но гибкость фреймворка Qt позволяет интегрировать web-frontend в толстый клиент с помощью механизма Qt Web Bridge. Такие приложения получили наименование гибридные (Qt Hybrid Apps).

Для JavaScript-программистов хорошая новость заключается в том, что их решения можно легко интегрировать в Desktop приложения, что потенциально может увеличить целевую аудиторию пользователей разрабатываемых библиотек (во всяком случае это верно для мира Qt приложений).

На скриншоте ниже изображен виджет Dependency Wheel (Круг Зависимостей), отрисовка которого осуществляется с помощью D3.js а управление данными и отображением — с помощью Qt. При нахождении указателя над соответствующей дугой её взаимосвязи «подсвечиваются», а остальные становятся полупрозначными. Данный виджет можно использовать для визуализации различного рода зависимостей (например библиотек).

В отличии от оригинального JS решения диаграмма динамически изменяет размер под размер виджета, а данные устанавливаются на стороне Qt, а не с помощью загрузки JSON-файла.

Статья больше ориентирована на Qt-программистов, но также может быть интересна и JS программистам.


Читать дальше →

300 потрясающих бесплатных сервисов

Reading time11 min
Views1.6M


Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

  • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
  • Bootswatch: Бесплатные темы для Bootstrap.
  • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
  • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
  • Strikingly.com Domain: Конструктор веб-сайтов.
  • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
  • Withoomph: Мгновенное создание логотипов (англ.).
  • Hipster Logo Generator: Генератор хипстерских логотипов.
  • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
  • Invoice to me: Бесплатный генератор счета.
  • Free Invoice Generator: Альтернативный бесплатный генератор счета.
  • Slimvoice: Невероятно простой счет.

Читать дальше →

Изучение иностранного языка: коллекция заблуждений

Reading time10 min
Views58K
Как выучить иностранный язык? Почти все сталкивались с изучением иностранного языка в своей жизни: в школе, в вузе, кто-то ходил на курсы, занимался с репетитором или пытался изучать самостоятельно. Пытались все, но получилось далеко не у всех. Почему?

Чтобы ответить на этот вопрос, нужно понять, что мы делаем «не так». Проблема, на мой взгляд, заключается в так называемой «народной лингводидактике», которая построена на распространённых ошибочных представлениях о том, что такое язык, как он работает и как его нужно изучать. Эти заблуждения распространены как среди тех, кто изучает, так и среди тех, кто учит.

Давайте рассмотрим наиболее заметные заблуждения и разберёмся, почему они ошибочны и как они мешают нам учить язык.
Читать дальше →

Сообщения в глубине: удивительная история подводного Интернета

Reading time44 min
Views212K
Интернет — неотъемлемая часть нашей жизни, невероятно сложная сеть, строившаяся на протяжении многих лет, фактически — это сеть кабелей, опоясывающих всю Землю, в том числе проходящая через моря и океаны. Человечество прошло долгий путь с момента прокладки первого трансатлантического подводного телеграфного кабеля в 1858 году между Соединенными Штатами и Великобританией. В этой статье мы расскажем о том, как Интернет преодолел «водные барьеры», многокилометровые глубины и подводные катаклизмы, какие сложности были на пути и как невероятно сложно поддерживать эту систему в связанном состоянии в наше время, каких колоссальных затрат средств и энергии это требует.

Читать дальше →

Что нужно знать, чтобы хорошо рисовать?

Reading time5 min
Views268K


Давид Ревуа — прекрасный художник, работающий со свободным программным обеспечением, постоянный член сообществ Krita Foundation и Blender Institute, концепт-художник анимационных проектов Gooseberry Open Movie Project, Mango Open Movie Project (Tears of Steel) и Durian Open Movie Project (Sintel). В этой статье он делится с начинающими художниками списком знаний, которые необходимо приобрести, чтобы работы получались реалистичными. Он обращает внимание, что для рисования «в цифре» следует обзавестись теми же навыками, что и в традиционной технике. Итак, приобщимся к его опыту.
Читать дальше →

Генератор своими руками на 220 вольт. Теперь отключения света не страшны

Reading time2 min
Views551K
Я покажу как собрать простой, но достаточно мощный, генератор на 220 вольт.



Потребуется:


— коллекторный мотор, можно другой на 12 вольт
— насадка на ось мотора — патрон от дрели
— бесперебойник UPS или инвертор с 12 на 220
— диод на 10 ампер: Д214, Д242, Д215, Д232, КД203 и т. д.
— провода
— велосипед
— и желательно аккумулятор на 12 вольт

Сборка:


— закрепляем велосипед так, что бы заднее колесо крутилось свободно, вывешиваем его
— прикручиваем патрон на ось мотора
— крепим мотор так, что бы патрон плотно прижимался к колесу, можно подтянуть его пружиной
— подключаем мотор к аккумулятору: минусовой провод мотора к минусу аккумулятора, плюсовой провод мотора к аноду диода, катод диода к плюсу аккумулятора
— аккумулятор соединяем с бесперебойником или с инвертором
Всё! К бесперебойнику можно подключать потребители на 220 вольт и пользоваться электричеством! Как только аккумулятор разрядится, достаточно будет покрутить педали и примерно через час аккумулятор зарядится.
Читать дальше →

Python в Latex

Reading time3 min
Views18K
Использовать Python в LaTeX было бы очень удобно. Сразу предупреждаю, что предложенные методы считаются небезопасными, потому-что Python умеет гадить, если написать соответствующий код, так что проверяйте его (=

Существует готовый метод в виде файла стилей, используется так:
\usepackage{python}
\begin{python}
from math import sin
a = sin(5)
c = sin(9)
b =  max(a,c)
print b
\end{python}


Этот пакет, фактически, создает jobname.py, пишет вывод в jobname.py.out, jobname.py.err, и читает его.
Метод плох тем, что переменные не сохраняются от кода к коду, и для этого приходится использовать pickle, приходиться каждый раз заново всё import`ить и т.п., а еще мне кажется, что удобно иметь все расчеты в одном месте в отдельном файле, поэтому я построил свой лунапарк…
Читать дальше →

Диплом бакалавра в LaTeX, или ДСТУ 3008-95 в 150 строк

Reading time21 min
Views144K
image
Всем привет. Недавно меня тоже настигла переломная веха студенческой жизни — бакалаврская дипломная работа. Среди многих формальных деталей этого замечательного явления особо заметным стоит нормоконтроль. Нет, я понимаю и всячески поддерживаю, что стандарты необходимы, в том числе стандарты на оформление академического текста. Просто наши стандарты, в отличие от западных, достаточно идиотичны. Они не экономят ни чернила, ни бумагу, они не упрощают поиск литературы по номенклатуре, а усложняют чтение названия. Не говоря уже о том, что текст стандарта спроектирован и описан людьми, работающими в редакторе Microsoft Word. Опять-таки, я не имею ничего против Word, это мощнейшая система. Но технический текст в нем набирать неудобно, и по гибкости он во много раз проигрывает бессмертному творению Дональда Кнута — LaTeX.

Итак, мое написание диплома началось с того, что я потратил 4 часа на настройку преамбулы под нормы украинского стандарта оформления ДСТУ 3008-95. Насколько мне известно, он почти полностью соответствует русскому ГОСТу. Я знал, что существуют готовые решения (например, disser), но после пары проб предпочел настроить каждую деталь самостоятельно. Для тренировки. Тренировка удалась — я узнал бездну новых вещей о LaTeX, этого монстра невозможно выучить полностью :-)

Под катом я полностью опишу процесс настройки каждой конкретной детали и использование их при написании, а также разные мелочи, упрощающие написание диплома еще больше. Сразу предупреждаю: где-то мои решения могут показаться костылями. Где-то они не слишком универсальны. Я это знаю, понимаю, принимаю и приветствую критику и предложения в комментариях ;-)
Читать дальше →

Создаем резюме на LaTeX — как и зачем?

Reading time5 min
Views93K
Многие документы я подготавливаю в LaTeX, а не в Word. И к моменту, когда я определяюсь со следующим местом работы, я подвожу итоги сделанного, и, уж чтобы не пропадало, фиксирую их в документах, составляющих каркас моего CV. По моему личному убеждению, тщательность в создании документов для будущего работодателя нужна не столько для коммуникаций с «эйчарами», сколько для осмысления дороги, по которой идешь, и направления, в котором решаешь двигаться дальше. Итак, почему я для резюме выбрал LaTeX?

Читать дальше →

Во главе Гугла: как выжать максимум из контекстной рекламы

Reading time7 min
Views60K
Что делать, если потраченные на контекстную рекламу деньги вылетели в трубу? Как бороться с тем, что трафика из Google AdWords кот наплакал? Почему стоимость конверсии выше стоимости продукта? С чего вообще правильно начинать настройку контекстных рекламных кампаний? Мы решили поделиться своим опытом в этом посте.



Есть несколько основных проблем, которые чаще всего мешают достичь хороших результатов от контекстной рекламы:

  • высокая цена клика;
  • нет кликов;
  • высокая цена конверсии;
  • низкая позиция объявления;
  • низкий CTR;
  • плохое качество трафика (нет покупок, заказов, подписок и т.д.);
  • плохой показатель качества (QS).

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

Поэтому мы не будем рассматривать отдельные кейсы. Лучше поэтапно опишем, как создавать кампании в Google AdWords, которые будут эффективны и конкурентоспособны. Проверено специалистами Alconost.
Читать дальше →

Вирусы. Вирусы? Вирусы! Часть 2

Reading time30 min
Views88K


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

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

Логика мышления. Часть 5. Волны мозга

Reading time15 min
Views79K


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

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

Information

Rating
Does not participate
Registered
Activity