[WT] [Архив]  [Поиск] Главная Управление
Ычан: [d | b / bro / gf / hr / l / m / med / mi / mu / o / ph / r / s / sci / tran / tu / tv / x | es / vg | au / tr | a / aa / abe / c / fi / jp / rm / tan / to / vn / vo]
[Назад] [Вся нить] [Последние 50 сообщений]
Ответ в нить [Последние 50 сообщений]
Имя
Animapcha image [@] [?]
Тема   ( ответ в 21641)
Сообщение flower
Файл 
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов 7Z, BZ, BZ2, GIF, GZ, JPG, MO, MP3, MP4, OGG, OGV, PDF, PNG, PSD, RAR, SVG, SWF, TXT, WEBM, XCF, ZIP размером до 5000 кБ.
  • Ныне 3050 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
155344039867.png-(777.18KB, 720×720, junior_developer_kobayashi.png)
21641
No. 21641 Закреплено watch    
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие API, ковыряете игру, или пытаетесь сделать сайт на Wordpress - если аноним что-то об этом знает, он обязательно поможет.

Пополняемая база знаний: http://pastebin.com/AGhLZppH

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

Другие тематические нити (периодически обновляется): https://pastebin.com/psy43ibG

Примеры кода лучше выкладывать в виде ссылок на http://pastebin.com или http://ideone.com
Фронтендные вещи лучше выкладывать на http://jsfiddle.net

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

Чтобы не сбивать новичков с толку, а также не разбавлять полезную информацию мусором, беспредметные споры типа "какой язык / парадигма / библиотека / етц лучше" здесь запрещены. Для подобных вещей теперь есть отдельная диспутов нить >>/dev/21353

Если здесь поселится достаточное количество программистов на одном языке / одной сферы, можно будет их выделить в отдельную нить, а в этой оставить на неё ссылку.
По мере поступления вопросов можно составлять FAQ и базу знаний.

Архив нитей:
http://410chan.org/dev/arch/res/14160.html
http://410chan.org/dev/arch/res/15681.html
http://410chan.org/dev/arch/res/17424.html
http://410chan.org/dev/arch/res/19666.html

Прошлая нить пока тонет тут: >>/dev/19666
34 сообщений пропущено. Показаны 50 последних сообщений Развернуть все изображения
No. 21821    
>>21820
То есть никаких проблем с самодельным бессрочным корневым сертификатом быть не должно. Остаётся только хранилище выписанных сертификатов, но это уже программная проблема.

Тогда ещё вопрос: Надо ли обеспечивать устаревание выписанных сертификатов?

>Не знаю, что у них за услуга.
Насколько я поняла, они решают проблему устаревания корневого сертификата, за что и просят несколько сотен баксов в месяц. Опять же, вопрос: устаревание корневого сертификата — это чисто организационное мероприятие, или есть ещё технические нюансы?
No. 21822    
155512572864.jpg-(153.22KB, 664×900, Sakuraba_Milfeulle_full_4043.jpg)
21822
https://github.com/spring-projects/spring-boot/issues/2612#issuecomment-401264199
Как разрешить эту дурацкую проблему? Лепить костыль в ServletContextListener для каждой базы?
No. 21823    
>>21822
Ну, отчасти костыль уже напилили в текущем коде драйверов (тот же PostrgreSQL), добавив метод deregister, который не только отцепит драйвер от драйвер менеджера, но и обеспечит правильное внутреннее состояние драйвера, чтобы тот мог зарегистрироваться потом снова. Соответственно, всё что тебе надо сделать - вызвать такой метод в contextDestroyed. И скорее всего так сделать будет быстрее всего, берешь драйвера которые пользуешь, и в пару строк кода отцепляешь их.

В то же время, можно поступить как авторы драйвера MySQL, и создать драйвер без внутреннего состояния, жизнью которого полностью управляет DriverManager снаружи. Для этого в MySQL создали сначала класс NonRegisteredDriver, куда вынесли код драйвера, выбросив регистрацию в менеджере за борт, а потом уже от него отэкстендили "просто" драйвер, который регистрируется в менеджере.

