Как стать автором
Обновить
0
0
Adam Ether @Adam_Ether

Пользователь

Отправить сообщение

Маленькие хитрости Java. Часть 2

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

Buffered Streams

//медленно
InputStream is = new FileInputStream(file);
int val;
while ((val = is.read()) != -1) {
}
//быстро
InputStream is = new BufferedInputStream(new FileInputStream(file));
int val;
while ((val = is.read()) != -1) {
}

Казалось бы — очевидная истина, неправда ли? Но как показал чужой код и опыт собеседования кандидатов, часть разработчиков определенно не понимает в чем преимущество буферизованных стримов. Кто до сих пор не разобрался — метод read() класса FileInputStream:
public native int read() throws IOException;

Согласитесь, каждый раз делать системный вызов, чтобы считать один байт несколько расточительно. Собственно для того, чтобы избежать этой проблемы и были созданы оболочки-буферы. Все что они делают — при первом вызове системного read() считывают несколько больше (в зависимости от указанного размера буфера, котрый по умолчанию равен 8 кб) и при следующем вызове read() считывают данные уже из буфера. Прирост производительности — на порядок. Системные вызовы, на самом деле, это не всегда плохо, например:
System.arraycopy(src, srcPos, dest, destPos, length);

В случае копированния массива — системный метод будет гораздо быстрей реализованного на java. И еще — считывайте данные порциями, а не по байтам, это тоже позволит прилично сэкономить.
Читать дальше →
Всего голосов 93: ↑84 и ↓9+75
Комментарии91

Нейронная сеть против DDoS'а

Время на прочтение7 мин
Количество просмотров40K

Предисловие


Некоторые из вас наверняка недавно проходили Stanford'ские курсы, в частности ai-class и ml-class. Однако, одно дело просмотреть несколько видео-лекций, поотвечать на вопросики quiz'ов и написать десяток программ в Matlab/Octave, другое дело начать применять полученные знания на практике. Дабы знания полученые от Andrew Ng не угодили в тот же тёмный угол моего мозга, где заблудились dft, Специальная теория относительности и Уравнение Эйлера Лагранжа, я решил не повторять институтских ошибок и, пока знания ещё свежи в памяти, практиковаться как можно больше.

И тут как раз на наш сайтик приехал DDoS. Отбиваться от которого можно было админско-программерскими (grep / awk / etc) способами или же прибегнуть к использованию технологий машинного обучения.

Далее пойдёт рассказ о создании нейронной сети на Python 2.7 / PyBrain и её применении для защиты от DDoS'а.

Читать дальше →
Всего голосов 177: ↑174 и ↓3+171
Комментарии46

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

Время на прочтение5 мин
Количество просмотров11K
Сколько лет занимаюсь разработкой сайтов, всегда сталкиваюсь с одной проблемой — 9 из 10 заказчиков считают, что мы телепаты. Мы — это в принципе все айтишники, а, может быть, и специалисты других отраслей (не могу сказать точно — не пробовал). Когда заказчик говорит «мне нужен интернет-магазин для продажи <...> через интернет», он обычно предполагает, что любой интернет-магазин — это нечто «готовое», позволяющие «делать деньги» просто после того как «наполнил склад» и получил от Исполнителя сам сайт.
Я не буду здесь расписывать про раскрутку магазина, про юридические и бюрократические нюансы. Просто хочу потенциальным заказчикам (неважно у кого заказывать) дать несколько советов, чтобы в результате они получили то, чего хотят, а не то, чего хотел разработчик.
Читать дальше →
Всего голосов 35: ↑28 и ↓7+21
Комментарии35

Подкаст AppleInsider.ru [32]

Время на прочтение1 мин
Количество просмотров754
Здравствуйте, читатели Хабрахабр!

AppleInsider.ru: Тридцать второй выпуск.

У нас в гостях — Алексей Дубовцев архитектор высокопроизводительных информационных систем, с опытом практической работы 15 лет. Работал в 17 странах мира, участвовал в разработке телевидения Microsoft.tv, спроектировал и запустил торговую систему, через которую сейчас проходит порядка 10% сделок российских бирж.

  • Wolfram Alpha Как? Что? Почему?
  • Подробно о Siri
  • Телевизор от Apple
  • ГЛОНАСС в iPhone 4S
  • Магазин Apple в Москве
  • Операторы против iMessage
  • Украину в App Store!
  • Будущее операционных систем
Если вы хотите стать гостем подкаста – напишите нам на info@appleinsider.ru

Подписка: iTunes | RSS | MP3
Всего голосов 29: ↑20 и ↓9+11
Комментарии5

GeekCast #1

Время на прочтение1 мин
Количество просмотров517

Темы выпуска:
О вреде и пользе регрессионных тестов;
Нужно ли переписывать приложение;
WinRT: благо или конец;
Два подхода к работе с проектами (Visual Studio, Intellij Idea)

