В продолжение моего поста "Начинающим Java программистам" публикую очередную свою шпаргалку, а именно список задач, которые я обычно даю новичкам. Опытным разработчикам они покажутся тривиальными, а только начинающим изучать Java, причём самостоятельно, надеюсь будут в самый раз. Так же если Вы используете какие-то ещё задачи для обучения, то поделитесь ими, пожалуйста.:) Так как мне, иногда, как-то не по себе в ...-цатый раз рассказывать стажёрам одну и ту же задачу — пусть даже они её слышат впервые:)
Nikolay Frolov @ngfrolov
User
Принципы партнёрства в стартапе MyClasses.org — история, манящая в Доминикану
9 min
1.6KВ этом посте я расскажу реальную историю о том как четыре человека (экспат-проказник, москвич, лимитчик да косолапый мишка) договорились о принципах партнёрства, закрепили эти договорённости простым письмом по электронной почте и, доверившись друг другу, за 9 месяцев географически-распределённой работы приблизились к своей мечте о независимости. Лично у меня эта мечта зародилась давно, но окончательно сформулировалась после прочтения «Четырёхчасовой рабочей недели» Тима Ферриса: идея о том, что надо создавать продукт, а не просто работать за зарплату, стала просто навязчивой.
Немного предыстории. Три года назад я поставил крест на своём предыдущем двухгодичном самоокупаемом, но слабо растущем проекте и начал регистрировать домены для нового: MyClasses.org — сеть локальных справочников (уровня города) о всевозможных курсах и уроках. На сайтах организуется процесс общения между школами, учителями и учениками. Этакая смесь Yellow pages + CMS + CRM + Feedback/Review + Social network. Локально-глобального масштаба.
Регистрировал домены я много, увлечённо и постоянно. Домейнерство, не в прямом смысле этого слова, — моя слабость — появилась идея и бац! — надо срочно зарегистрировать домен! Потом ажиотаж проходит, и появляется понимание что ни сил, ни времени, ни достаточных перспектив нет. Но домены остаются. Иногда их удавалось продать (3 раза по запросу, сам никогда не выставляю на продажу, лучшая сделка — $2.200, всего на $3.000 — не разбогатеешь). Но в этот раз всё было не так.
Очередная авантюра подкупала целым набором благоприятных факторов:
Немного предыстории. Три года назад я поставил крест на своём предыдущем двухгодичном самоокупаемом, но слабо растущем проекте и начал регистрировать домены для нового: MyClasses.org — сеть локальных справочников (уровня города) о всевозможных курсах и уроках. На сайтах организуется процесс общения между школами, учителями и учениками. Этакая смесь Yellow pages + CMS + CRM + Feedback/Review + Social network. Локально-глобального масштаба.
Регистрировал домены я много, увлечённо и постоянно. Домейнерство, не в прямом смысле этого слова, — моя слабость — появилась идея и бац! — надо срочно зарегистрировать домен! Потом ажиотаж проходит, и появляется понимание что ни сил, ни времени, ни достаточных перспектив нет. Но домены остаются. Иногда их удавалось продать (3 раза по запросу, сам никогда не выставляю на продажу, лучшая сделка — $2.200, всего на $3.000 — не разбогатеешь). Но в этот раз всё было не так.
Очередная авантюра подкупала целым набором благоприятных факторов:
+75
Английский для айтишника? Легко!
2 min
180KЭта тема не относится к IT напрямую, но все знают, что без нее никуда. К сожалению, далеко не у всех есть возможность изучать английский с преподавателями. Ну что ж, попробуем заняться этим дома и с максимальной отдачей!
+109
Эмулятор компьютера с linux на JavaScript
2 min
45KНикакой серверной части. Только JS: полноценный эмулятор компьютера с линуксом на борту.
bellard.org/jslinux
(внимание, только хром и FF4)
Я долго с ним игрался — это не имитация, линукс ведёт себя как настоящий линукс — компилированные программы работают, ошибки в них вызывают segmentation fault, повреждение корневой файловой системы вызывает бурю возмущения в dmesg и т.д.
dd показывает при работе с памятью более чем приличную производительность — более 40 мб/с (не забываем, что это эмулятор, и что это JS в вашем браузере!).
Я никогда не думал, что мы доживём до подобного.
… А теперь начинается оргия:
* С использованием локального хранилища мы можем организовать диски (каждый key-value соответствует одному сектору).
* С использованием web-socket мы можем создать паравиртуализированный драйвер сети с выходом на железный машрутизатор и получить нормальную сеть.
* С использованием существующих технологий (NUMA, DRBD, corosync) можно организовать вычислительный кластер из браузеров.
(Кстати, показывать консоль в этом случае не обязательно — вы запускаете виртуальную машину у клиента в бэкграунде, виртуальная машина присоединяется к кластеру, начинает считать, по её аварийному завершению — закрытию браузера — кластер автоматически переконфигурируется).
Я это пишу как хохму, но в реальности, если у вас есть линукс и есть — у вас есть все возможности для работы чего угодно. Любые сетевые приложения, любые системы синхронизации и управления.
Никто не мешает создать паравиртуализированный драйвер видео с помощью canvas, у вас есть webGL, для которого можно написать свой вариант cuda и получить довольно мощную акселерацию вычислений…
Ну и финал — запуск хрома внутри эмулируемой виртуальной машины.
Итак, эмуляция дошла до браузеров…
bellard.org/jslinux
(внимание, только хром и FF4)
Я долго с ним игрался — это не имитация, линукс ведёт себя как настоящий линукс — компилированные программы работают, ошибки в них вызывают segmentation fault, повреждение корневой файловой системы вызывает бурю возмущения в dmesg и т.д.
dd показывает при работе с памятью более чем приличную производительность — более 40 мб/с (не забываем, что это эмулятор, и что это JS в вашем браузере!).
Я никогда не думал, что мы доживём до подобного.
… А теперь начинается оргия:
* С использованием локального хранилища мы можем организовать диски (каждый key-value соответствует одному сектору).
* С использованием web-socket мы можем создать паравиртуализированный драйвер сети с выходом на железный машрутизатор и получить нормальную сеть.
* С использованием существующих технологий (NUMA, DRBD, corosync) можно организовать вычислительный кластер из браузеров.
(Кстати, показывать консоль в этом случае не обязательно — вы запускаете виртуальную машину у клиента в бэкграунде, виртуальная машина присоединяется к кластеру, начинает считать, по её аварийному завершению — закрытию браузера — кластер автоматически переконфигурируется).
Я это пишу как хохму, но в реальности, если у вас есть линукс и есть — у вас есть все возможности для работы чего угодно. Любые сетевые приложения, любые системы синхронизации и управления.
Никто не мешает создать паравиртуализированный драйвер видео с помощью canvas, у вас есть webGL, для которого можно написать свой вариант cuda и получить довольно мощную акселерацию вычислений…
Ну и финал — запуск хрома внутри эмулируемой виртуальной машины.
Итак, эмуляция дошла до браузеров…
+304
Еще раз про IP-адреса, маски подсетей и вообще
7 min
1.5MЧуточку ликбеза. Навеяно предшествующими копипастами разной чепухи на данную тему. Уж простите, носинг персонал.
IP-адрес (v4) состоит из 32-бит. Любой уважающий себя админ, да и вообще айтишник (про сетевых инженеров молчу) должен уметь, будучи разбуженным среди ночи или находясь в состоянии сильного алкогольного опьянения, правильно отвечать на вопрос «из скольки бит состоит IP-адрес». Желательно вообще-то и про IPv6 тоже: 128 бит.
Записывают IPv4-адрес, думаю, все знают, как. Четыре октета (то же, что байта, но если вы хотите блеснуть, то говорите «октет» — сразу сойдете за своего) в десятичном представлении без начальных нулей, разделенные точками: «192.168.11.10».
В заголовке IP-пакета есть поля source IP и destination IP: адреса источника (кто посылает) и назначения (кому). Как на почтовом конверте. Внутри пакетов у IP-адресов нет никаких масок. Разделителей между октетами тоже нет. Просто 32-бита на адрес назначения и еще 32 на адрес источника.
IP-адрес (v4) состоит из 32-бит. Любой уважающий себя админ, да и вообще айтишник (про сетевых инженеров молчу) должен уметь, будучи разбуженным среди ночи или находясь в состоянии сильного алкогольного опьянения, правильно отвечать на вопрос «из скольки бит состоит IP-адрес». Желательно вообще-то и про IPv6 тоже: 128 бит.
Обстоятельство первое. Всего теоретически IPv4-адресов может быть:
232 = 210*210*210*22 = 1024*1024*1024*4 ≈ 1000*1000*1000*4 = 4 млрд.
Ниже мы увидим, что довольно много из них «съедается» под всякую фигню.
Записывают IPv4-адрес, думаю, все знают, как. Четыре октета (то же, что байта, но если вы хотите блеснуть, то говорите «октет» — сразу сойдете за своего) в десятичном представлении без начальных нулей, разделенные точками: «192.168.11.10».
В заголовке IP-пакета есть поля source IP и destination IP: адреса источника (кто посылает) и назначения (кому). Как на почтовом конверте. Внутри пакетов у IP-адресов нет никаких масок. Разделителей между октетами тоже нет. Просто 32-бита на адрес назначения и еще 32 на адрес источника.
+236
Сборщик мусора в среде .NET
5 min
75KЗдравствуйте, Великие и Ужасные хабражители!
Как я недавно узнал, не так много народу знает о том, как работает сборщик мусора. Хотя я понимаю, что 99% разработчиков это не особо нужно, но я хотел бы, чтобы все, кто разрабатывают приложения на .NET, знали принцип его работы. В этой статье я постараюсь вкратце рассказать, как собственно работает сборщик мусора.
Как известно, при инициализации объекта в памяти выделяет нужное под объект место. Использование ключевого слова new приводит к добавление объекта класса в так называемую управляемую кучу, а назад возвращается ссылка на объект.
При создании приложений на C# можно смело полагать, что исполняющая среда .NET будет сама заботиться об управляющей куче без непосредственного вмешательства со стороны программиста. На самом деле "золотое правило" по управлению памятью звучит так:
Как я недавно узнал, не так много народу знает о том, как работает сборщик мусора. Хотя я понимаю, что 99% разработчиков это не особо нужно, но я хотел бы, чтобы все, кто разрабатывают приложения на .NET, знали принцип его работы. В этой статье я постараюсь вкратце рассказать, как собственно работает сборщик мусора.
Базовые сведения о времени жизни объекта
Как известно, при инициализации объекта в памяти выделяет нужное под объект место. Использование ключевого слова new приводит к добавление объекта класса в так называемую управляемую кучу, а назад возвращается ссылка на объект.
При создании приложений на C# можно смело полагать, что исполняющая среда .NET будет сама заботиться об управляющей куче без непосредственного вмешательства со стороны программиста. На самом деле "
Размещайте объект в управляющей куче с помощью ключевого слова new и забывайте об этом.
+53
Окна «неправильной» формы
6 min
12KНачало
Иногда возникает необходимость в окне «неправильной» (не прямоугольной) формы, будь то заставка(splash screen), или виджет рабочего стола.
+22
Twitter бот на C#
3 min
8.2KЗдравствуйте, уважаемые пользователи Хабрахабра.
В этой статье я хочу рассказать вам об очень простом и полезном боте для Twitter, который поможет контролировать состояние Windows-сервера (Занятое место на дисках, процент загрузки CPU, RAM).
Предисловие
Я работаю системным администратором на одном консервном заводе. Так как фирма не профильная, приходится быть администратором и программистом в одном лице.
Причина создания этого бота — быстро заканчивающееся место на жестком диске сервера из-за ежедневных резервных копий баз 1С.
Я долго размышлял о возможных вариантах подобного контроля и пришёл к выводу, что Твиттер самое удобное решение для этого. Итак, от слова к делу.
+25
Как усовершенствовать реализацию Компоновщика в .NET
11 min
2KКаждый прогер наверняка использовал паттерн «Компоновщик», а большинство из нас также сталкивалось с необходимостью реализовать его в своем проекте. И часто так получается, что каждая его реализация налагает особые требования на определяемую бизнес-логику, при этом с точки зрения работы с иерархической структурой мы хотим иметь одинаково широкий набор возможностей: одних методов Add и Remove часто недостаточно, так почему бы не добавить Contains, Clear и с десяток других? А если еще нужны специальные методы обхода поддеревьев через итераторы? И вот такую функциональность хочется иметь для различных независимых иерархий, а также не обременять себя необходимостью определять реализацию таких методов в каждом из множества элементов Composite. Ну и листовые компоненты тоже не помешало бы упростить.
Чуть ниже я предложу свой вариант решения такой проблемы, применительно к возможностям C#.
+24
История интернет-магазина, ставшего мировым монополистом за $5 000
10 min
85KTutorial
Прочитав много литературы по истории бизнеса и наблюдая рост популярности Интернет-торговли, автору этих строк хотелось реализовать свои знания на практике. Искали подходящую тему для проекта. Необходимыми условиями были:
1) Вложение не более $10 000
2) Прибыль не менее $1 000 в месяц
3) Минимальная рутина
По первым двум пунктам все понятно. А вот по третьему пункту поясню. К тому моменту я уже работал в собственной компании (сфера финансов). Это был 2009 год. Последствия кризиса еще сильно влияли на основной бизнес и работы было непочатый край. Много времени отвлекать на сторонний бизнес автор не мог.
Подходящий случай подвернулся в октябре 2009 года.
1) Вложение не более $10 000
2) Прибыль не менее $1 000 в месяц
3) Минимальная рутина
По первым двум пунктам все понятно. А вот по третьему пункту поясню. К тому моменту я уже работал в собственной компании (сфера финансов). Это был 2009 год. Последствия кризиса еще сильно влияли на основной бизнес и работы было непочатый край. Много времени отвлекать на сторонний бизнес автор не мог.
Подходящий случай подвернулся в октябре 2009 года.
+636
Принцип цикады и почему он важен для веб-дизайнеров
6 min
229KTranslation
Пару лет назад я прочитал интересные факты о жизненном цикле периодических цикад. Обычно мы не видим вокруг себя много этих насекомых, потому что бóльшую часть своей жизни они проводят под землёй и тихо сосут корни растений.
Однако, в зависимости от вида, каждые 7, 11, 13 или 17 лет периодические цикады одновременно массово вылезают на свет и превращаются в шумных летающих тварей, спариваются и вскоре умирают.
Хотя наши странные цикады весело уходят в иной мир, возникает очевидный вопрос: это просто случайность, или числа 7, 11, 13 и 17 какие-то особенные?
Однако, в зависимости от вида, каждые 7, 11, 13 или 17 лет периодические цикады одновременно массово вылезают на свет и превращаются в шумных летающих тварей, спариваются и вскоре умирают.
Хотя наши странные цикады весело уходят в иной мир, возникает очевидный вопрос: это просто случайность, или числа 7, 11, 13 и 17 какие-то особенные?
+668
Используем Unmanaged С++ код в .NET программах
7 min
7KСегодня я (как, наверное, и многие другие программисты), все больше использую в своих разработках платформу .NET и язык C#, но все еще остаются уголки где оправдано применение C++. Это создает необходимость их интеграции.
Зачем?
- В C++ код целесообразно выносить алгоритмы, критичные к производительности
- В C++ код целесообразно выносить части, связанные с защитой приложения
- Много старого кода написано на C++, и переписывать его весь — не лучшее решение
Перед хабракатом, скажу сразу, что статья расскажет и покажет один, не совсем классический способ такого взаимодействия, который может оказаться крайне полезным во многих реальных приложениях.
+15
Снова используем Unmanaged С++ код в .NET программах
7 min
4.7KОколо года назад я писал статью о том, как можно вызывать методы классов написанных на чистом Си++ из любой .NET программы не прибегая к регистрации COM библиотек, C++/CLI и т.п.
Сегодня я расскажу об еще одном оригинальном и весьма удобном подходе, а, кроме того, этот топик будет интересен всем хаброчитателям которые хотят побольше узнать о замечательном инструменте Reflection.Emit (на мой взгляд эта тема на хабре недостаточно хорошо освещена).
+52
Стоит ли быть «успешным»?
6 min
48KКак надоели эти тематические статьи о повышении результативности, мотивации и прочей чепухе. Зачем люди их пишут? Чтобы помочь тем, кто запутался в себе? Для тех, кому тяжело сосредоточиться? Вряд-ли это так.
Современная жизнь диктует нам, что все нужно делать быстро, добиваться максимальной эффективности. Непременно нужно быть очень успешным. Нужно двигаться к цели, каждый день, каждый час, ежеминутно. Оставив все лишнее, бросить все силы на достижение результата. Иначе нет смысла жить.
Современная жизнь диктует нам, что все нужно делать быстро, добиваться максимальной эффективности. Непременно нужно быть очень успешным. Нужно двигаться к цели, каждый день, каждый час, ежеминутно. Оставив все лишнее, бросить все силы на достижение результата. Иначе нет смысла жить.
+261
Виртуальная республика AlterRussia продолжает развиваться
3 min
571Интернет-площадка для разработки законов «Виртуальная республика Alter Russia» продолжает развиваться. Новая версия портала представляет новый механизм для разработки и принятия инициатив, который, теоретически, можно спроецировать на реальную модель государства.
Принципиальное отличие новой версии — отказ от поста Президента, пересмотр функций Министров и введение постов Экспертов. Раньше во главе виртуальной республики могли встать некомпетентные популисты, которые плохо разбираются в вопросах, но сумели понравиться сообществу. Получив высокие посты один раз, они сворачивали свою активность на портале, бросая сограждан на произвол судьбы.
+21
$70M для Хабра
3 min
37KПомню, как в 2000 году была мода недоуменно спрашивать, почему у нас до сих пор нет городов на луне, летающих автомобилей и армии человекоподобных роботов. Прошло десять лет и вопрос зашел глубже – куда исчезла наука? Почему в ней больше не появляется громких имен? Где новые Эйнштеин, Резерфорд, Нильс Бор и Макс Планк? Если их нет, то откуда берутся все новинки техники?
Мы в Runa Capital финансируем технологические стартапы и не понаслышке знаем, в чем тут дело. Чем дальше мы продвигаемся в исследовании технологий, тем больше усилий необходимо. Это все равно, что тащить тележку в гору с постоянно нарастающим углом подъема – внизу справится и один человек, но ближе к вершине придется работать нескольким командам специалистов, да еще и посменно – одни будут тащить тележку, вторые прокладывать рельсы, третьи конструировать тормозную систему, четвертые разрабатывать лучший маршрут и т.д.
Альберт Эйнштеин в США. Калифорния, Санта-Барбара, 18 февраля 1933.
+69
Node.js — раковая опухоль
5 min
136KTranslation
Если и есть что-то, что веб-разработчики любят, так это знать что-то, что лучше традиционного. Но традиционное является таковым по одной причине: это дерьмо работает. Что-то давно беспокоило меня во всей этой шумихе вокруг Node.js, но у меня не было времени разобраться, что именно, пока я не прочитал полный боли в жопе пост от Райана Дала, создателя Node.js. Я бы забыл его, как любое очередное нытьё какого-то осла о том, что Unix слишком сложен. Но, как полицейскому, который, жопой чуя, что что-то не так с этой семьёй в микроавтобусе, останавливает его и находит пятьдесят килограммов героина, мне показалось, что что-то не так с этой слезливой историей, и возможно, просто возможно, он понятия не имеет, что делает, и много лет программирует, никем не контролируемый.
+393
Проблема «maximum-subarray» на примере курса доллара
3 min
7KВ чём суть
В статье предлагается найти промежуток дат, за который можно было заработать больше всего на разнице в курсе доллара к рублю за последние 5 лет.
На русском языке наименование проблемы будет звучать примерно как максимальная сумма элементов подмассива в массиве. В статье приведен алгоритм вычислений, а так же результат его работы.
+10
Крепление для ноутбука на монитор (сзади)
3 min
57KВ стандартные VESA пазы которые есть почти у всех мониторов. Несложно. Надежно. Красиво.
С картинками и чертежами.
С картинками и чертежами.
+188
ООП — Организация Освобождения Палестины
5 min
16KЭта статья является изложением в письменном виде моего личного восприятия программирования и Объектно-ориентированного программирования в частности. Здесь собраны и душевные негодования, и переживания за программистов всего мира. Всё, конечно же, подкреплено исходным кодом.
+39
Information
- Rating
- Does not participate
- Date of birth
- Registered
- Activity