Если есть время, то можно сделать аналогичный код драйвера для своей базы данных. Таким образом ты сделаешь больше, чтобы потом делать меньше, и также сможешь отправить авторам этот код в виде контрибьюшена. Кстати, может уже кто-то отправил им подобный патч, и можно его позаимствовать
No. 21825    
15553506924.png-(150.40KB, 640×480, 44 - 640x480@32 [SIG455f7546fc53b7465cf9b057eb8ff2.png)
21825
Всё-таки metaspace memleak вызывал org.jboss.logging (https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging), зря я драйвера ругала, их Tomcat сам дерегистрировать умеет. Откат на Hibernate 3.6.x — никаких OOM. Чего теперь делать-то, запихать логгер в %CATALINA_HOME%\lib, вдруг поможет?

З.Ы.: Оставлю толковый гайд по поиску утечек в metaspace: https://habr.com/ru/post/222443/
No. 21830    
>>21825
>запихать логгер в %CATALINA_HOME%\lib
Таки да, и в pom.xml эксплицитно его прописать со scope = provided. Редиски редхатовские...

>>21823
Проще всего будет настроить dataSource на сервере и цеплять его из JNDI как абстрактный java.sql.DataSource. Если это не вариант, то дальше надо наделать костылей: 1) для пула соединений — закрыть все открытые соединения; 2) для драйвера, если он требует каких-то телодвижений, совершить их; 3) собственно дерегистрация — получить загрузчик классов приложения и список драйверов, дерегистрировать только те из них, что загружены приложением; 4) потупить пару секунд. И то это не везде работает. Каких-то других решений отыскать не удалось, у каждого просто есть набор таких костылей, который пихается в каждое приложение.