Ведущие:
Юрий Трухин (@trukhinyuri/attrukhinyuri),
Михаил Филиппов (@filippovma),
Екатерина Иванова (@kateechka),
Сергей Гаврук (@gavruk);

Всего голосов 20: ↑16 и ↓4+12
Комментарии3

Уголок Java-разработчика: библиотеки на каждый день

Время на прочтение3 мин
Количество просмотров7.7K
За все время, проведенное в написании кода на Java, у меня сформировался определенный набор полезных cторонних библиотек, которые прочно засели в classpath, и без которых не обходится ни один день разработки, будь то написание чего-либо «на коленке» или работа над серьезным проектом. Речь идет не о «монстрах» вроде Spring, Struts, Hibernate (это другая история), а скорее об утилитах, которые заполняют пробелы в Java SE API и позволяют сэкономить десяток-другой лишних строк кода/минут тут и там. Этой информацией я бы и хотел поделиться с хабрасообществом — надеюсь, она пригодится особенно тем, кто только начинает штурмовать Java, и позволит немного, но увеличить производительность труда.

Итак, список наиболее часто используемых мной классов и методов с комментариями:
Читать дальше →
Всего голосов 28: ↑28 и ↓0+28
Комментарии3

Интернет-эквайринг «для чайников»

Время на прочтение13 мин
Количество просмотров265K
Доброго времени суток, хабравчане!

Этой статьей я хочу пролить свет на интернет-эквайринг в целом, рассказать с чем его едят.
Цель статьи: для общего развития.

Электронная коммерция – это сфера экономики, которая включает в себя все финансовые и торговые транзакции, осуществляемые при помощи компьютерных сетей, и бизнес-процессы, связанные с проведением таких транзакций.
Читать дальше →
Всего голосов 16: ↑11 и ↓5+6
Комментарии9

Время против памяти на примере хеш-таблиц на Java

Время на прочтение3 мин
Количество просмотров18K
Эта статья иллюстрирует т. н. компромисс скорости и памяти — правило, которое выполняется во многих областях CS, — на примере разных реализаций хеш-таблиц на Java. Чем больше памяти занимает хеш-таблица, тем быстрее выполняются операции над ней (например, взятие значения по ключу).

Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии28

Какой хороший программист!

Время на прочтение3 мин
Количество просмотров78K
Какой хороший программист наш Вася! Всегда опрятно одет, вежлив и предупредителен, хороший семьянин и душа компании. Что? Как он, собственно говоря, программирует? Хм… Постойте… А мы и не знаем. Никто никогда толком результатов его работы и не видел-то. Получается, Вася — не очень хороший программист? Ну ладно.

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

Читать дальше →
Всего голосов 176: ↑143 и ↓33+110
Комментарии88

Хитрые задачи по Java

Время на прочтение7 мин
Количество просмотров116K
Совсем недавно я сдал OCA Java SE 7 Programmer I. За время подготовки успел решить огромное количество задач и извлечь из них много тонких моментов языка. Самые интересные и ловкие — сохранял на будущее. И вот у меня накопилась небольшая личная коллекция, лучшую часть которой я здесь и опишу.

В замечательной статье Знаешь ли ты JAVA, %username% и её второй части автор тоже поделился опытом после подготовки. Однако я пришёл к выводу, что могу добавить что-то своё. Так и зародилась эта статья.

Читать дальше →
Всего голосов 75: ↑60 и ↓15+45
Комментарии81

Мониторинг балансов сотовых телефонов, провайдеров — или как никогда больше не забывать вовремя заплатить за телефон и интернет

Время на прочтение4 мин
Количество просмотров21K

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

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

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

Если интересно, как можно обуздать такую стихию - добро пожаловать под кат
Всего голосов 61: ↑59 и ↓2+57
Комментарии54

HighLoad 2012

Время на прочтение14 мин
Количество просмотров37K
На днях в Москве прошла «конференция разработчиков высоконагруженных систем» HighLoad++, участником которой мне посчастливилось стать. Ниже я хочу кратко пройтись по докладам, которые посетил в рамках конференции, выделив в них интересные на мой взгляд моменты.

Сразу предупрежу, что какие-то вещи я мог понять неправильно, какие-то переврать. Если для вас это важно — не читайте этот пост, а приходите на следующую конференцию лично!
Читать дальше →
Всего голосов 72: ↑68 и ↓4+64
Комментарии39

Несколько интересностей и полезностей для веб-разработчика #21

Время на прочтение3 мин
Количество просмотров57K
Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

Awesome Python


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

Chart.js



Потрясающие интерактивные графики и диаграммы на HTML5 Canvas. Chart.js не зависит от сторонник библиотек, работает во всех современных браузерах и даже в IE7/8 с полифилом, адаптивный к мобильный устройствам, очень гибкий и модульный. Выглядит все на самом деле очень красиво, но признаюсь я не настолько детально изучил проект, чтобы сказать чем он лучше DC.js из моего 19 выпуска. Дело в том, что Chart за несколько дней собрал почти 10 000 звезд на GitHub.

