Ычан: [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]
[Назад] [Вся нить] [Первые 100 сообщений] [Последние 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 кБ.
  • Ныне 3031 unique user posts. Посмотреть каталог
  • Максимальное количество бампов нити: 500
155344039867.png-(777.18KB, 720×720, junior_developer_kobayashi.png)
21641
No. 21641    
Здесь можно получить помощь и консультацию по любому языку программирования, в любой сфере разработки. Не важно, программируете ли вы собственного робота, пишете серверную приблуду, интегрируете чужие 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
Развернуть все изображения
No. 21642    
>>21641
В процессе систематизация прошлой нити для пополнения базы знаний.
No. 21644    
>>21641
Черновик обобщенной информации из прошлой нити:

>Хочу сделать поисковик-парсер для одного довольно старого сайта
>>/dev/19688

>Нужен IDE-плагин для CC5X
>>/dev/19754
>>/dev/19764

>Является ли Python + Django хорошим стеком для начала профессиональной деятельности (2018)
>>/dev/19765
>Какие требования предъявляются к джуниорам для стека Python + Django (2018)
>>/dev/20056

>Подскажите курс по машинному обучению
>>/dev/19781
>Подскажите инструментарий для практики по машинному обучению
>>/dev/20988
>>/dev/20990

>Хочу создать простенький 3д-шутер, чтобы разобраться
>>/dev/20005
>>/dev/20007

>Какую специальность лучше выбрать в ВУЗе, чтобы стать программистом (2018)
>>/dev/20014
>>/dev/20018

>Нашли 13 Гб книг по IT-тематике
>>/dev/20146

>Хочу клиент-серверное приложение с броадкастом
>>/dev/20353

>Подскажите гайды по администрированию Windows
>>/dev/20361
>>/dev/20404

>Подскажите гайды по ASN.1
>>/dev/20415
>>/dev/20416
>>/dev/20850

>Подскажите гайды для мультиплеера на Godot
>>/dev/20465

>Чем кавычки отличаются от апострофов в C
>>/dev/20471
>>/dev/20472
>>/dev/20473

>Хочу научиться делать игры
>>/dev/20513

>Подскажите фреймворк для простого десктопного UI
>С точки зрения cовременных реалий
>>/dev/20526
>>/dev/20527
>>/dev/20534
>С точки зрений реалий прошлого
>>/dev/20535

>Подскажите как создать примитивный TCP-сервер на Python
>>/dev/20634

>Поясните применимость Server-side Events в JavaScript
>>/dev/20789

>Чем в C# поля отличаются от свойств с геттерами / сеттерами по-умолчанию
>>/dev/20832

>Cколько времени надо потратить для овладения HTML/CSS/JS
>>/dev/20830
>>/dev/20833

>Подскажите, куда лучше складировать очереди для последующей обработки
>>/dev/20973
>>/dev/20977

>Пример реализации MVP-подхода для веб-приложений
>>/dev/21083

>Подскажите JS-стек для веб-приложений
>>/dev/21136

>Подскажите базовые курсы по созданию ПО
>>/dev/21223

>Подскажите редакторы кода с SSH-терминалом для iPad
>>/dev/21397
No. 21685    
Вопрос по ant.
Что-то я туплю.
Пусть у нас имеется, допустим, свойство а:
<property name='a' value="${filename}"/>

Как мне теперь запихать в свойство b результат применения к свойству а маппера? Например, вот такого:
<globmapper from="*.foo" to="*.bar"/>

No. 21686    
>>21685
>Как мне теперь запихать в свойство b результат применения к свойству а маппера?

Завернув маппер в PathConvert, и указав выводом (property) свойство b, а входом (refid) свойство a ?
https://ant.apache.org/manual/Tasks/pathconvert.html

Пример есть прямо тут:
https://ant.apache.org/manual/Types/mapper.html


<pathconvert property="b" refid="a" targetos="unix">
  <mapper>
     <globmapper from="*.foo" to="*.bar"/>
  </mapper>
</pathconvert>

No. 21687    
>>21686
Действительно туплю. Тем более, что как выяснилось при внимательном чтении мануала, гораздо проще и правильнее применить маппер к самому таску, а не городить этот огрод.
В любом случае — спасибо!
No. 21731    
155397881850.png-(58.51KB, 1005×838, Clipboard01.png)
21731
Почему при клике на сложносочинённую кнопочку иногда не поднимается эвент? Стили при этом переключаются, т.е. событие всё-таки обрабатывается. Пикрилейтед, JS, jQuery, обработчик событий каждого модуля для простоты повешен на документ. Систему определить не удалось, в отладчике проблемы как-бы и нет. Меня это раздражать уже начинает.
No. 21733    
>>21731
А можешь код дать? А то причин может быть много и так в лоб рассуждать это безблагодатность
No. 21735    
155400673221.png-(118.77KB, 1128×879, Clipboard01.png)
21735
>>21733
А тебе код конкретно чего нужен? Это SPA недоделанное. Вот точка входа в приложение — всё, что имеет в зависимостях модель, генерит ивенты. Обработчики везде подключены стереотипно:

function onClick (ev) {
   ... // Do something useful
   return undefined;
}

$(document).on ("click", onClick);

No. 21736    
>>21731
Самый просто вариант - смотреть в дебаге куда идет, разве нет? Ну или поискать остановку ивентов по проекту.
No. 21737    
>>21736
Если бы было так просто, я бы голову не ломала; ну и не спрашивала бы. В дебаггере не удаётся воспроизвести проблему, т.е. любое событие исправно поднимается и обрабатывается. Шуршание по SO выдаёт лишь кучу людей, которые из обработчика возвращают что-то, что конвертируется в false, — мне известо, к чему это приводит и это не мой случай. Какая-то дурацкая проблема, короче, — во вьюхе с разделами кнопки сделаны одиночными div-ами, но даже там событие поднимается через раз, хотя стили переключаются исправно.
No. 21745    
>>21731
>Почему при клике на сложносочинённую кнопочку иногда не поднимается эвент?

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

Я обычно дебажу такие вещи с помощью двух обработчиков onClick, один мой, оригинальный, второй глобальный, который всегда ловит клик и выводит eventTarget. И потом смотрю, какой же eventTarget выводится в случаях, когда мой обработчик не матчится.

Ты делал что-то подобное?
No. 21747    
>>21745
>в возникшем ивенте click будет указан неправильный eventTarget
С самого начала было заложено, т.е. проверяется target на соответствие селектору и при отрицательном результате ищется его родитель, подпадающий под селектор. Т.е. код вида:

   function pm_onClickEvent (ev) {
      if (!ev.target || !ev.target.parentNode) {
         return;
      }

      var target = jQuery (ev.target);

      if (!target.hasClass ("list-element")) {
         target = target.parents (".list-element");
      }

      if (target.isEmpty ()) {
         return;
      }

      di_model.changeState (
         target.attr ("forum-id"),
         target.attr ("topic-id"));
   }

, простой и прямолинейный.

Может быть это какой-то локальный баг Presto и я зря тут панику развожу. С другой стороны, странно, что о нём никто не знает, будто никто подобных приложений ранее не писал.
No. 21752    
>>21747

В твоём обработчике есть 2 выхода.
1. Если ивент таргета нет вообще
2. Если ивент таргет не соответствует селектору, и у него нет родителей, соответствующих селектору.

В рамках (2) происходит поиск родителей. Но он происходит таким образом, что вернет тебе массив или объект-массив:

target = target.parents (".list-element");


А ты никак его не раскрываешь и передаешь его дальше своей модели как есть. Естественно, аттрибутов forum-id и topic-id у такого элемента не будет, и обработчик не сработает.

Мне кажется корень зла именно тут, ты просто неправильно обрабатываешь результат поиска родительского элемента. алсо, лучше юзать parentsUntil

А еще, пусть это не совсем относится к делу, но если судить по коду, то у тебя странная проверка таргета на пустоту. Если ты конечно не добавил её сам через .prototype и не менял код перед постингом, но зачем

target.isEmpty ()


Как бы в jQuery это делается jQuery.isEmptyObject(a), и таргет там для корректной работы надо раскрыть до нативной ноды а не завернутой jQuery-ноды, поэтому оно должно выглядеть как jQuery.isEmptyObject(target[0]) что передаст туда или нативный массив, или нативный таргет (т.к. у тебя оба завернуты в jQuery)

Сообщай, удалось ли найти проблему, или нет.
No. 21755    
>>21752
Ну, согласно документации https://api.jquery.com/attr/
>.attr( attributeName )
>Get the value of an attribute for the first element in the set of matched elements.
Далее, по https://api.jquery.com/parents/
>.parents( [selector ] )
>the elements are returned in order from the closest parent to the outer ones.
Так что, сколько бы элементов в листе не было, аттрибуты возьмутся у ближайшего к target'у. Далее, модель выполнит изменение своего состояния и исправно породит событие PropertyChange:State; вьюхи получат это событие и начнут перегружать своё содержимое. Т.е. при любых входных данных будет видимый эффект.

>алсо, лучше юзать parentsUntil
Согласна, логически так лучше. Но пока не обязательно ввиду единственности виджета, использующего такие селекторы.

>у тебя странная проверка таргета на пустоту
Она самодельная, как и, например, hashCode и base64Encode. В jQuery почему-то нет метода для проверки на пустоту списка, а писать каждый раз if (obj.length <= 0) как-то утомительно, запутывающе и просто некрасиво, твой вариант ещё хуже, посему пришлось её добавить плагином.

>что передаст туда или нативный массив, или нативный таргет
А вот и нет. Всегда это будет первый элемент списка jQuery-объекта. В JS же массивы можно делать двумя способами: создавать новый инстанс Array () — var a = []; var a = new Array (); —, или делать хэш с числами в качестве ключей — var a = {0 : 10, 1 : 20 }; с этим связан один забавный кейс и одна неразрешимая проблема. В jQuery используется как раз второй вариант.

>Сообщай, удалось ли найти проблему, или нет.
Пересела на хромую Оперу, пока всё работает. Если проблема здесь не проявится, придётся, видимо, смириться.
No. 21761    
>>21733
Да легко: https://bitbucket.org/Milfie/imgboardfrontend/ Больше не сделанного, чем сделанного.
No. 21774    
155433875992.png-(67.75KB, 583×138, Безымянный.png)
21774
Просто хочу поделиться и напомнить, что так не надо.
No. 21775    
>>21774
Что и почему?
No. 21791    
155452949893.jpg-(116.71KB, 1920×1080, 2018-07-11_Jul4001-3840x1080.jpg)
21791
>>21775
мимопроходил
Вероятно, тег инбут внутри блочного и submit как подтверждение. Ставлю на последнее 10 поникоинов.
No. 21792    
>>21791
IMHO, поведение при action="" не определено.
No. 21793    
>>21792
Таки там нужно что-то указывать, если обработчик в другом файле.
>>21775
Абзац внутри формы, почему-то заменяющий label.
No. 21794    
15545582268.jpg-(182.31KB, 1064×1020, 02 - 1064x1020@32 [SIGa21826b1aa05c835064da8a80615.jpg)
21794
Что вы имеете сказать про OpenShift от шапок: https://www.openshift.com/ ?

>>21793
Согласно стандарту HTML, правда не помню, какому именно, то ли 4, то ли 5, пустой action имеет неопределённое поведение, точнее, implementation defined behaviour, т.е. результат отправки такой формы непредсказуем в общем случае. Лиса, например, такую форму просто сбросит в исходное состояние.
Btw, это имеет мало смысла, если submit event обрабатывается внешним обработчиком; у меня, например, форма шлётся ajax-ом, ему всё-равно, какой там action в форме. Ну и сама форма при использовании JS-фреймворков имеет мало смысла, там везде <input data-link="name" /> и прочие биндинги.

>Абзац внутри формы, почему-то заменяющий label
О, Господи!.. Я с таким сталкивалась только когда надо было отображать HTML в Swing-овом JEditorPane, который умеет только HTML3.2 — там тоже есть куча странных тэгов, которые никому не нужны, но хотя бы нет поддержки CSS. Непонятно, зачем вообще сейчас лепить кучу тэгов, отображение которых полностью описывается в CSS?
No. 21795    
>>21794
Можно вообще одни div'ы с input'ами писать.
No. 21799    
155472307949.jpg-(631.81KB, 1280×1024, 33 - 1280x1024@32 [SIG3eb27cf6fc26b448f19d603c9d1f.jpg)
21799
https://www.cyren.com/blog/articles/over-one-third-of-malware-uses-https
Secure != Safe, you know?

https://www.globalsign.com/en/blog/what-is-ssl-inspection/
https://github.com/jsha/minica
Вопрос вот в чём: объясните дуре, как в пределах локалхоста стать авторитетным батей и насколько это будет затратным по CPU? Как я понимаю, для каждого сайта надо генерировать новый сертификат, но это вроде бы не быстрая операция (хотя можно сертификаты кэшировать, конечно). Или проще будет совсем не шифровать контент?
No. 21800    
>>21799
Чего ты хочешь этим добиться и каким образом?
> для каждого сайта надо генерировать новый сертификат, но это вроде бы не быстрая операция
Если генерировать использующий ECC сертификат или слабенький RSA1024, то достаточно быстрая.
No. 21802    
>>21800
SSL Inspection посредством локальной прокси. Мне не очень понятно, как сделать взаимодействие между защищаемым клиентом и проксей, а статей на эту тему мало. Прокся при CONNECT должна ответить OK и сгенерить для запрашиваемого сайта сертификат, далее притворятся, что она и есть тот самый сайт, так?
No. 21806    
>>21802
Сначала связаться с запрашиваемым сайтом, а потом уже ответить OK. Почему для твоего сценария использования не подходит прозрачный MITM? Если ты не запретишь исходящий TLS-трафик не на порт твоего HTTP-прокси, то он останется не проинспектированным.
No. 21808    
>>21806
Так я и говорю про MITM. Обе стороны общаются с проксей думая, что общаются друг с другом. Единственная проблема — надо заморочиться с локальным центром сертификации и руками устанавливать корневой сертификат в каждую дырку. У меня вопрос, в общем-то, — что надо сделать, чтобы стать валидным CA в пределах локалхоста? Функционала этой https://github.com/jsha/minica программы будет достаточно, или нужно ещё что-то сделать?
No. 21809    
>>21808
Под "CONNECT" ты имеешь в виду не HTTP-метод CONNECT?
> что надо сделать, чтобы стать валидным CA в пределах локалхоста?
Воспользоваться программой sslsniff и добавить свой корневой сертификат в доверенные.
No. 21810    
>>21809
Ты знаешь ещё какой-то CONNECT в контексте HTTP, который так пишется?

>Воспользоваться программой sslsniff и добавить свой корневой сертификат в доверенные.
>If you were, for instance, able to obtain a CA certificate somehow
Ну и где мне надыбать этот корневой сертификат для локалхоста, распотрошть програмулину на GO и сделать также, как там?
No. 21812    
>>21810
Тогда по какой причине ты хочешь прокси на уровне HTTP без поддержки других протоколов, которые могут работать поверх TLS?
> где мне надыбать этот корневой сертификат для локалхоста
Сгенерировать, например с помощью команды "openssl req". Sslsniff сама не генерирует корневой сертификат, его предоставляет пользователь.
No. 21813    
>>21812
>Сгенерировать, например с помощью команды "openssl req".
Вот так вот просто: я генерю сертификат и становлюсь локальным центром авторизации всего и вся, Яндекса, Гугла, Неба и Аллаха? Тогда какого беса люди платят им — https://www.globalsign.com/ — сотни баксов за локальные корневые сертификаты, раз их может сгенерировать штатный одмин?
No. 21814    
>>21810
>>21813
Поскольку чую, что вы уже почти распалились до степени, когда просто начнете выяснять друг с другом отношения, то напомню, что для этого есть отдельная Диспутов нить >>/dev/21353
No. 21815    
>>21814
Ты бы по теме лучше чего рассказал.
No. 21820    
>>21813
Не знаю, что у них за услуга. Для доверия самому себе печать сторонней организации не нужна. Браузеры должны игнорировать public key pinning, если цепочка доверия тянется к установленному пользователем корневому сертификату, поэтому это тоже не должно быть препятствием.
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
На удивление хорошие отзывы. И там можно чуть-чуть почитать прям с амазона, чтобы понять, ок или нет.
No. 22052    
Можно ли на C без библиотек и ассемблерных вставок вывести в линуксовую консоль текст?
No. 22055    
>>22052
Только без сторонних библиотек или же без стандартной библиотеки среды выполнения C? В первом случае
#include <stdio.h>
и
puts("text")
, во втором в общем случае нельзя, для некоторых архитектур может быть возможно выполнить системный вызов через вызов функции по определённому адресу. Для старых версий ядра в заголовочных файлах поставлялись макросы _syscall для выполнения системных вызовов без стандартных библиотек, но это было давно и не для всех архитектур.
No. 22058    
>>22055
Речь про второй вариант. Правда, я так понимаю, такое положение дел у всех языков высокого уровня?
No. 22061    
>>22058
>c
>высокий уровень
У меня для тебя плохие новости
Но вообще, у любых скриптовых это не так
No. 22064    
>>22061
>c
>низкий уровень
Для тебя у меня тоже нет хороших новостей.
No. 22065    
>>22052
>>22058
>Можно ли на C без библиотек и ассемблерных вставок вывести в линуксовую консоль текст?
>без стандартной библиотеки среды выполнения C

С ходу я вижу условно "простой" вариант это узнать.

1. Взять код функции, которая выводит текст из стандартной библиотеки.
2. Посмотреть, как организован вывод на экран там.
3. Если он сделан без ассемблера - круто, можно позаимствовать. И это отвечает на твой вопрос.
4. Если он сделан на ассемблере - то значит скорее всего без него нельзя. И это тоже отвечает на твой вопрос.
No. 22066    
>>22061
>Но вообще, у любых скриптовых это не так
У любых скриптовых и обкладка ввода-вывода большая.
Стало понимать, любому высокоуровневому языку требуется библиотека ввода-вывода для нормальной работы?
No. 22069    
>>22066
> Стало понимать, любому высокоуровневому языку требуется библиотека ввода-вывода для нормальной работы?
Смотря какое окружение и что понимать под нормальной работой.
> Можно ли на C без библиотек и ассемблерных вставок вывести в линуксовую консоль текст?
Можно сделать это из ядра или драйвера.
No. 22070    
>>22066
Компилятор любого языка и так преобразует выскоуровневый код в "ассемблерные вставки", если printf реализован в языке как оператор, это же не будет считаться библиотекой ввода-вывода? Запись в память по такому-то адресу не требует никаких библиотек, а в контроллере может быть настроен DMA, чтобы выводил любые байты в таких-то адресах на экран.
Так что о чем вопрос вообще? Наличие или отсутствие прослоек - вопрос удобства.
No. 22141    
155985448954.jpg-(167.40KB, 1284×1920, 847184-milfeulle_sakuraba_25.jpg)
22141
JavaEE is rock!!! Ooooyuuueeee! https://medium.com/@swhp/playing-with-java-ee-security-jsr-375-soteria-38e8d2b094d4

Btw, у меня семёрка и JASPIC 1.1. Основная каверза здесь состоит в том, что видимо реализованы только AuthStatus.SUCCESS и AuthStatus.SEND_CONTINUE; на остальные значения сервер порождает пустой 200 OK, а для AuthStatus.SEND_SUCCESS не регистрирует сессию. Пришлось всегда возвращать SUCCESS и делать LoginBean с preRenderView листенером, который проверяет результат процедуры аутентификации и делает редирект.

Поскольку мне надо сделать несколько видов аутентификации в одном приложении, пришлось в SAM-е делать auth procedure builder на enum-ах и конфигурялку, в которой описывается, какой метод для каких ресурсов применять. Как всё это тестировать не имею ни малейшего понятия, лол.

>>22052
В Си не предусмотрен интерфейсинг, так что нет. В Аде можно дёргать произвольные системные вызовы предварительно описав их профили в спецификации ну и слинковав с бинарником с реализацией, btw получишь все прелести несовместимости языковых абстракций, что заставит в итоге писать обёртку наполненную доверху Ada.Unchecked_Conversion и долго и нудно её тестировать на предмет UB потому что, там где Си, там UB inb4: диды сорок лет с этим жили и ты живи, не выёбуйся. Хуже того, в Си не стандартизирована процедура передачи управления подпрограмме в смысле нет стандартного способа передачи параметров и возврата результата, значит таких спецификаций надо будет несколько, иначе о кросскомпиляции можешь забыть ну или таскать всё своё с собой, включая исполнителя, по рабоче-крестьянски — виртуальную машину.

>>22066
Любой язык программирования — это абстракция. Мы сначала описываем типы данных, которые будут хранить видимое состояние, потом действия с этими данными, потом семантику действий — т.е. контракты на изменение видимого состояния. Потом сидим и ломаем голову, как реализовать полученный набор спецификаций в реальности а это уже проблема инженеров таких инженеров в мире наберётся штук тридцать-сорок.

Ввод-вывод — это тоже абстракция. Кому-то надо писать в командной строке «Привет, Мир!», кому-то надо писать логи в файл на лог-сервере, кому-то надо гонять объекты через сеть. Стандартный ввод-вывод — это абстракция над абстракцией, такое себе гипер-обобщение способов передачи данных.

Даже int21h — это абстракция.

Чтобы абстракция начала работать, требуется её реализация.

>>22070
Компилятор работает с семантикой, т.е. с контрактами на изменение видимого состояния, которые мы выше придумали и записали в спецификации языка. Как будет реализован контракт — это проблема инженеров: если им проще дёргать printf из libc, значит так тому и быть; если им проще if-then-else сделать коллбэками на том же самом языке, который они компилируют, (такой процесс преобразования одних языковых конструкций в другие называется итеративная компиляция) — значит так и будет. По итогу твой printf оказывается завязан на огромную инфраструктуру и без неё полезен так же, как может быть полезен смеситель без водопровода.
No. 22147    
http://balusc.omnifaces.org/2010/06/benefits-and-pitfalls-of-viewscoped.html#ReallySimpleCRUDNowWithoutDataModel Что-то я очень медленно въезжаю в этот JSF. С одной стороны есть куча туториалов, с другой Балус их все обозвал нехорошими словами. Видимо надо для одного ресурса @ViewScoped контроллер совместить с темплейтами https://www.mkyong.com/jsf2/jsf-2-templating-with-facelets-example/ и сверху накатить библиотеку ресурсов https://www.mkyong.com/jsf2/resources-library-in-jsf-2-0/ тогда оно заработает. Только вот в контроллере придётся, похоже, описывать конечный автомат, иначе будет неясно, какой шаблон когда грузить.
No. 22150    
155989424610.png-(13.85KB, 738×281, вапвапрвапва.png)
22150
Есть вордпресс, на вордпрессе есть редукс, в редуксе есть типография, а в типографии нет выбора шрифта. Можно ли его туда вернуть?
No. 22170    
>>22150
Надо копать глубже, но я подозреваю что какие-то проблемы с данными. Включено использование Google Fonts?
No. 22172    
>>22170
А зачем нужны гуглошрифты, если сами шрифты у меня тут лежат?
No. 22174    
>>22147
https://stackoverflow.com/a/8503788
Оказывается, шаблоны работают по принципу конкретизации абстракций, т.е. надо написать абстрактный шаблон-лайаут, потом каждое представление от него наследовать и переопределять блоки <ui:insert>; а потом делать композицию при поддержке контроллера

<ui:composition>
   <ui:include src="#{controllerBean.activeView}" />
</ui:composition>

, тогда URL ресурса меняться не будет и оно будет как @ViewScoped работать. А я по привычке пытаюсь в шаблон параметры запихать, вот дура-то...

Основная проблема JSF — он не умеет генерировать динамические ресурсы вида /app/user/{id}, может лишь /app/user.xhtml?id={id}, однако при postback-е теряет часть "?id={id}". Но вы можете переопределить ViewHandler.getActionURL (): https://stackoverflow.com/questions/10352641/handling-view-parameters-in-jsf-after-post
No. 22181    
>>22172
Дело не в том нужны они вообще или нет, дело в том как формируется в соответствующем метабоксе дропдаун селект меню со списком шрифтов.

Насколько я помню, там список условий разных, включая использование Google Fonts, кастомных шрифтов, а также просто дефолтного списка «обычных» шрифтов. Очевидно, что в твоем случае оно идет по какой-то из веток условий и обламывается (вероятно) из-за проблем с данными.

Вопрос почему это происходит и как именно. Обычно, подобное склонно случаться когда включены Google Fonts, но их список (который должен выкачиваться по сети и сохранятся в БД ради кеширования) «сломался» в БД. Поэтому, для начала, попробуй включить/выключить Google Fonts и посмотри поменялось ли что-то.
No. 22200    
Друзья, помогите пожалуйста найти исходники функционала gitignore гита. Конкретно конечно интересует как обыгрывается случай double asterisk (**), ну, и в целом.
No. 22204    
>>22200
Насколько я знаю, как такового "исходника" .gitignore нет.
Игнорируемыми по .gitignore файлами рулит untracked_cache в dir.c лучше сначала почитай хедер, dir.h, когда git вычитывает директорию, он заполняет этот кэш, базируясь на 3 типах игноров - из командной строки, из .gitignore, и из подкапотных гитовых игноров. Соответственно, список файлов полученных из директории затем фильтруется по наличию их в этом кеше. Инвалидация кэша случается в нескольких случаях, например по смене SHA-1 подписи .gitignore (что случится при редактировании этого файла)

https://github.com/git/git/blob/master/dir.h
https://github.com/git/git/blob/master/dir.c

Структурка кэша:
https://github.com/git/git/blob/b697d92f56511e804b8ba20ccbe7bdc85dc66810/dir.h#L85
https://github.com/git/git/blob/b697d92f56511e804b8ba20ccbe7bdc85dc66810/dir.h#L127

>Конкретно конечно интересует как обыгрывается случай double asterisk, ну, и в целом.
Сам матчинг происходит в 2х местах, чуть-чуть в dir.c, где отбрасываются явные не-матчи, и в wildmatch.c, где собственно проверяют, матчится ли строка на паттерн:
https://github.com/git/git/blob/master/wildmatch.c

Как видим, здесь в коде в том числе явно идёт обработка single и double-asterisk
Надеюсь, теперь у тебя появилась точка "зацепа" в исходниках гита.
No. 22205    
156028020238.jpg-(92.46KB, 620×852, 43 - 620x852@32 [SIGf523289ef59e6a531513c87d165f40.jpg)
22205
>>22174
Блеск и нищета JSF 2:
Надо проводить начальную инициализацию controllerBean.activeView в зависимости от наличия в реквесте параметра “id” и его валидности.

<ui:composition> выполняется во время построения (build-time) дерева компонентов.

<f:metadata> и <f:viewParam> c <f:event> выполняются во время рендеринга (render-time) дерева компонентов.

<f:viewAction> появился только в JSF 2.2.

О, есть @PostConstruct

   @PostConstruct
   public void init () {
      clientId = FacesContext
         .getCurrentInstance ()
         .getExternalContext ()
         .getRequestParameterMap ()
         .get ("id");

      if (clientId == null || clientId.isEmpty ()) {
         view = View.LIST_CLIENTS;
      }
      else if (isClientId (clientId)) {
         view = View.VIEW_CLIENT;
      }
      else {
         view = View.ERROR_CLIENT_NOT_FOUND;
      }
   }


Некоторые действия приводят к редиректам внутри одного и того же модуля, т.е. в пределах одного контроллера, и надо передавать параметры при редиректах чтобы обеспечить bookmarkability, однако в JSF это делается косвенно через внутренний параметр "includeViewParams=true". Можно добавить

   <f:metadata>
      <f:viewParam name="id" value="#{controllerBean.clientId}" />
   </f:metadata>

в шаблон представления, но это получается дублирование функциональности, размазанное между шаблоном и контроллером.

Что посоветуете?

>>22200
Двойной астериск в Ant-е означает «любой файл, включая подпапки». Отсюда и пошло.
No. 22206    
>>22181
Ну что ж, я расставил везде 'google' => false, но ничего не поменялось. Нужно будет таки регистрироваться в гугле для получения его ключа?
No. 22208    
>>22204
Спасибо огромное преогромное!
No. 22215    
>>22206
Ну раз установка эта ни на что не повлияла, то остается старый и проверенный способ дебага - расставлять вызовы var_dump(); с передачей туда переменной и убивать дальнейший вывод с помощью die; Просто с целью понять как у тебя формируется список доступных шрифтов и на каком этапе он ломается.

Насколько я могу понять, все дело в типе поля typography из Redux'а, а значит ныряем в inc/fields/typography/field_typography.php и скролим в сторону ~180 строки, где внутри метода render должно выводиться субполе для font-family. Попробуй дампать такие вещи как $this->value['font-options'] и прочие кошерные места, где должны храниться списки доступных шрифтов. Спойлер: там как минимум второй вариант вывода специально для гугла. Копать надо явно туда.
No. 22224    
156049397038.png-(104.51KB, 1070×868, Clipboard01.png)
22224
>>22205
В общем, я ничего более путного не придумала, чем в PostConstruct-е получать clientId, выдёргивать объект с этим id и на основании полученных данных решать, чего показывать; а для <f:viewParam> в контроллере сделать костыль в виде пустого setClietId и делегирующего getClientId { return (client == null ? null : client.getId ()); }. При таком подходе хотя бы: а) отпадает необходимость в дополнительном поле у контроллера; б) если передавать объекты между редиректами молнией, можно в PostConstruct-е сверять id-шники и кидать исключение.

>>22174
>Но вы можете переопределить ViewHandler.getActionURL ()
Пикрилейтед. Захотелось авторов стукнуть сковородкой за такие неочевидные умолчания .
No. 22245    
var cookies = [];

document.cookie.split('; ').forEach(function(i) {
    var t = i.split('=');
    cookies[t[0]] = t[1];
});

Можно ли это записать более красивым образом?
No. 22250    
>>22245
Предположу, что ты вычитываешь куки в словарик, чтобы иметь возможность взять куки по имени. Я не уверен насчет "красивее", но в целом брать куки по имени рекомендуют с помощью регекса (как ни странно) и кода в этом случае будет меньше: https://stackoverflow.com/a/25490531
No. 22252    
156128733649.jpg-(329.67KB, 1024×768, 48 - 1024x768@32 [SIG5d94473cf400307f2f0d97389c272.jpg)
22252
https://ru.wikipedia.org/wiki/Enterprise_JavaBeans — на русской вики, внезапно, лежит хороший пример generic сервиса.

>>22205
http://jdevelopment.nl/internationalization-jsf-utf8-encoded-properties-files/ — интернационализация в JSF. Тут всё элементарно, единственное замечу, что загрузчик пакетов лучше сделать абстрактным и наследоваться от него.

>>22245
Критерии для «красиво» существуют лишь в голове у дизайнера и заказчика. Область проектной деятельности их никак не определяет. Так что посоветую перестать заморачиваться ответами на риторические вопросы, обратиться к объективной реальности и ответить на следующие вопросы:
1. Является ли твой велосипед типовым методом решения данной задачи?
2. Соответствует ли твой велосипед действующим нормативным документам?
3. Имеет ли твой велосипед средства проверки на соответствие действующим нормативным документам?

>>22250
Осталось дождаться того героя, кто напишет тесты на соответствие спецификации, и вуаля!.. у нас родилась кривая библиотека, написанная свалившим в закат сотрудником. Ну или использовать готовое решение, вроде https://ourcodeworld.com/articles/read/647/top-5-best-javascript-libraries-for-cookies-manipulation
No. 22254    
>>22250
Ага, ага, и всякий раз, чтобы просто проверить, есть у тебя там кука или нет, ты этот регексп заново вызываешь. Офигеть…
No. 22255    
>>22245
На самом деле вопрос должен был звучать: можно ли в подобной конструкции обойтись без временной переменной?
Хотелось бы написать что-то вроде:
var my_map = my_list.?????(function(i){return i.split(separator)});

No. 22258    
>>22255
Да, например используя .reduce()
https://www.w3schools.com/jsref/jsref_reduce.asp


const cookies = document.cookie.split('; ').reduce((o, cookiePair) => {
   var kv = cookiePair.split('=');
   return Object.assign(o, {[kv[0]]: kv[1]});
}, {});


Подробнее объяснено тут: https://stackoverflow.com/a/42974762
No. 22275    
156161757328.png-(223.01KB, 394×426, 70 - 394x426@32 [SIG8ced33cb7ccfef7b1b517c0e79bb7d.png)
22275
https://stackoverflow.com/questions/10740367/jax-ws-client-basic-authentication — баже, какое же го#но этот ваш Спрынг. Напиши ему километр костылей (костыли для костыля), оно само не может... JAX-WS клиент из коробки это умеет, а костыль над ним не умеет.

Ну и как мне теперь заставить его брать wsdl с сервиса, требующего авторизации?

Ещё они и форум свой грохнули; теперь вопросы, выходящие за рамки написания очередного helloWorld-а, например по интеграции с EE-серверами (в частности, по проблемам с JTA — оно на TomEE 7 стартует со второго раза и рандомно падает в кору, я хз почему) ведут на форум Апачей, где советуют выкинуть Spring нахер и не мучиться.
No. 22276    
156163951313.png-(17.31KB, 749×272, Безымянный.png)
22276
Новичок в вордпрессе снова на связи и снова с проблемой.
Ситуация следующая. На ванильном JS написан аякс-запрос для получения новых постовсм. рис1. В теле запроса передаётся оффсет, с какого поста передавать. При этом в вордпрессе $_POST остаётся пуст, но сам обработчик срабатывает и посты возвращаются просто без отступа, сразу с первого. Если передавать гетом, но всё нормально. Вопрос: где может быть проблема и как её исправить?
No. 22278    
>>22276
Content-type не тот. Попробуй application/json.
No. 22279    
>>22276
А ты уверен, что проблема вообще в запросе? Но вообще открой в браузере девтулзы, раздел запросов и посмотри что на самом деле передается в запросе
No. 22281    
>>22278
Это фигня, просто тоже была мысль, что дело в заголовках, вот и проставлял руками разные.
>>22279
В заголовках запроса и у лисы, и у хрома длина контента 1, собственно, то, что я и передаю - одно число.
No. 22282    
>>22281
>В заголовках запроса и у лисы, и у хрома длина контента 1, собственно, то, что я и передаю - одно число.

Это указывает на то, что тело запроса неправильное, т.к. JSON-формат предполагает, что в качестве тела запроса ты передаешь, например, объект, в твоём случае что-то типа:

{
  "offset": 1
}

что никак не может иметь длину 1.

Подробнее про параметры:
https://developer.wordpress.org/rest-api/reference/posts/#list-posts
No. 22283    
>>22282
Ну что ж, я использовал JSON.stringify на объекте из твоего поста и послал результат. Длина контента 12.
No. 22284    
>>22283
Что интересно, начали выводиться другие посты, какждый одни и те же впрочем. А длина контента осталась равной 15ти символам, даже когда я задал оффсет трёхзначным числом.
No. 22285    
>>22284
А если оперировать параметрами page и per_page, например:

{
  "per_page": 10,
  "page": 2
}

Тоже будет выводиться одни и те же посты, даже если менять номер страницы?
No. 22286    
>>22285
Всё ещё 15 символов, даже если добавлять новые элементы. Я в тупике.
No. 22287    
>>22286
Ой, нет, извиняюсь, длина контента растёт, просто я открыл посмотреть как я там раньше другой файл и случайно начал туда писать. Но пост всё ещё пуст.
No. 22288    
Господа, а зачем вы считаете символы и смотрите заголовки запросов? Может стоить посмотреть на тело запроса? Как тут уже сказали, далеко не факт, что у тебя уходит запрос корректно вообще. По разным причинам это может быть, тело запроса не то, заголовки не те, что угодно. Но, давай для начала определимся с парой вещей: ты хочешь использовать REST API встроенный в WP? Или ты руками определил AJAX коллбэки на бэк-энде сам и пытаешься работать с ними? В общем, можешь сказать какой у тебя URL запроса примерно? admin-ajax.php или /wp-json/bla-bla-bla?
No. 22289    
156174149334.jpg-(410.61KB, 1024×768, 21 - 1024x768@32 [SIG44c48524d75240a098548867923e0.jpg)
22289
>>22275
>Ну и как мне теперь заставить его брать wsdl с сервиса, требующего авторизации?
Походу никак: конструкцией костыля, решающего проблемы 2003-го года, это не предусмотрено. Но у нас есть wsimport -clientjar и ant unzip... первым пакуем клиентскую библиотечку — в ней есть все необходимые описания, — вторым распаковываем библиотечку в дерево исходников; костылю указываем брать WSDL из класспаза.

>>22276
А ты вообще POST-запрос правильно конструируешь? ЁМНИП, его кодировать надо. curl-ом тот же запрос нормально отрабатывает?
No. 22290    
>>22288
>руками определил AJAX коллбэки на бэк-энде сам и пытаешься работать с ними
>admin-ajax.php
Всё так. Надо слать куда-то ещё каким-то другим способом?

>>22289
>А ты вообще POST-запрос правильно конструируешь? ЁМНИП, его кодировать надо.
Возможно, неправильно. Как кодировать?
No. 22291    
156177024046.jpg-(303.74KB, 1024×768, 14 - 1024x768@32 [SIGe90288d77b4233128534a18c2a308.jpg)
22291
>>22290
https://learn.javascript.ru/xhr-forms
Я очень плохо помню ПоХаПе, но вроде бы в $_POST распихиваются только параметры POST-запроса, переданные в первых двух кодировках, т.е. application/x-www-form-urlencoded и multipart/form-data. О том, что туда ещё содержимое JSON должно запихиваться, я первый раз слышу.
No. 22292    
>>22291
Ну про эти кодировки я знаю, просто я же не форму отправляю.
No. 22293    
>// Отсылаем объект в формате JSON и с Content-Type application/json
>// Сервер должен уметь такой Content-Type принимать и раскодировать
xhr.send(json);
Может проблема именно в том, что сервер не принимает jsonиз-за каких-то настроек?
No. 22294    
156180497247.jpg-(168.30KB, 1024×768, 47 - 1024x768@32 [SIGb73ec1c2f99f81ed8dd9c8d34e59b.jpg)
22294
>>22292
Потому и $_POST у тебя пустой, логично же.
Или одним из двух стандартных способов, или свой фильтр, который десериализацию JSON-а.

>>22293
JSON не входит в стандарт HTTP, посему ни один сервер ваши самоделки поддерживать не обязан. М.б. только в самом WP есть какая-то инфраструктура для этого.
No. 22295    
>>22294
Так джейсон по сути обычная строка, просто сдобренная огромным количеством кавычек. Чё б обычной строке не передаваться через http?
No. 22296    
156181038679.jpg-(169.64KB, 722×1024, mao1Ugp-T_s.jpg)
22296
>>22294
Короче, оно заработало и заработало правильно, хотя я до конца так и не понимаю, почему раньше не хотело. Большое спасибо за помощь, вот тебе вагон няшек. Так же я буду очень рад, если ты углубишься в объяснения этого всего.
Кстати, про cURL, лучше её использовать, чем плагины?
No. 22297    
>>22296
Забыл написать, что воспользовался formdata, вдруг кому-то нужно будет.
No. 22298    
156181198482.jpg-(364.74KB, 1024×768, 07 - 1024x768@32 [SIG118ced1ee167f07d7b4948f433fa9.jpg)
22298
>>22295
Она и передаётся, только парсить её никто не обязан. Выковыривай её из тела запроса и разбирай/десериализуй во что-то более осмысленное, чем просто последовательность октетов, сам. REST-контроллеры, что в Спрынге, что реализации JAX-RS по-сути этим (но не только этим) и занимаются. Ну или копай в сторону REST API WP, возможно у них есть решение для REST-контроллера, пригодное для переиспользования.

>>22296
Стандарт определяет только два метода передачи данных POST-ом: application/x-www-form-urlencoded и multipart/form-data Когда апп-сервер видит один из этих типов в Content-Type, он разбирает тело запроса и запихивает результаты в карту, parameterMap в Servlet-ах, $_POST в PHP. Если Content-Type какой-то другой, то апп-сервер с телом запроса не делает ничего.
>Кстати, про cURL, лучше её использовать, чем плагины?
Не знаю, что там за плугины, я пользую консольную, то что они с сайта скачать предлагают.
No. 22299    
>>22290
Просто уточнял, т.к. ты начал рассуждать про параметры per_page, page, offset и т.д. и я почему-то подумал, что ты полез в дебри стандартного REST API встроенного в WP, а это все-таки совсем другая штука и не имеет отношения к admin-ajax.php запросам.

Т.е. в случае admin-ajax.php ты обычно сам пишешь функцию-коллбэк (допустим в functions.php или в своем плагине), которая цепляется за нужный экшен (через add_action) для того чтобы отрабатывать запросы, которые прилетают с определенным значением параметра action.

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

Но тут такой еще момент - а зачем тебе вообще там JSON? Обычно при работе с admin-ajax.php по моему опыту все отправляют данные как обычной формой, без предварительной кодировки в JSON. JSON в качестве ответа коллбэка это неплохая штука, чтобы раскодировать потом внутри JS (если есть такая необходимость).

Для тупой подгрузки постов, если у тебя нет там ничего кастомного, ты можешь вообще забить на admin-ajax.php и воспользоваться тем самым REST API: https://developer.wordpress.org/rest-api/ например вот тестовый пример http://demo.wp-api.org/wp-json/wp/v2/posts - тупо делаешь запросы на такой адрес (для своего сайта, конечно же) и получаешь JSON с постами. Можно передавать в запросе параметры вроде offset, per_page, page и прочие штуки вроде категорий, исключений и прочего.
No. 22300    
156186573414.jpg-(86.59KB, 502×484, 6fe250d2aefc7e4bd59caf165b26e326.jpg)
22300
>>22299
Думаю уже ясно, что камень предкновения был банальным непониманием в какую сторону и в каком формате слать данные.
>REST API
Кот бы знал что оно существует и прдназначено для возврата постов. Очень трудно легко пропустить какую-то базовую, основную вещь, разбираясь самостоятельно.
No. 22303    
156197824850.jpg-(505.08KB, 1024×768, 31 - 1024x768@32 [SIG4df705b40e25f1a6b2c15053e7fde.jpg)
22303
За что я люблю Tomcat: если приложение упало во время деплоя на стадии инициализации веб-контекста, то половина приложения остаётся висеть в памяти; последующий редеплой пофикшенного приложения может происходить нормально, но в процессе работы рождаются просто феерические глюки —
>java.lang.NoClassDefFoundError: java/sql/ResultSetMetaData
У красных шапок гораздо лучше это сделано... ну хотя бы не так часто падает, хотя если упадет, то уже конкретно.

http://incepttechnologies.blogspot.com/p/jsf.html — можно сделать тетрис на бэкенде. Btw, тетрис на JSF-е у нас уже есть: http://www.angularfaces.net/tetris/index.jsf — но он халтурный.

>>22275
>оно на TomEE 7 стартует со второго раза и рандомно падает в кору
Пользователи jBoss-а оказались более любопытными: идёт конфликт между persistence-слоями сервера и спрингового приложения. Единственное полноценное решение — заменить гибернейты с хикарипулами на javaee-api со scope: provided и начать писать портабельный EE-код. Spring-у, однако, всё ещё нужен TransactionManager, но его адрес в JNDI у каждого сервера свой и приложение получается непортабельным. Решение, опять же: сервисный слой сделать на EJB и оставить от Spring-а только Spring MVC — ЁМНИП, оно унутре себя никаких вендор-локов не содержит, но это не точно.
No. 22305    
Сколько времени пишу на perl, а напоролся на эту подставу впервые. Вот это вот сообщит, что $l неопределенна:
print $l while my $l = foo;

При этом форма с блоком работает нормально:
while(my $l = foo) { print $l }

Они реально издеваются. И нет, использовать $_ вовсе не всегда удобно.
No. 22309    
156207300018.jpg-(327.31KB, 1024×768, 09 - 1024x768@32 [SIGc50805ad7212194dff9b1718ed231.jpg)
22309
Сегодня вопрос будет по теме, в которой я мало что смыслю.
Если я генерю хэши паролей PBKDF2 через javax.crypto.SecretKeyFactory, а потом делаю токен вида HEADER + SALT + HASH, то надо ли мне ещё что-то делать с SALT + HASH, перемешать их, например, или это уже не имеет смысла?

>>22305
А ты use 'strict'; убери и он резво будет печатать тебе пустую строку. Ещё можешь заменить my на our, поскольку my объявляет переменную в текущем scope, однако у условия while он свой собственный:

my $i = 0;
sub foo () { ++$i; };
print qq($i, $l\n) while (my $l = foo, --$l, 1);

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

З.Ы.: Циклы у тебя не модные. Надо по-хакерски писать, чтоб все офигели и никто не догадался:

{ last unless my $l = foo; print qq($l\n); redo; }


>Они реально издеваются.
Ларри игрался с языками. Стихотворение “Black Pearl” — это была исполняемая программа, после они всерьёз задумались о readability.
No. 22311    
>>22309
>однако у условия while он свой собственный
Понятно, что причина в чем-то подобном. Вопрос в том, есть ли хоть какой-то осмысленный резон у решения разработчиков языка не включать в этот scope строку в случае посфиксной формы цикла. Или «оно само так получилось»?
No. 22313    
156208740041.jpg-(46.36KB, 1038×576, yochi-03-1038x576.jpg)
22313
>>22311
Насколько я помню, в Perl-е, так же как и в C, однопроходный компилятор, т.е. он не дерево строит, а сразу на месте код генерит. Поэтому не может найти метод/переменную, если сперва к ним идёт обращение, а определение — потом.

>осмысленный резон
>Perl
<—
No. 22314    
>>22313
Фигово помнишь, дерево можно даже пощупать ручками через
use B;


>>22311
Потому что даже если они в общей зоне видимости, объявление идёт лексически после употребления. Ухудшается читаемость. Я уж не говорю, что можно написать do {...} while и таким побразом объявление новой переменной будет много позже её первого употребления.
Алсо,
>NOTE: The behaviour of a my, state, or our modified with a statement modifier conditional or loop construct (for example, my $x if ... ) is undefined.
No. 22315    
156209911555.jpg-(177.10KB, 1024×768, 252067.jpg)
22315
>>22314
Я не настолько старая, чтобы иметь экспертное знание по умершей десять лет назад технологии, простите, дедушка. Как бы там ни было, эта бага присуща как раз однопроходникам. Я не вижу в описании https://docstore.mik.ua/orelly/perl3/prog/ch18_01.htm ничего, что указывало бы на многопроходный анализ исходного кода. Ну и AST-а в Perl-е нет, вместо него есть дерево разбора (parse tree), которое ни разу не абстрактное, к тому же документированно от слова «никак»: http://modernperlbooks.com/mt/2012/09/why-perl-5-needs-an-ast.html

Btw, вы довольно выборочно цитируете официальную документацию и довольно резво фантазируете:
https://perldoc.perl.org/perlsyn.html#Simple-Statements
>>NOTE: The behaviour of a my, state, or our modified with a statement modifier conditional or loop construct (for example, my $x if ... ) is undefined.
>The value of the my variable may be undef, any previously assigned value, or possibly anything else. Don't rely on it. Future versions of perl might do something different from the version of perl you try it out on. Here be dragons.
Иными словами, «осмысленного резона» или нет, или его уже забыли... ну или никто просто уже не понимает, как оно работает и где фиксить этот UB.
No. 22318    
>>22315
Попробуйте в следующий раз читать официальную документацию, а не жалобы людишек в коммент-секциях.
https://perldoc.perl.org/perlguts.html#Compiled-code дерево со всеми проходами.

>Иными словами
Иными словами, я привёл цитату о том что даже в левой части UB. Как это относится к валидности рассуждений о правой части - непонятно.
No. 22333    
>>22315
>>22318
Если вы хотите поспорить друг с другом, существует диспутов нить - >>/dev/21353
No. 22336    
156223406920.png-(367.17KB, 589×700, mill007.png)
22336
>>22318
>Иными словами, я привёл цитату о том что даже в левой части UB. Как это относится к валидности рассуждений о правой части - непонятно.
Это что за бред? Вы пьяны, дедуля? Какие «левые»/«правые» части, вы полит.тв пересмотрели? Мы говорим про simple statement, у которого if, unless, while, until являются _модификаторами_ выражения. Вы что, не знаете языка, о котором пытаетесь спорить?

>https://perldoc.perl.org/perlguts.html#Compiled-code дерево со всеми проходами.
Вам известно, что Perl — это _интерпретируемый_ язык? Что вы мне показываете, вы сами понимаете?

>>22333
Я хочу провести экспертизу васька, заливающего мне тут про язык моей юности. На данный момент:
1) васёк запутался в синтаксисе;
2) васёк запутался в технологиях — интерпретируемый ЯП превратил в компилируемый.
No. 22337    
>>22336
>Какие «левые»/«правые» части
Слева и справа от ключевого слова-модификатора. Очевидно же.
>Вам известно, что Perl — это _интерпретируемый_ язык?
Вам известно, что вы уже третий пост занимаетесь т.н. moving the goalposts, переходите на личности и отказываетесь смотреть мои ссылки?

>>22333
>хотите
Я не хочу. И, пожалуй, возьму за правило игнорировать эту аватарку впредь.
No. 22345    
156233750995.jpg-(52.60KB, 640×480, 44 - 640x480@32 [SIG455f7546fc53b7465cf9b057eb8ff2.jpg)
22345
>>22337
Будет ещё лучше, если вы перестанете выдавать свои фантазии за истину, думая, что английский тут никто не знает.
И совсем хорошо, если перестанете постить ссылки на материалы, содержание которых не в состоянии объяснить.

Не болейте, хорошо кушайте, слушайтесь маму.
No. 22346    
У меня тут от вашей дискуссии появились два вопроса.
1. Как связаны реализация языка и наличие в нём аст?
2. Что же там по этой ссылке https://perldoc.perl.org/perlguts.html#Compiled-code написано?
3. Что значит compilation pass? И если это та самая интерпретация, то почему её так много?
Потому что я тоже, видимо, дурачок и не понимаю.
No. 22347    
>>22346
1. Никак, вообще говоря, пока детали реализации явно не прописываются стандартом до таких мелочей. На практике, когда у языка только один компилятор, то на всё воля его создателей. gcc делает AST. tcc не делает. А язык один.
2. По ссылке описан процесс компиляции исходного кода во внутреннюю интерпретацию - opcodes. Не является деревом парсинга в полной мере, как может и AST.
3. Проходы по исходнику/дереву для оптимизации перед началом интерпретации.
No. 22348    
156259839335.png-(862.55KB, 720×720, junior_developer_kobayashi_2.png)
22348
Аноним наконец-то перенес последние ссылки из прошлой нити в базу знаний: http://pastebin.com/AGhLZppH

По какой-то причине, в архивной нити внутри-нитевые ссылки не обновились и пытаются указывать на "живую" нить, а не на архив
No. 22355    
15630720027.png-(387.67KB, 850×481, jczxklcz.png)
22355
Привет dev. Начну с краткой хронологии.

Недавно я окончательно решил удариться головой и всеми прочими частями тела в программирование. Ранее у меня был опыт олимпиадного программирования, кое-какие представления о работе языков программирования. Я изучил ваш F.A.Q. Но так и не понял что именно мне делать, но гугл подсобил, подобрал для себя книжку по c++, учу. И, кажется, я забыл описать пройденную школьно-университетскую программу.
В школьные годы мне повезло пройти отбор в лицей с углубленным изучением фундаментальных наук (математика/физика/информатика), касательно информатики - это и было олимпиадное программирование, то есть различные интересные алгоритмы и задачи. Со всеми профильными предметами у меня были хорошие отношения.
Университет я бросил осознанно после полугода, предоставляемый материал был размазан очень тонким слоем + нагрузка непрофильных предметов, ну и, мягко говоря, не самые лучшие условия для проживания и обучения.

Вообщем, как я для себя решил, буду изучать все самостоятельно, по книжкам. За конечную цель взят гейм-дев и реализация некоторых задуманных проектов. Но есть одна проблема, а именно с поиском подходящей литературы, как по программированию, так и по математике. Но, к счастью, только что наткнулся на вот этот канал на ютубе (Ссылка: https://www.youtube.com/channel/UC4omkhNHsYLagT1o6hnmKQw/videos ). Автор рассказывает о том, как он сам вкатился в программирование, какие книги использовал, ну и много другого. Сам он Engine Programmer. Лучше посмотреть, передать словами у меня сейчас не получится.
Так, вернемся к сути поста. В связи с нахождением этого канала планы немного меняются, а именно первым этапом будет изучение основ компьютерных наук по средствам Open Source Society University (Ссылка: https://github.com/ossu/computer-science ). Вторым этапом прочтение технической литературы по языкам программирования/алгоритмам. Ну и в завершении применение знаний на практике, возможно на основе Open Source, возможно самостоятельные идеи, или что-то еще.

И так, попутчики, прошу вас оценить, или дополнить мою программу. Спасибо за внимание.

P.s. Материальная сторона вопроса на данный момент не интересует, исключительно романтика.

P.s.s. Едва разобрался с капчей, странно она работает под моим vpn.
No. 22356    
С OSSU провал, ресурс теперь за доллары. Буду искать альтернативу.
No. 22357    
В целом проблема улажена, начну с изучения Computer Science, уже потом все остальное. Материалы благо легко гуглятся. Давно не чувствовал себя таким живым.
No. 22358    
>>22355
То есть, ты учился полгода, за эти полгода стал олимпиадником, но при этом не умея программировать?
>к счастью, только что наткнулся на вот этот канал на ютубе
Это такая шутка? Что-то не смешно.
Вообще, забудь про компьютер саенс. Точнее, возьми какой-нибудь cs101 курс, и тебе хватит. Налегай на алгебру, геометрию (и физику). Если ты хочешь инди игры делать, а не в сайбере пахать на галере, то и математики много не надо, и лучше сразу брать какой-нибудь туториал/книжку/курс про создание игр, а остальному научишься в процессе.
No. 22359    
>>22358
Олимпиады школьные, примерно с 6-7 по 11 классы, писал в основном на Paskal. По сути это было изучением ЯП с применением различных алгоритмов, как скажем написание эффективной сортировки вручную, отдельной функцией.

>Это такая шутка? Что-то не смешно.
Не понял о чем это.

Хоть в целом я и уловил этот посыл, все равно начну с самых низов, мне это действительно интересно. Раньше я хоть и находился в около программистской среде, но не имел дело с реальными программами. Реализация интерфейса, звука, графики и прочие прелести для меня до сих пор являются загадками, которые подлежат обязательному разгадыванию. Я понимаю, что такой подход весьма долгий и трудный, но и торопиться мне некуда.
No. 22360    
>>22355
>Университет я бросил осознанно после полугода
У вас, батенька, проблемы с осознанным мышлением. В качестве подкрепляющего аргумента привожу довод и о длине поста, там много лишнего.

Что то геймдева. Туда нужны геймдизайнеры - это те, кто до приёма на работу создал пару- тройку игр самостоятельно и сечёт про то, как игры работают вообще; макаки на юнити и подобном, потому что никто с нуля движок не пишет, и только в совсем упоротых случаях оптимизаторы/графикописатели, на это надо пройти весь курс графики и знать чуть ли не подноготную видеокарт.
No. 22361    
156312234696.jpg-(166.84KB, 641×668, Millhiore_Firianno_Biscotti_full_517262.jpg)
22361
>>22355
>Университет я бросил осознанно после полугода
Иными словами, ты недостаточно умён, сообразителен и упёрт для того, чтобы закончить российский ВУЗ, где дипломы дают всем, у кого хватило мозгов ходить на лекции и покупать курсовые. Это статистически наиболее вероятная причина, и так это будет выглядеть в глазах остальных. Специалиста без диплома, в котором написано «Специальность», не бывает, это фантастика.

>буду изучать все самостоятельно, по книжкам.
Серьёзно полагаешь, что тебе хватит энтузазызма тащить это унылое дело лет 5, будучи одновременно и студентом, и преподом? Fun очень быстро закончится, останется рутина.

>>22360
>с нуля движок не пишет
Из того, что я смогла найти за эту неделю, онлайн-игры пишут даже на моём стэке. Хотя может быть и так, что к клиентской части это не относится, но фронт мне не интересен. Только вот писатели почему-то не хотят делиться практикой, так что примеры брать неоткуда.
No. 22362    
156314042745.jpg-(61.65KB, 458×595, 1559519774811.jpg)
22362
>Серьёзно полагаешь, что тебе хватит энтузазызма тащить это унылое дело лет 5, будучи одновременно и студентом, и преподом? Fun очень быстро закончится, останется рутина.
Чиочую.

>>22355
Лучше ещё сто раз подумайте. Тем более что в некоторых вещах самостоятельно разобраться бывает сложно. И ёмкой структурированной информации по некоторым темам бывает катастрофически мало.

>олимпиадное программирование
Всерос или свежий перечневый диплом за 11 класс есть? Тогда, если живёте в МСК, предлагаю поступить, скажем, на ПИ во ВШЭ: https://www.hse.ru/ba/se. Там весьма гибкая и неплохая программа, в особенности среди российских ВУЗов. Посмотрите ещё у них ПМИ и программы иных вузов. Изучите рынок вакансий ещё.

>канал на ютубе
Если уж решили заниматься самостоятельно, то лучше регнуться на Coursera и проходить адекватные и популярные ВУЗовские курсы по нужным дисциплинам там. Если заплатить им денюшку, то можно и сертификат.

Просмотрите ещё открытые курсы различных известных вузов. Например — у MIT (https://ocw.mit.edu) можно пройти: введение в алгоритмы https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/ , математику для CS https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/readings/ , прочие. Просмотрите, каков процесс обучения в этих вузах, как, что, и в каком порядке изучается, чтобы понять, что и в каком порядке изучать вам.

>не имел дело с реальными программами
А попробуйте. (Но это так, не очень серьёзно.) Реализуйте что-нибудь простенькое (калькулятор, многопоточное решение систем уравнений с оконным .NET (или иным) интерфейсом, прикрутите библиотеку, распознающую текст, и сделайте для Ведра распознование текста по картинке с камеры, для него же сделайте пакетный обработчик изображений, адекватный FTP-клиент, при том с возможностью локализации интерфейса, прикрутите рекламу рядом с основными его элементами и в PlayMarket получившееся — включите фантазию!). Ознакомьтесь с популярными технологиями в интересующей сфере и попробуйте с ними поиграть. Try and change stuff and see what happens! Для начального ознакомления с миром сойдёт. А оно важно.
No. 22363    
>>22362
>Всерос или свежий перечневый диплом за 11 класс есть?
Лучшем результатом было призовое место на региональном этапе, но, честно говоря, особо к этому делу я не готовился.

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

>Coursera
Обязательно зарегистрируюсь.
За ссылки спасибо. Нашел точно такую же книгу по математике для CS, но с задачами после каждой главы. https://courses.csail.mit.edu/6.042/spring17/mcs.pdf

>А попробуйте.
Ок, буду варьировать программирование с книжками и теорией по мере возможностей.

Большое спасибо, за полноценный ответ по теме.
No. 22364    
156315277883.png-(1.66MB, 2150×3035, 73887784_p0.png)
22364
> Лучшем результатом было призовое место на региональном этапе, но, честно говоря, особо к этому делу я не готовился
Значит — нет. А жаль. Тем более, что была и есть куча много более простых олимпиад, открывавших двери в сравнительно хорошие заведения. Тем более, что вы затащили регион без особой подготовки…
Гамбарэ! Обязательно думайте о будущем и прощитывайте риски.
No. 22365    
>>22359
>Не понял о чем это.
Самопровозглашённый писатель движков и крутой программист, от которого не было ни одного доказательства его крутости, и который живёт выуживая деньги с дурачков. Зайди к нему в плейлист алгоритмов, и тебе всё сразу станет ясно.
>>22360
>Туда нужны геймдизайнеры
Геймдизайнер у нас - это такой парень, который придумывает как бы вытащить побольше денег из игрока. От него требуется математика (всякие статистики и теории вероятностей), и если он это могёт, то даже неумение сделать понг ему простят.
>макаки на юнити и подобном, потому что никто с нуля движок не пишет
Вот только если ты устраиваешься в серьёзный геймдев программистом, то требовать с тебя будут как раз всю подноготную видеокарт и свой движок, даже если на работе у вас будет юнити.
No. 22367    
>>22365
В серьёзный геймдев с улицы не берут, всё же.
No. 22368    
>>22355

>>Я изучил ваш F.A.Q. Но так и не понял что именно мне делат
>Я хочу программировать, но не понимаю, куда можно приложить усилия
https://410chan.org/dev/arch/res/14160.html#14354
Вот же перечислены возможные сферы.

>>Но есть одна проблема, а именно с поиском подходящей литературы, как по программированию, так и по математике.
>Подскажите литературу по архитектуре компьютерных игр
http://410chan.org/dev/arch/res/19666.html#20007
Наверное пока лучшее что есть по низкоуровневой архитектуре игры, это Андре Ламот.

>За конечную цель взят гейм-дев и реализация некоторых задуманных проектов.
Ты хочешь делать игры сам, или ты хочешь устроиться в студию как engine programmer / toolkit programmer? Если ты хочешь быть просто околоигровым программистом, дальше не читай, ты на верном пути.

Если ты хочешь именно делать игры, то мне кажется ты совершаешь ту же ошибку, что и многие, кто спрашивал в этой нити советов по геймдеву. Суть ошибки: ты собираешься учиться делать движок игры, в то время как тебе надо учиться делать саму игру. Многие считают что движок это очень важно, а когда он есть, игру на нём сделать - тьху. Это не верно. Поэтому лучше найди ютуб-канал, или другие доступные тебе материалы именно по гейм-дизайну, а не по созданию движков. Для твоих первых проектов и экспериментов в гейм-дизайне хватит любого готового движка, собственно, ты и будешь подбирать движок уже под конкретный проект игры. Опыт программирования понадобится для скриптования игровых объектов и подпиливания движка.

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

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

Такие дела, надеюсь смог помочь.
No. 22369    
>>22355
О, я как-то посмотрел одно его видео - пришлось воду с поля тряпкой собирать, больше не смотрел.
No. 22370    
156326526867.jpg-(229.20KB, 600×730, Millhiore_Firianno_Biscotti_full_503834.jpg)
22370
Вопрос по JS-у.

Как будет правильнее и эффективней гонять байты через WebSocket-ы? Как гонять байты AJAX-ом мне известно, там просто кодировку указываешь как user defined и это работает на любом утюге. А через WebSocket-ы как, к чему привязываться, чтобы на любом утюге работало? Гнать ASCII-текстом и кодировать/декодировать в массив?
No. 22371    
>>22370
Чтобы работало прямо совсем на любом утюге, я бы советовал пользоваться кодированием бинарных данных в строку и обратно с помощью Base64

Но вообще, вебсокеты уже поддерживают бинарную передачу из коробки, хочешь блобом, хочешь массивом байт: https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/binaryType#Browser_compatibility

Делается это примерно так:

  var socket = new WebSocket('ws://localhost:8082');
  socket.binaryType = 'arraybuffer';
  var byteArray = new Uint8Array(...);
  socket.send(byteArray.buffer);

И при получении так же считываешь в массив:

  var byteArray = new Uint8Array(message.data);

No. 22372    
>>22371
Вот и я к тому же пришла. Только не Base64, а ещё проще: https://docs.oracle.com/javaee/7/api/javax/xml/bind/DatatypeConverter.html#printHexBinary-byte:A-
>вебсокеты уже поддерживают бинарную передачу из коробки
Не на всех утюгах работает, увы.
No. 22374    
Как известно, в перле, если у нас имеется хэш %h, мы можем написать @h{qw(foo bar baz)} и получить список значений. Теперь, допустим, у нас имеется ссылка $rh = \%h. Как сделать то же самое для неё? Вариант ($rh->{foo}, $rh->{bar}, $rh->{baz}) не предлагать.
No. 22375    
156329259788.jpg-(151.93KB, 700×1000, 2011-05-27-407284.jpg)
22375
>>22374
Разыменуй ссылку:

my %h = (foo=>1,bar=>2,baz=>3);
my $rh = \%h;
die qq(Test failed!\n)
   unless join (q(), @$rh{qw(foo bar baz)}) eq q(123);

No. 22376    
>>22375
>Разыменуй ссылку
Блин, вот я тормоз…
Спасибо!
No. 22377    
Вопрос от мимопроходившего ретарда, далекого от айти.
Есть boot.ini:
'[bootable]
time = 10
blahblahblahblah
blahblahblahblah
blahblahblahblah'
Задача такова - написать скрипт на VBScript или Jscript (только на них, увы) скрипт, при каждом запуске, прибавляющий к значению time +30.
No. 22378    
156330880812.png-(469.42KB, 1024×873, Millhiore_Firianno_Biscotti_full_1851250.png)
22378
>>22377
А вопрос-то в чём, «как нарисовать сову»? Тогда, во-первых, ищешь способ как читать из файла и как писать в файл — может оказаться так, что для выбранных инструментов и целевой операционной системы способа не существует; во-вторых, ищешь способ как читать данные и как изменять данные — может оказаться так, что надо самому писать парсер и ассемблер. В третьих, ищешь способ как запускать полученный скрипт при старте системы.
No. 22381    
Что лучше начать учить: Ruby или Python? Никак выбрать не могу.
No. 22385    
>>22381
А первое ещё живо?
No. 22386    
156379063484.png-(4.48KB, 90×50, faptcha_php.png)
22386
>>22381
Питон — длинный, скользкий и противный.
Рубу — гибрид ежа с ужом, т.е. перла с питоном. Т.е. лучше питона, но хуже перла

>>22385
Так всегда, хорошие языки в запустении, плохие — на коне. Куда не глянешь — всюду js, python или вообще go. Зачем так жить?..

А то вон был C++, из него взяли всё хорошее и сделали D, а потом взяли всё плохое и сделали rust. И кто из них популярен, а кто — забыт?
No. 22387    
>>22381
Python. Ruby уже умирает, через 5 лет на нем будут только легаси проекты.
No. 22388    
Дано: perl 5.14, на вызов &CORE::substr($str, @_) выдаёт:
Undefined subroutine &CORE::substr called

Если же вызвать substr без &, то @_ преобразуется в число, а вариант вида substr($str, $_[0], $_[1], $_[2]) ведёт к тому, что всегда вызывается форма с 4 аргументами, независимо от того, сколько изначально их было в @_. A поведение разных вариантов substr отличается очень сильно.

Есть ли приемлемый (без тупой цепочки ifов) выход из ситуации?
Нет обновить там перл я не могу.
No. 22389    
>>22388
Выбирай:
1. substr($str, $_[0], $_[1] // length($str), $_[2] // substr($str, $_[0], $_[1] // length($str)))
2. eval("substr(\$str,".join(','@_).");")
No. 22394    
156388445487.jpg-(92.30KB, 785×1334, 2017-12-30-942713.jpg)
22394
>>22388
Вызов через амперсанд появился лишь в 5.16, да и то не для всех встроенных методов. Что же по второму,
>@_ преобразуется в число
то во что ещё он по твоему должен преобразовываться? Метод строкой ожидает только первый параметр, остальные приведутся к числам.
No. 22395    
>>22386
А какие ещё языки ты считаешь хорошими?
No. 22396    
>>21641
может кто помочь? Скачал логотип одной компании и вставил его в html файл. Без подключения css пикча просто висит в левом
углу. Начал прописывать css стиль:width: 100%;
display: flex;
justify-content: center;
Лого становится меньше микробы и висит в левом углу.
No. 22397    
>>22396
>висит в левом углу
>висит в левом углу
Извиняюсь за тавтологию
No. 22399    
>>22396
Хотелось бы увидеть код.
No. 22401    
156391384993.png-(153.67KB, 1920×1080, Untitled.png)
22401
>>22399
No. 22402    
156395280672.png-(41.50KB, 665×710, Clipboard01.png)
22402
>>22396
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Aligning_Items_in_a_Flex_Container
No. 22403    
>>22401
ХэТэМэЭл тоже.
No. 22404    
>>22401
Так, подожди, а зачем ты флекс прописываешь самой картинке, а не контейнеру? У <img> из дочерних элементов только before и after, а их тебе выравнивать вроеде бы ни к чему.
No. 22406    
>>22400>>22389
Я прошу прощения за флуд, но можно ещё убрать скобки у вызова и получить секьюрную версию варианта 2 в 30 символов.
eval("substr \$str@{[map qq!,\$_[$_]!,0..$#_]}");

Замена кавычек на qq не даёт выигрыша в символах, но чуть читаемее, чем \". Если доподлинно известно, что в @_ только валидные и безопасные параметры, то более короткая запись это
eval('substr $str,'.join(',',@_));

Прошлые комментарии сейчас сотру.
No. 22407    
156402593046.jpg-(179.33KB, 500×500, 2018-04-18-959372.jpg)
22407
Вам необходимо достаточно быстро (положим, каждые 50 ms) передавать через веб-сокеты в двустороннем порядке между клиентом и сервером данные бинарного вида. Данные представляют собой строго типизированные объекты, простые (числа, октеты, массивы и так сойдёт, матрицы и так сойдёт 2, строки и так сойдёт 3) и составные (комбинации простых и составных). Как бы вы стали делать сериализацию/десериализацию?
No. 22408    
>>22407
Длина, тип, данные. Конец.
No. 22409    
156402726147.jpg-(166.83KB, 599×769, 2018-01-31-948142.jpg)
22409
>>22408
Я не настолько дура. Ты говоришь о том, как их кодировать. Меня интересует, как их снова в объекты превратить и обработать.
No. 22411    
>>22410
Каким образом клиенты должны узнать, что во что им конвертировать?
No. 22413    
>>22411
Почти у каждого REST API есть документация и согласно ей программист понимает каким образом ему из десериализованного объекта получить те или иные данные.
Абстракции это конечно хорошо, но ты можешь рассказать суть, в чем у тебя проблема?
No. 22414    
156404658750.jpg-(52.61KB, 600×1082, 2017-11-30-937259.jpg)
22414
>>22413
Мне нужно дуплексное RPC на веб-сокетах, которое можно безболезненно расширять. У меня есть декларативное описание команд и их синтаксиса на джаве и кодеки. Мне надо сделать ответную часть на JS. Можно захардкодить описание, но это — двойная работа, — к тому же изменять методы кодирования и добавлять новые команды будет очень больно. Можно сделать так, как сделали в JAX-WS — отдавать описание клиентам, — тогда у них не будет проблем с синтаксическим разбором (хотя останутся проблемы с семантикой, но они даже в JAX-WS решаемы лишь посредством версионирования описаний). Так как уже сейчас в RPC более 30-и команд, я пойду по второму пути. Спрашиваю, есть ли ещё способы сделать такое.
No. 22416    
Почему в хроме
>window.onload = () => {};
работает, а в лисе нет? Внутри должны навешиваться всякие ивентлистенеры и лиса их не вешает, а хром вешает. Хром даже банальный алерт выполняет, а лиса нет. Может onload уже устарел?
No. 22417    
15642746946.jpg-(308.67KB, 881×1277, 2017-07-08-913354.jpg)
22417
>>22416
Потому что ивент поднимается при загрузке ресурса. С точки зрения Лисы, когда ресурс взят из кэша, он не загружен. Это не баг, но фича. Используй DOMContentLoaded.
No. 22418    
>>22417
Я ничего непонял. Какой может быть кэш, если в кэше ничего нет?
No. 22419    
>>22418
А нет, оказывается кеш действительно был не сброшен. Но я всё ещё в смятении: лиса порой выдаёт удивительные фортели.
No. 22420    
156429129529.png-(554.50KB, 500×500, 2017-11-25-936215.png)
22420
>>22418
В кэше всегда что-то есть. F5 может не приводить к сбросу кэша (обычно происходит избирательное обновление). Как воркэраунд можешь попробовать принудительно сбросить кэш, повесив window.onunload = function(){};, но это своего рода хак.

>>22419
У этого прикола борода лет в шесть. Добро пожаловать в удивительный мир JavaScript. С другой стороны, если у клиента лагучее соединение, то полной загрузки ресурса он может и не дождаться. А посему использование этого ивента выглядит довольно сомнительно, если страничка без скриптов работать не может.
No. 22421    
>>22420
>window.onunload = function(){};
В смысле в сочетании с onload?
В любом случае я воспользовался jqueryвсё равно уже подключена ради слайдера.
>А посему использование этого ивента выглядит довольно сомнительно, если страничка без скриптов работать не может.
Перевесил с окна на документ. Думаю, дом уж как-нибудь загрузится даже на диалапе.
No. 22422    
156439122972.png-(96.24KB, 745×902, Clipboard01.png)
22422
Анекдот про эффективных менеджеров.doc
Описание команд получилось реляционным. Ну нету здесь RPC-фреймворка, щито поделать.

>>22421
Да. Сайд-эффектом ивента window.onunload в Лисе является сброс кэша. https://bugs.jquery.com/ticket/8684
>я воспользовался jquery
Да, ей имеет смысл пользоваться, чтобы не разруливать подобные проблемы самостоятельно. Однако в ней не все проблемы фиксятся.
>Думаю, дом уж как-нибудь загрузится даже на диалапе.
Проблема больше в разрывах соединений и потере пакетов. onload поднимется лишь когда загрузятся все стили, скрипты и картинки. Если какая-то картинка потерялась по дороге, ивент не поднимется, так что даже шторку по нему поднимать будет довольно ненадёжно.
No. 22423    
>>22422
>шторку по нему поднимать будет довольно ненадёжно
Да какая шторка, это всё css делает, я вешаю переключение слайдов на кастомные кнопки. И ещё меню сбоку, чтоб при прокрутке, пока идёт элемент, висело прибитым к экрану, а когда кончается - оставалось внизу/вверху элемента.
No. 22424    
>>22422
Может сделать ForeignKey's явными и при загрузке заменять их ссылками на конкретные объекты? А то получается сильно завязано на кодеки. Хотя что мне это даст? Просто более чистую реализацию паттерна Visitor на клиенте за счёт дополнительной процедуры инициализации и дополнительного кода в генераторе? Экцепшоны в этой процедуре, если не будут найдены кодеки для примитивов и обработчики для команд?

>>22423
>Да какая шторка
Матовая, на которой написано “Please wait, loading.” Но основной посыл ты, надеюсь, уловил.
>это всё css делает
Как? ЁМНИП, там нет эвент-хэндлеров.
No. 22425    
>>22424
>Может сделать ForeignKey's
Я не понял, но я согласен.
>Как? ЁМНИП, там нет эвент-хэндлеров.
Не о той шторке подумал.
No. 22426    
>>22425
В JSON нельзя записать физические отношения между объектами, только логические иначе вместо одного объекта получишь много объектов. Сейчас они заданы неявно, подразумевая, что кодеки сами знают, как их расшифровывать. Правда выглядит это стрёмно. Можно задать их явно, вроде {type:"REFERENCE",path:["TYPE","INTEGER"]}, на клиенте при инициализации делать obj[property] = resolveRef (obj[property], spec), где

function resolveRef (ref, root) {
   var dst = root, path = ref.path, i = 0, length = ref.path.length;
   while (i < length) dst = dst[path[i++]];
   if (typeof dst == "undefined")
      throw new Error ("Unknown ref: " + ref.path);
   return dst;
}

Ну а раз необходима процедура инициализации, то в ней до кучи можно делать проверки на наличие кодеков и обработчиков.
No. 22427    
Сап, ычан и чиочан
Я тут пилю текстборду и пытаюсь придумать способ одновременно экранировать html, но и обрабатывать галки

как вы думаете, как это просто сделать?

Чисто для проверки:

<i>хмхмхмхмххмхмхмхмхмхмххмхм
No. 22428    
забыл проверить на галки
> йеп
No. 22429    
>>22427
>обрабатывать галки
Подробнее расписывай, подробнее. И что тебе мешает уже &gt; обрабатывать?
No. 22432    
156477507780.jpg-(634.21KB, 1653×1417, 2017-11-27-936694.jpg)
22432
Просто чтобы упорядочить инфу. Может кому пригодится.
1. WebSocketSession /= HttpSession
а) первая может жить намного дольше — ситуация, когда стрим идёт, но AJAX выкидывает 401 Unauthorized;
б) вторая может вообще не создаваться;
Решение: переопределить конфигуратор эндпойнта, выудить/создать HTTP-сессию и теребить ея пинг-понгом, дабы не протухла; также для этого можно хакнуть сессию рефлексией.
2. Ping-Pong сообщения поддерживаются далеко не всеми браузерами. Способа проверки поддержки нету: https://stackoverflow.com/questions/10585355/sending-websocket-ping-pong-frame-from-browser
Решение: свелосипедить свой heartbeat, например. Одобрено железячниками, ссылку с советами по интеграции умного железа и апп-сервера, наверное, не найду.
3. CDI в @ServerEndpoint
а) ой, не работает: https://abhirockzz.wordpress.com/2015/02/10/integrating-cdi-and-websockets/
б) ой, работает: https://abhirockzz.wordpress.com/2016/11/18/websockets-and-cdi-integration-again/
в) ой, не работает, если переопределили конфигуратор эндпойнта.
Решение: JNDI-lookup / @Statefull EJB endpoint (хз, говорят, что может и не работать)
4. Реконнект не предусмотрен: https://stackoverflow.com/questions/34992727/java-websocket-connection-check-if-same-user-reconnects
Решение: свелосипедить; например: https://stackoverflow.com/questions/22431751/websocket-how-to-automatically-reconnect-after-it-dies

Вроде это все нюансы.
No. 22434    
PHP, Wordpress, все дела...
Как мне грамотно реализовать лайки/просмотры/подобные счётчики на сайте с вордпрессомбез плагинов? Потому что, когда я думаю про реализацию, у меня встаёт вопрос где хранить информацию о лайках, если в отдельной таблице, то не получится ли, что я создам слишком много запросов к базе данныхнапример на странице с несколькими постами, что затормозит сайт? Или просто забить и поставить плагинвордпресс же?
No. 22435    
>>22434
Или вот ещё: нужно ли мне модифицировать существующие вордпрессовские таблицыдобавляя поле количества просмотров, к примеру или создать под это дело свои таблицы? Опять же как это скажется на производительности?
No. 22437    
>>22434
А зачем тебе несколько запросов на странице с несколькими постами?
No. 22438    
Извиняюсь, еще немного тестов

[o]Надчеркнут[/o] Подчеркнут
[sub]Снизу[/sub] [sup]Сверху[/sup]
No. 22439    
156486611449.jpg-(308.35KB, 2240×1198, 2017-11-12-934077.jpg)
22439
>>22432
5. В TCP нет способа узнать состояние соединения иного, чем попытаться записать что-нибудь в сокет и словить исключение, если соединение отвалилось.
Отсюда очевидно, что:
1) heartbeat для дуплексной коммуникации также должен быть дуплексным;
2) непереданные пакеты должны сохраняться до удачного реконнекта клиента или до таймаута (если клиент отвалился с концами). Отсюда очевидно, что необходимо заиметь хранилище промежуточных данных, т.е. хранилище контекстов (допустим, PushContext), и хранилище контекстов в статической карте с ключами-ID-шниками клиентов (если предполагается сохранять Http-сессию, то ключем может служить её идентификатор).
No. 22440    
>>22437
(Запрос на просмотры, запрос на лайки)*несколько постовже.
No. 22441    
156492826245.png-(1.22KB, 90×50, faptcha_php.png)
22441
Что нужно прописать диву в css, чтобы он вел себя примерно как таблица? Т.е.
<div>Some text</div>
должен занимать по ширине столько же места, сколько и
<table border='1'><tr><td>Some text</td></tr></table>
Т.е. — его ширина должна определяться размером текста, который внутри.
No. 22443    
>>22441
>Т.е. — его ширина должна определяться размером текста, который внутри.
Непонятно, где должен располагаться этот div, внутри таблицы? Вне её? Далеко ли?
Впрочем, можно просто жёсто задать ширину пикселями.
No. 22444    
>>22443
Вместо неё.
Хотя стоп, я тормоз. Передо мной борда, и она сделана вовсе не на таблицах, как я думал, а на дивах. А по внешнему виду ничем от табличной не отличается. Т.е. — именно с нужными мне свойствами. Вопрос снимается, лезу смотреть, как сделан класс postbody в местных стилях.
No. 22445    
>>22444
Upd: мда, а ларчик открывался просто:
display: table;
Не сказал бы я, чтобы это выглядело особо красивым решением, но по другому заставить дивы автоматически регулировать свой размер в зависимости от размера содержимого, видимо, нелья…
No. 22446    
>>22445
Upd 2: Нашел вот это: https://ru.stackoverflow.com/questions/22387/Ширина-div-по-контенту
Там приведен десяток разных вариантов решение задачи (и сам вопрос сформулирован куда более внятно), и у всех, чтоб их так, какие-нибудь левые сайд-эффекты.

На самом деле, правильное решение — это
width: fit-content;
Но с поддержкой у него…
No. 22447    
156494056844.png-(6.70KB, 616×655, Clipboard01.png)
22447
>>22445
flex-ом злой плантатор пользоваться запрещает или ты слишком крут для лёгких путей?

З.Ы.: У меня всегда обратная проблема была — как сделать так, чтобы <div> вёл себя как <table width="100%">. Потом я узнала, что добрые дяди сделали фреймворк, радикально решающий эти проблемы — <h:panelGrid> отлично работает практически на любом утюге.
No. 22448    
>>22434
Реализовать можно по разному, в зависимости от того что именно тебе надо и в каком виде (а заодно с какими фичами и т.п.), но хранить данные ты можешь просто в специальной таблице метадаты. У WordPress специально предусмотрены таблицы для этого, и логика готовая: можно считывать, записывать, удалять значения, использовать в запросах и сортировках и тому подобное.

Например, делаешь update_post_meta($post_id, ‘_post_views, $view_number); и оно сохранит все в БД. Надо будет вывести? get_post_meta, ну и так далее. По поводу нагрузки особо не волнуйся, если ты не собираешься на каждый чих делать по 50-100 запросов лишних, то это ни на что не повлияет, если ты конечно какой-то рак не напишешь. Так что лучше пиши сам, заодно дополнительный опыт тебе будет.

А вот готовые плагины как раз могут тебя легко подставить. Их часто пишут макаки совсем уж, из-за чего потом сайты могут тормозить.
No. 22449    
>>22440
А зачем тебе делать запрос на каждый отдельный пост, ещё и по разным колонка, когда можно вытащить всё и сразу за один?
No. 22450    
>>22448
Я этим опытом два дня мучаюсьза окном +35, кондей уже не спасает, пока что просто CREATE TABLE
my_own_meta
IF NOT EXIST и потом пишу туда. Ну... собираюсь писать, для начала нужно авторизацию как-то сделать.
С post_meta не ясно как хранить, например, конкретных пользователей, лайкнувших пост. По-моему без отдельной таблицы всё равно не обойтись.
>>22449
Ну да, количество лайков и просмотров можно хранить в одном месте и получать скопом, неудачный пример.
No. 22451    
>>22450
Кондиционеры рулят.

Ну я не знаю, я обычно стараюсь избегать создания кастомных таблиц, если этого можно избежать без создания себе проблем.

>С post_meta не ясно как хранить, например, конкретных пользователей, лайкнувших пост. По-моему без отдельной таблицы всё равно не обойтись.
Можно по разному сделать. В принципе, один пост может содержать множество записей в post meta с идентичным идентификатором, но разными значениями. Можно просто делать add_post_meta для пост, например с ключем user_liked и значением id юзера, который лайкнул. Просто у каждого поста будет целая простыня таких записей потенциально. А можно пойти наоборот. Работа с мета-данными предусмотрена не только для постов, но и для юзеров, соответственно add_user_meta / get_user_meta, где вместо id поста вначале надо будет передать id юзера, потом ключ и уже потом значения. Соответственно можно записывать для каждого юзера какие именно посты он лайкал. Можно вообще упороться и хранить это не отдельными записями, а массивами, если ты хочешь экономить количества записей. Например, сохранять массив у пользователя в мета-данных какие посты он лайкал.
No. 22455    
Имеем меню на css вида a:focus ~ ul. Т.е. при кликe по ссылке онa ловит фокус и список становится видимым.

Вопрос: можно ли без привлечения js, на чистом css, сделать так, чтобы по следующему клику на ту же ссылку эта менюшка закрывалась обратно?
No. 22456    
>>22455
Да, при клике за пределы менюшки оно тоже должно закрываться, т.е. вариант с использованием checked (если я правильно понимаю, как он работает) скорее всего не катит.
No. 22457    
156505832065.png-(259.28KB, 1365×824, Clipboard01.png)
22457
>>22439
Никто не забыт, ничто не забыто.
Вроде получилось достаточно универсально. По крайней мере я никаких недочётов не вижу.

>>22456
Фокус либо на ссылке, либо на элементах меню, иначе скрываешь.
No. 22458    
>>22457
>Фокус либо на ссылке, либо на элементах меню
И как это поможет закрыть при втором клике на ссылку?
У меня сейчас — фокус на ссылке либо ховер на списке, что примерно то же самое.
No. 22459    
>>22458
Никак, лол. Тогда не знаю.
No. 22461    
>>22455
Тебе верно сказали, что фокус здесь не совсем катит. Тебе нужен элемент с переключаемым статусом, т.е. чэкбокс, а "ссылку" можешь сделать просто лейблом для своего чэкбокса.
No. 22463    
>>22455
Теоретически, можно добавить к :focus селектору прозрачный псевдо-элемент, через ::before() или ::after который будет перекрывать собой ссылку, и по фокусу или клику на который меню автоматом закроется (т.к. фокус ускачет со ссылки и :focus селектор перестанет работать). Но тут надо эксперементировать, если что, заливай своё меню на jsfiddle.
No. 22465    
156509902686.png-(199.02KB, 622×920, 2016-11-22-873326.png)
22465
>>22457
>никаких недочётов не вижу
Надо карту в синглтон засунуть, вот чего. В будущем может понадобиться слать сообщения из других контейнеров.

>>22461
Извратский способ, конечно: делаешь полностью прозрачный чекбокс, под ним размещаешь текст лейбла. Только у него тогда вторая хотелка работать не будет. Можно ещё покопать в сторону CSS-переменных, но к ним нет условных операторов и я не видела, чтобы их можно было мутировать, так что вряд ли.
No. 22466    
>>22455
https://css-tricks.com/solved-with-css-dropdown-menus/ — во чего нашла. Оно?
No. 22467    
>>22455
Не слушай этих выше, просто поставь :focus{pointer-events:none}.
No. 22468    
>>22461
Выше уже написано, почему оно не подходит. Тот функционал, который уже работает — более приоритетен, чем это, а извраты с чекбоксами его сломают.

>>22463
Хм. Спасибо за идею, надо будет попробовать.

>>22466
Ну, по крайней мере на первый взгляд я там ничего похожего не вижу. Хотя, конечно, почитаю, так что спасибо.
No. 22469    
>>22467
О, а вот это работает!
Спасибо огромное!
Про это свойство я не знал… И вообще на MDN про него написано, что оно только svg. Но и в лисе и в хроме — всё пашет в обычном html.

Задача решена.
No. 22480    
156536871969.jpg-(89.52KB, 1200×852, D0PNnDzVsAAlp4E_jpg_large.jpg)
22480
Как правильно разделять логику модели и логику контроллера?
Вот, допустим, у меня есть регистрация на фласке.
Пользователь отправляет данные в виде юзернейма, email и пароля. Я минимум должен проверить что эти поля не пустые иначе вернуть ошибку. Это я должен проверять в контроллере, верно? После мне нужно проверить, что юзернейм не используется и почта не занята. Это я проверяю делая запросы в базу из того же контроллера. После, если всё хорошо, создаю нового пользователя. Или лучше сделать отдельный метод модели create_user и передавать туда данные на проверку? По интернетам пишут что кому как удобнее. Кто-то делает толстые контроллеры, кто-то всю логику суёт в базу, а в контроллерах только http-запросы обрабатывает. Как правильнее?
No. 22481    
156538215390.jpg-(205.04KB, 1448×2048, 2019-02-24-984438.jpg)
22481
>>22480
В общем случае твоя модель должна делать бизнес-логику вне зависимости от выбранного способа клиент-серверного взаимодействия.

Возьми свой аккаунт-сервис и представь, что завтра захотят добавить к нему веб-сервис, т.е. JAX-WS; после завтра захотят RESTfull API для SPA фронтенда, т.е. JAX-RS; после после завтра засунут в кластер и захотят инжектить в другие бины как JNDI-ресурс.

Та, общая для всех способов, функциональность, которую в итоге ты вынесешь в EJB-сервисный слой, и будет моделью; остальное — контроллерами. То же справедливо и для десктопных приложений; так же и для SPA.

>Пользователь отправляет данные в виде юзернейма, email и пароля. Я минимум должен проверить что эти поля не пустые иначе вернуть ошибку. Это я должен проверять в контроллере, верно?
Да, это валидация веб-формы, специфического способа клиент-серверного взаимодействия.
>После мне нужно проверить, что юзернейм не используется и почта не занята.
Это условия создания нового аккаунта, т.е. бизнес-логика данного приложения. Значит она уедет в сервисный слой. Обычно в случае нарушения условий из сервисного слоя кидают кастомные checked-exception-ы, которые затем обрабатываются в контроллерах.

>По интернетам пишут что кому как удобнее.
Этого нельзя понять на практике если у тебя игрушечный стэк, который жестко фиксирован на каком-либо одном способе, и игрушечные задачи.
No. 22482    
Пишут, что надо поменьше обращаться к DOM.
Вот сделал я генератор таблицы: https://jsfiddle.net/hgvke6to/
Как лучше поменять код?
No. 22484    
156548216944.png-(133.07KB, 750×650, 2015-07-10-750332_low.png)
22484
>>22482
Проще всего будет закешировать узлы, всё-равно ты только текст в них меняешь: https://pastebin.com/mkGUNMiN
No. 22485    
>>22484
Спасибо, рассмотрю.
Тут возник другой вопрос: я пытаюсь сгенерировать SVG, но в браузерах не показывается ничего, от хромов до файрфоксов. При этом сам сгенерированный код нормально просматривается, например, в Inkscape.
https://jsfiddle.net/par36uwx/
No. 22486    
>>22485
В Presto, кстати, нормально отображается.
Btw... https://jsfiddle.net/Milfeulle/twzfnack/ Даже не спрашивай, почему так, — вряд ли я хочу это знать.
No. 22487    
>>22480

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

В целом >>22481 тебе примерно это и пишет. Но хочу отметить, что дублирования определенных моментов здесь не избежать. Например:

>Пользователь отправляет данные в виде юзернейма, email и пароля. Я минимум должен проверить что эти поля не пустые иначе вернуть ошибку.
>Это я должен проверять в контроллере, верно?

Верно, но. Сервис / модель должны отсекать с ошибкой любой ввод, с которым провести операцию корректно невозможно. Сервис не сможет создать аккаунт на пустой юзернейм и / или имейл, а значит на такой ввод он сам тоже должен возвращать ошибку. Модель пользователя с пустым юзернеймом и / или имейлом не имеет смысла, а значит попытка создать такую модель должна вернуть ошибку.

Да, это небольшое дублирование валидации данных между сервисом / моделью (бизнес-логикой) и контроллером (который внешний интерфейс к твоей бизнес-логике) Но в общем случае, ты как автор сервиса не можешь полагаться на то, что авторы всех интерфейсов к нему сделают всё правильно и не будут присылать тебе сломанные данные. Проверять, впрочем, надо только то, что проверять абсолютно необходимо, т.е. вещи по которым провести операцию нереально, или вещи, которые могут привести к сломанным данным в базе, или нарушить логику работы приложения на других этапах. Поэтому пустое поле ты будешь проверять и в контроллере, и в сервисе / модели, а вот сколько там заглавных букв и цифр ввели в пароль - только в контроллере, т.к. модели такие детали уже не важны.
No. 22488    
156564016745.jpg-(341.48KB, 700×990, 2017-11-11-933871.jpg)
22488
>>22487
>а вот сколько там заглавных букв и цифр ввели в пароль - только в контроллере, т.к. модели такие детали уже не важны.
Это же соглашения безопасности для данной информационной системы, ты чего, Стив? Контроллеры не могут устанавливать их произвольно.

@TL;DR
Ну а вообще, проектирование информационной системы начинается с создания концептуальной инфо-модели бизнеса — https://www.site-do.ru/db/db4.php , — из которой потом создаётся реляционная модель — https://www.site-do.ru/db/db5.php , — которая затем отображается на объектную (бизнес-данные, они же JPA @Entity обычно). Здесь закладываются требования к форматам данных и безопасности (т.е. пишется спецификация бизнес-данных), и пишутся валидаторы. То, что в спецификации бизнес-данных не описано — валидация DTO или иных промежуточных данных для пары View-Controller, пользовательского ввода и обработка чэлленджей (всякие там “Solve puzzle”, “Re-enter password”) — валидируется в контроллере.

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

Так что ответ на вопрос «Что где валидировать?» содержится в информационной модели бизнеса, а проблема дублирования валидаций по крайне мере для энтерпрайза глубоко вторична если о ней с BeanValidation API вообще кто-то задумывается, так же, как и с транзакциями в EJB — более важно обеспечить в проектируемой системе невозможность потери данных, перевода данных в неконсистентное состояние, обеспечить безопасность работы с данными и невозможность несанкционированной работы с ними.
No. 22489    
Автобусик, миленький, подскажи ресурсов для изучения языков! Поставил себе задачу последовательно выучить Python/Perl, PHP, JS, HTML, C, C++ и Java. Многовато, да. Но так как я планирую быть специалистом по информационной безопасности, без знаний этих языков мне некуда.
No. 22490    
>>22489
Чтобы быть специалистом, а не натасканной обезьяной-заучкой, нужно не языки, а более базовые вещи изучать — т.н. computer science, сети, архитектуры, алгоритмизацию и прочее. Языки лишь инструменты для записи и если знаешь основы — для их изучения будет достаточно почитать справочники и написать пару хелловорлдов.
No. 22491    
>>22489
>так как я планирую быть специалистом по информационной безопасности
Вот и иди учить инфосек.
No. 22492    
156572195480.png-(160.42KB, 555×900, 2016-05-09-831514.png)
22492
Рубрика «Сами спрашивали, сами отвечаем»: Хэширование паролей
Теория: https://www.codeproject.com/Articles/704865/Salted-Password-Hashing-Doing-it-Right
Практика: https://stackoverflow.com/a/2861125 https://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords
Нюансы: https://stackoverflow.com/questions/6947689/hinputsecret-security-is-there-a-way-to-use-a-straight-reference-to-char
No. 22493    
>>22490
Спасибо за советы! Но я всё же считаю, что эти языки я обязан знать также, как и т.н. базу (логику, теорию вероятности, computer science, сети и тд).
А мог бы ты посоветовать материалов по изучению computer science, сети, архитектуры, алгоритмизации и прочего?
No. 22494    
>>22493
>А мог бы ты посоветовать материалов по изучению computer science, сети, архитектуры, алгоритмизации и прочего?

Вот в этой коллекции
>>Нашли 13 Гб книг по IT-тематике
https://410chan.org/dev/arch/res/19666.html#20146

ftp://ftp.micronet-rostov.ru/linux-support/books/

Есть целая секция посвященная алгоритмам:
ftp://ftp.micronet-rostov.ru/linux-support/books/computer science
/data%20Structures%20&%20algorithms/

Если тебе хотелось бы что-то в формате курса, или интерактивных упражнений, можно посмотреть вот в эту сторону:

>>Я ищу базовые курсы по созданию ПО
https://410chan.org/dev/arch/res/19666.html#21223

>>Я ищу задачи и упражнения по алгоритмам (C, Python)
https://410chan.org/dev/arch/res/15681.html#17105
https://410chan.org/dev/arch/res/15681.html#17108
https://410chan.org/dev/arch/res/15681.html#17110
No. 22495    
156579620170.png-(49.27KB, 597×509, underscores.png)
22495
Наверное, глупый вопрос. Для обозначения чего обычно ставят префиксы из underscore'ов в cpp в имена? Скажем в исходниках STL? Этот ___x, __BasePtr и тому подобный сахар весьма тяжело читать. Хотя тут нужна привычка, должно быть.
No. 22496    
>>22493>>22494
Кстати о курсах. На Ютубе где-то был курс CS50.
No. 22497    
156580673734.jpg-(170.99KB, 719×1080, B0VtSwakpZc.jpg)
22497
О, вовремя я вспомнил о своём вопросе.

>>22481
Да, пожалуй ты прав. Перепишу как только так сразу
> игрушечные задачи
У меня лёгкая форма аутизма. Даже гвоздь стараюсь забить так, чтобы было правильно со всех сторон.

>>22487
> Сервис не сможет создать аккаунт на пустой юзернейм и / или имейл, а значит на такой ввод он сам тоже должен возвращать ошибку
На этот случай в SQLAlchemy есть встроенные валидаторы. Но если я это не обработаю в контроллере, то клиент получит 500 ошибку в лицо и никаких подробностей. А тут я её оберну в 400 ошибку и напишу где он не прав.

Спасибо, котятки.
No. 22498    
>>22495
Частные методы/аттрибуты обычнопишут с _
No. 22499    
Сап. Подскажите пожалуйста, почему я получаю в этом коде: <script src="https://ideone.com/e.js/O1MhAz"; type="text/javascript" ></script>
следующую ошибку: Uncaught SyntaxError: missing ) after argument list в 16 строке?
No. 22500    
156587092456.jpg-(17.01KB, 320×320, 45673984105_9764a69e3c_n.jpg)
22500
>>22499
Извиняюсь за поломанную разметку.
No. 22501    
>>22500
newString.lenght
Нужно - length
No. 22502    
>>22501
А здесь 16: letters.forEach((item, index, array) {
потерял =>. Раз уж ты пишешь на идеоне, то проверяй свой код там же.
No. 22503    
Вставлю свои 5 (пять) копеек.
>>22499
Object.keys — ты точно понимаешь, что оно делает?
for (i == 0;...

letters.forEach is not a function


newString[i] — а так можно разве?
No. 22504    
156598125130.webm-(1.81MB, 640×360, [a] AGDG Embassy S01-E15.webm)
22504
Как вкатиться в геймдев?
No. 22505    
Пишу контейнер (разновидность дерева) в C++. Объект дерева хранит обычный указатель на корневую иноду, а каждая инода хранит обычный указатель на, собственно, объект класса данных. Следует ли при удалении инод (а то и вызове деструктора всего дерева) сделать опцию также и для удаления объектов данных, на которые есть указатели в инодах? Или стоит оставить управление памятью объектов класса данных исключительно на совесть пользователя?

Использование описанной опции даст ошибку, если в дерево добавлен (добавление осуществляется по ссылке) элемент, являющийся локальной переменной или элементом массива, вектора или чего ещё. Обходом по дереву извне класса дерева нельзя уничтожать объекты класса данных, потому что они нужны для обхода дерева. Получать указатель на объект, удалять указатель на объект из дерева, и только затем удалять объект по сохранённому указателю, и так уничтожить все объекты данных по указателям в дереве — не то, чтобы медленно, но хочется-то O(n). Автоматическое управление памятью в виде shared_ptr ⇒ потенциальные +80MiB памяти (где-то 4% от скорее всего, но тем не менее) на большом количестве элементов и, что наиболее важно, ухудшение быстродействия, а также необходимость всегда использовать shared_ptr для добавления объектов класса данных в дерево и контроля их времени жизни. Стоит ли погружаться в пучину стандартов и реализаций STL для контейнеров? Как обычно реализуют управление памятью в контейнерах и коллекциях в С++?
No. 22506    
>>22505
>Обходом по дереву
Имеется ввиду обход в правильном порядке (от наименьшего по ключу к наибольшему) с использование итератора класса дерева. Итератор можно написать так, чтобы обход был за O(n) и в корректном порядке, но это не точно.
No. 22507    
156602036252.jpg-(261.84KB, 850×680, 2017-02-21-889758.jpg)
22507
>>22432
>1.
>>22457
>httpSession
Не нравится мне это решение — хранить ссылку на объект HttpSession в инстансе @ServerEndpoint. Похоже на какой-то хак, тем более, что на том же SO разработчик Jetty говорил, что такие объекты бесполезно мутировать. Да даже если и имеет смысл, то непонятно, к чему это приведёт при репликации/сохранении сессий.

>>22439
6. WebSocket контейнер — абсолютно автономный контейнер с ограниченной поддержкой CDI, но не суть. Даже если рукопожатие произошло в контексте JSF сервлета, получение JSF @SessionScoped бинов от последнего — задача нетривиальная, поскольку WebSocket контейнер работает в своём собственном контексте: https://stackoverflow.com/questions/36177742/how-to-propagate-cdi-session-beans-from-http-session-to-websocket-session Ещё более нетривиальной является задача передачи данных от @ServerEndpoint в JSF @SessionScoped бин.

7. EJB @ServerEndpoint. Нигде в спецификации не написано, что оно должно так быть, но так есть. https://abhirockzz.gitbooks.io/java-websocket-api-handbook/content/part-1-tying_in_with_the_java_ee_platform.html Для расшаривания данных можно заморочиться со @Stateful EJB: в отличие от CDI Managed Beans, они контекстно независимые. С другой стороны этот бин один хрен надо таскать по ссылке между контейнерами, так что он в данном случае от обычного POJO отличается лишь zero-cost сoncurency и необходимостью явного разрушения.

Можно было бы рассматривать WebSocket-ы как ещё один способ клиент-серверного взаимодействия — похоже, что JSR-356 дизайнили исходя из этого положения, — однако основной его фронт работы — это обеспечение полнодуплексного обмена данными на веб-страницах, — посему отсутствие интеграции с Servlet-контейнером довольно печально.

>>22495
Это соглашения именования (Naming Conventions), означать могут всё, что угодно — у каждого проекта они свои. Смотри в документации для разработчиков к конкретному проекту.

>>22505
Плюсы как-то мимо меня прошли...
Лучше всего было бы передавать в дженерик параметром настройки ссылку на метод деструктора с фоллбэком на NOP, как это сделано в коллекциях Ada 2005: кому надо, укажут, кому не надо — не укажут. Но это Ada, там с настраиваемыми абстракциями всё хорошо. Можно ли так делать в плюсах, мне неизвестно.
No. 22508    
>>22505
>Как обычно реализуют управление памятью в контейнерах и коллекциях в С++?
Запусти valgrind на тестовом векторе и посмотри.

А вообще,
>добавление осуществляется по ссылке
Это, блджад, контейнер, он должен инкапсулировать объект целиком и полностью, и добавлять копирующим конструктором. Если я вижу вектор интов, я ожидаю, что там инты, что на push() я создаю новый инт, что на clear() все инты убиваются в памяти сами. Иначе я бы сделал вектор указателей на инты, которыми бы управлял сам.
No. 22509    
156603755636.jpg-(121.50KB, 1810×344, by_ref.jpg)
22509
>>22508
Векторы, как я понимаю, в сущности класс-надстройка над низкоуровневым динамическим массивом. Это не совсем то. Пример более близких структур данных наподобие list, set и map был бы корректнее. К тому же, добавление в вектор всё равно осуществляется по ссылке. Хоть содержимое, на которое она указывает, и будет потом скопировано.

> Как обычно реализуют управление памятью в контейнерах и коллекциях в С++
> Это, блджад, контейнер, он должен инкапсулировать объект целиком и полностью, и добавлять копирующим конструктором. Если я вижу вектор интов, я ожидаю, что там инты, что на push() я создаю новый инт, что на clear() все инты убиваются в памяти сами.
Всё понятно, спасибо. Но плодить копии объектов мне как раз таки не нужно. Я пишу вещь не под инты или некий общий template, а под вполне конкретные классы. Обзову контейнером указателей на тогда, чтобы не было путанницы.

>>22507
> кому надо, укажут, кому не надо — не укажут
Так и сделаю, спасибо.
No. 22510    
>>22509
>добавление
Не добавление, а push_back то есть.
Удалить сообщение []
Пароль  
[Mod]