Pull to refresh
56
0
Андрей Мешков @aymeshkov

User

Send message

Параллельная загрузка JavaScript и CSS без блокирования парсинга страницы

Reading time5 min
Views66K
Известно, что следуя идеям старой школы, а именно, добавляя ссылки на JS и CSS в страницы, может обернуться большим временем загрузки страницы. Браузер отображает страницу по мере скачивания, но останавливается, если натыкается на тег script со ссылкой, до того момента, пока скрипт не будет загружен и выполнен. Сайты стали использовать всё большее количество скриптов, начальное отображение страницы занимает всё больше времени, к примеру, на этой странице, которую вы читаете, 13 скриптов, 7 из которых находятся в head'е. Ко всему прочему, некоторые браузеры по-прежнему придерживаются ограничений на одновременное количество загрузок с одного хоста.

Сразу предлагаю принять, что все JS файлы минимизированы, и передаются в сжатом виде.

Существует несколько решений, как то:
— поместить стили и скрипты прямо в страницу;
— установка аттрибутов async/defer тегу script;
— склеить все скрипты в один файл;
— помесить ссылки на скрипты в конец body;
— разместить все файлы на CDN/на разных хостах;
— свой вариант…

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

Началось всё, конечно, с того, что я взялся за один проект, и в какой-то момент мне показалось, что простенькая страница достаточно долго загружается, и посмотрел на график загрузки, и на результаты YSlow. Огонь на секунду потух в моих глазах, но зная, что может быть лучше, я полез искать,
как сделать лучше.
Total votes 94: ↑89 and ↓5+84
Comments49

Объекты Java

Reading time4 min
Views43K
Под впечатлениями от habrahabr.ru/blogs/java/134102.

Недавно мне приходилось немного поковыряться внутри JVM. Довольно интересный опыт. Текст в вышеупомянутом топике не совсем сходится с моим опытом, но я не считаю себя обладателем абсолютной истины. Ниже я поделюсь с читателями небольшой частью моих экспериментов, которые касаются непосредственно объектов Java.
Читать дальше →
Total votes 68: ↑51 and ↓17+34
Comments24

Сравнение потребления памяти у разных структур хранения данных

Reading time2 min
Views25K
Различные структуры в Java потребляют разное количество памяти. Поэтому для нас очень важен выбор наиболее эффективного метода хранения данных.

Какая будет разница по потреблению памяти между конструкциями `new int[1024]` и `new Integer[1024]`?

int[] ints = new int[1024];
for (int i = 0; i < ints.length; i++) ints[i] = i;

Integer[] ints = new Integer[1024];
for (int i = 0; i < ints.length; i++) ints[i] = i;

Узнать
Total votes 50: ↑41 and ↓9+32
Comments43

Размер Java объектов

Reading time5 min
Views189K
Знаете сколько в памяти занимает строка? Каких только я не слышал ответов на этот вопрос, начиная от «не знаю» до «2 байта * количество символов в строке». А сколько тогда занимает пустая строка? А знаете сколько занимает объект класса Integer? А сколько будет занимать Ваш собственный объект класса с тремя Integer полями? Забавно, но ни один мой знакомый Java программист не смог ответить на эти вопросы… Да, большинству из нас это вообще не нужно и никто в реальных java проектах не будет об этом думать. Но это, ведь, как не знать объем двигателя машины на которой Вы ездите. Вы можете быть прекрасным водителем и даже не подозревать о том, что значат цифры 2.4 или 1.6 на вашей машине. Но я уверен, что найдется мало людей, которые не знакомы со значением этих цифр. Так почему же java программисты так мало знают об этой части своего инструмента?

Integer vs int

Все мы знаем, что в java — everything is an object. Кроме, пожалуй, примитивов и ссылок на сами объекты. Давайте рассмотрим две типичных ситуации:
//первый случай
int a = 300;
//второй случай
Integer b = 301;

В этих простых строках разница просто огромна, как для JVM так и для ООП. В первом случае, все что у нас есть — это 4-х байтная переменная, которая содержит значение из стека. Во втором случае у нас есть ссылочная переменная и сам объект, на который эта переменная ссылается. Следовательно, если в первом случае мы определено знаем, что занимаемый размер равен:
sizeOf(int)