Ну и для того, чтобы добить тему визуализации данных, оставлю ссылку на Amcharts. Проект не open-source, но вы можете пользоваться им бесплатно, если будете размещать логотип. Хочу обратить ваше внимание на то, что с этой библиотекой работают Microsoft, Amazon, IBM, Bank of America, NASA, P&G, PayPal и многие другие мировые корпорации.
Читать дальше →
Всего голосов 104: ↑100 и ↓4+96
Комментарии4

Дайджест статей по анализу данных №3 (09.06.2014 —22.06.2014)

Время на прочтение5 мин
Количество просмотров20K

Добрый день, уважаемые читатели.
Пролетели 2 недели и пришло время нашей подборки материалов по анализу данных. Сегодняшний дайджест получился большим, и признаюсь често сам осилил не все, что в него попало. Но так как на вкус и цвет товарище нет, то я решил выложить всю подборку.
Итак, из сегодняшней подборки вы узнаете о том как использовать хранилища данных различных типов в одном проекте, посмотрите какими большими данными может обладать бизнес и как их анализ может ему помочь. Также в нашей подборке будет статья посвященная алгоритму FTCA, а также будет материал про сравнени различных алгоритмов машинного обучения.
Читать дальше →
Всего голосов 52: ↑47 и ↓5+42
Комментарии2

Кирилл Сафонов: «Это как участвовать в гонках через океан на небольших яхтах»

Время на прочтение10 мин
Количество просмотров4.6K
Представляем первый выпуск подкаста о технологиях, процессах, инфраструктуре и людях в IT-компаниях (нулевой выпуск можно послушать и почитать здесь). Сегодня в гостях у “CTOcast” — Кирилл Сафонов, технический директор компании RuTarget.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Каков он — рекламный бюджет стартапа?

Время на прочтение11 мин
Количество просмотров21K
на пути к идеальному рекламному бюджету

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

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

Конец февраля ознаменовался началом операции. Действовали строго по сценарию, но скоро стало понятно, что с рекламой вышла накладочка. Правда, не такая, как вы подумали. Расположитесь поудобнее, вас ожидает занимательное чтиво.
Читать дальше →
Всего голосов 48: ↑39 и ↓9+30
Комментарии65

Начало работы с смс-шлюзом Kannel

Время на прочтение3 мин
Количество просмотров45K

Предистория


Начальство поставило задачу организовать смс-рассылку для структурных подразделений организации. Компания-провайдер sms-рассылки предоставляет протокол smpp. Необходимо было организовать рассылку через smpp коротких текстовых сообщений, получать отчеты о доставке. В качестве sms-шлюза был выбран Kannel.
Статья представляет из себя «быстрый старт» по Kannel и содержит в себе базовые настройки шлюза и примеры кода, на основе которых можно написать собственную систему смс-рассылки.
Установка и конфигурирование будет рассматриваться на примере Fedora.

Ремарка


Эта статья не является клоном этой http://habrahabr.ru/post/124302 и этой http://habrahabr.ru/post/123380 статей.
Я знаком с ними и пользовался ими в процессе работы, моя и эти статьи будут иметь много общего, но хотелось как-то систематизировать всю накопленную в процессе работы информацию для дальнейшего использования в работе.
Читать дальше →
Всего голосов 8: ↑6 и ↓2+4
Комментарии5

Геокодер OSM на Java

Время на прочтение15 мин
Количество просмотров26K
Привет, дорогие читатели хабра. В этой статье поговорим

  • Про адреса и хранилища данных с нечеткой схемой
  • Про обработку геоданных на java, а именно про Java Topology Suite
  • Про стоимость «простоты» для разработчика
  • Про pure Java nosql документную бд / движок полнотекстового поиска — Elasticsearch.

Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии15

Структуры данных в картинках. HashMap

Время на прочтение6 мин
Количество просмотров1.2M
Приветствую вас, хабрачитатели!

Продолжаю попытки визуализировать структуры данных в Java. В предыдущих сериях мы уже ознакомились с ArrayList и LinkedList, сегодня же рассмотрим HashMap.



HashMap — основан на хэш-таблицах, реализует интерфейс Map (что подразумевает хранение данных в виде пар ключ/значение). Ключи и значения могут быть любых типов, в том числе и null. Данная реализация не дает гарантий относительно порядка элементов с течением времени. Разрешение коллизий осуществляется с помощью метода цепочек.

А почему бы и нет?
Всего голосов 81: ↑75 и ↓6+69
Комментарии42

CTOcast #1: Кирилл Сафонов (RuTarget)

Время на прочтение8 мин
Количество просмотров5.4K
Представляем первый выпуск подкаста о технологиях, процессах, инфраструктуре и людях в IT-компаниях (нулевой выпуск можно послушать и почитать здесь). Сегодня в гостях у “CTOcast” — Кирилл Сафонов, технический директор компании RuTarget.
Читать дальше →
Всего голосов 10: ↑8 и ↓2+6
Комментарии0

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность