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

Предыдущий: >>44688
272 posts are omitted, из них 45 с файлами. Развернуть тред.
>> No.47409 Ответ
Оперативную память загружают только переменные и константы, а процессор нагружают операции?

>>47405
Ясно.
>> No.47412 Ответ
>>47409
Эти вопросы очень тяжело предсказать. Ты уходишь в очень тонкие дебри. Чтобы на них ответить, нужно разбирать конкретную машину, конкретную ОС и конкретный компилятор. В целом скорее да, почти. Но это очень приблизительно.
>> No.47414 Ответ
>>47341
В Паскале разве есть производные типы и их иерархии? То, о чем ты говоришь, — подтип, та же самая сущность, что и оригинальный тип, но с другим именем и опционально имеющая ограничения по диапазону.
>>47404
Ну, компилятор под эту переменную может поюзать низкоразрядный регистр. А может и не поюзать. Смотри документацию на компилятор.
>>47409
Память загружают данные, процессор — инструкции MOV с этими данными. Остальное можно считать статистически незначимым. :o)
>> No.47418 Ответ
>>47409
Переменные и константы - это термины уровня ЯП, а вопрос, если я правильно понимаю, о технической организации хранения данных и вычилительного процесса. В ЦП есть своя память, даже несколько уровней, один оперативнее другого. Регистры - это тоже ячейки памяти. Короче, Таненбаума почитай, например.
>> No.47419 Ответ
Допустим, мне нужно считать из файла данные, а если файл не открылся, получить их из stdin. Насколько удачной идеей будет сообщить, что файл не найден, предложить ввести данные, а затем указателю на файл присвоить stdin и считывать? Это экономит несколько строк кода, но я не уверен, будет ли это правильно работать.

>>47414
>>47418
Спасибо.
> :o)
Это смайлик со вторым подбородком?
>> No.47421 Ответ
>>47419
Чтобы читать stdin, вместо имени файла надо задавать "-".
>> No.47422 Ответ
Файл: Мистер_Бин.png
Png, 328.48 KB, 465×524 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Мистер_Бин.png
>>47419
На клиентской стороне не должно быть разницы, откуда читать. У меня и то, и другое имеют тип FileType и можно сделать просто SetInput (StandartInput); loop GetImmediate (Symbol); case Symbol is ... end case; end loop; Учитывая, что модуль Text_IO наполовину состоит из импортированных сишных подпрограмм, то же должно быть верным и для тебя.
<-
>> No.47423 Ответ
Файл: 853759-cirno.jpg
Jpg, 14.74 KB, 320×320 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
853759-cirno.jpg
>>47421
>>47422
Ничего не понял. У меня такая задача: считать и разобрать данные, а потом произвести над ними некоторые манипуляции. А считываются они по дефолту из файла, а если такового нет, то юзверю предлагается ввести их вручную. Вопрос в том, нормально ли написать FILE *F; ... F = stdin; (ну или F = fopen("-", "r")), или лучше отдельно расписать случай считывания, без использования F вообще, строго через stdin и использующие его функции?
>> No.47424 Ответ
Файл: bean.png
Png, 45.54 KB, 104×358 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
bean.png
>> No.47437 Ответ
>>47423
> Вопрос в том, нормально ли написать
Да, это на планете Земля давно известно.


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.47436 Ответ
Привет, Анон!
Тред ещё жив? У меня вопросы по Unity, делаю 2d-игрушку.


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.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
138 posts are omitted, из них 17 с файлами. Развернуть тред.
>> No.47352 Ответ
>>47347
снимается вопрос. Обновление системы помогло.
>> No.47406 Ответ
Вопросы крайне тупые, но буду очень благодарен, если ответите на них:
1. У меня 64 разрядная операционная система. С официального сайта python скачал последнюю версию для Windows, но она 32 разрядная. Можно на ней спокойно работать или лучше скачать 64 bit? Если 64, то какой файл скачать, там их несколько (наверно embeddable zip file, но лучше уточню у знатоков).
2. Как поменять цвет, стиль в Pycharm? в поисковике написал tools и прочие варианты, вместо меню мне выдаёт файлы программы, где это прописано кодом. Неужто единственный вариант это вручную прописать их?
>> No.47407 Ответ
>>47406
Второй вопрос решил скрыв проект лол
>> No.47408 Ответ
>>47406
1. Что офсайт даёт скочять по большой кнопке СКОЧЯТЬ ПИТХОН, то и качай, очевидно же! Варианты загрузки с дебрей сайта для тех, кто знает, зачем им это, настолько же очевидно же! Но, думаю, если скачаешь executable, то получишь тот же нормальный прекрасный рабочий инсталлер, только 64-битный, и проблем (отличий) не будет. Сам же я всегда ставлю 64-битную Анаконду с сайта континуумов. Там и модулей куда больше насыпано, и Jupyter Notebook в комплекте.