то во втором:
sizeOf(reference) + sizeOf(Integer)

Забегая вперед скажу — во втором случае количество потребляемой памяти приблизительно в 5 раз больше и зависит от JVM. А теперь давайте разберемся, почему разница настолько огромна.

Из чего же состоит объект?

Прежде чем определять объем потребляемой памяти, следует разобраться, что же JVM хранит для каждого объекта:
  • Заголовок объекта;
  • Память для примитивных типов;
  • Память для ссылочных типов;
  • Смещение/выравнивание — по сути, это несколько неиспользуемых байт, что размещаются после данных самого объекта. Это сделано для того, чтобы адрес в памяти всегда был кратным машинному слову, для ускорения чтения из памяти + уменьшения количества бит для указателя на объект + предположительно для уменьшения фрагментации памяти. Стоит также отметить, что в java размер любого объекта кратен 8 байтам!

Читать дальше →
Total votes 118: ↑107 and ↓11+96
Comments39

Мои первые шаги в SWT: Простенький блокнот со вкладками

Reading time5 min
Views22K
На Хабрахабре очень мало статей о SWT, поэтому я постараюсь исправить данное маленькое упущение.

Из данной статьи Вы узнаете:
  • Какова мотивация использовать SWT в отличии от основного конкурента — Swing
  • Основные трудности с которыми я столкнулся при разработке простенького блокнота на связке Java + SWT и Немного кода
  • Каким образом упаковать и распространить свое приложение для нескольких платформ

Если Вас заинтересовало — прошу под кат.
Читать дальше →
Total votes 60: ↑51 and ↓9+42
Comments40

Идея реализации пакета I/O в Java

Reading time6 min
Views6.4K

Совершенство достигается не тогда, когда уже нечего прибавить,
а когда уже ничего нельзя отнять.
Антуан де Сент-Экзюпери, Ветер, песок и звезды, 1939

Часто приходится проектировать и разрабатывать пакеты ввода/вывода для приложений на Java. С одной стороны есть java.io, которого бывает более чем достаточно. Однако, на практике редко удается обойтись набором стандартных классов и интерфейсов.

В статье, приводится практический пример идеи для реализации пакетов ввода/вывода на платформе Java.

Читать дальше →
Total votes 21: ↑15 and ↓6+9
Comments49

Все врут или почему в MySQL лучше не использовать партиции

Reading time8 min
Views28K
Начиная с версии 5.1 в MySQL появилась такая полезная фича как партиции. Конечно же большинство разработчиков БД сразу не побрезговали ей воспользоваться. Спустя пару лет работы я наконец пожал плоды всей ущербности реализации этой технологии специалистами MySQL AB …
но обо всем по порядку
Total votes 127: ↑123 and ↓4+119
Comments68

Использование Safe Browsing API Яндекса в Firefox

Reading time2 min
Views9K
Яндекс выпустил сборку Firefox 6.0 с со своими сервисами. Одна из новинок – в том, что эта сборка:
  • использует Safe Browsing API Яндекса, чтобы предупреждать пользователей об опасных страницах;
  • при нажатии на «Почему эта страница была заблокирована» – показывает страницу Яндекса с информацией о заражении страницы и возможностью просмотреть её сохранённую безопасную копию.
Яндекс не разработал протокол Safe Browsing API заново, а использовал открытую документацию, чтобы реализовать сервер, позволяющий ему выступать в качестве провайдера данных, доступных по этому протоколу.

Читать дальше →
Total votes 31: ↑23 and ↓8+15
Comments7

Снова используем Unmanaged С++ код в .NET программах

Reading time7 min
Views4.7K
.NET C++

Около года назад я писал статью о том, как можно вызывать методы классов написанных на чистом Си++ из любой .NET программы не прибегая к регистрации COM библиотек, C++/CLI и т.п.

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

Читать дальше →
Total votes 70: ↑61 and ↓9+52
Comments7

Пара историй про отличия Release от Debug

Reading time5 min
Views26K
Все разработчики знают, что исполнение релизной версии может отличаться от отладочной. В этой статье я расскажу пару случаев из жизни, когда такие отличия приводили к ошибочному исполнению программы. Примеры не отличаются большой сложностью, но вполне могут уберечь от наступления на грабли.

История 1



Собственно, началось все с того, что пришел баг о том что при некоторых операциях приложение вылетает. Это бывает часто. Баг не захотел воспроизводиться в Debug-версии. Это порой бывает. Поскольку в приложении часть библиотек была написано на C++, то первой мыслью было что-то вроде «где-то забыли переменную проинициализировать или что-то в этом духе». Но на деле суть бага крылась в управляемом коде, хотя без неуправляемого тоже не обошлось.
Читать дальше →
Total votes 59: ↑58 and ↓1+57
Comments27

Дизайн приложений для WP7. Metro-подход

Reading time6 min
Views42K
Если вы видели Windows Phone 7, вы уже видели Metro. Metro — это язык дизайна для приложений, взрощенный в недрах Microsoft, элементы которого уже проникают в разные продукты и, безусловно, это душа платформы WP7. Metro — это старт с нуля, ресет дизайна, переход от трудно поддерживаемого языка Windows Mobile к языку с четкими принципами и задачами.



Когда несколько лет назад команда дизайна решила попробовать начать с чистого листа, вместо того, чтобы смотреть на то, что уже есть на различных, в общем-то, однообразных платформах, она сконцентрировалась на том, что действительно вдохновляет — лучших образцах дизайна: от Josef Müller-Brockmann (швейцарский дизайнер, известный своим простым дизайном с ярким использованием типографики, формы и цвета, вдохновивший своими работами многих современных графических дизайнеров) и других пионеров International Style, дизайнерской системы Massimo Vignelli карты нью-йоркского метро и известных брендов вроде American Airlines до концептуальных работ Experimental Jetset.
Читать дальше →
Total votes 95: ↑81 and ↓14+67
Comments62

Java Logging: история кошмара

Reading time13 min
Views129K

Вступление


Тернист и извилист путь Java-платформы к правильному способу записи строчек в лог-файлы. История logging в Java довольно познавательна в плане изучения особенностей Open Source, в том числе его взаимодействия с корпорациями и единичными программистами. Я собираюсь рассказать столько, сколько возможно, об истории развития Java logging, а также о том, к чему все пришло и как жить дальше.
Вперед и с песней!
Total votes 148: ↑146 and ↓2+144
Comments89

Переход на C# и .NET Framework для Java-разработчиков

Reading time1 min
Views17K
Microsoft подготовила набор материалов для тех java-разработчиков, которые интересуются платформой .NET и языком программирования C# и хотят узнать больше.

В пакет под общим названием Moving to C# and the .NET Framework, for Java Developers входят следующие материалы:
  • сводная таблица CSharp for Java Developers;
  • видео слайд-каст CSharp for Java Developers;
  • видео демонстрация Introduction to Visual CSharp Express;
  • документ Introduction to building dotNet Mobile Applications for Java Developers;
  • документ Introduction to building dotNet Web Applications for Java Developers;
  • видео Introduction to the Common Language Runtime;
  • документ Introduction to Windows Azure for Java Developers;
  • документ Introduction to Windows Client Technologies for Java Developers;
  • документ Introduction to Windows Technologies for Building Enterprise Applications for Java Developers;
  • видео Overview of the .NET Framework;
  • документ The .NET Framework for Java Developers;
  • видео слайд-каст What is the Entity Framework for Java developers.
Загрузить пакет документов и видео-материалов по-отдельности можно на следующей странице сайта загрузок Microsoft.
Total votes 99: ↑58 and ↓41+17
Comments70

Что хотят видеть венчурные фонды в бизнес-плане стартапа

Reading time9 min
Views6.9K
Продолжаю публиковать некоторые материалы из своего блога IdeaBlog.ru, посвященного венчурным инвестициям, венчурным инвесторам и стартапам.

Небольшой анонс: на блоге в рубрике Venture Capitalist's Profile блога IdeaBlog.ru опубликована статья под названием "Профиль инвестора: венчурный фонд компании «ФИНАМ». Дмитрий Родионов", в которой, на основе интервью с руководителем проектов (венчурные инвестиции) Центра инвестиций в высокии технологии компании «Финам» Дмитрием Родионовым, раскрываются инвестиционные предпочтения венчурного фонда компании «Финам», его требования к проектам и к командам проектов, говорится по каким причинам отсеивается большинство соискателей инвестиций и т.д.


Когда стартапер задумывается о привлечении внешних инвестиций, всегда встает вопрос о подготовке бизнес-плана — в его отсутствие с инвесторами разговаривать, может, и можно, но дальше разговоров дело не пойдет. Многие считают, что бизнес-план для стартапа, особенно находящегося на pre-startup стадии развития — это фикция, что делать его не нужно, а, если и делать, то можно обойтись формальными словами. Однако такие стартаперы остаются, как правило, без инвестиций. Если, конечно, они не напали на какого-то лоха-инвестора: один из успешных российских стартаперов рассказывал мне о том, что среди бизнес-ангелов, которым он презентовал проект в рамках сотрудничества с одной из российских сетей бизнес-ангелов, были и любовницы олигархов — “настоящие блондинки” по его словам — которым их спонсоры дали денег с тем, чтобы те прикупили себе бизнес и занимались им, а не выносили бы мозг своим “папочкам” от безделья; так таким “инвесторшам”, по словам этого стартапера, важнее было, чтобы понравился сам стартапер, а не проект. Однако всем остальным инвесторам потребуется ваш бизнес-план, и изучать его они будут очень серьезно. Этот документ им нужен даже не столько для цифр окупаемости, которые вы там приводите, а для того, чтобы понять, насколько глубоко вы изучили рынок, на котором собираетесь действовать, и будет ли ваш продукт/услуга востребованы вашей целевой аудиторией, которая и должна приносить деньги стартапу. Поэтому к составлению бизнес-плана следует отнестись очень и очень серьезно. Это документ прежде всего является своеобразным вопросником для вас самих — достаточно ли вы изучили рынок, все ли продумали в своем проекте. Лично я всегда по своим новым проектам — неважно, собираюсь ли я привлекать инвестиции или нет — прежде, чем начать их реализацию, составляю бизнес-план — причем всегда с цифрами. Для себя и для лучшего понимания что я хочу, что мне предстоит сделать и смогу ли я это сделать сам либо мне придется кого-то привлекать. В 99% случаев те суммы, которые мне изначально кажутся достаточными для реализации проекта, возрастают в 2-3 раза — за счет додумывания тех мелочей, их которых, как известно, и складывается бизнес.
Читать дальше →
Total votes 26: ↑21 and ↓5+16
Comments71

Набор инструментов для построения графиков, блок-схем и диаграмм

Reading time3 min
Views173K


Есть много разных сервисов, облегчающих жизнь веб-разработчику или дизайнеру, в том числе создающих разные графики, диаграммы, блок-схемы и т.д. Ниже представлена небольшая подборка.
(Осторожно, много изображений)
Читать дальше →
Total votes 151: ↑144 and ↓7+137
Comments40

Цифровые подписи в исполняемых файлах и обход этой защиты во вредоносных программах

Reading time8 min
Views80K
image
Хабрапривет!

Ну вроде как удалось решить вопросы с кармой, но они ником образом не касаются сегодняшней темы, а лишь объясняют некоторое опоздание её выхода на свет (исходные планы были на ноябрь прошлого года).

Сегодня я предлагаю Вашему вниманию небольшой обзор по системе электронных подписей исполняемых файлов и способам обхода и фальсификации этой системы. Также будет рассмотрен в деталях один из весьма действенных способов обхода. Несмотря на то, что описываемой инфе уже несколько месяцев, знают о ней не все. Производители описываемых ниже продуктов были уведомлены об описываемом материале, так что решение этой проблемы, если они вообще считают это проблемой, на их ответственности. Потому как времени было предостаточно.
Читать дальше →
Total votes 70: ↑62 and ↓8+54
Comments46

Paginator3000 и колёсико мыши

Reading time2 min
Views2.9K
Потребовалось однажды реализовать пейджер постраничной навигации а-ля дёти.
Далеко в лес ходить я не стал, а решил найти, что же это за зверь такой раскопированный на множестве сайтов, а оказалось, что это детище karaboz. И даже есть аналог, переделанный под jQuery.

Но у каждой версии есть, как мне показалось, огромный недостаток, игнорирование колесика мыши. «Но ведь с этим было бы удобнее!» — воскликнул я и решил немного переписать, чтобы пейджер прокручивался на событие mousewheel. А также есть другие недостатки, которые я освещу под катом.
Читать дальше →
Total votes 58: ↑49 and ↓9+40
Comments59

