← All posts tagged Java

Vugluskr
Java прожизнь Завтра еду на JPoint. Не докладчиком, просто слушателем. Ни разу в жизни не был на конференциях по софту :) Тащемта, сам не очень понимаю почему эту захотелось посетить o_O
Vugluskr
Linux работа Java IDEA 16-ая идея почему-то взбрыкнула и не захотела по умолчанию запускаться под системным jre, вместо него работала под встроенным. Херь в том, что встроенный — говняшка openjdk. При автокомплите на Map<K, V> это говно не предлагало нормальные HashMap, TreeMap и прочие ConcurrentHashMap, оно их ваще не ставило в список, но зато активно пихало какую-то несуразицу типа HashedMap. Я тупил, не мог понять в чём дело. И тут оно пизданулось громко по sigsegv, полез смотреть лог. А там, мать честная, jre running — openjdk, все дела. Как блять так, откуда?! Посмотрел в запускалку шелловскую, а они оказывается сделали что — раньше она искала последовательно в окружении IDEA_JDK, JDK_HOME, JAVA_HOME, "java" in PATH., а вот начиная с какого-то 14* билда она теперь ищет блять вот так: IDEA_JDK, ../jre, JDK_HOME, JAVA_HOME, "java" in PATH. То есть, если IDEA_JDK не выставить, то похую че там у тебя системное — оно будет крутиться на сраном опене.
А я уж думал багрепорты слать и ваще бесноваться всяко. Но хватило только принудительно указать правильный угол. Мир пока может спать спокойно
Vugluskr
Java программирование popcorn прокино прожизнь *длядуши Не так давно я рассказывал про хуйнюшку, которая фильмы качает домой с сервака. С тех пор я всё это время с ней сношался вечерами. И вот наконец версия 0.99 готова. Что в результате имеем. Сервер — мониторит transmission на предмет скачиваний. Для каждого торрента, если тот содержит фильмы (определяем по расширению), создает запись, ломится в imdb, если находит что-то подходящее — берем название, делаем .nfo, берем постеры и баннеры. Если это сериал — то создаем структуру сезонов-эпизодов. Для фильмов картинки берутся с fanart, для сериалов — с tvdb. Если всё нашлось, то при отстуствии действий со стороны админа, через час фильма будет выставлена на скачку для клиента, если она уже докачалась в трасмишне; если не докачалась — подождем докачки, потом так же час буферного времени и вперёд. Если не нашлось (название торрента совсем хуёвое), то будем ждать админа. Админ через веб-интерфейс может поправить всю детализацию, удалить к хуям, добавить/заменить постер/фанарт и т.д.
Клиентик. Живет дома, раз в N минут ломится на сервак, в сокет. Посредством json-протокольчика они с сервером обемниваются данными — авторизация и каталог доступного для скачивания. Клиент определяет, что ему нужно скачать. Смотрит на размеры файлов, делает разбиение на потоки. У клиента есть несколько ограничителей:
— количество потоков на скачивание лимитировано
— в конфиге настраиваются так называемые caps — ограничения по дням недели и/или времени суток. Штоп оно не жрало весь наш дохленький канальчик, пока мы с женой всякие вконтактики вечером читаем.
— каждый поток скачивает не более N байт от файла.
То есть, например, если файл — 25 гиг, клиент разбивает задачу на 75 частей по 330 мб (условно) и начинает это дело сосать. Итак, после всех ограничений, клиентик определил что ему качать, можно ли качать (не забит ли пул тредов) и каким образом ему качать (медленно и печально или стремительно и борзо). После этого, он опять общается с сервером, запрашивает разрешение. Сервер выдает ключики, клиент открывает коннекты на другой порт и начинает сливать доброе добро в несколько горл. Тредики пишут в один файл асинхронно, ведется учет меток и позиций. Есть обслуживание обрывов связи, зависания рутера, отказа канала. Есть принудительное понижение "жадности", если отклик хуевый. Есть возвраты и перекачивание частей, если вдруг учет лажанул.
По окончании скачивания, берутся баннер/постер, nfo, всё это дело правильно именуется и укладывается, и в финале дергается ненаглядный попкорн, штоп он проапдейтил свою базку, на предмет новой фильмы.