Остальные подходы, указанные тобой, требуют налаживания контакта с разработчиками — это не всегда завершается успехом: шапки подобные баги (memleak on redeploy) тупо закрывают с “Won't Fix”, например.
No. 21831    
Выгодно ли изучать пролог?
No. 21832    
155545903956.png-(64.27KB, 1978×726, Безымянный.png)
21832
Есть два запроса, в одном синтаксическая ошибка, другой работает. Первый - с ошибкой - написан так, как предлагает phpMyAdmin, второй - с использованием кавычек вида 'а не ` с w3school. Почему так и как мне набирать эти вот ' с клавиатуры? А то постоянно приходится держать открытой вкладку и копировать с неё.
Ну или может где-то какая-то другая ошибка?
No. 21833    
>>21832
Так, что это за кавычки понятно, по коду символа - обычный апостроф. Не понятно почему.
No. 21834    
>>21832
В общем случае обратным апострофом обозначаются имена таблиц и колонок, для строковых литералов используют ' и ".
No. 21835    
>>21834
Имена таблиц и полей интерпретатор из без кавычек понимает, а значения только закавыченные? Интересно. Ну ладно. Спасибо.
No. 21836    
155547731782.gif-(44.17KB, 700×608, 52 - 700x608@32 [SIGd0db8bf6dfe03aa5082108da00f0cc.gif)
21836
>>21834
В общем случае стандартом определены двойные кавычки ["] для идентификаторов и одинарные кавычки ['] для литералов. Обратный апостроф является специфичным для MySQL и может быть отключён в настройках. Если предполагаются миграции в будущем, крайне не рекомендуется привязываться к product specific features.

З.Ы.: https://github.com/ronsavage/SQL/blob/master/sql-99.bnf

>>21835
>Имена таблиц и полей интерпретатор из без кавычек понимает
Только если они не являются ключевыми словами самого языка, иначе надо экранировать. Литералы, в свою очередь, определены через одинарные кавычки.
No. 21837    
Охаё-.

Пишу на Octave (GNU GPL косплей Matlab'а) тулзу для пакетной обработки файлов. Файлы бывают двух типов: с прописанным в имени расширением и без. Для второго случая предусмотрен чекбокс "добавить расширение". Если он выбран, то тулза пытается определить тип файла по его сигнатуре и добавляет в конец имени соответствующее расширение. Если же опция не выбрана, то имя файла не меняется, т.е. остаётся без расширения.

Собственно, вопрос: как правильно реализовать обработку нажатия/ненажатия чекбокса? Я пока додумался до двух вариантов:

Вариант №1.
Просто добавить в главный цикл проверку на нажатый чекбокс, т.е.:
for i=1 to количествоФайлов

    if checkBox
        // чекбокс нажат
        определить_расширение(файлы(i)) // вызываем функцию определения расширения по сигнатуре
    end
    // тут выполняем необходимые операции над i-тым файлом
end

Недостаток этого подхода очевиден: проверка встроена в тело цикла. Если файлов 9000, то будет 9000 бессмысленных проверок на нажатый чекбокс. Не оптимально.

Вариант №2
Сделать две практически идентичных функции, только одна будет вызываться в случае нажатого чекбокса, а вторая — в случае снятого. Всё отличие между кодом функций будет заключаться в том, что в первом случае в цикле ещё будет строчка "определить_расширение(файлы(i))".

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

Существует ли более элегантное решение, чтобы функция была одна, но проверка осуществлялась вне тела цикла? Спасибо.
No. 21838    
>>21837
checkBox — это вызов функции или переменная? Если второе, то париться явно не стоит. Если первое, то закэшируй значение в переменной.

>Не оптимально.
Это premature optimization: выводы о том, что надо оптимизировать, делают по результатам профилирования.

>Или это нормальная практика?
Посмотри код любой числодробилки на C/C++, обрети просветление.

>Существует ли более элегантное решение
В конструкторской и проектной деятельности нет такого понятия, как «элегантность» за пределами области дизайна. Т.е. элегантным может быть внешнее оформление прибора или здания, но кишки всегда функциональны. В языках вроде Ada и Java ты можешь накорячить статическую диспетчеризацию — это приведёт к использованию дополнительной памяти и процессорного времени, — но какую проблему она будет решать?
No. 21839    
>>21838
Я благодарен тебе за то, что ты нашёл время написать ответ, но, извини, он мне кажется абсолютно бесполезным и не по существу.

Не нужно быть сверхмозгом, чтобы понять, что каждая дополнительная проверка в основном цикле будет замедлять скорость работы кода (тем более при выполнении на интерпретаторе, коим является Matlab/Octave).

В Matlab/Octave есть встроенный инструмент для бенчмарков — конструкция tic...toc. Если обернуть любой код в эти операторы, то интерпретатор замерит время его выполнения. У меня скрипт почти готов, поэтому было даже интересно провести эксперимент. Я добавил в цикл пустое сравнение, и вот результат при обработке 1000 файлов:
  • со сравнением: 6.75239 seconds
  • без: 6.16035 seconds
Казалось бы, 0.6 секунд, что такого. Но: представь, во сколько раз эти 0.6 секунд растянутся, если запустить тот же код на машине уровня 486. Или если файлов банально будет в 10 раз больше. Ни первое, ни второе мне сейчас не грозит, но нет никаких гарантий, что аналогичная проблема не всплывёт потом в каком-нибудь проекте — там, где это будет уже критично несколько лет назад пришлось писать под i8081, так что это не просто сферическая ситуация в вакууме. Поэтому хочется добавить в свой арсенал паттерн, чтобы в будущем уже на этом не спотыкаться.

> Посмотри код любой числодробилки на C/C++, обрети просветление.
Буду благодарен за конкретные ссылки.

Про элегантность: это просто общепринятый жаргон. Используется, в частности, математиками — ещё часто говорят «красивое» решение (т.к. обычно задачу можно решить несколькими способами; элегантным считается решение с наименьшим количеством шагов или каким-нибудь «трюком»). Программисты старой школы употребляют слово «хак». В моём случае «элегантное» решение должно одновременно обладать двумя свойствами: а) существовать без копипасты одного и того же куса кода; б) не влиять на скорость выполнения цикла.

> checkBox — это вызов функции или переменная?
Булева переменная. Состояние чекбокса (нажат/не нажат). Думал, это понятно из контекста.
No. 21840    
>>21837
>Вариант 2
>Тогда не теряем в быстродействии за счёт отсутствия лишних проверок в цикле. Но две (почти) идентичных функции — тоже как-то избыточно. Или это нормальная практика?

Зависит о скольки строках кода в функциях идет речь, конечно. В общем в случае когда у тебя есть функция 1, которая делает А, и функция 2 которая делает А+Б, то вызов одной заворачивают в другую. Но насколько понимаю, в твоём случае, обе функции представляют из себя цикл прохода по файлам с вызовом каких-нибудь обработчиков, и отличие второй функции - в дополнительном обработчике. Т.е. если ты хочешь повторно использовать код, тебе надо как-то устроить доставку обработчика в тело цикла. И для этого в Octave в целом есть способ, тебе надо этот обработчик передавать параметром в основную функцию, используя function handle:

https://octave.org/doc/v4.2.2/Function-Handles.html

Таким образом, твоя функция с циклом всегда должна ждать аргумент с доп. обработчиком. Но если чекбокс выставлен - ты передаешь настоящий обработчик. А если чекбокс не выставлен - ты передашь пустую функцию. Это решит задачу повторного использования кода, но нужно замерить, на сколько повлияет на быстродействие вызов пустой функции. Всё таки у тебя есть заметная разница по времени уже на 1000 итераций. Алсо, надеюсь ты замеры делаешь по Х раз и потом усредняешь
No. 21841    
>>21839
Вопрос был, напомню:
>как правильно реализовать обработку нажатия/ненажатия чекбокса?
У чекбокса два состояния — включено и выключено. Правильная обработка покрывает оба состояния, что и сделано у вас в коде.

Проблема в чём? Правильно написанная программа — это программа, которая компилируется и работает как надо, т.е. не имеет синтаксических и семантических ошибок. У вас программа компилируется? Работает как надо? Всё, выдыхайте.

>Буду благодарен за конкретные ссылки.
http://www.di-mgt.com.au/bigdigits.html например.

>>21840
>передавать параметром в основную функцию, используя function handle
Это и называется статической диспетчеризацией. Непонятно только, зачем этот огород с вызовами подпрограмм городить, если ему просто if жмёт — оно быстрее-то работать не будет.
No. 21842    
>>21836
Уровень поддержки стандарта уже product-specific. Пользователь phpmyadmin же с мускула долго не слезет.
No. 21843    
>>21842
Где те вендоры, что забивали на стандарт, сгинули в аналах истории? И кому сейчас нужен голый QueryLanguage без поддержки существующими ORM-фреймворками? Так что хочешь-не хочешь, а уровень должен быть достаточный.

>Пользователь phpmyadmin же с мускула долго не слезет.
Это уж ему решать.
No. 21845    
>>21840
Огромное спасибо за конструктивный ответ! Я интуитивно понимал, что что-то такое должно существовать, но не знал, как называется, и как это нагуглить. Могу в процедурное программирование, но как только начинаются всякие классы-указатели-конструкторы, то вступаю на неизведанную территорию.

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

> Таким образом, твоя функция с циклом всегда должна ждать аргумент с доп. обработчиком. Но если чекбокс выставлен - ты передаешь настоящий обработчик. А если чекбокс не выставлен - ты передашь пустую функцию.
Благодарю за объяснение. Попробовал написать простейшую тестовую программу по этому принципу — разобрался. Конечно, смущает бесполезный вызов пустой функции, но, возможно, интерпретатор Octave умеет как-то это распознавать и в реальности ничего не вызывает. В любом случае, будет интересно поэкспериментировать. Да, для чистоты эксперимента, разумеется, буду делать несколько замеров.

Ещё раз спасибо за ответ "в точку"!

>>21841
> Работает как надо? Всё, выдыхайте.
Всю жизнь именно таким подходом и руководствовался, но недавно решил чуть строже к себе относиться, поэтому теперь стараюсь хоть иногда критически задумываться над своими решениями "в лоб". Даже если в этом проекте в итоге не применю эту фичу, то всё равно было полезно узнать о её существовании. За термин "статическая диспетчеризация" спасибо, хотя беглое гугление показало, что её в основном обсуждают в контексте языков, на которых я вряд ли когда-либо буду писать (Java, Swift, C#, etc).
No. 21847    
>>21845
>Всю жизнь именно таким подходом и руководствовался, но недавно решил чуть строже к себе относиться, поэтому теперь стараюсь хоть иногда критически задумываться над своими решениями "в лоб".
А меня всю жизнь учили считать, в частности, в процентах. Поэтому я посчитала и обнаружила, что вы в работающей программе под среду выполнения, специализированную для математиков, боретесь за ~5 % производительности, т.е. как-то выбиваетесь из категорий студент-с-курсовой и вкатывальщик-с-пет-проектом. Если вас волнуют такие малые значения прироста производительности, было бы неплохо поделиться с тредом доходами от бизнеса за product-specific optimizations.
No. 21848    
>>21845
Обязательно сообщай о результатах, мне тоже интересно. Особенно, будет ли вызов пустой функции дороже условия.
No. 21849    
>>21837
>Не оптимально.
Ты обрабатываешь файлы. Доступ к диску - это миллисекунды. За одну миллисекунду ты таких проверок можешь сделать несколько миллионов. Более того, при каждом доступе к файлу тебя ось будет помещать в сон, пока диск работает.
>>21839
>нет никаких гарантий, что аналогичная проблема не всплывёт потом в каком-нибудь проекте
Вот когда всплывёт, тогда и будешь думать.
>>21848
Вообще, должно быть. Потому мне сложно представить вм, где вызов функции был бы легче проверки условия.
No. 21851    
Ой, сколько мой небольшой вопрос внимания привлёк. Неловко даже как-то.

>>21847
> Если вас волнуют такие малые значения прироста производительности, было бы неплохо поделиться с тредом доходами от бизнеса за product-specific optimizations.
Смешно. Я пишу исключительно для себя, в качестве хобби, попутно обучаясь чему-то. Причина, по которой я обратил внимание на такую мелочь в том, что хочу привыкнуть создавать качественный код. Надо же как-то развиваться.

>>21848
Хорошо. Но я тут подумал, что, скорее всего, реализовать этот дополнительный обработчик без входных параметров не получится (а, возможно, придётся и возвращать что-то). Т.о., на вход "пустой" функции всё равно придётся скармливать какие-то данные, пусть внутри неё они никак не будут использоваться. Поэтому, вероятнее всего, >>21849-кун окажется прав.

>>21849
> Вот когда всплывёт, тогда и будешь думать.
Так он и всплыл, я благодаря этому услышал разные точки зрения, и в следующий раз уже не буду обращаться за помощью сообщества. Это же хорошо.
No. 21857    
155577653627.png-(2.37KB, 90×50, java.png)
21857
У меня очередной глупый вопрос!

Кто-нибудь в курсе, как расставляются приоритеты для резолверов в org.springframework.web.servlet.view.ContentNegotiatingViewResolver#viewResolvers в случае, когда имеется более одного резолвера, готового отдать представление? Я сделала через свойство "order" (org.springframework.core.Ordered), но мне кажется, что это какой-то product-specific хак и гарантии его работоспособности с другими версиями фреймворка нет. В документации этот момент как-то опущен: вроде нигде не написано, что так делать нельзя, но нигде и не написано, что так делать стоит.
No. 21861    
Скоро у меня будет проверочная работа. Меня усадят за неизвестный мне компьютер и я буду выполнять задания, которые я уже выполнил. Вот они

https://anonfile.com/q478M6g4n1/contol_job_3_zip

Спасибо АИБ
No. 21863    
>>21857
Мне кажется, это всё же покрывается в мануале, в главе Chaining Resolvers:

>Spring supports more than just one view resolver. This allows you to chain resolvers and, for example, override specific views in certain circumstances. Chaining view resolvers is pretty straightforward - just add more than one resolver to your application context and, if necessary, set the order property to specify an order. Remember, the higher the order property, the later the view resolver will be positioned in the chain.

Т.е. самим зарегистрированным в ContentNegotiatingViewResolver резолверам ты точно так же выдаешь приоритет через конфигурацию
<bean id="excelViewResolver" class="org.springframework.web.servlet.view.XmlViewResolver">

  <property name="order" value="1"/>

или из кода, как сделал ты.

Также в референс-мануале по методу setViewResolvers у ContentNegotiatingViewResolver говорится, что

>Sets the view resolvers to be wrapped by this view resolver.
>If this property is not set, view resolvers will be detected automatically.

Что полностью подтверждает легитимность идеи использовать проперти order для вью резолвера.

Также я вижу, что приориетность по Ordered крайней широко используется в самом спринге: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/Ordered.html

Думаю никакому серьезному риску, используя Ordered, ты себя не подвергаешь.
No. 21864    
>>21863
>Мне кажется, это всё же покрывается в мануале, в главе Chaining Resolvers:
Ну, если пользоваться обычным для Джавы способом получения информации (т.е. JavaDocs & sources), то пробежав по цепочке Ordered -> OrderComparator -> AnnotationAwareOrderComparator -> [Find usages] -> CNVR можно обнаружить, что список viewResolvers сортируется в CNVR#initServletContext при помощи AnnotationAwareOrderComparator — т.е. (hint!) чтобы эта магия работала надо в кастомный резолвер заимплементить интерфейс Ordered, — а сам CNVR#resolveViewName просто вернёт первый попавшийся резолвер из списка резолверов для первого попавшегося MIME-типа из списка MIME-типов взятого из заголовка Accept. Вот этого в документации (по крайней мере в JavaDocs) и нет.
No. 21870    
1. Функция, которая принимает указатель на число:
void get_screen_size( int *width, int *height );

2. Функция, которая принимает указатель на строку:
enum error_status get_string_from_user( char **result );

3. Функция, которая принимает указатель на массив строк:
int split_command_line( char ***result );

4. Функция, которая принимает указатель на массив хендлов строк:
??? do_what?( char ****result );

5. Функция, которая ??? ??? ?
6. ???
No. 21871    
>>21870
Это не вопрос.
No. 21872    
Я в реальном проекте (правда на плюсах) видела, как int хранили в структуре в виде массива byte-ов и при каждом обращении тупо кастовали byte[] в int. Наверное, этому есть какое-то разумное объяснение.

>>21870
А что удивляет, что можно сделать ссылку на ссылку и ссылку на объект, аллоцированный на стеке?

type Access_String is access all String;
type Access_Access_String is access all Access_String;
... e.t.c.

No. 21873    
А вот если у нас есть, например, операционная система, и она хранит, например, список имён, импортируемых программой из определённой библиотеки, в массиве. И хранит она не строки, а хэндлы. И весь импорт программы получается массивом массивов хендлов. И тогда функция, которая их возвращает (вместе в размером первого массива) будет иметь вид
enum error_code get_imports( char *****result, int *length );

Хотя и немного притянуто за уши, конечно. А вот шесть - тут уже всё. Видимо пятизвёздочный код - это as far as one can go.
>>21872
Самое очевидное - им нужен был более удобный доступ к отдельным байтам. Структуру можно всё ещё использовать как число - она автоматически копируется, и всё такое, а чтобы вытащить отдельный байт, не нужно делать сдвиги и маски.
No. 21875    
>>21873
Ой, да вот, держи: функция, которая отрисовывает массив кадров на которых на xy(z)-плоскости надо отрисовывать строки, в каждую точку может быть передан массив хэндлов строк, по указателю.
char****(*)***

No. 21876    
>>21873
>>21875
Если вы просто хотите что-то обсудить, для этого есть Диспутов нить >>/dev/21353
No. 21877    
155635756745.png-(166.83KB, 1400×982, Clipboard01.png)
21877
Я спятила и рисую буквы!
Знаете ли вы, что:
1) в штатном шрифте Вакабы буквы “a” и “e” выше букв “c” и “o”, но ниже букв “d” и “k”;
2) штатный рисователь Вакабы не учитывает смещения в результате трансформации символов, поэтому они могут некогтролируемо выходить за границы холста и налезать друг на друга;
3) в Джаве кривой дефолтный рандом-генератор это вам не Ada с вихрем Мерсена;
4) можно изменить цвет капчи указав для captcha.pl параметр “selector” в GET-запросе, который содержит имя CSS-селектора в текущем стиле.

А вопросы вот какие:
1) насколько харамно использование ResponseEntity<E> во всём контроллере? Ну, мне так удобней просто коды ответа проставлять.
2) верно ли, что каждый микросервис должен иметь собственную базу с аккаунтами приложений-клиентов?

>>21873
Всё бы ничего, но результирующая переменная называлась width и хранила ширину символа. Всё бы ничего, но разработчик библиотеки решил пойти дальше и в том же массиве сохранял бинарные данные этого символа.
No. 21878    
Принесла вам тут краткий гайд по формату GIF с картиночками: http://home.onego.ru/~chiezo/gif.htm

>>21877
>Знаете ли вы, что:
5) в штатном gif-ассемблере Вакабы есть редко появляющийся баг, вызванный тем, что байт конца графического блока принимается за часть последнего графического субблока.
No. 21880    
Стив, поясни про JAX-WS. Мне почему-то кажется, что он немного мёртвый. Или это его нормальное состояние?
No. 21881    
Я спрошу тут, если можно.
Допустим, я с помощью симметричного шифрования хочу зашифровать огромный архив с моими данными. Это достаточно надёжно? Насколько я понимаю, всё шифруется по какому-то сложному алгоритму типа RSA и используется один пароль для зашифровки и расшифровки. Использую gpg
No. 21883    
>>21881
Вопросы, не имеющие прямого отношения к разработке ПО, лучше задавать в /s/.
> Насколько я понимаю, всё шифруется по какому-то сложному алгоритму типа RSA и используется один пароль для зашифровки и расшифровки.
Конкретно RSA используется не для симметричного шифрования. По умолчанию для симметричного шифрования gpg использует AES-128 или CAST5. Да, один пароль для шифрования и расшифровки, но для реальной безопасности в наше время он должен быть очень длинным, то есть это должна быть "парольная фраза". Я рекомендую использовать пароли с энтропией не менее 200 бит (например не менее 15 выбранных гарантированно случайным образом слов из словаря, причём вероятность выбрать любое слово должна быть одинаковой).
> Это достаточно надёжно?
Если у тебя архив больше 4 гигабайт, то не используй шифры, оперирующие 64-битными блоками (это, в частности, CAST5, 3DES, Blowfish), потому что они подвержены birthday attack при использовании одного и того же ключа для таких больших объёмов данных. Практически реализуемые атаки на остальные используемые в gpg симметричные шифры в открытой литературе не описаны. Шифры с длиной ключа 128 бит могут быть взломаны квантовыми компьютерами лет через 10. Если важна безопасность на более долгий срок, то лучше использовать шифры с длиной ключа не менее 256 бит. GnuPG сам по себе не обеспечивает plausible deniability и защиту от утечки твоего пароля через кейлогеры, электромагнитное излучение клавиатуры, звук нажатий, наводки в электрической сети и другие подобные каналы.
No. 21884    
>>21883
> Вопросы, не имеющие прямого отношения к разработке ПО, лучше задавать в /s/.
Смысл? Там сидят 3,5 человека, которые спорят в одном треде, хорош линукс или плох. Тут хотя бы знающие люди есть. Извиняйте, что ворвался в ваш уютный тред.
No. 21886    
>>21883
>квантовыми компьютерами лет через 10
Сразу после того как помрёт флеш и настанет год десктопного линукса.
No. 21910    
155742370079.png-(326.99KB, 1024×768, 461148019.png)
21910
Анекдот про математика и устойчивость стула...
Как сделать регистрацию новых пользователей и их авторизацию в приложении средствами Java EE 7 без использования сторонних фреймворков вроде Spring Security или Shiro и без привязки к конкретному серверу? Иными словами, можно ли родить универсальное plugable решение, когда приложение и его база от сервера не зависят? Я уже который день хожу вокруг да около и всё никак не пойму, как развёртывать это Security. Просто таскать с каждой фитюлькой на пару килобайт ~20 MB Spring-овских зависимостей не хочется.
No. 21916    
>>21910
Чего нашла: https://arjan-tijms.omnifaces.org/2012/11/implementing-container-authentication.html — enterprise, бессмысленный и беспощадный.
No. 21947    
Кому делать нечего помогите запилить свою имджборду на 000webhost.com. Пытался по гайдам в инете, но, не зря я тут сижу же. Если не хотите общатся тут, так и напишите, дам почту или телегу. Если кто-то заинтересуется могу описать проблему детальнее
No. 21951    
Что-то вкладочек открытых накопилось...

