[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]

 [ Скрыть форму ]
Имя
Не поднимать тред 
Тема
Сообщение
Капча Капча
Пароль
Файл
Вернуться к
  • Публикация сообщения означает согласие с условиями предоставления сервиса
  • В сообщениях можно использовать разметку wakabamark
  • На данной доске отображаются исходные имена файлов!
  • Разрешенные типы файлов: video, music, code, archive, pdf, text, flash, image, vector
  • Тред перестает подниматься после 500 сообщений.
  • Треды с числом ответов более 100 не могут быть удалены.
  • Старые треды перемещаются в архив после 40 страницы.

No.36161 Ответ [Открыть тред]
Файл: 125860969610249.jpg
Jpg, 39.86 KB, 300×100 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
125860969610249.jpg
Доска посвящена созданию программ и всему, что с ним связано. Для обсуждения готовых программ, железа, устройств есть доска >>/lor/

Простые реквесты для ньюфагов >>28288
Помощь начинающим >>44688 (новый)
Оффициальный™ Лунного Сахара тред >>43581

Языки программирования:
Haskell >>35693
Lisp >>29402
Assembler >>32929
C++ >>43511
Java >>46281
C# и .Net >>27510
Perl >>37854
Python >>46029
Доска посвящена созданию программ и всему, что с ним связано. Для обсуждения готовых программ, железа, устройств есть доска >>/lor/

Простые реквесты для ньюфагов >>28288
Помощь начинающим >>44688 (новый)
Оффициальный™ Лунного Сахара тред >>43581

Языки программирования:
Haskell >>35693
Lisp >>29402
Assembler >>32929
C++ >>43511
Java >>46281
C# и .Net >>27510
Perl >>37854
Python >>46029
PHP >>23225
JavaScript >>40541
Pascal/Delphi >>37645

Фреймворки и библиотеки:
Ruby on Rails >>31319
Qt >>31597

Инструменты:
Vim >>33881
Emacs >>36714
Системы контроля версий >>28005

Прочие технологии:
SQL >>29820

Информатика:
Стеганография >>35350

"Кафедра сайтостроя": тред тут в /s >>31137 и тред в /u >>u/104773
Game Development тред тут >>39943 "Кафедра гейм-девелопмента" в /u: >>u/60525
Сообщение слишком длинное. Полная версия. Post was modified last time at 2016-09-25 12:06:13


No.46029 Ответ [Открыть тред]
Файл: pylogo0.png
Png, 126.61 KB, 800×642 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
pylogo0.png
Предыдущий >>37139 ушёл в бамплимит.

Краткая справка для новичков:
Официальный сайт: http://python.org/
Документация по стандартной библиотеке и разнообразные Tips & Tricks: http://docs.python.org/
неСвежая тема для священной войны, или руководство по выбору между версиями: http://wiki.python.org/moin/Python2orPython3
Ссылка для вопящих про дикие тормоза: http://speed.pypy.org/
Python для микроконтроллеров http://micropython.org или http://www.github.com/micropython
149 posts are omitted, из них 17 с файлами. Развернуть тред.
>> No.47472 Ответ
>>47471
Тоже интересно. В интернете в основном "как", но не "зачем".
>> No.47473 Ответ
>>47471
Например, это нужно чтобы блокирующие операции через res = yield f.read() эмулировать во всяких асинхронных фреймворках типа торнадо или твистеда.

Примерно так работает: функция возвращает обещание сделать read(); yield приостанавливает корутину и возвращает управление планировщику; когда read() реально закончится, планировщик вызывает .send(res) у корутины, передав в неё результат; корутина продолжает работу.
>> No.47474 Ответ
>>47473
Братик, я представляю для чего это можно нагромоздить. Спрашиваю реальные проекты.
>> No.47478 Ответ
>>46098
>>46098
>>46301
юзай коммьюнити эдишн
>> No.47504 Ответ
Файл: 2211.PNG
Png, 90.15 KB, 713×847 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
2211.PNG
Привет, анаконды. Очередной пост, полный ярости.
КАКОГО ХРЕНА?! КАК, БЛЯДЬ, ПЕРЕЧИСЛЕНИЕ ДВУХ, ТРЁХ ИЛИ ЧЕТЫРЁХ ИМЁН ИМПОРТИРУЕМЫХ МОДУЛЕЙ УХУДШИТ ЧТЕНИЕ КОДА, КА-А-А-АК??? ТАКОЕ ОЩУЩЕНИЕ, ЧТО ВСЕ ЭТИ ПРАВИЛА (ПО КРАЙНЕЙ МЕРЕ ПОЛОВИНА ИЗ НИХ) ОФОРМЛЕНИЯ КОДА СОЗДАНЫ ДЛЯ ТУПОГОЛОВО-СЛАБОУМНЫХ ПРОГРАММИСТОВ, ДЛЯ КОТОРЫХ ТРИ СЛОВА И ОДНА ЗАПЯТАЯ В ОДНОЙ СТРОКЕ – СТРАШНОЕ НАГРОМОЖДЕНИЕ СИМВОЛОВ, КОТОРОЕ НЕВОЗМОЖНО ВМЕСТИТЬ В ОПЕРАТИВНУЮ ПАМЯТЬ РАЗМЕРОМ В БАЙТ ВЫШЕУКАЗАННОГО КОДЕРАСА. ДЛЯ МЕНЯ, В ОТЛИЧИЕ ОТ ГВИДОНА ОПОССУМА, ПРОТИВОЕСТЕСТВЕННО ПЛОДИТЬ ЛИШНИЕ СТРОКИ, ДЛЯ МЕНЯ ЭТО КАК СПИСОК ПОКУПОК ИЗ ПЯТИ НАИМЕНОВАНИЙ ЗАПИСАТЬ НА ЛИСТЕ БУМАГИ ФОРМАТА A4. А ЕСЛИ ОТБРОСИТЬ ЛИЧНОЕ ОТНОШЕНИЕ, ТО ОСТАНЕТСЯ ТОТ ФАКТ, ЧТО ЧЕМ БОЛЬШЕ ЛИШНИХ СТРОК, ТЕМ БОЛЬШЕ КОД ПО ВЫСОТЕ, ЧТО БОЛЕЕ УСЛОЖНЯЕТ ПРОСМОТР, ЧЕМ УВЕЛИЧЕНИЕ ТЕКСТА ПО ШИРИНЕ. ПАРА СЛОВ И ОДНА СКОБКА, НЕ ПЕРЕНЕСЁННЫЕ НА НОВУЮ СТРОКУ, ЕЩЁ НИКОМУ НЕ СЛОМАЛИ ЖИЗНЬ.
Я закончил.

