Ычан: [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 сообщений]
Ответ в нить [Последние 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 кБ.
  • Ныне 3103 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
247 сообщений пропущено. Показаны 50 последних сообщений Развернуть все изображения
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 то есть.
No. 22520    
>>22495
Имена, начинающиеся с одного символа подчёркивания, в глобальном пространстве имён и в ::std зарезервированы для реализации стандартной библиотеки. Имена, начинающиеся с двух символов подчёркивания или одного underscore с последующей за ней заглавной буквой, в любом пространстве имён и для любого использования тоже зарезервированы для STL. Впрочем, использование начинающихся с двух символов подчёркивания имён в стандартных заголовочных файлах даже для локальных переменных, когда не может быть конфликтов с именами из пользовательской программы, не может быть объяснено этими соображениями, в таких случаях это конвенция, видимо.
No. 22521    
156615670163.png-(122.68KB, 800×531, 2018-04-28-960485.png)
22521
>>22520
В данном случае слово «зарезервировано» означает лишь организационное мероприятие: разработчики языка и стандартных библиотек решили, что будут использовать такие имена. Это не значит, что ты не сможешь физически создать свои переменные с такими именами, это значит, что отсутствие побочных эффектов, в том числе конфликта имён на этапе компиляции, тебе никто не гарантирует. Т.е. это соглашение в чистом виде. Можно ему не следовать, если ты, к примеру, разработчик стандартной библиотеки или самодвижущийся деревянный болван.

Что до смысла этих префиксов внутри компонентов, то он остаётся на совести разработчика. Их может лепить IDE или форматтер подавляющее большинство имён в Джаве выбрано IDE, к слову, разработчик может вообще не вкладывать в префиксы никакого смысла — просто так принято писать; может вкладывать свой локальный. Зависит в общем-то от того, насколько полное соглашение и насколько строго ему предлагается следовать.
No. 22523    
А вы любите конфетки? http://www.jsweet.org/ Можно писать на JS пока пишете на Java.
No. 22567    
156725968118.jpg-(728.32KB, 1080×720, Houseki_no_Kuni_full_2043411.jpg)
22567
Продолжим тему счастливого лисоводства (которая 52 ESR).

Есть конечный автомат — модуль WebSocketEndpoint, предназначен для установки соединения, настройки RPC, приёма/отсылки команд и реконнектов. Имеет состояние вида type State is (START, SETUP, READY, RESTART, STOP, ERROR);. Состояние переключается данными из инстанса вебсокета (который pv_ws = new WebSocket (URL); pw_ws.onopen = pm_onopen; ... и создаётся внутри WebSocketEndpoint). В нормальных браузерах работает нормально. В лисе такое чувство, что JavaScript многозадачный.

Кейс 1-й: Сервер отсылает данные в последовательности (A, B, C), лиса активирует обработчик onmessage в произвольном порядке, т.е. (B, C, A) или (C, A, B), e.t.c. Ладно, сделаем простой conversation. Сделано, получаем...

Кейс 2-й: Клиент и сервер обмениваются сообщениями по очереди, т.е. A-> && <-B && C->, где “->” — от сервера клиенту; “<-” — от клиента серверу. Все хорошо с порядком, но состояние инстанса WebSocketEndpoint не изменяется. Такое чувство, что он просто клонируется на каждое сообщение. Это мракобесие волшебным образом исчезает при включении отладчика.

Вопрос: WTF?

>>22507
8. WebSocket протоколы оказывается все разные, старые в апп-серверах побанены due to multuple protocol's bugs; на томокате, походу, вообще нет старых версий. В итоге оно работает только в модерновых браузерах, а остальные посылает подальше, т.е. клиент коннектится и сразу же сервер закрывает соединение.
No. 22569    
>>22567
Похоже галка «Отключить HTTP-кэш» в настройках дев-тулзов лисы отключает какой-то другой кэш. Очень весело смотреть, как курсор при пошаговом исполнении выпрыгивает из функции на комментарий и чешет себе дальше. При закрытии дев-тулзов тоже ничего не происходит, всё остаётся по старому. Зато честно загружает с сервера скрипты и стили, вопрос только, куда? Способ грохнуть кэш для сайта я так и не нашла. Ну и ещё косяк: у исключений e.stacktrace печатает стектрейс места своего вызова, а не места, где было вызвано исключение.
No. 22617    
>>22569
Не читал остальной тред, но кажется, что я могу знать в чем суть описанной в вашем посте проблемы. По крайней мере, одной из них.
У браузеров кроме кэша на диске есть ещё и in-memory кэш. То есть, это кэш в оперативной памяти и без него браузер нормально работать просто не может, так что вряд ли вам удастся его отключить.

Хотя утверждать этого я не могу, это только мои предположения.
No. 22618    
>>21947
Не делай там ничего и не оставляй никаких приватных данных. Они твою имиджборду удалят, а аккаунт заблокируют без указания причин (причины им не нужны, им нужны твои данные и то что ты будешь держать на сервере).
Кажется, я там делал что-то. К счастью, никаких важных данных им не оставил. А мою то ли футабу, то ли вакабу они просто удалили через пару дней.

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

Очень поздно ответил, но лучше так, чем совсем ничего. Скупой платит дважды. Не забывайте.
No. 22620    
156797095941.png-(385.40KB, 800×800, 15659436632210.png)
22620
>>22567
9. Enterprise — это кластер. Нельзя обойти эту тему. https://www.thomas-schuett.de/2014/04/11/websocket-und-der-cluster/ Вкратце, проблема в том, что концепция WebSocket-ов убивают концепцию кластера: если ноды в кластере полностью одинаковы с точки зрения клиентов, то наличие в них WebSocket-соединений делает каждую ноду уникальной, поскольку соединения не могут реплицироваться. Отсюда даже приложение для чата на кластере становится нетривиальным в реализации.

Ну и забавная книжечка, у которой нет оглавления (но главы можно открыть через Гугл, например), и которая, внезапно, содержит низкоуровневые детали протокола: http://enterprisewebbook.com/ch8_websockets.html

>>22523
Как обычно, идея хорошая, реализация не очень. Бардак в кодогенераторе с версиями JS: что-то генерируется под ES3, что-то — под ES6, контроля нет. Куча недоделок, которые некому пофиксить уже больше года. Классы оно делает через revealing module паттерн, т.е. ничего особо хитрого, к чему нельзя было бы прийти самостоятельно.

>>22617
Там вообще дичь какая-то приключилась — файлы загружаются с сервера, это по логам видно, в отладчике отображаются эти загруженные файлы, исполняется какая-то смесь из старых и новых файлов. На пошаговой отладке оно показывало, что выполняет закомментированный участок кода потом вышагало за пределы функции и пошло дальше по пустым строкам. Без отладчика оно, похоже, всегда использует старые версии файлов и обновляет их когда ему приспичит. Ну и стектрейсы меня убили: догадайся, мол, откуда оно прилетело. Короче, ну его нафиг, этот Firefox, для разработки он с такими глюками не подходит. В Макстоне ещё более-менее отладчик, и то он у меня вешается тысячью и одним способом, т.е. такое себе минное поле — туда не нажимай, сюда не нажимай. Блин, почему в Presto был нормальный отладчик?

>>22618
>им нужны твои данные и то что ты будешь держать на сервере
Им может быть просто пофиг на тебя и твои данные. В результате технических работ что-то пошло под rm -rf, да и пёс с ним. Новый админ не на ту кнопку нажал. Или твой сайт что-то ломает в их системе и админу лень разбираться. Общественного резонанса всё-равно не будет, ты же не пойдёшь писать в блог гневные посты о том, что бесплатный хостинг утерял твои данные, — на то он и бесплатный.
No. 22623    
>>22620
Может быть пофиг. А может и не быть. Подозрительное поведение хостинга подсказывает, что им лучше не доверять.
No. 22633    
>>22623
Доверие в бизнесе не имеет ничего общего с человеческим доверием: это просто когда обе стороны знают, что другой стороне не выгодно кидать партнёра. Как только одна из сторон получает иную информацию, доверие испаряется. Отсюда вопрос доверия к бесплатным услугам левых дядей может разве что улыбку вызвать.
No. 22684    
Есть ли более короткий, чем
$i++ while $s>>$i
способ найти максимальный занятый разряд в $s?
No. 22685    
>>22684
Еще можно тупо через логарифмы:
$s ? int(log($s)/log(2)+1) : 0
но я не уверен, что это лучше
No. 22686    
>>22685
>$s ? int(log($s)/log(2)+1) : 0
int(log($s*2+1)/log(2))
^_^
No. 22689    
>>22684
Если под «короче» понимается быстрее, то в таких случаях лучше написать несколько версий и протестировать их. Если под поиском максимального занятого разряда понимается поиск индекса (отсчитывая справа) первого слева бита, для которого значение равно еденице, то на плюсах, по крайней мере, получается, что вот этот
int result = 0;

if(value == 0)
    return -1;
for(unsigned int i = int_type_size / 2; i != 0; i /= 2 ){
    if(value >> i){
        result += i;
        value = value >> i;
    }
}
return result;
метод, ищущий индекс ненулевого бита беззнакового числа value, работает заметно быстрее, нежели формула return value != 0 ? (int)(log(value) / log(2)) : -1. А именно, на 2²⁸ случайных беззнаковых 64-битных целых со случайным количеством ведущих нулей в старших разрядах выполнение первого алгоритма заняло 2.645, а использование логарифмов — 3.959. Чуть хуже логарифмов справился бинарный поиск — 5.104. Поиск индекса в цикле подобном >>22684 занял 12.184. Разница во времени выполнения сохраняется достаточно стабильно.

Но PHP (или что это) вещь скриптовая, и там может быть всё совершенно иначе. А ещё могут быть такие данные, для которых с высокой вероятностью первый ненулевой бит будет в первых старших [левых] разрядах, нежели в младших, и тогда простой цикл будет быстрее.
No. 22691    
PS Компиляция производилась с O2, O3 ломает порядок тестовых операций и делает вещи медленнее, ffast-math излишне ломает точность деления и приводит к неверным результатам. int_type_size есть размерность переменной value в битах, полагается, что она является степенью 2.
No. 22694    
>>22689
>для которых с высокой вероятностью первый ненулевой бит будет в первых старших [левых] разрядах, нежели в младших, и тогда простой цикл будет быстрее.
Угу, как раз мой случай. В 99% случаев, там используются только 1-2 крайних разряда, так что "вилка" будет требовать большего количества итераций.

>PHP (или что это) вещь скриптовая
Это перл. Но не суть важно.
В общем, интереса ради прогнал тесты:
>>22684 — 18с
>>22685 — 14с
>>22686 — 15с
• пустышка, которая вообще ничего не делает — 11с
И всё это — на количестве, на 20 порядков меньшем, чем у тебя. В общем, на скриптах гоняться за скоростью — смысла нет…
No. 22701    
>>22694
>на 20 порядков меньшем
А нет, вру. Мне показалось, что в >>22689 — 10²⁸, а там 2²⁸. Так что — всего на порядок и даже меньше. Но всё равно…
No. 22702    
>>22701
Я надеюсь, запуск Перла ты не учитывал?
No. 22703    
>>22702
А причем здесь его вызов? Всё изнутри считалось. А так — накладные расходы на вызов функции и обход массива в цикле жрут, как можно видеть по последней строке в >>22694, в 2-3 раза больше, чем сама операция.

А на самом деле, если всё аккуратно подсчитать, то получаем, что на логарифмах си в 2.3 раза быстрее перла, что вполне похоже на правду.
No. 22704    
>>22703
>2.3
Но ведь 14 / 3.959 уже 3.536. А данных на перле, как я понимаю, было несколько меньше при этом. Как же оно 2.3-то получается? А вообще, по-хорошему нужно учитывать рабочую тактовую частоту ядра (3.4 GHz у меня), набор инструкций (ivybridge), кэш, способ тестирования (у меня, в частности, за счёт inline и O2, вызова функций, считавших индекс, не было, была подстановка их кода в место использования, ещё прямо в цикле рассчёта индексов была проверка результата алгоритма по соответствующему элементу массива ответов), память и прочее.
No. 22705    
156851966542.jpg-(86.63KB, 1200×600, 1456465550598.jpg)
22705
Сохранил в линуксе вывод консоли через оператор ">>" в файл. Там среди прочего был вывод содержимого конфига командой cat. Обрезал в текстовом редакторе лишнее, оставив только конфиг. Запускаю значит, программа ругается что там какие-то дерективы отсутствуют. 3 часа думаю, что я слепой и смотрю на полностью валидный конфиг. Потом замечаю что вывод в терминале этого файла через cat дает 1,5 строки. Оказывается, формат окончания строк там был от макоси. Сконвертировал в unix, стало все нормально.
Вопрос: как? Откуда? При чем тут макось?
Изначально я сохранял вывод docker build . >> file.txt, в Dockerfile была директива RUN cat httpd.conf
No. 22707    
>>22704
Просто ночью спать надо. Я разделил, вместо того, чтобы умножить. На деле разница около 20. А с учетом того, что исполняется оно на разных компах, сравнение смысла не имеет вообще.
No. 22708    
>>22705
Выполнение cat httpd.conf в терменале (без Docker'а) даёт МакОС-style завершение строки или '\n'? Если '\n', то можно предположить, что конфигурация Docker'а такова, что он ковертирует все '\n' в '\r' (или что там у них). А вот если cat сам по себе даёт '\r' как символ завершения строки, то это уже интереснее.
No. 22710    
156858855671.jpg-(95.23KB, 450×600, 2015-02-10-710173.jpg)
22710
>>22684
++$i while $s >> $i

На сотню-другую милли-секунд быстрее. На ассемблере вряд ли будет как-то иначе:

   POP S LDI I,8 ; for 8-bit register
LOOP:
   LSL S BRCS END
   DEC I BRNE LOOP
END:
   PUSH I

Но вообще, оптимизация по производительности Перла — это отдельный навык, который никому не нужен и никуда более не применим. Почти что как старый JS без JIT-а.
No. 22712    
А вы тут умнее мейлачеров из pr ?
No. 22713    
156866244233.png-(304.76KB, 700×700, 2016-07-24-848579.png)
22713
>>22712
Не могу сравнивать — я там не бываю.
No. 22714    
>>22710
>На ассемблере вряд ли будет как-то иначе
Хотя если говорить про высокоскоростные branchless-реализации на ассемблере и C, то можно использовать умножение де Брюина: http://supertech.csail.mit.edu/papers/debruijn.pdf — по скорости оно конкурирует с нативными процессорными реализациями, однако требует наличия в процессоре инструкции целочисленного умножения.
Btw, это, однако, является оффтопом к вопросу.
Удалить сообщение []
Пароль  
[Mod]