https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/content/en/index.html — книжечка по REST-сервисам в Java EE 7.

>>21916
Основная фича JASPIC — это отсутствие состояния, таким образом он отлично подходит для контейнеронезависимой реализации системы аутентификации REST-сервисов. Сессии, если они нужны, надо включать ручками в реализации ServerAuthModule#validateRequest: https://arjan-tijms.omnifaces.org/2013/04/whats-new-in-java-ee-7s-authentication.html

https://stackoverflow.com/a/31314790 — два подхода к реализации кастомной JASPIC-системы аутентификации. Пример от Ораклов для второго подхода: https://docs.oracle.com/cd/E19798-01/821-1752/gizeb/index.html
No. 21958    
155820386788.png-(16.32KB, 400×433, 002c809093dc00a4829d04740d53fc976cd50e8c.png)
21958
Как решается проблема коллизий в Object.hashCode () когда надо получить уникальный идентификатор объекта в пределах JVM? Одной девочке вот такое вот в голову пришло:

this.uniqueId = ((((long) System.identityHashCode (this)) & 0xFFFF_FFFFL) |
                (System.currentTimeMillis () << 32)) & 0x7FFF_FFFF_FFFF_FFFFL;

No. 21959    
>>21958
>когда надо получить уникальный идентификатор объекта в пределах JVM
Разве не так?
https://docs.oracle.com/javase/9/docs/api/java/util/UUID.html
No. 21960    
>>21959
К сожалению, он как минимум чисто теоретически может вернуть дубликат тому що UUID.randomUUID (). Ну и не является примитивным типом, что тоже радости особой при работе не добавляет.
No. 21966    
Ладно, Баг с им, с этим багом Java Core since 2005, который won't fix, не баг и вообще мы вам ничего такого не обещали.