https://www.continuum.io/downloads
>> No.47410 Ответ
>>47408
Спасибо!
>> No.47411 Ответ
>>47406
Лучше поставь линукс, там питон искаропки.
>> No.47415 Ответ
>>47411
Современные линуксоиды настолько отупели, что не в состоянии установить пакет если он не включен в дистрибутив? Охуенно живем.
>> No.47416 Ответ
>>47415
Дело в том что если нужно разрабатывать проект посложнее хеллоуворлда, то придется ставить еще дохерища портированных юникс-утилит, настраивать с переменными окружения, шаманить батники и всё такое. После такого сеанса красноглазия один хер поставишь линукс в виртуалку, а потом поебавшись с виртуалкой поставишь линукс в дуалбут. Я через это дерьмо проходил, винда - это кромешный пиздец, а не ОС для разработки.
>> No.47417 Ответ
>>47416
Да и на любой системе всё тоже самое, если нужно разрабатывать проект посложнее хеллоуворлда. Но да, на определённых стеках технологий с линуксом проще. Потом ты ставишь базы, хранилища, те же самые переменные окружения и конфиги - как минимум самого разрабатываемого проекта, зависимости, сервак и т.п.
>> No.47420 Ответ
>>47416
Три года всё делаю на Винде, вообще нет никаких проблем.


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
Ассемблерные вставки используются сейчас настолько редко, что никого это не волнует


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.
169 posts are omitted, из них 25 с файлами. Развернуть тред.
>> No.46890 Ответ
Файл: Снимок-экрана-от-2016-12-02-22-39-39.png
Png, 366.46 KB, 1600×900 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
Снимок-экрана-от-2016-12-02-22-39-39.png
Зацените организацию файлов в моём .emacs.d
Идея очень проста. Есть файл с общими настройками редактора, а есть вызов, настройка, назначение клавиш каждого мода в отдельном файле. Всё это вызывается в init.el
На скриншоте всё предельно ясно...
>> No.46892 Ответ
>>46890
Кто как хочет - так и пишет. Ну ты понел.
>> No.46924 Ответ
>> 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.28005 Ответ [Открыть тред]
Файл: git.jpg
Jpg, 80.27 KB, 750×600 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
git.jpg
Собственно вопрос про гит например.

Есть некоторая удаленная репа, до которой имеем ssh-доступ. Когда я пушаю в нее с локальной, то запускается скрипт .git/hooks/post-receive, в котором там что-нибудь делается с проектом (чистится кэш, компилируются шаблоны, запускаются миграции и прочая херота).
#!/bin/sh
GIT_WORK_TREE=.. git checkout -f
echo "Something pushed to server. Yay!"
../scripts/update.sh
# например
Возможно ли запускать на удаленном сервере этот мой update.sh не один раз на пуш, а на каждый коммит (даже на те коммиты, которые во вмерженых в основную ветку бранчах)?
39 posts are omitted, из них 9 с файлами. Развернуть тред.
>> No.37689 Ответ
>>37687
Спасибо добрый человек )).
>> No.37711 Ответ
>>37689
> ))
Уходи.
>> No.41427 Ответ
А для чего нужно watchers и starts на гитхабе?
Ну стал я вотчером репозитория, и где мне смотреть, что изменилось в нем?
Нет, серьезно.
>> No.41428 Ответ
>>41427
> stars
слоуфикс
>> No.41429 Ответ
>>41427
На главной странице приходят обновляния.
А стары это просто типа лайки, ну и закладка одновременно.
>> No.47272 Ответ
Файл: who_the_fuck_is_that.JPG
Jpg, 8.89 KB, 210×40 - Нажмите на картинку для увеличения
edit Find source with google Find source with iqdb
who_the_fuck_is_that.JPG
ЯННП. Вот я создал на гитхабе репозиторий. Вот я закоммитил в него. И оно мне отображает пикрилейтед. Но я вообще не знаю что это за хуй такой "cincrement", коммитил я с совершенно другим ником. Я удалил репозиторий, и закоммитил снова ("initial commit" - это мое описание). То же самое.
Кто это такой, и схуяли ему приписывается мой коммит?
>> No.47273 Ответ
>>47272
У гита есть свой собственный юзернаме и емайл, которые можно настроить вот как-то так https://git-scm.com/book/ru/v1/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%9F%D0%B5%D1%80%D0%B2%D0%BE%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-Git
Если ты их не настроишь то они будут браться от текущей учотки.
>> No.47274 Ответ
>>47273
Но оно даже сделало ссылку на его профиль (пустой). И я точно нигде не мог использовать "cincrement", само это слово не гуглится что указывает на то что оно не дефолтное, а локальный git log выдаёт Author: [юзернейм] <a@b.c>. Где юзернейм - это юзернейм, который я указывал при коммите. Но я использовал для этого всего TortoiseGit.
>> No.47275 Ответ
>>47274
Вот по тортосу я хз, в шинду юниксовые консольные утилиты идут через тысячи потных нигерско-вьетнамских жоп, каждая пиздоблядская прога типа того же тортойза, гиткракена или соусртри заводит свой свой гит, в соём недоюникс-окружении. Гугли или спрашивай на их форуме. Я категорически ебал виндую Только линукс, только хардкор!
>> No.47314 Ответ
>>47275
При скачивании гита с офсайта для виндовс там есть галочки - установить гуи, установить свою консолечку etc. Все прекрасно работает! Даже атлассиан и прочие гитхабы не настолько удобны, как встроенные тулзы.
А ты просто злобненькая бака, добра тебе!


[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/ ] [ Главная | Настройки | Закладки | Плеер ]