Чего хотелось достичь. Во-первых, минимизировать моё человеческое участие во всём процессе. Этого я достиг полностью. Если начальный торрент называется хоть как-то более-менее правильно, то практически наверняка всё случится само собой. За это спасибо imdb-шному поиску — релевантность выдачи крайне на высоте.
Во-вторых, постеры-баннеры. NMJ встроенный в попкорн в этом плане хромает на все 4 лапы, сука. Самостоятельно постоянно промахивается и не находит картинок. А смотреть на правильные обложки/задники гораздо приятнее, чем на умолчательные картинки.
В-третьих, непрерывность процесса. Я постоянно забывал перебрасывать скачанные фильмы, апдейтить попкорн. И плюс ко всему, ставишь на закачку из дома — рутер повис или канал ебнулся и все встало раком. Раздражало пиздец. Это тоже победил.
В-четвертых, хотелось сделать клиентик "одним куском" без ебнутых зависимостей, без базы данных, без развесистых настроек. Этого достиг. Один jar, с одним конфигом из 10 строк. Можно отдавать друзьям, можно качать с другого места и т.д. Переносимость, мультиплатформенность, етц :) Java rulez.
И последнее. Ставишь сливаться большой файл. Жена детей накормила, спать уложила, села в чятиках болтать, а канал засран шопестец, она начинает ныть, мол "интернетов нету". И так каждый день. Очень хотелось сделать нормальный шедулинг. Тоже сделано.
Итого, я отличный молодец, все поставленные цели успешно отпобедил.
Vugluskr
Java Хабр прожизнь CoolerMaster: Если Java – это Ява, то Jazz...
Evengard: ...Рыба моей мечты? )
-----
Кому как нравицца, но лично я всегда говорю "ява". И в то же время, про пример — "джаз" :)
И да, python — это питон, а не пайтон. Не смотря на то, что "Monty Python" это таки "Монти Пайтон".
Вот такая я противоречивая вся (с)
PS. По моим наблюдениям — "джава" говорят только питерские интеллигентишки!
Vugluskr
Java программирование Почему-то многие недооценивают мощь, силу и красоту enum. Периодически натыкаюсь на случаи реализации развесистых интерфейсов и имплементаций для лимитированных наборов значений. Явно же можно обойтись енумом. Но как оказалось мало кто знает (и даже предполагает), что енум может имплементировать интерфейсы, иметь свои методы (включая абстрактные) и разные конструкторы. То есть, не предполагают гибкости. А она есть.
Vugluskr
Java программирование Из серии "советы моему сыну-программисту"
Сынок, вот делаешь ты синглтон. Или, прастихоспади, бин какой-нить. Или фабрику. Короче, уникальный объект. Есть у тебя в нём какие-то поля. Ну, предположим Map какой-нибудь. Или там константа. Ты ж не совсем дурак, ты ж сделал его final, да? А теперь не поленись и сделай его еще и static. Да-да, статик в синглтоне. И все делегированные методы от него — синхронизированные. И не важно, что мапу ты родил как-нибудь типа Collections.synchronizedMap(new ConcurrentHashMap<>()), поверь сейчас на слово, просто сделай. При случае посмотришь в инструкциях jvm как оно инлайнится и скажешь спасибо своему старику.
Vugluskr
Java старость Стыд и позор моим сединам. Друг тут спрашивает, типа а какого хера 1024^0 не дает мне нулевую степень, предлагает упростить до 1024?! А я-то, склеротик блин, затупил, ну думаю оператор перегружен или компилятор лажает и пытаюсь воспроизвести. Минут 10 тупил, пока не "озарило" заюзать Math.pow и посмотреть что вообще происходит. Короче, с бейсиком попутал :) Мало использую битовые операторы вообще, взгляд замыливается.
Vugluskr
Java программирование форматирование Я достаточно непривередлив в смысле форматирования кода. У меня есть свои привычки, но я вполне нормально отношусь к другим стилям форматирования. Но. Есть одна фишка, которая меня сильно раздражает. Вот например возьмём код "экономного" чувака, которому жалко пробелов:
while(p!=null){

Акей, вполне себе допускаю, что кому-то такой вырвиглаз нравится читать. И тот же чувак, блять тратит аж целую строчку, чтоб обернуть скобками однострочник:
while(p!=null){
p=(Page)p.getParent();
}

Ну сука, ну экономишь на всём — дык будь последователен, напиши вот так:
while(p!=null)p=(Page)p.getParent();

Читаешь исходники такого "экономиста" и вроде как надрочился уже, что кругом перл-стайл, а потом хуяк и какой-нибудь глупый инлайн развернут, типа:
public Page getCurrentPage(){
Page p=getDefaultPage();
return p;
}


Словом, не так раздражает само глупое форматирование, как непоследовательность его применения.
Vugluskr
Java программинг javaFX Вожусь с javafx, хочу сделать красивую аппликашку, разбираюсь в примерах от оракла. Везде по исходникам раскиданы какие-то непонятные мне действия, откомментированные одинаково: // Workaround for RT-14251
Што блять такое RT-14251?! Гугл не знает, оракл не знает. Никто блять не знает. Голову сломал уже.
Vugluskr
Java IDEA маленький бажочек нашел в идее: если сколлапсить какой-нить блок в редакторе, а затем его удалить, то автоматически коллапсится предыдущий блочок текста. То есть mps хде-то не снимает флажок коллапса предварительно. Айяйяй, джетбрейнс, нехорошоооо :)
Vugluskr
Java программирование длядуши сниппеты code.jwebhelp.ru
Вот сделал и запустил маленький проектик — сниппеты кода. Можно добавлять свои, можно рыться по чужим. Если будет кому-то полезно — велкам. Если не полезно, то просто потыкайтесь, буду признателен. Сейчас там просто для начала занесено несколько сниппетов. Можно голосовать и грабить корованы.
У меня огромная помойка исходников, периодически приходится рыться в ней в поисках фичи, которую уже когда-то делал и писать заново лень :) В 2009 году я даже для IDEA написал плагинчик на эту тему: plugins.jetbrains.com но плагинчик отсох, вроде бы потому что идеевцы сменили архитектуру, не помню. Недавно решил пошерстить эти ваши инт0рнеты на предмет готовых сервисов, нашел вот этих ребят: code-snippets.ru но у них мне не понравилось то, что я не могу добавить свои сниппеты и то, что нет тегов/меток. И оценок/рейтингов. Решил заебенить своё, ну и заебенил :)
И да, верстать и дизайнить я не умею, такшта пришлось спиздить у них дизайн с версткой. Так как там вроде бы все стандартное от бутстрэп, то я особо не страдаю (ну, чутка совсем, уж извините).
Сделано всё на java, jwebhelp, tomcat, xml-xslt, nginx
Vugluskr
Java идиоты прожизнь Индусы в линкедине продолжают жечь напалмом:
Read this code , int x = 99 , y = 100 ; System.out.println( x / y ) ; the output is zero and not 0.99 what is the reason ?

блять, действительно, почему?!
Ебанько, раздай патроны, my ass
Vugluskr
Java идиоты прожизнь Линкедин. Группа для J2EE профи (типа). Один из "профи" создает обсуждение под названием "Which framework works better for you, Spring or Hibernate?". Без шуток, спрашивает что лучше — тёплое или мягкое.
Блеать. Шли бы уже на пхп говнокодить. Ну или улицы подметать.
Vugluskr
работа Java killallhuman Когда я в хорошем настроении — я думаю, что людей, которые выходят из цикла по эксепшену нужно просто кастрировать, чтобы не размножались. А когда я в плохом настроении — мне кажется, что их нужно медленно убивать. Затем находить учителей, которые выпустили в свет этих криворуких тупых уёбищ и убивать их ещё медленнее.
Сегодня я в плохом настроении. И мне очень хочется знать, откуда эти самородки на свет лезут...