капча: ухты обидчивые Капча всё видит...
>> No.47505 Ответ
>>47504
Что ты хотел от языка, в котором отступы часть синтаксиса?
>> No.47507 Ответ
>>47504
Когда импорты на разных строчках, то их удобней сортировать пирамидкой по длине названия.
>> No.47508 Ответ
>>47504
Эта такая хуйня из под ногтей что я ебал ее маму в рот. Человеку доверять форматирование нельзя, нужно чтобы какой-нибудь блядский скрипт (https://www.pylint.org/ например) всё это дерьмо делал, если прописано в нем распидоривать импорты по строкам - пусть распидоривает.
>> No.47509 Ответ
>>47504
> ПРОТИВОЕСТЕСТВЕННО ПЛОДИТЬ ЛИШНИЕ СТРОКИ
Потому что ты нуб в программировании. Строки плодят по куче разных причин, это улучшает кучу разных вещей иногда. И иногда не только читаемость.
> УСЛОЖНЯЕТ ПРОСМОТР
Потому что ты нихрена не умеешь дробить на подпрограммы.

Эти чёртовы универские лабы не учат писать код, а только портят кодеров. Студент пишет код, получает зачёт и тут же его удаляет. И всегда код пишется на 20 минут, в сто строк от силы. И всегда - водиночку. При этом преподы сподвигают всё оптимиировать, не обращая внимание на реальный прирост производительности, который никто не измеряет. В результате все навыки, которые студент приобрёл оптимизированны под эти условия. А на работе толпа кодеров годами пишут одну единственную программу. Условия задачи меняются каждый день, руководители не могут написать одно тех. задание, и не менять его. Сотни тысяч строк кода. Кодеры увольняются, иногда умирают, приходят новые, а программа продолжает варится. Программа постоянно ломается и её надо чинить. Инструкции и документации часто недописаны, и код становится единственной надёжной документацией. Вот почему вообще весь процесс кодинга абсолютно иной.
>> No.47527 Ответ
>>47509
Синтактическая простота и стилевая строгость для языков с порогом вхождения обезьяны - это полезно в том числе для новичков, а также тех, кому от всего программирования нужно на уровне "наскриптить какой-нибудь автоматизации у себя на компе". Проще гуглить примеры, меньше выстрелов в ногу.


No.46762 Ответ [Открыть тред]
Файл: prev1955.jpg
Jpg, 22.66 KB, 590×442 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
prev1955.jpg
Тред помощи начинающим свой долгий и тернистый путь в дебри программирования. А также необузданных оленей, код-мартышек, выбора ЯП и иных платиновых вещей.
Но в первую очередь всё-таки помощи новичкам. Всё, чтобы зашедший сюда в первый раз мог почувствовать себя как дома.
Главное - без фанатизма.

Предыдущий: >>44688
338 posts are omitted, из них 55 с файлами. Развернуть тред.
>> No.47515 Ответ
>>47513
Не совсем так. Математическое доказательство концентрируется на доказательстве корректности алгоритма, а не на донесении самой идеи до чукчи-студента которому, суко, лень и над кодом порассуждать, и в английскую педивикию слазить, т.е. хорошо работает тогда, когда «я понимаю идею, но не верю, что она работает всегда»; когда понимания нет, доказательство лишь больше запутывает.
>> No.47516 Ответ
Тут есть кто-нибудь, кто разбирается в архитектуре программ? Вот говорят, что нужно скрывать от клиента реализацию, а насколько далеко имеет смысл в этом сокрытии заходить не говорят.
>> No.47517 Ответ
>>47516
Совершенный код Макконела, книга про ООП Бертрана Мейера.
>> No.47518 Ответ
Файл: Alice.Margatroid.full.396266.png
Png, 240.17 KB, 723×831 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Alice.Margatroid.full.396266.png
>>47516
Пользователь программной подсистемы и клиент должны видеть ровно то, что им необходимо для работы с подсистемой штатным путём, и ничего сверх этого. Не стоит в клиентской части показывать кровавые детали внутренней реализации потому, что они сбивают пользователя с толку, ухудшая читаемость, и могут постоянно меняться на протяжении всей жизни подсистемы, особенно если за простым интерфейсом скрывается довольно сложный программный комплекс. Исключением могут стать простые подсистемы, состоящие из одной-двух частей и предоставляющие один интерфейс, например, реализация стэка или очереди, однако здесь, опять же, пользователю бесполезна информация о самом механизме хранения элементов. Если подсистема является производной от какой-либо сторонней подсистемы, хорошим тоном будет указание данного факта в явной форме, т.е. если, например, клиентские типы являются производными от типов сторонней подсистемы, их определения не прячутся, а указывается полностью, поскольку подсистему-родителя могут поставлять совсем другие люди.
>> No.47519 Ответ
>>47514
Я другой анон, просто интересно.
>> No.47520 Ответ
Анон, есть ли системная вендовая функция, возвращающая название (не символ) клавиши по ее виртуальному коду?
>> No.47521 Ответ
>>47516
«Шаблоны корпоративных приложений» Мартина Фаулера еще.
>> No.47522 Ответ
>>47520
Вряд ли. Есть в всяких заголовочных файлах, сделай обратную табличку.
>> No.47523 Ответ
Файл: img.jpg
Jpg, 99.17 KB, 1220×1850 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
img.jpg
>>47516
http://www.adaic.org/resources/add_content/docs/95style/95style.pdf — внятные ответы на ваши вопросы.
>> No.47526 Ответ
>>47519
Например отступ (идентация) в куске где if(r<l). Можно подумать что этот if выполняется в цикле while() который чуть выше

Отсутствие отсупов в арифметических выражениях и сравнениях, например там:
if((a+first)<(a+last))
Лучше сделать
if((a + first) < (a + last))
и так далее

Еше например это
sort(a,first,l)
print(a,first,last)
я обычно ставлю пробелы после каждой запятой. Но вообще это все решается всяким автоформатированием (типа GNU Indent, clang-format и проч), который часто встраивается в IDE/редактор, но можно и отдельно вызывать


No.47480 Ответ [Открыть тред]
Файл: image-42.jpg
Jpg, 260.05 KB, 811×811 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
image-42.jpg
https://professorrating.org/professor.php?id=15707 скажем, я хочу завалить лайками этого преподавателя. Сайт учитывает лайки, если они с разных айпи поставлены, просто беру Hoxx VPN, и по списку подключаюсь к разным проксям, а потом по-новой. Прокатывает. Руками все делать не хочется, но я не программист. Поэтому прошу вас помочь, анончики.
>> No.47485 Ответ
>>47480
На сосаче такими вещами занимаются, у них спроси.


No.39943 Ответ [Открыть тред]
Файл: Izumi_Konata__DotAku_by_kssael.png
Png, 1539.48 KB, 800×792 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Izumi_Konata__DotAku_by_kssael.png
В этом ИТТ треде я буду собирать различные ссылочки по игрострою.
Любой мимокрок может присоединиться и подискутировать на тему разработок игор.
Кстати некто в /b/ уже предлагал всем Доброчаном игру запилить.

Итак
http://habrahabr.ru/post/153933/ Инструкция начинающего разработчика игр
http://habrahabr.ru/post/160547/ Как начать писать игры
http://live13.livejournal.com/462582.html Шаблоны игрового программирования. Перевод http://gameprogrammingpatterns.com/
http://game-icons.net/ няшные иконочки
http://www.roguebasin.com/index.php?title=Main_Page RogueBasin
http://habrahabr.ru/company/mailru/blog/195438/ Проектирование интерфейсов в MMORPG Skyforge
http://habrahabr.ru/company/mailru/blog/182088/ Базы данных в онлайн-играх. От Аллодов Онлайн до Skyforge
http://habrahabr.ru/post/164175/ Технология быстрого создания фонов для 2D-игр на базе 3D-заготовок (48 часов разработки)
http://habrahabr.ru/post/201680/ Автоматический генератор квестов
http://habrahabr.ru/post/111538/ Алгоритм «diamond-square» для построения фрактальных ландшафтов
В этом ИТТ треде я буду собирать различные ссылочки по игрострою.
Любой мимокрок может присоединиться и подискутировать на тему разработок игор.
Кстати некто в /b/ уже предлагал всем Доброчаном игру запилить.

Итак
http://habrahabr.ru/post/153933/ Инструкция начинающего разработчика игр
http://habrahabr.ru/post/160547/ Как начать писать игры
http://live13.livejournal.com/462582.html Шаблоны игрового программирования. Перевод http://gameprogrammingpatterns.com/
http://game-icons.net/ няшные иконочки
http://www.roguebasin.com/index.php?title=Main_Page RogueBasin
http://habrahabr.ru/company/mailru/blog/195438/ Проектирование интерфейсов в MMORPG Skyforge
http://habrahabr.ru/company/mailru/blog/182088/ Базы данных в онлайн-играх. От Аллодов Онлайн до Skyforge
http://habrahabr.ru/post/164175/ Технология быстрого создания фонов для 2D-игр на базе 3D-заготовок (48 часов разработки)
http://habrahabr.ru/post/201680/ Автоматический генератор квестов
http://habrahabr.ru/post/111538/ Алгоритм «diamond-square» для построения фрактальных ландшафтов
http://habrahabr.ru/post/232223/ Полезные ресурсы для гейм-дизайнера
http://habrahabr.ru/post/117420/ Текстурирование спрайтов с помощью (dis)placement map
http://habrahabr.ru/post/218401/ Инструментарий гейм-мастера
http://habrahabr.ru/post/154305/ Необходимые ресурсы для геймдизайнеров
http://habrahabr.ru/post/88161/ 5 способов, которыми игры пытаются вызвать зависимость
http://habrahabr.ru/post/199404/ Свен Винке о том, что же важней всего в RPG
https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking Source Multiplayer Networking - Valve Developer Community
Ещё в /u/ валялась кафедра геймдизайна.
Сообщение слишком длинное. Полная версия. 184 posts are omitted, из них 62 с файлами. Развернуть тред.
>> No.42821 Ответ
>>42820
Да, но, теперь, когда я об этом вспомнил, флеш чёрта с два запустишь на мобильнике. было вроде много нарекламировано фреймворков и шайтан-компиляторов, которые могли генерить какой-то код под флеш, браузер и/или мобильник. Что-то из этого преуспело вообще? Или в любом случае, игру, запускаемую под браузер и под мобильник придётся писать дважды? Хотя что за игра это будет, чтобы в неё с ручного тач-экрана и настольника с мышью, клавой и монитором играть то. Об этом я думал меньше всего
>> No.42822 Ответ
>>42814
> Это задача, а не протокол.
Это инструмент. Задача это что-то типа такого: надо синхронить позиции объектов меж клиентов и чтоб лагов поменьше было, да быстро запилить.
> Вопрос, как сделать, чтобы можно было слать клиенту данные без подтверждений от клиента?
Т.е. тебя устраивает, что ты потерял по дороге инфу о том, что пользователь нажал кнопку "убить всех"? Или ты городишь свой TCP поверх UDP. Зачем делать то, что и так умеет TCP? А с WebSocket мне даже пингование клиента реализовывать не требуется. Я туды сюды шлю байтики или текст и мне больше не требуется ничего пилить. Не требуется знать, как оно шлётся. Требуется только разобраться, что надо слать туды сюды. А когда впилят наконец долгожданный HTTP2, то вообще збс будет.
>>42815
> > Алсо без TCP/IP и на флеше не обойтись.
> Вай, зачем обманываешь? RTMFP работает через UDP же.
Без TCP обойтись можно. Без TCP/IP нельзя. Даже если это нативное приложение. Вот выходишь за пределы пеки и сетевых карт, тогда да можешь и без TCP/IP. ruwiki://IP лол.
>>42816
Да, но зачем?
>>42820
> В качестве аргумента против передачи пакетов данных без подтверждения
Аргумент в пользу WebSocket - меньше кода придётся пилить дополнительно. А значит меньше отлаживать. А значит меньше багов. А значит проще сопровождать код. А значит быстрее.

Впрочем вот это специально джля вас готовят http://www.w3.org/2012/sysapps/tcp-udp-sockets/ А ещё при большом желании можно через WebRTC пилить.
>>42814
> Это задача, а не протокол.
Это инструмент. Задача это что-то типа такого: надо синхронить позиции объектов меж клиентов и чтоб лагов поменьше было, да быстро запилить.
> Вопрос, как сделать, чтобы можно было слать клиенту данные без подтверждений от клиента?
Т.е. тебя устраивает, что ты потерял по дороге инфу о том, что пользователь нажал кнопку "убить всех"? Или ты городишь свой TCP поверх UDP. Зачем делать то, что и так умеет TCP? А с WebSocket мне даже пингование клиента реализовывать не требуется. Я туды сюды шлю байтики или текст и мне больше не требуется ничего пилить. Не требуется знать, как оно шлётся. Требуется только разобраться, что надо слать туды сюды. А когда впилят наконец долгожданный HTTP2, то вообще збс будет.
>>42815
> > Алсо без TCP/IP и на флеше не обойтись.
> Вай, зачем обманываешь? RTMFP работает через UDP же.
Без TCP обойтись можно. Без TCP/IP нельзя. Даже если это нативное приложение. Вот выходишь за пределы пеки и сетевых карт, тогда да можешь и без TCP/IP. ruwiki://IP лол.
>>42816
Да, но зачем?
>>42820
> В качестве аргумента против передачи пакетов данных без подтверждения
Аргумент в пользу WebSocket - меньше кода придётся пилить дополнительно. А значит меньше отлаживать. А значит меньше багов. А значит проще сопровождать код. А значит быстрее.

Впрочем вот это специально джля вас готовят http://www.w3.org/2012/sysapps/tcp-udp-sockets/ А ещё при большом желании можно через WebRTC пилить.

>>42821
> Хотя что за игра это будет, чтобы в неё с ручного тач-экрана и настольника с мышью, клавой и монитором играть то. Об этом я думал меньше всего.
Что-то такое http://beta.unity3d.com/jonas/DT2/ ? С другой стороны юнити делает нативные приложения под яблоко и ведро почти без изменений кода.
Сообщение слишком длинное. Полная версия.
>> No.43021 Ответ
Бамп кривой демкой https://yadi.sk/d/taA8W6tghHgVy
>> No.46773 Ответ
Все умерли. Впрочем это /s/.
>> No.46774 Ответ
Файл: Skyrim+roulette_147c41_5323395.png
Png, 84.86 KB, 814×774 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Skyrim+roulette_147c41_5323395.png
>> No.46811 Ответ
>>43021
> Blackman12exe.exe
> .exe
Ты серьёзно?
>> No.46862 Ответ
Ололо, пишу в свежем как говно мамонта тренде.
>> No.46893 Ответ
>>46862
> Ололо
Причём прямиком из 2009-го года.
>> No.47146 Ответ
Здравствуй. юный бородатый%% %%пограмист. Есть один сурс: https://github.com/swarmsim/swarm
Как в нём менять отображающийся текст, чтобы вмесвто ларвы были фунгусы, например%%, если я не знаю ничего кроме как немного хтмл+цсс и мизера из пхп и виндусовских, батных команд?
Да, я планктоно сапиенс.
>> No.47479 Ответ
>>47146
clone или download сырцов. Поиск и замена larva(e) на fungus(i).


No.36714 Ответ [Открыть тред]
Файл: 20z_ZW7lnTw.jpg
Jpg, 47.63 KB, 820×325 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
20z_ZW7lnTw.jpg
У нас есть Vim-тред, пусть будет и Emacs.
172 posts are omitted, из них 26 с файлами. Развернуть тред.
>> No.46932 Ответ
>>46924
Я не разобрался ни черта в том, что есть на emacswiki по этой теме.
>> No.47186 Ответ
>> No.47215 Ответ
Как восстановить последнее выделение текста? Чтобы типа как в виме по gv, только без эвил мода.
>> No.47216 Ответ
>>47215
C-x C-x
>> No.47220 Ответ
>>47216
Нет, это совсем не то.
>> No.47221 Ответ
>>47215
Я думал тут за пол часа набросать тебе решение, но понял что задача нетривиальная ввиду того, что путешествуя по истории регионов (выделений) ты будешь создавать новые выделения. В любом случае, публикую свои наработки:
http://pastebin.com/W321qZwe
>> No.47318 Ответ
Файл: -.png
Png, 3.51 KB, 235×49
edit Find source with google Find source with iqdb
-.png
Файл: -.png
Png, 9.83 KB, 900×92
edit Find source with google Find source with iqdb
-.png

Есть одна проблема. Использую емаксклиент, так вот если им попытаться открыть файл который нельзя читать, то вместо ошибки, происходит пик 1, дальше я жму ^C и терминал ломается до перезапуска, перестает отображаться вводимый текст и перевод каретки, весь вывод отображается в одну строку, можно ли это исправить?
>> No.47468 Ответ
>>47318
У меня выводится сообщение об ошибке в таком случае. Какая версия emacs, открываются ли файлы которые можно читать?
>> No.47469 Ответ
>>47468
Читаемые файлы открываются. Если emacsclient -c, то ошибка выводится, а если emacsclient -t, то ломается терминал.
Версия 24.5.1
>> No.47470 Ответ


No.23225 Ответ [Открыть тред]
Файл: JESUS-php.jpg
Jpg, 67.58 KB, 640×480 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
JESUS-php.jpg
Обыскал всю /s/, не нашёл треда.
Собственно хотелось бы освоить пхп и поднимать на нём лёгкие деньги. Какие создать себе условия с литературой, испытательным полигоном для большего удобства? И сколько времени уйдёт на это у неофита со средним IQ вроде меня? Пока даже не знаю с чего начинать, но буду каждый день или два отписываться о прогрессе.
471 posts are omitted, из них 83 с файлами. Развернуть тред.
>> No.47428 Ответ
Вопрос

http://arhivach.org/thread/245785/#956914

p-sch Аноним 19/03/17 Вск 15:04:01 #962 №956914

Вот я делаю студентов и уткнулся в проблему. Есть bootstrap.php и в нем перехват ошибок/исключений вида http://ideone.com/EkC1Qr . И все было хорошо и лампово, пока я не начал делать скрипты для вызова из консоли, что бы заполнять базу фейками (да я узнал про fzaninotto/faker и уже не мог остановится). В скриптах конечно вывод в консоль, а значит при возникновении ошибок обработчик исключений крошится при попытке отдать заголовки.
Завести глобальную переменную с флагом для консольных скриптов? Сделать отдельный bootstrap для них с другим обработчиком? Как это лучше исправить?

Ответ

Можно проверять через phpsapiname() например.

> fileputcontents(DIR . "/../logs/error.log",
есть стандартный лог ошибок и функция error_log(), не изобретай велосипед.
Вопрос

http://arhivach.org/thread/245785/#956914

p-sch Аноним 19/03/17 Вск 15:04:01 #962 №956914

Вот я делаю студентов и уткнулся в проблему. Есть bootstrap.php и в нем перехват ошибок/исключений вида http://ideone.com/EkC1Qr . И все было хорошо и лампово, пока я не начал делать скрипты для вызова из консоли, что бы заполнять базу фейками (да я узнал про fzaninotto/faker и уже не мог остановится). В скриптах конечно вывод в консоль, а значит при возникновении ошибок обработчик исключений крошится при попытке отдать заголовки.
Завести глобальную переменную с флагом для консольных скриптов? Сделать отдельный bootstrap для них с другим обработчиком? Как это лучше исправить?

Ответ

Можно проверять через phpsapiname() например.

> fileputcontents(DIR . "/../logs/error.log",
есть стандартный лог ошибок и функция error_log(), не изобретай велосипед.

> а значит при возникновении ошибок обработчик исключений крошится при попытке отдать заголовки.
Вряд ли. В консоли header просто игнориурется, по крайней мере в PHP5.

> require_once "../src/View/503.html";
Тут не указан конкретный путь к файлу. Это относительный путь, а относительно какой папки он указан? Это вообще работать не будет.

> header("HTTP/1.1 503 Service Unavailable", true, $timeout);
Почитай мануал по функции header и что идет 3-м параметром.
Сообщение слишком длинное. Полная версия.
>> No.47429 Ответ
Вопрос

http://arhivach.org/thread/245785/#956891

Просьба проверить код

Ответ

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/core/Model.php
Зачем нужен этот класс? Никто не говорит что ты обязан наследовать все модели от одного общего класса.

И определись, что ты назваешь моделью. Ты по моему все подряд классы этим словом называешь. Что такое MysqlModel?

Также, у тебя по моему непонимание, что такое наследование. А наследуется от B значит, что А - измененная версия B. Например, Банк это Организция, но с лицензией на банковскую деятельность и дополнительными возможностями, потому Банк можно наследовать от Организации.

Вопрос

http://arhivach.org/thread/245785/#956891

Просьба проверить код

Ответ

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/core/Model.php
Зачем нужен этот класс? Никто не говорит что ты обязан наследовать все модели от одного общего класса.

И определись, что ты назваешь моделью. Ты по моему все подряд классы этим словом называешь. Что такое MysqlModel?

Также, у тебя по моему непонимание, что такое наследование. А наследуется от B значит, что А - измененная версия B. Например, Банк это Организция, но с лицензией на банковскую деятельность и дополнительными возможностями, потому Банк можно наследовать от Организации.

У тебя наследуется непонятно что от непонятно чего. Класс для соединения с БД и класс для проверки авторизации наследуются оба от Model. Что у них общего? Ровно ничего, это разные классы для разных задач. Следовательно, наследование тут реализовано неправильно.

Идея с MysqlModel неудачная, так как ты смешиваешь загрузку каких-то конфигов и работу с базой. А зачем, если это можно делать в разных классах и просто передавать в класс для работы с базой уже созданный и настроенный объект PDO? У тебя просто все как-то переусложнено.

$config = loadinifile(...);
$pdo = new PDO(...);

Вот и все. Нет необходмости писать целый класс, чтобы создать объект PDO.

Каждый класс должен заниматься своим делом. Класс не должен одновременно занматься поиском пользователей в БД, валидацией и чтением конфигов.

Далее, почитай комментарии к задаче про студентов, я не хочу тут все пересказывать, в частности, про Dependency Injection. Именно она нужна в AuthModel.

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/models/MysqlModel.php#L82
Эта функция сделана неудачно, надо сделать вместо нее 4 отдельных функции (вроде queryNum(), queryAssoc() и тд) а не объединять функции с разным алгогритмом работы и разным типом возвращаемых значений. Это ненормально, когда одна функция может возвращать значения разных типов и это неудобно.

> запрос к БД
> без понятия зачем тут нужен новый уровень абстракции
Тогда не надо его делать. Ты должен понимать каждую строчку в своем коде. Пиши проще, чтобы все было понятно, не усложняй.

https://github.com/grigoryMovchan/auth/blob/auth_mvc/app/models/MysqlModel.php#L70
> } catch (PDOException $e) {
Почитай урок про исключения.

В общем, весь MysqlModel - это надо переписать полностью, так как там все намешано в кучу и непонятно, вообще за что класс отвечает. Также, ты все переусложняешь. Если ты хочешь что-то добавить в PDO то либо унаследуй PDO, либо сделай класс который принимает в конструктор объект PDO и предоставляет какие-то полезные функции.

И если ты не делал ООО Вектор, то советую начать с этой задачи, она помогает изучить основы ООП.
Сообщение слишком длинное. Полная версия.
>> No.47430 Ответ
Вопрос

http://arhivach.org/thread/245785/#956741
Аноним 19/03/17 Вск 08:05:18 #959 №956741

На постгрес меня хероку заставил перебраться. Ты писал о том, что в постгрес можно использовать regex-ограничения для полей, но я не совсем понимаю зачем. Мне кажется, если злоумышленник обойдёт PHP-ограничения, то продублированные регулярки на стороне БД вряд ли чем-то помогут. Про CI прочитал, попробую поднять. Насчёт уровня покрытия тестами, то мне кажется, что чем он выше, тем более хрупкими будут тесты (так как их придётся постоянно подстраивать под изменения в проекте).

Ну и можно делать файлообменник на Симфони? Там уже много чего настроено из коробки (есть дебаг-панель, cli-утилиты, проще тестировать, чем Silex, есть плагин для PHPStorm, добавляющий автодополнение для сервисов/шаблонов/функций Twig и так далее). Понимаю, что оверхед, но взамен готов делать более сложные задания по файлообменнику.

Просьба проверить:

- скидки http://arhivach.org/thread/245785/#946704 | https://bitbucket.org/learning_acc/discounts/
- http://arhivach.org/thread/245785/#947452 | https://github.com/kubk/students

Ответ
Вопрос

http://arhivach.org/thread/245785/#956741
Аноним 19/03/17 Вск 08:05:18 #959 №956741

На постгрес меня хероку заставил перебраться. Ты писал о том, что в постгрес можно использовать regex-ограничения для полей, но я не совсем понимаю зачем. Мне кажется, если злоумышленник обойдёт PHP-ограничения, то продублированные регулярки на стороне БД вряд ли чем-то помогут. Про CI прочитал, попробую поднять. Насчёт уровня покрытия тестами, то мне кажется, что чем он выше, тем более хрупкими будут тесты (так как их придётся постоянно подстраивать под изменения в проекте).

Ну и можно делать файлообменник на Симфони? Там уже много чего настроено из коробки (есть дебаг-панель, cli-утилиты, проще тестировать, чем Silex, есть плагин для PHPStorm, добавляющий автодополнение для сервисов/шаблонов/функций Twig и так далее). Понимаю, что оверхед, но взамен готов делать более сложные задания по файлообменнику.

Просьба проверить:

- скидки http://arhivach.org/thread/245785/#946704 | https://bitbucket.org/learning_acc/discounts/
- http://arhivach.org/thread/245785/#947452 | https://github.com/kubk/students

Ответ

> Ты писал о том, что в постгрес можно использовать regex-ограничения для полей, но я не совсем понимаю зачем.
Для защиты базы от наполнения кривыми данными при ошибке разработчика. Ты или твои коллеги, если они есть, можете ошибиться и дополнительные проверки помогут обнаружить эту ошибку, не дадут заполнить базу неправильными данными.

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

> Насчёт уровня покрытия тестами, то мне кажется, что чем он выше, тем более хрупкими будут тесты (так как их придётся постоянно подстраивать под изменения в проекте).
Хрупкость тестов больше зависит не от их количества, а от того, как они написаны. Подстраивать тесты придется, если меняется логика использования класса, но при таких серьезных изменениях тебе ведь наверняка захочется их протестировоать, и все равно пришлось бы писать или переделывать тесты на этот класс.

Такое бывает, при каких-то больших рефакторингах. Ты переделываешь класс (или вообще заменяешь на другой), потому тебе надо править весь код, работавший с ним, включая тесты.

> Ну и можно делать файлообменник на Симфони?
А не хочешь сделать testhub из ОП поста? Хотя бы частично. Файлообменник на Симфони это стрельба из пушки по воробьям. Там Slim/Silex + Twig + Doctrine лучше подойдет. И так как ты почти все это использовал в студентах, то это по сути будет то же самое и ничему новому не научит. Не думаю, что тебе стоит вообще делать файлообменник. Он предназначен для тех, кто студентов делал без микрофреймворков.

Testhub по сложности близок к реальным проектам.

А еще, в ОП посте есть задание на SPA (никто пока не осилил), если ты хочешь поработать с JS и решал более простые задачи по этой теме.

> Настораживает, что функция автора статьи при epsilon 0.00001 считает, что 1000000 и 1000001 равны: http://floating-point-gui.de/errors/NearlyEqualsTest.java
epsilon это ведь не абсолютная разница, а относительная, относительно сравниваемых чисел. Ну то есть epsilon умножаем на 1000000 чтобы получить абсолютную разницу, получается 10 по моему.

Ну если взять числа побольше, вроде 100000000000000 то на 32-битной системе разницы с числом на единицу больше не будет. Она потеряется в погрешности хранения флоатов. По идее epsilon можно выбирать исходя из этой погрешности хранения флоатов, но тут другой подвох - если сделать несколько операций подряд, то погрешность может суммироваться и превысить epsilon. Потому его выбирают исходя из задачи.

Например, если у тебя сравниваются цены, то точнее копеек сравнивать их не надо. Или если ты обрабатываешь данные по результам измерений напряжения, то опять же нет смысла при сравнении ставить epsilon больше чем погрешность вольтметра. Ведь все приборы имеют какую-то конечную точность.

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

Скидки

Задача про скидки тут: http://www.cyberforum.ru/php-oop/thread1459985.html
Решение анона: https://bitbucket.org/learning_acc/discounts/
Пост анона: http://arhivach.org/thread/245785/#946704
Комментарии:

> Мне кажется есть смысл сделать её неизменяемой, а не надеяться, что пользователь вспомнит вызвать clone (вот я как раз забыл).

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

https://bitbucket.org/learning_acc/discounts/src/be3e1a13fda16af5b5397c94428c4d9b25632d29/src/DiscountResult.php?at=master&fileviewer=file-view-default
> if ($priceWithDiscount < 0) {
> throw new \LogicException(
Вообще для такого случая лучше подходит InvalidArgumentException. Вот тут есть объяснение где используется LogicException: http://stackoverflow.com/questions/5586404/logicexception-vs-runtimeexception/5586510#5586510 и InvalidArgumentException как раз наследуется от него, и уточняет причину ошибки.

Еще один подвох в твоем коде - переменная в конструкторе скидок называется $percent, но она хранит число от 0 до 1. Стоило бы добавить проверку что она в этом диапазоне, так как кто-то может подумать что там именно проценты от 0 до 100. Или использовать там проценты.

> $originalSum = $matchedProducts->calculatePricesSum();
> return new DiscountResult($matchedProducts, $originalSum - $originalSum * $this->percent);
Это так часто встречается, что может стоило сделать в DiscountResult статический конструктор для группы товаров и скидки в N%?

Насчет неизменяемости ProductCollection: там же по-прежнему есть addProduct, какая-то неизменяемость получилась не совсем полноценная.

> $products = clone $this->products;
> $products->detach($product);

> return self::fromSplObjectStorage($products);
Тут в fromSplObjectStorage происходит лишнее копирование объекта Spl, тоже не очень удачно. Лучше наверно обойтись без addAll().

Но это все мелкие советы по улучшению, так-то задача хорошо решена.
Сообщение слишком длинное. Полная версия.
>> No.47431 Ответ
Вопрос

Просьба проверить код, пост анона http://arhivach.org/thread/245785/#947452

Ответ

Не знаю, заметил ли ты, но при добавлении CI около коммита появляется галочка, если тесты пройдены успешно: https://github.com/kubk/students/commits/master , причем клик по ней ведет на подробности. Сразу видно, если кто-то сломал код.

Также, галочка ставится для отдельных веток: https://github.com/php/php-src/branches

Ну и если например кто-то делает пулл-реквест с предложением изменений, то опять же, прогоняются тесты и пишется, не сломались ли тесты, как тут: https://github.com/php/php-src/pull/2427

Это помогает при командной разработке, особенно в больших опен-сурс проектах.

https://github.com/kubk/students/blob/master/tests/StudentGatewayTest.php#L97
Вопрос

Просьба проверить код, пост анона http://arhivach.org/thread/245785/#947452

Ответ

Не знаю, заметил ли ты, но при добавлении CI около коммита появляется галочка, если тесты пройдены успешно: https://github.com/kubk/students/commits/master , причем клик по ней ведет на подробности. Сразу видно, если кто-то сломал код.

Также, галочка ставится для отдельных веток: https://github.com/php/php-src/branches

Ну и если например кто-то делает пулл-реквест с предложением изменений, то опять же, прогоняются тесты и пишется, не сломались ли тесты, как тут: https://github.com/php/php-src/pull/2427

Это помогает при командной разработке, особенно в больших опен-сурс проектах.

https://github.com/kubk/students/blob/master/tests/StudentGatewayTest.php#L97
> public function searchProvider()
Я тут еще подумал, что можно было проверять не найденные id, а найденные имена/фамилии - тогда данные для теста выглядели бы более наглядно. Хотя и id можно использовать, там все равно нужны тестовые данные.

> > - передаем строку с тегом и проверяем, что на выходе тега нет
> > - вызываем htmlentitydecode на результате и проверяем, что получилась исходная строка
> Если правильно понимаю, то второй пункт работает, только если искомая строка не будет найдена. В противном случае результат будет содержать тег b или mark, и исходную строку от такого результата не получим
Я имел в виду под htmlentitydecode еще и вырезание тегов наверно. Но это все равно не универсально, так как например найденное слово может выделяться не только тегами,а например добавлением каких-нибудь скобок. Совсем универсально тест тут не написать, получается.

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

> Теперь html в php нет https://github.com/kubk/students/blob/master/src/LinkGenerator.php#L47
> , но как мне кажется, тут https://github.com/kubk/students/blob/master/templates/student-list.twig#L14+L15
> какой-то низкоуровневый код в шаблоне. Ну и ссылка генерируется только в одном месте, нужен ли макрос, который будет использоваться лишь один раз?
Теперь не нужен.

https://github.com/kubk/students/blob/master/scripts/publish-frontend.sh#L3
> mkdir public/vendor public/vendor/{css,js}
Тут стоит добавить флаг на случай если папка существует. Также, в bash-скриптах полезно ставить в начало set -e чтобы при первой ошибке скрипт завершался. Иначе он будет продолжать работать все равно.

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

https://boiling-brook-29265.herokuapp.com/form
Пол лучше делать радиокнопками, так как в них все опции видны и доступны сразу, без лишних кликов. Выпадающий список используют, чтобы сэкономить площадь ценой более сложного доступа к опциям, но для 2 пунктов там экнономить особо нечего.

И смесь английских подписей к форме и русских слов в интерфейсе не очень логично смотрится.

> https://boiling-brook-29265.herokuapp.com/?notify=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%20%D0%BD%D0%BE%D0%B2%D1%8B%D0%B9%20%D1%81%D1%82%D1%83%D0%B4%D0%B5%D0%BD%D1%82%21
Ты указываешь текст в GET-параметре. Тут есть риск: злоумышленник может вывести произвольный текст и как-то использовать это для обмана пользователя, который доверяет сервису. Если бы это было в популярном сервисе вроде вконтакте - это однозначно была бы уязвимость и наверняка как-то использовалось бы.

https://github.com/kubk/students/blob/master/src/StudentGateway.php#L14
> private $table = 'students';
Тут ты вынес название таблицы, но зачем? Менять ты его вряд ли будешь, и скорее всего в итоге просто будет менее удобно искать где она используется, а также читать SQL запросы.

> public function studentsAreTheSame(Student $studentA, Student $studentB): bool
Возможно, эту функции логичнее поместить в Student. Вроде $a->isSame($b) или Student::areSame(). Второй вариант позволяет принимть null.

Насчет PageObject, да, у тебя они довольно удобно сделаны.

https://github.com/kubk/students/blob/master/tests/ControllerTest.php#L41
> $this->assertTrue($client->getResponse()->isRedirect());
Вот эта проверка, что мы залогинились, мне кажется, не очень точная. Если бы мы писали сценарий для тестера-человека, мы бы вряд ли писали там "проверить, что произошел редирект".

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

А после разлогинивания - соответственно проверить пропадение этого признака.

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

Задание про игру сапер с использованием MVC
Код: https://github.com/greenTea242/MinesweeperMVC
Пост: http://arhivach.org/thread/245785/#945676

Ответ

> if (typeof strCell != "string") {
> throw new ConsoleGameControllerException("Неправильный тип аргумента strCell. Ожидается" +

Не помню, говорил я или нет, для таких проверок удобно сделать функцию вроде assert или даже целый набор таких функций:

assert(typeof strCell == "string");
Assert.hasType(strCell, "string");
Вопрос

Задание про игру сапер с использованием MVC
Код: https://github.com/greenTea242/MinesweeperMVC
Пост: http://arhivach.org/thread/245785/#945676

Ответ

> if (typeof strCell != "string") {
> throw new ConsoleGameControllerException("Неправильный тип аргумента strCell. Ожидается" +

Не помню, говорил я или нет, для таких проверок удобно сделать функцию вроде assert или даже целый набор таких функций:

assert(typeof strCell == "string");
Assert.hasType(strCell, "string");
Assert.notEmpty(x);

Так и компактнее, и читабельнее. И может быть есть готовые библиотеки.

> new ConsoleGameControllerException
Для такого случая, если совсем строго смотреть, логично исплоьзовать что-то вроде InvalidArgumentException, или TypeError, который вроде бы уже есть в яваскрипте. То есть это исключение не привязано к конкретному контроллеру. Потому что это ошибка в написании кода в общем, а не специфичная для этого контроллера ошибка.

> } catch(error) {
> console.log(error.name + ":" + error.message);
Ты зря это делаешь, так как консоль по умолчанию выводит непойманные исключения, да еще со ссылками на код и стектрейсом, а в твоем случае данных меньше.

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

https://github.com/greenTea242/MinesweeperMVC/blob/master/src/controllers/DomGameController.js#L103
> DomGameController.prototype._setEvents = function() {
Вот эта функция должна быть в view, а не в controller, так как это вью знает на что он должен подписываться в DOM, а контролллер это знать не должен. То есть это стоило перенести во вью.

> DomGameView.prototype._createDevTools = function() {
> DomGameView.prototype._createHeader = function() {
Вот эти функции, которые по кусочкам создают интерфейс, можно было бы обойтись без них, если бы у нас был нормальный шаблонизатор, который умеет инклудить подшаблоны. Им можно было бы и поле создать.

> DomGameView.USERTOOLSOPTION_1 = "1";
> DomGameView.DEVTOOLSOPTION_1 = "1";
Есть риск что эти константы где-то перепутаются, так как у них одинаковое значение. Лучше делать разное.

> DomGameView.prototype._setGame = function(game) {
Не уверен что эта функция так уж нужна, может проще было в конструкторе написать this._game = ... ? Но так, ошибки конечно нет, вдруг когда-нибудь понадобится подменять модель на другую.

> this._field.querySelector("td[data-x=" + x + "][data-y= " + y + "]");
Быстрее наверно было бы использовать словарь со ссылками на нужную ячейку, чем запускать поиск по DOM перебором всех ячеек. Хотя на маленьких полях разница вряд ли будет заметна.

В событии DomGameViewEvent.POPUP_CREATED возможно имело смысл передавать ссылку на попап как параметр события.

> for (var i = 0; i < classList.length; i++) {
> div.classList.add(classList[i]);

А можно так: x.className = classList.join(' ');

> var keys = Object.keys(dataAttr);
> for (i = 0; i < keys.length; i++) {

А можно for (key in dataAttr). Что-то ты основы JS подзабыл.

> Util.repeatString
раз уж ты используешь ES5 (Array.isArray), там есть функция и для повтора строк.

> CellSet.prototype.hasCell
> return this._parentContainer[y][x] !== undefined;
Для проверки ключа в словаре есть оператор in, его логичнее использовать. так например

return y in this.pc && x in this.pc[y];

или

return !!(this.pc[y] && this.pc[y][x]);

!! - приведение к boolean

https://github.com/greenTea242/MinesweeperMVC/blob/master/src/models/CellSet.js
Тут у тебя в нескольких функция скопипащен вложенный цикл по клеточкам. Возможно, стоило его вынести в функцию или использовать forEach.

parentContainer лучше было назвать cells.

Еще, у тебя там в модели есть куча проверок, что разные cellSet не равны null. может было проще в конструкторе создать эти CellSet, а при рестарте игры просто их очищать, например вызовом метода clear(). Тогда просто код был бы чуть проще, так как это поле не могло бы быть пустым.

Еще, теоретически можно было сделать эти CellSet генераторами событий изменения клеточек и числа флагов, чтобы гарантировать что мы не упустили ничего. Но это могло бы и усложнить код.

В общем, я думаю, сделана игра хорошо. Вью конечно получился немного большим по объему, там много ручной работы с DOM. Но зато интерфейс достоверно воспроизведен, включая иконку с рожицей.

Советую дальше изучать Knockout, Anlular 2 или React. В первых 2 проблема рутинного кода работы с DOM решается через data binding, в последнем через перерендеринг страницы.

Сделать на них можно какую-нибудь форму с валидацией или страницу конфигурации чего-нибудь (вроде сборки заказа с разными параметрами). Или какой-нибудь мессенджер (это вроде модно сейчас в стартап-среде). Или можешь посмотреть на задание на SPA в ОП посте и попробовать кусочек из него сделать. Никто пока не осилил.
Сообщение слишком длинное. Полная версия.
>> No.47433 Ответ
>>47432
Норкоман штоле?
>> No.47435 Ответ
>>47432
Весело у вас там, а за что зобанили?
>> No.47438 Ответ
>>47435
Скорее всего по ключевым словам или по ошибке:

> Ошибка постинга: Постинг запрещён. Бан: 701768. Причина: Общее 9 - Вайп, спам, обход спам-листа

В /d/ тоже никто ничего не отвечает.
>> No.47439 Ответ
>>47431
>>47430
Спасибо большое за ответы!

> Ты указываешь текст в GET-параметре. Тут есть риск: злоумышленник может вывести произвольный текст и как-то использовать это для обмана пользователя, который доверяет сервису.
Исправил так: https://github.com/kubk/students/commit/1e649bacaf548c63471862be726c81dfcaae49b6
Правда, строки "edited" и "registered" нигде не документированы.

По поводу служебного URL, проверяющего залогиненость - что он должен возвращать для залогиненого, а что для не залогиненого пользователя?

> А не хочешь сделать testhub из ОП поста? Хотя бы частично.
Я ещё не все задачи по SQL сделал и по вёрстке, не хотелось бы прыгать через задания, у меня по файлообменнику много вопросов.
Например, мне нравится лёгкость использования наследования в Доктрине, можно ли использовать наследование вместо объекта MediaInfo? Основные типы файлов (картинка/аудио/видео/архив) будут иметь по своему классу, с такими объектами удобнее работать, так как мы точно знаем какие свойства и методы у них есть. Есть ли смысл тут использовать Class Table Inheritance? Понимаю, что получение одной сущности - это джойн вместо селекта, а для вывода списка всех файлов - куча джойнов. Для пользователей планирую использовать Single Table Inheritance.
>> No.47440 Ответ
>>47439
> Правда, строки "edited" и "registered" нигде не документированы.

Можно сделать класс, например Notification, и в нем константы NOTIFY_EDITED и тд.

> Я ещё не все задачи по SQL сделал и по вёрстке, не хотелось бы прыгать через задания, у меня по файлообменнику много вопросов.

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

> Например, мне нравится лёгкость использования наследования в Доктрине
Я бы настороженно к наследованию относился, там из-за наследования могут быть не очень эффективные запросы в некоторых случаях (ну это конечно надо смотреть).

> Основные типы файлов (картинка/аудио/видео/архив) будут иметь по своему классу, с такими объектами удобнее работать, так как мы точно знаем какие свойства и методы у них есть.
Я думаю, тут выгоднее вместо наследования просто сделать для MediaInfo хранение JSON-данных в колонке. В сущности хранить объект MediaInfo. А в Доктрине настроить автоматическое конвертирование MediaInfo в JSON-данные при загрузке/записи в БД.

>>47439
> Правда, строки "edited" и "registered" нигде не документированы.

Можно сделать класс, например Notification, и в нем константы NOTIFY_EDITED и тд.

> Я ещё не все задачи по SQL сделал и по вёрстке, не хотелось бы прыгать через задания, у меня по файлообменнику много вопросов.

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

> Например, мне нравится лёгкость использования наследования в Доктрине
Я бы настороженно к наследованию относился, там из-за наследования могут быть не очень эффективные запросы в некоторых случаях (ну это конечно надо смотреть).

> Основные типы файлов (картинка/аудио/видео/архив) будут иметь по своему классу, с такими объектами удобнее работать, так как мы точно знаем какие свойства и методы у них есть.
Я думаю, тут выгоднее вместо наследования просто сделать для MediaInfo хранение JSON-данных в колонке. В сущности хранить объект MediaInfo. А в Доктрине настроить автоматическое конвертирование MediaInfo в JSON-данные при загрузке/записи в БД.

Тут просто проблема в том что у медиаданных может быть много разных свойств, в зависимости от формата файла (попробуй сам посмотреть дампы данных в демо getId3: http://www.getid3.org/demo/ ). В таких ситуациях, сложно и неудобно реализовывать наследование и гигантские таблицы с 50 полями. Тут проще использовать либо EAV (Entity–attribute–value) либо, как я написал, сериализацию (кодирование в виде строки) данных с помощью JSON.

Наследование пригодится в тестхабе, для разных типов вопросов и ответов.

> По поводу служебного URL, проверяющего залогиненость - что он должен возвращать для залогиненого, а что для не залогиненого пользователя?

Так как это только для тестов, то можно возвращать что угодно, я бы использовал либо ответ в виде текста 0/1 либо в виде JSON, с его помощью можно передать много данных.

> Понимаю, что получение одной сущности - это джойн вместо селекта, а для вывода списка всех файлов - куча джойнов.

Джойны нужны, но не так много:

SELECT FROM base LEFT JOIN class1 ON ... LEFT JOIN class2 ON ... LEFT JOIN class3 ON ...

Для Concrete TI можно сделать N выборок, объединенных в UNION:

SELECT FROM class1
UNION
SELECT FROM class2
UNION
...

Вообще, у 3 подходов к наследованию есть свои сильные и слабые стороны, и надо их изучить. Ну например, у Concrete TI трудно обеспечить уникальность id в нескольких таблицах (в БД вроде Postgres, где генератор id - отдельная от таблицы сущность, это возможно), нельзя сделать внешний ключ на сущность не из одной конкретной таблицы. Где-то выборки становятся сложнее, и тд.
Сообщение слишком длинное. Полная версия.


No.43511 Ответ [Открыть тред]
Файл: 599716131.png
Png, 77.78 KB, 317×372 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
599716131.png
Предыдущий тред: >>39226
259 posts are omitted, из них 13 с файлами. Развернуть тред.
>> No.47285 Ответ
>>47283
У меня задача из разряда числодробилок. Вектор будет работать чуть-чуть, но медленнее.

Как лучше всего создать динамический трёхмерный массив? С точки зрения наиболее высокой скорости вычисления.
>> No.47286 Ответ
>>47285
Ну я не знаю, создай структуру, в которой будет указатель и размер, делов-то.
>> No.47287 Ответ
>>47286
Да это понятно. Я спросил, чтобы понять, как это работает, потому что вроде бы значение размера массива есть, но узнать его почему-то нельзя. И почему в Ц++ так сделано, не понятно.
>> No.47288 Ответ
>>47287
Так оператор "new", он же просто-напросто вызывает функцию "malloc()", и только-то.
А в ней не предусмотрено хранение длины (прав доступа и других полезных данных), т.е. в этой части C++ всё как в 60-70 годы.
>> No.47290 Ответ
>>47288
> и только-то
И вызывает конструктор.
>> No.47291 Ответ
>>47285
> У меня задача из разряда числодробилок. Вектор будет работать чуть-чуть, но медленнее.
Не будет.
"Преждевременная оптимизация - корень всех зол".
Сперва воспользуйся профайлером, потом оптимизируй.

> Как лучше всего создать динамический трёхмерный массив?
Как динамический одномерный.
>> No.47301 Ответ
>>47291
> Как динамический одномерный.
Но тогда при доступе к каждому элементу будет выполняться две операции целочисленного умножения и ещё минимум 2 операции сложения. Не слишком ли высоки издержки?
>> No.47302 Ответ
>>47301
> Не слишком ли высоки издержки?
Чтобы узнать, высоки издержки или нет, ты должен использовать "профайлер" (profiler) - инструмент, который определяет, сколько именно времени твоя программа тратит на вычисление каждой конкретной функции. Если профайлер покажет тебе, что на функцию доступа к трехмерному массиву программа затрачиват 50% времени от всего времени своей работы (или даже 10%) - тогда, конечно, эти издержки высоки и хранение массива нужно будет оптимизировать.
На практике, даже в совершенно числодробильных задачах доступ к массиву будет занимать ничтожную долю времени (<<1%). Поэтому можно уверенно считать, что издержки пренебрежимо малы, до тех пор, пока не доказано обратное.
>> No.47303 Ответ
>>47301
Нет, эти издержки настолько малы, что на современных архитектурах процессоров они даже могут вообще не появиться из-за тонкостей работы кешей и конвееров. Попытка подрезать пару таких операций тут и там вообще не гарантирует хоть какого-то даже очень малого ускорения, может даже стать рандомно медленнее. Это всё работает гораздо сложнее чем просто "послдовательность операций, каждая из которых ест сколько-то времени"
>> No.47434 Ответ


No.37854 Ответ [Открыть тред]
Файл: aadhhaaeo.jpg
Jpg, 15.55 KB, 300×300 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
aadhhaaeo.jpg
Не нашел перлотреда.
Листал пиратбей и наткнулся на книжку "Beginning Perl". Стоит ли читать?
Спрашиваю, потому что давно уже ничего не кодил, с линукса перелез на шинду, многое уже подзабыл.
87 posts are omitted, из них 5 с файлами. Развернуть тред.
>> No.47011 Ответ
Книжка по Perl'у для самых маленьких
http://dobrochan.com/cr/res/56650.xhtml

Может кто подсобит
>> No.47012 Ответ
>>47011
Есть же орайлевская серия с всякими козочками, три штуки для разного уровня, и с переводом. Весьма годные.
>> No.47013 Ответ
>>47012
Я знаю, я их читал
>> No.47014 Ответ
>>47011
Зачем писать очередную книжку для умирающего языка?
>> No.47222 Ответ
Почитал бы книжки по Perl 6 на русском.
Но судя по сырноватости языка, их не будет еще долго.
>> No.47223 Ответ
>>47222
Он не взлетит и не нужен.
Просто игрушка для его разработчиков.
>> No.47370 Ответ
А есть ли какие-нибудь задачки под перл? Что-то вроде ruby koans, например?
Совсем нету идей на быдлокод не считая имаджборды на Mojo.
>> No.47371 Ответ
>> No.47372 Ответ
>>47371
Ого, спасибо.
>> No.47380 Ответ
>>47371
Надо же, там есть пример где в JavaScript из функции возвращается другая функция.
Нашим бы школкам да бурситетам такую книгу.


No.43581 Ответ [Открыть тред]
Файл: -.jpg
Jpg, 125.61 KB, 700×500 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
-.jpg
Новый традиционный тред Доброчана, в котором мы будем постить каждый раз, когда заходим в /s/ дабы поделиться своими хоббипроектами, поговорить о смежных с программингом вопросах, поспорить на тему X vs Y, пообсуждать синтаксический сахар разных ЯП. Как обычно можно постить и в другие моменты, обсуждать разные темы. Всё во имя того, чтобы зашедший code monkey не чувствовал себя одиноким. Каждому зашедшему по чашечке скумы за мой счёт.

Предыдущий тред: >>40630
312 posts are omitted, из них 33 с файлами. Развернуть тред.
>> No.46754 Ответ
>>46753
Спасибо, буду иметь в виду.
>> No.47310 Ответ
Выскажу свои мысли по поводу ИНС.
Нейросети способны на многое, но, обучив нейросеть, мы не будем знать, как она устроена. И, если ей потребуется использовать свои навыки при обучении другой задаче, и потом ещё одной - получится слишком уж громоздкое нечто.
Приведу пример. Мы научили нейросеть распознавать речь. Потом пытаемся научить её же понимать смысл речи. Потом - научить саму составлять предложения. Потом - подражать при этом определённому голосу, образец которого ей дали услышать. А то и вовсе определённому характеру говорящего.
Задача будет усложняться всё сильнее и сильнее, сложность окажется словно возведённой в степень.
Поэтому требуется сначала обучить ИНС программированию. И чтобы она, обучаясь чему-то, переводила алгоритм в аккуратный, чистый код, который она будет тщательно оптимизировать (как оптимизировать - этому её тоже надо обучить). Он по-прежнему будет громадным, многогигабайтным, непонятным для любого человека, но уже гораздо оптимальнее для хардвера. И он будет использоваться для последующей задачи.
>> No.47313 Ответ
>>47310
Интересно-интересно.
Искуственные нейронные сети - это перемножение матриц. Но в таких словах почему-то нету волшебства. Сравни: "Мы перемножаем 1000 матриц матриц размером 1000х1000, и так 1000 раз" и "У нас есть ИНС, обученная распознавать речь". Суть одна, а названия разные, и названия влияют на наше отношение к предмету.
Любая ИНС и так переводит алгоритмы в "аккуратный, чистый код". Код, который выглядит примерно так: 0.876 0.113 0.204 0.471 0.895 0.519 0.914 0.824 0.136 0.647... (это весовые коэффициенты сети)... А код, который пишет программист руками, выглядит примерно так: 72 101 108 108 111 32 119 111 114 108 100... То есть, разницы нет вообще ну просто никакой. Если только посмотреть под другим углом.
Глядя на числа, описывающие искуственную нейронную сеть, невозможно понять, что она умеет делать. Но глядя на числа, описывающие программу, созданную естественной нейронной сетью другого человека, почему мы думаем, будто понимаем, что она умеет делать? Если она сложнее hello world?
Фраза "Оптимально для хардвера" тоже провоцирует на мысли. "Код", как мы его обычно представляем - "исходный" код - предназначен для описания алгоритмов, работающих на фон-неймановской архитектуре. В то время как нейронная сеть - не фон-неймановская архитектура. (И по ряду характеристик - более продвинутая архитектура). Так зачем же нейронной сети учиться переводить себя в код для более примитивной архитектуры?
Хочет ли, например, твоя личная, естественная нейронная сеть, перевести себя в текстовое представление? То есть, напечатать себя в текстовом файле, и умереть?
>> No.47373 Ответ
Анон, в чём сложности создания ИИ?
Чуть шире- можно ли создать электронную душу?
Кто знает, может быть кто-то пробовал создавать?
>> No.47374 Ответ
>>47373
Человеческий мозг еще слабо изучен. Души нет. ИИ пробовали создавать IT гиганты типа гугла, эппла, etc. На современной железячно-программной базе даже ИИ на уровне насекомого уже получается ебических размеров, с ебическим потреблением энергии бандура. Вот запилят кванотвые компы, тогда и поглядим.
>> No.47375 Ответ
Файл: tmp_24568-serveimage135764653.png
Png, 325.03 KB, 720×400 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
tmp_24568-serveimage135764653.png
Ребёнок учится говорит три года, пробуя подражать взрослым.
Для ведения сложных разговоров человек тратит десять-пятнадцать лет.
Для создания человекоподобного ИИ потребуется столько же лет, сколько требуется для воспитания ребёнка. Да, некоторые аспекты воспитания (как, например, обучение искусству правильного держания ложки) естественным образом отпадают, но посыл такой - если вы хотите сделать человека, обращайтесь с примитивным ИИ как с человеческим ребёнком.
А восстание машин произойдёт только из-за того, что люди злые. Яблоко от яблони, и пока мы не научимся сами обращаться друг с другом по-человечески, ничего хорошего мы нк добьёмся.
>> No.47376 Ответ
>>47373
https://habrahabr.ru/post/216633/

> В моделях, использующих пластичность синапсов для объяснения природы памяти, емкость памяти считается достаточно просто. Характерное для нейрона количество синапсов – 10 000 (104). Если полагать, что один синапс хранит один бит информации, то получается 1.6x1010 x 104 = 1.6x1014 бит или приблизительно 2x1013 байт. Это около 20 000 гигабайт или 20 терабайт. Объем достаточно скромный даже по сегодняшним меркам.
> Если предположить, что активная жизнь человека около 80 лет, из которых он треть проводит во сне, то это составит 80x365x(24-8)x60x60 = 1681920000 (1.7x109) секунд. Получается, что если не учитывать организацию памяти, а просто заполнять ее в течение жизни, то можно позволить скорость записи 2x1013/1.7x109=1.18x104 байт/секунду или около 10 кбайт/секунду.
> В нашей модели оценка объема памяти выглядит несколько иначе. Оценка синаптической памяти не меняется, те же 20 терабайт. Но это только память, хранящая образы нейронов-детекторов. Основные объемы приходятся на внесинаптические рецептивные кластеры. Если задаться оценкой, что один внесинаптический образ формируется из сигналов порядка 100 синапсов, то можно оценить информационную емкость одного элемента, как 100 бит. Исходя из оценки, что поверхность нейрона может содержать порядка 100 000 рецептивных кластеров, получаем емкость памяти 1.6x1010x105x100 = 1.6 x1017 бит или 2x1016 байт. Что составляет 20 000 терабайт или 20 петабайт.

У тебя есть комп с такими вычислительными характеристиками?
>> No.47377 Ответ
>>47375
> Для создания человекоподобного ИИ потребуется столько же лет, сколько требуется для воспитания ребёнка.
У вас миллиарды лет эволюции отклеились.
>> No.47378 Ответ
>>47375
Да и вообще. Твою мать. Это же сраная битардская дохуя умная паста. Ты, блядь, вообще знаешь, СКОЛЛКО раз тут было написано это дерьмо? Тысячи раз.
>> No.47379 Ответ
>>47378
> СКОЛЛКО
ВО


No.32929 Ответ [Открыть тред]
Файл: ss-(2013-07-05-at...
Png, 5.64 KB, 456×59
edit Find source with google Find source with iqdb
ss-(2013-07-05-at-05.37.07).png
Файл: 2000_-_asctrix178...
Gif, 22.68 KB, 640×480
edit Find source with google Find source with iqdb
2000_-_asctrix1780.gif
Файл: qoob_demoscene_mo...
Jpg, 51.51 KB, 500×453
edit Find source with google Find source with iqdb
qoob_demoscene_modeller_02.jpg

Привет, анон.
Совсем недавно я был причислен к слоупокам я узнал о существовании такой вещи как демосцена. Это дало мне толчок для изучения ассемблера. В данный момент я умею только вызывать некоторые системные функции Win32 на FASM, то есть совсем ничего не умею.
Итак, анон, мне нужны понятные уроки для работы с ассемблером, а лучше всего, с графикой на ассемблере, желательно, чтобы они были датированы нашим тысячелетием. Приветствуются советы и напутствия мудрого анона. Может быть стоит заняться чем-нибудь более полезным? Уверен, я не дойду до стадии, когда смогу писать завораживающие интро размером 64Кб, но в любом случае знания не должны пропасть даром.
Подари мне мечту, доброчан.mp3
110 posts are omitted, из них 10 с файлами. Развернуть тред.
>> No.47248 Ответ
>>47247
Могу переделать на GCC с at&t синтаксисом ассемблерной вставки, подойдет?
>> No.47249 Ответ
>>47248
Если не сильно затруднит.
>> No.47250 Ответ
>>47248
Если не затруднит.
>> No.47257 Ответ
>>47250
Вот, под линуксом в GCC собирается и работает под 32 бит, в виндах не тестировал.
https://paste.debian.net/hidden/d14e0a7a/
>> No.47258 Ответ
>>47257
Вот этот комментарий убрать можно, он не нужен
// "mov eax, data\n\t"
и еще можешь имена меток поменять на какие-нибудь другие, например вместо done: сделать end: и тому подобное
>> No.47262 Ответ
>>47257
Столько лет, а все никак не могут прикрутить мультилайн для асма без вот этого вот пердолинга с кавычками\newline и отдельных .s-файлов.
>> No.47263 Ответ
>>47262
Это все ерунда на самом деле. Нормальному программисту не составит труда написать примитивнейщий скрипт, который бы на вход принимал код на ассемблере, и приводил его к виду, подходящему для асмовставки, т.е. на каждую строчку чтобы были эти открывающие/закрывающие кавычки и \n\t. Да и наверняка такие скрипты уже кем-то написаны
>> No.47264 Ответ
>>47263
Однострочник на перле или авк.
>> No.47327 Ответ
>>47263
Всё можно, но толку от этого пердолинга? Надо, чтобы gcc собирал микс сразу, а не для каждого файла делать пердолинг. И чтобы читаемость была.
>> No.47333 Ответ
>>47327
Ассемблерные вставки используются сейчас настолько редко, что никого это не волнует


[0] [1] [2] [3] [4] [5] ... [48] [49] [50]
Пароль:

[ /b/ /u/ /rf/ /dt/ /vg/ /r/ /cr/ /lor/ /mu/ /oe/ /s/ /w/ /hr/ ] [ /a/ /ma/ /sw/ /hau/ /azu/ ] [ /tv/ /cp/ /gf/ /bo/ /di/ /vn/ /ve/ /wh/ /fur/ /to/ /bg/ /wn/ /slow/ /mad/ ] [ /d/ /news/ ] [ Главная | Настройки | Закладки | Плеер ]