10 выводов об эффективности кампании по привлечению трафика на сайт

Reading time2 min
Views17K
Сегодня — ровно 5 месяцев со дня старта рекламной кампании нашего интернет-молла. Кампания проходила в несколько этапов, разных и по целевым сообщениям, и по объемам рекламных вложений. Ранее мы не проводили масштабных онлайн-кампаний, и многое было вновинку, какие-то результаты нас очень удивили.

Решили поделиться своими наблюдениями в надежде, что они окажутся хабра-полезными.

1. Самые дешевые клики — на Яндексе и Google (здравствуй, капитан Очевидность). Кроме цены, контекстная реклама дает определенный порог качества – средняя длительность посещения 1-3 минуты, 3-5 просмотренных за посещение страниц. Средняя цена клика на Яндексе – 8 рублей, на Google – 5 рублей.

2. Рамблер гораздо менее эффективен по сравнению с Яндексом и Google (еще раз привет, капитан). Убедились в этом на собственном опыте. Получили примерно в 5 раз меньше посещений, чем прогнозировали. Тем не менее, средняя цена клика также не слишком высока – 9 рублей.

3. Много посещений приносит медийная реклама (баннеры и поп-андеры) на Одноклассниках и ВКонтакте, но цена этим посещениям – грош, ведь средняя длительность пребывания на сайте не превышает 30 секунд, и процент отказов около 90%. Больше не будем покупать такую рекламу. Рекомендовали работать с приложениями на ВКонтакте, но честно говоря, даже не хочется пробовать после такого первого опыта.
Еще 7 выводов
Total votes 78: ↑65 and ↓13+52
Comments70

Map/Reduce: решение реальных задач — TF-IDF

Reading time6 min
Views21K
Вчера я задал вопрос в своем ХабраБлоге — интересно ли людям узнать, что такое Hadoop с точки зрения его реального применения? Оказалось, интересно. Дело недолгое — статью я написал довольно быстро (по крайней мере, ее первую часть) — как минимум, потому, что уже давно знал, о чем собираюсь написать (потому как еще неплохо помню как я сам тыкался в поиске информации, когда начинал пользоваться Hadoop). В первой статье речь пойдет об основах — но совсем не о тех, про которые обычно рассказывают :-)

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

Что такое Hadoop?




Ну скажите, какой смысл об этом писать? Уже не раз это проговаривалось, неоднократно начинали писаться посты на тему Hadoop, HDFS и прочая. К сожалению, обычно все заканчивалось на довольно пространном введении и фразе “Продолжение следует”. Так вот: это — продолжение. Кому-то тема, затрагиваемая в этой статье может показаться совершенно тривиальной и неинтересной, однако же лиха беда начало — любые сложные задачи надо решать по частям. Это утверждение, в частности, мы и реализуем в ходе статьи. Сразу замечу, что я постараюсь избежать написания кода в рамках этой конкретной статьи — это может подождать, а понять принципы построения программ, работающих с Map/Reduce можно и “на кошках” (к тому же с текущей частотой кардинального изменения API Hadoop любой код становится obsolete примерно через месяц).

Когда я начинал разбираться с Хадупом, очень большой сложностью лично для меня стало первоначальное понимание идеологии Map/Reduce (я предпочитаю писать это словосочетание именно так, чтобы подчеркнуть, что речь идет не о продукте, а о принципе). Суть и ценность метода станет понятна в самом конце — после того, как мы решим несложную задачу.
Читать дальше →
Total votes 46: ↑38 and ↓8+30
Comments18

Веб-аналитика: анализируй это! Часть 5. Разделяй и думай

Reading time5 min
Views7.8K
Часть 1. Вступление.
Часть 2. Сбор данных.
Часть 3. Базовые метрики.
Часть 4. От статистики к аналитике

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

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

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

— Строят предположения и проверяют их: выискивают вероятные объяснения для сложившейся ситуации и пытаются повлиять на ситуацию исходя из этих предположений, наблюдая за результатом.
Читать дальше →
Total votes 38: ↑35 and ↓3+32
Comments19

Information

Rating
Does not participate
Registered
Activity