Расскажите лучше юз-кейсы для JPA Criteria API: ну сделали типа JPQL в виде функций, а зачем? Всё-равно для любой работы с базой сложнее find, persist, merge, remove надо делать слой DAO, а там хоть plain-text-ом запросы пиши.

>>21951
JPA/SQL:
https://use-the-index-luke.com/sql/clustering/index-only-scan-covering-index — очень дешёвый поиск и очень дорогая вставка. Используется во всех realm-ах (ну, в Tomocat и TomEE точно). Пример из жизни и не очень: https://dba.stackexchange.com/a/188997 Представление составных ключей для JPA (JSR 338 §2.4): https://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Composite_Primary_Keys
No. 21971    
Всем привет и добрый вечер. Заранее извиняюсь за флуд, но больше спросить негде.
Вместе с группой решили сделать подарок преподователю алгоритмов и структур данных (сам работает лидом, увлекается тем же что и преподает). Вариантов не так много. Если книгу, то какую (Кормен есть).
Буду рад услышать любые идеи.
No. 21972    
>>21971
>Книгу
Как насчет
https://www.amazon.com/Soft-Skills-software-developers-manual/dp/1617292397
На удивление хорошие отзывы. И там можно чуть-чуть почитать прям с амазона, чтобы понять, ок или нет.
Удалить сообщение []
Пароль  
[Mod]