Насколько я понимаю, рисование основано на механизме обратного распространения. То есть, некоторое изображение на входе дает сигнал на выходе: нейрон1 = 0.8, нейрон2 = 0.3,… Задаем сигнал на выходе, по коэффициентам нейронов рассчитываем, какой должна быть входная картинка.
Только вот мне кажется, это сильно далеко от того, как распознает изображения человек, собака или даже лягушка.
Да, перепутал немного, 100 вызовов это было на моей машине, это ограничение XDebug. А на сервере падала по превышению лимита памяти либо по таймауту выполнения.
Ведь если останется всего одна последняя клетка, кто знает, сколько раз придётся повторяться? Сколько времени понадобится 16-битному процессору, чтобы выполнить столько циклов?
Не совсем по теме статьи, но реально встречался с подобной ошибкой в продакшене. В системе использовалась довольно старая и сильно допиленная версия osTicket. Там есть возможность генерировать дополнительный случайный номер для заявки.
Выглядит это так (class.ticket.php):
function genExtRandID() {
global $cfg;
// We can allow collissions...extId and email must be unique ...so same id with diff emails is ok..
// But for clarity...we are going to make sure it is unique.
$id=Misc::randNumber(EXT_TICKET_ID_LEN);
if(db_num_rows(db_query('SELECT ticket_id FROM '.TICKET_TABLE.' WHERE ticketID='.db_input($id))))
return Ticket::genExtRandID();
return $id;
}
EXT_TICKET_ID_LEN по умолчанию равно 6.
В итоге, когда количество заявок превысило примерно полмиллиона, система начала случайным образом падать при создании заявки. Потому что предел рекурсии 100 вызовов. Долго не могли понять, в чем дело, ошибка-то не воспроизводится.
Ну а как это противоречит моему комменту?) Он не «не видит куда его перекинуло», а видит, что он перешел по ссылке, и URL исчез. Лично я вообще ни разу не сталкивался с такой ситуацией, и подумал бы, что у меня браузер глючит. Поэтому закрыл бы вкладку или вообще перезапустил браузер. В данной ситуации для меня нет разницы, написано в адресной строке «vk.som» или там пусто. Это выглядит странно, и лучше не продолжать.
Фишинг подразумевает, что человек думает, что находится на одном сайте с пустой строкой вместо URL, а на самом деле на другом сайте с пустой строкой вместо URL. Но тот человек, который смотрит на URL, скорее всего вообще не будет пользоваться сайтом, где URL не видно, вне зависимости от того, настоящий он или фишинговый. Даже если это и не баг вашего кода, я бы посоветовал поменять ваш код, чтобы он работал по-другому и не очищал URL.
Прочитав заголовок, я было подумал, что речь идет об адресной строке браузера. Она нужна хотя бы для тех, кто ей пользуется. А в контексте статьи считаю так — это вызывает подозрение.
У меня вообще не получается писать что-то для вызова кода, пока я не написал сам код. Потому что в процессе написания и поиска решения переберешь с десяток вариантов. А если что-то уже написал для вызова, то потом придется менять. Это отвлекает, и пока меняешь, основная мысль может исчезнуть.
Расскажу просто для прикола.
Надо было сделать договор на банковское обслуживание. Карта была заблокирована, девочка операционист сделала новую Маэстро Социальная. Через пару дней звонил в техподдержку, авторизовывался по этой карте, спросили кодовое слово. Оп-па. При заведении карты ничего не спрашивали по этому поводу. Называю то, которое обычно ставлю, не подходит. Называю еще раз, может невнятно произнес, не подходит. Вспоминаю, что где-то слышал, что Сбербанк ставит по умолчанию кодовое слово = год рождения. Называю год рождения, подходит. Вот так я взломал собственную карту.
Добавлю информацию по работе с календарями пользователей.
Например, example@mail.com — это email пользователя, имя основного календаря обычно совпадает с email. Просто так поставить событие пользователю в календарь не получится. Надо предоставить доступ для сервисного аккаунта. Есть 2 варианта — предоставление доступа вручную и domain-wide authority.
Когда генерируем API key, там же генерируются 2 параметра:
Предоставление доступа вручную:
Надо чтобы пользователь сам зашел в календарь и добавил разрешение вносить изменения для сервисного аккаунта (Email address).
Настройки — Календари — [Название календаря] — Открытие общего доступа к этому календарю — Общий доступ для отдельных пользователей
Пользователь: 123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz@developer.gserviceaccount.com
Настройки разрешений: Вносить изменения
Domain-wide authority:
Если в компании используется свой домен для рабочей почты пользователей, можно настроить авторизацию по всему домену. Приложение при этом совершает действия как бы от имени пользователя (impersonate).
Это делается через консоль администратора домена: admin.google.com. Для предоставления доступа используется Client ID.
Подробно написано здесь developers.google.com/identity/protocols/OAuth2ServiceAccount в разделе Delegating domain-wide authority to the service account.
В коде надо добавить установку свойства sub (email пользователя, которым мы прикидываемся):
Вот так прочитаешь все это, найдешь хорошую вакансию,
а там используется Yii (потому что не у всех IQ больше 120),
PostgreSQL (по некоторым причинам),
Smarty (или вообще без отдельного шаблонизатора),
nginx-ом управляют сениоры (которые давно там работают и хорошо знают проект).
Вообще, мне кажется, в статье описан middle, который ближе к senior, почему автор и отсеял 90% кандидатов. Вот тут есть хорошее описание.
Мы в универе начинали с одновременного изучения C++ и Pascal. В C++ изучали в основном подмножество C, просто написание учебных программ без использования стандартной библиотеки. Он мне показался более понятным и удобным, чем Pascal. Но сейчас я пишу на более «высокоуровневых» языках.
Скрытый текст
В принципе, это неплохой язык для начального обучения, если не лезть в дебри метапрограммирования и сложных ООП абстракций. Потом уже можно переходить на другие языки, с пояснениями в плане «в C++ надо было делать так, а в этом языке это делается вот так, и это удобнее». Для начинающих будет более понятно, зачем придумали сборщики мусора, динамическую типизацию, и как устроена работа со строками. А то я пару раз сталкивался с вопросами вида «а почему C++ сам int в строку не конвертирует?».
C++ хороший язык, но правильно писать на нем достаточно сложно. Надо знать много технических нюансов.
Хм… Да, вы правы. Задумался о целых числах, и упустил из виду, что могут быть строки вида 0000(01), или вообще непериодические. Хотя, если под дробью подразумевать отношение двух целых чисел a / b, то это множество счетно.
Каждое из них счетно, и может быть соспоставлено множеству целых чисел (особено наглядно это видно по первому). Бесконечная диагональная строка нулей из первого множества в инвертированном виде принадлежит второму множеству.
Мне почему-то кажется, что наследовать красную ячейку от ячейки — это примерно то же самое, как наследовать квадрат от прямоугольника. Если не секрет, какая была реальная задача?
Так суть же не в этом. Можно отдельно функцию lsl() определить. Я к тому, что многобукв много дополнительных слов и названий переменных. Ну и регистр символов постоянно меняется.
Дайте угадаю, автор недавно закончил универ и практически не писал достаточно больших приложений?) Просто у меня пару раз тоже такие мысли возникали. Давно когда-то…
(достаточно больших — это хотя бы несколько разработчиков и несколько десятков тысяч строк кода)
У полосы прокрутки есть еще такой плюс (возможно, не на всех системах). Читаешь текст где-то в середине, нужно на несколько секунд вернуться наверх, посмотреть картинку/схему/текст, и вернуться назад на то место где читал. Тянешь скроллбар вверх, не отпуская смотришь что нужно, уводишь мышь далеко в сторону, он сам возвращается обратно.
А так идея прикольная.
Только вот мне кажется, это сильно далеко от того, как распознает изображения человек, собака или даже лягушка.
Не совсем по теме статьи, но реально встречался с подобной ошибкой в продакшене. В системе использовалась довольно старая и сильно допиленная версия osTicket. Там есть возможность генерировать дополнительный случайный номер для заявки.
Выглядит это так (class.ticket.php):
EXT_TICKET_ID_LEN по умолчанию равно 6.
В итоге, когда количество заявок превысило примерно полмиллиона, система начала случайным образом падать при создании заявки. Потому что предел рекурсии 100 вызовов. Долго не могли понять, в чем дело, ошибка-то не воспроизводится.
Прочитав заголовок, я было подумал, что речь идет об адресной строке браузера. Она нужна хотя бы для тех, кто ей пользуется. А в контексте статьи считаю так — это вызывает подозрение.
Надо было сделать договор на банковское обслуживание. Карта была заблокирована, девочка операционист сделала новую Маэстро Социальная. Через пару дней звонил в техподдержку, авторизовывался по этой карте, спросили кодовое слово. Оп-па. При заведении карты ничего не спрашивали по этому поводу. Называю то, которое обычно ставлю, не подходит. Называю еще раз, может невнятно произнес, не подходит. Вспоминаю, что где-то слышал, что Сбербанк ставит по умолчанию кодовое слово = год рождения. Называю год рождения, подходит. Вот так я взломал собственную карту.
Например, example@mail.com — это email пользователя, имя основного календаря обычно совпадает с email. Просто так поставить событие пользователю в календарь не получится. Надо предоставить доступ для сервисного аккаунта. Есть 2 варианта — предоставление доступа вручную и domain-wide authority.
Когда генерируем API key, там же генерируются 2 параметра:
Client ID:
123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz.apps.googleusercontent.com
Email address:
123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz@developer.gserviceaccount.com
Предоставление доступа вручную:
Надо чтобы пользователь сам зашел в календарь и добавил разрешение вносить изменения для сервисного аккаунта (Email address).
Настройки — Календари — [Название календаря] — Открытие общего доступа к этому календарю — Общий доступ для отдельных пользователей
Пользователь: 123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz@developer.gserviceaccount.com
Настройки разрешений: Вносить изменения
Domain-wide authority:
Если в компании используется свой домен для рабочей почты пользователей, можно настроить авторизацию по всему домену. Приложение при этом совершает действия как бы от имени пользователя (impersonate).
Это делается через консоль администратора домена: admin.google.com. Для предоставления доступа используется Client ID.
Подробно написано здесь developers.google.com/identity/protocols/OAuth2ServiceAccount в разделе Delegating domain-wide authority to the service account.
В коде надо добавить установку свойства sub (email пользователя, которым мы прикидываемся):
а там используется Yii (потому что не у всех IQ больше 120),
PostgreSQL (по некоторым причинам),
Smarty (или вообще без отдельного шаблонизатора),
nginx-ом управляют сениоры (которые давно там работают и хорошо знают проект).
Вообще, мне кажется, в статье описан middle, который ближе к senior, почему автор и отсеял 90% кандидатов. Вот тут есть хорошее описание.
C++ хороший язык, но правильно писать на нем достаточно сложно. Надо знать много технических нюансов.
и
Каждое из них счетно, и может быть соспоставлено множеству целых чисел (особено наглядно это видно по первому). Бесконечная диагональная строка нулей из первого множества в инвертированном виде принадлежит второму множеству.
многобуквмного дополнительных слов и названий переменных. Ну и регистр символов постоянно меняется.(достаточно больших — это хотя бы несколько разработчиков и несколько десятков тысяч строк кода)
А так идея прикольная.