Если писать код маленькими функциями (как и советует Макконел)
Макконел как раз утверждает, что нет ничего плохого в использовании относительно больших функций. Он предлагает не превращать маленький размер функций в самоцель, а определять размер функции в зависимости от задачи, которая на нее возложена и сложности внутренней структуры (та самая линейность, о которой говорит автор статьи). Ссылается он на исследования связи количества ошибок с размером функций, в которых они были найдены. От себя добавлю, что одна относительно большая функция, состоящая в основном из стандартных операторов, может быть значительно читабельней, чем пять маленьких ссылающихся друг на друга по цепочке.
Рекомендация про умещение в размер экрана у него тоже была, но мониторы нынче большие, шрифты маленькие, поэтому к маленьким функциям это отношения не имеет. Просто, как сказал lair, «ничем не стоит «увлекаться», а то случится беда».
There’s been a lot of talk on PayPal moving to node.js for an application platform. I’m happy to say that the rumors are true and our web applications are moving away from Java and onto JavaScript and node.js.
Объясните, пожалуйста, если Ева взяла полный контроль над соединением, то что ей мешает по описанной вами схеме создать два шифрованных соединения по DH-алгоритму. Т.е. какое преимущество дает DH-алгоритм перед простым шифрованием открытым ключем/дешифровкой закрытым ключем в плане атаки MITM
сторона А шифрует открытым ключом стороны Б. Затем сторона Б, получив документ, сама вычисляется hash, потом расшифровывает ЭП своим закрытым ключом и сравнивает полученные hash.
Может быть все таки сторона А подписывает hash своего документа своим закрытым ключем, а затем сторона Б вычисляет hash и проверяет его открытым ключем стороны А? По тому как написано у вас, получается, что сторона А подписывает документ специально для стороны Б, а не для всех желающих удостовериться в подлинности.
Подскажите, если я ошибаюсь.
18. Оператор „for… in“
При проходе в цикле через свойстав обьекта вы также обнаружите что получаете в том числе и функции. Для избежания этого необходима проверка с if hasOwnProperty
Вы (автор или переводчик) о чем здесь вообще?
Я аж с перепугу перепроверил
var o = {a:1, f:function(){}}
for(var key in o)
if(o.hasOwnProperty(key)) console.log(key)
//a
//f
Девушка говорит парню:
— Вань, ты такой умный, находчивый! Ты так много историй знаешь, с тобой так интересно всегда!
— Маш… да я нормальный, это просто ты дура!
«Трудовое законодательство нарушалось злостно, и я почувствовал, что
у меня исчезло всякое желание бороться с этими нарушениями, потому что
сюда в двенадцать часов новогодней ночи, прорвавшись через пургу, пришли
люди, которым было интереснее доводить до конца или начинать сызнова
какое-нибудь полезное дело, чем глушить себя водкой, бессмысленно
дрыгать ногами, играть в фанты и заниматься флиртом разных степеней
легкости. Сюда пришли люди, которым было приятнее быть друг с другом,
чем порознь, которые терпеть не могли всякого рода воскресений, потому
что в воскресенье им было скучно. Маги, Люди с большой буквы, и девизом
их было — »Понедельник начинается в субботу". Да, они знали кое-какие
заклинания, умели превращать воду в вино, и каждый из них не затруднился
бы накормить пятью хлебами тысячу человек. Но магами они были не
поэтому. Это была шелуха, внешнее. Они были магами потому, что очень
много знали, так много, что количество перешло у них наконец в качество,
и они стали с миром в другие отношения, нежели обычные люди. Они
работали в институте, который занимался прежде всего проблемами
человеческого счастья и смысла человеческой жизни, но даже среди них
никто точно не знал, что такое счастье и в чем именно смысл жизни. И они
приняли рабочую гипотезу, что счастье в непрерывном познании
неизвестного и смысл жизни в том же. Каждый человек — маг в душе, но он
становится магом только тогда, когда начинает меньше думать о себе и
больше о других, когда работать ему становится интереснее, чем
развлекаться в старинном смысле этого слова. И наверное, их рабочая
гипотеза была недалека от истины, потому что так же как труд превратил
обезьяну в человека, точно так же отсутствие труда в гораздо более
короткие сроки превращает человека в обезьяну. Даже хуже, чем в
обезьяну."
Muuss died in an automobile collision on Interstate 95 on November 20, 2000.[2] The Michael J. Muuss Research Award, set up by friends and family of Muuss, memorializes him at Johns Hopkins University.[3]
Сейчас как раз изучаю модульное тестирование, и возникает следующий вопрос.
Для тестирования модульного нам необходимо разбить программный код на части и предоставить каждой части поддельные внешние зависимости, иначе это будет уже тестирование интеграционное. Есть ли какие-либо общие рекомендации, что считать в данном случае модулем, а что внешней зависимостью? Модуль здесь — это обязательно класс или может быть компонент системы, состоящий из нескольких связанных классов? Внешние зависимости — это только БД, сеть, файловая система или связи между классами, компонентами?
Вопрос связан с тем, что большая часть проблем возникает именно на связи классов.
По-моему очень не конкретный вопрос. Что именно имеется ввиду?
Сложно ли будет неподготовленному человеку, к примеру, написать модуль необходимого качества, который среднестатистический программист напишет за день?
В зависимости от модуля, скорее всего, потребуется несколько лет обучения и не факт, что модуль вообще удастся написать. Т.е. вроде бы сложно, но не сложнее, чем если бы попросить среднестатистического программиста поработать хирургом или гл.бухгалтером в крупной конторе.
Сложно ли самому программисту работать? Т.е. работает ли он на пределе своих сил?
Зависит от способностей и подготовки самого программиста. Ничего конкретнее здесь не скажешь.
Сложно ли самому программисту работать? Т.е. напрягает ли его работа?
В большинстве случаев нет. Иначе нужно менять работу.
Не все, а только те, кто способен выбросить исключения. На самом деле таких не так уж много :)
Решил поискать слово throw в исходниках стандартных модулей. Так вот 36 модулей из 25 содержат функции/методы выбрасывающие исключения.
Мне тоже больше нравится в своем коде передавать ошибку первым параметром callback, но вызов любой внешней функции потенциально может завершиться исключением.
ReadFile в данном случае выполняется, как синхронная операция, блокирующая поток, в котором происходит чтение.
1. В цитате из msdn, которую вы привели написано:
Если файл открыт с FILE_FLAG_OVERLAPPED, то необходима структура OVERLAPPED, иначе она может быть NULL. А может и не быть. Поэтому никакого нарушения здесь нет.
2. Обратите внимание на инициализацию переменной overlapped_ptr:
offset здесь — это смещение, с которого начнется чтение файла
Из инициализации видно, что
— overlapped_ptr здесь используется для указания смещения (есть у структуры OVERLAPPED и такая функция).
— overlapped_ptr может быть равен NULL, что в принципе недопустимо при асинхронной работе с файлами
The libuv filesystem operations are different from socket operations. Socket operations use the non-blocking operations provided by the operating system. Filesystem operations use blocking functions internally, but invoke these functions in a thread pool and notify watchers registered with the event loop when application interaction is required.
Спасибо за комментарий. Учту.
Я не знаю, как реализована приостановка и запуск потока в Windows, это внутренний механизм операционной системы, который используется во многих других Win API функциях. Вот здесь вы можете найти их список.
Из msdn:
«Wait functions allow a thread to block its own execution. The wait functions do not return until the specified criteria have been met. The type of wait function determines the set of criteria used. When a wait function is called, it checks whether the wait criteria have been met. If the criteria have not been met, the calling thread enters the wait state until the conditions of the wait criteria have been met or the specified time-out interval elapses.»
«Блокирующие функции позволяют потоку приостановить свое выполнение.… При вызове блокирующая функция проверяет переданное ей условие. Если условие не выполнено, то поток получает ожидающий статус и функция не возвращает своего значения до тех пор пока условие не выполнится »
Под условием имеется ввиду не логическое выражение, а, допустим, некоторый объект, через который можно получить событие. В нашем случае условием является наличие или отсутствие событий в очереди IOCP.
Просто представьте, что функция GetQueuedCompletionStatus() не будет ничего возвращать до того, как в очереди не появятся события.
Просто на будущее, что бы исправиться. Что именно не понравилось в статье? Плохое изложение, привязка к Windows, описание только файловой операции при громком заголовке? Ответьте, пожалуйста.
Макконел как раз утверждает, что нет ничего плохого в использовании относительно больших функций. Он предлагает не превращать маленький размер функций в самоцель, а определять размер функции в зависимости от задачи, которая на нее возложена и сложности внутренней структуры (та самая линейность, о которой говорит автор статьи). Ссылается он на исследования связи количества ошибок с размером функций, в которых они были найдены. От себя добавлю, что одна относительно большая функция, состоящая в основном из стандартных операторов, может быть значительно читабельней, чем пять маленьких ссылающихся друг на друга по цепочке.
Рекомендация про умещение в размер экрана у него тоже была, но мониторы нынче большие, шрифты маленькие, поэтому к маленьким функциям это отношения не имеет. Просто, как сказал lair, «ничем не стоит «увлекаться», а то случится беда».
Может быть все таки сторона А подписывает hash своего документа своим закрытым ключем, а затем сторона Б вычисляет hash и проверяет его открытым ключем стороны А? По тому как написано у вас, получается, что сторона А подписывает документ специально для стороны Б, а не для всех желающих удостовериться в подлинности.
Подскажите, если я ошибаюсь.
Но созданный по образу реального человека — Белл, Джозеф
функцииметоды прототипов, но все их свойства.Вы (автор или переводчик) о чем здесь вообще?
Я аж с перепугу перепроверил
Девушка говорит парню:
— Вань, ты такой умный, находчивый! Ты так много историй знаешь, с тобой так интересно всегда!
— Маш… да я нормальный, это просто ты дура!
Статья отличная, а вот хабр шокировал.
у меня исчезло всякое желание бороться с этими нарушениями, потому что
сюда в двенадцать часов новогодней ночи, прорвавшись через пургу, пришли
люди, которым было интереснее доводить до конца или начинать сызнова
какое-нибудь полезное дело, чем глушить себя водкой, бессмысленно
дрыгать ногами, играть в фанты и заниматься флиртом разных степеней
легкости. Сюда пришли люди, которым было приятнее быть друг с другом,
чем порознь, которые терпеть не могли всякого рода воскресений, потому
что в воскресенье им было скучно. Маги, Люди с большой буквы, и девизом
их было — »Понедельник начинается в субботу". Да, они знали кое-какие
заклинания, умели превращать воду в вино, и каждый из них не затруднился
бы накормить пятью хлебами тысячу человек. Но магами они были не
поэтому. Это была шелуха, внешнее. Они были магами потому, что очень
много знали, так много, что количество перешло у них наконец в качество,
и они стали с миром в другие отношения, нежели обычные люди. Они
работали в институте, который занимался прежде всего проблемами
человеческого счастья и смысла человеческой жизни, но даже среди них
никто точно не знал, что такое счастье и в чем именно смысл жизни. И они
приняли рабочую гипотезу, что счастье в непрерывном познании
неизвестного и смысл жизни в том же. Каждый человек — маг в душе, но он
становится магом только тогда, когда начинает меньше думать о себе и
больше о других, когда работать ему становится интереснее, чем
развлекаться в старинном смысле этого слова. И наверное, их рабочая
гипотеза была недалека от истины, потому что так же как труд превратил
обезьяну в человека, точно так же отсутствие труда в гораздо более
короткие сроки превращает человека в обезьяну. Даже хуже, чем в
обезьяну."
К сожалению уже пережила.
Для тестирования модульного нам необходимо разбить программный код на части и предоставить каждой части поддельные внешние зависимости, иначе это будет уже тестирование интеграционное. Есть ли какие-либо общие рекомендации, что считать в данном случае модулем, а что внешней зависимостью? Модуль здесь — это обязательно класс или может быть компонент системы, состоящий из нескольких связанных классов? Внешние зависимости — это только БД, сеть, файловая система или связи между классами, компонентами?
Вопрос связан с тем, что большая часть проблем возникает именно на связи классов.
Сложно ли будет неподготовленному человеку, к примеру, написать модуль необходимого качества, который среднестатистический программист напишет за день?
В зависимости от модуля, скорее всего, потребуется несколько лет обучения и не факт, что модуль вообще удастся написать. Т.е. вроде бы сложно, но не сложнее, чем если бы попросить среднестатистического программиста поработать хирургом или гл.бухгалтером в крупной конторе.
Сложно ли самому программисту работать? Т.е. работает ли он на пределе своих сил?
Зависит от способностей и подготовки самого программиста. Ничего конкретнее здесь не скажешь.
Сложно ли самому программисту работать? Т.е. напрягает ли его работа?
В большинстве случаев нет. Иначе нужно менять работу.
Решил поискать слово throw в исходниках стандартных модулей. Так вот 36 модулей из 25 содержат функции/методы выбрасывающие исключения.
Мне тоже больше нравится в своем коде передавать ошибку первым параметром callback, но вызов любой внешней функции потенциально может завершиться исключением.
Притом для HTML файлов, в которых может быть намешано сразу несколько языков, формат комментария выбирается в зависимости от конкретно языка.
1. В цитате из msdn, которую вы привели написано:
Если файл открыт с FILE_FLAG_OVERLAPPED, то необходима структура OVERLAPPED, иначе она может быть NULL. А может и не быть. Поэтому никакого нарушения здесь нет.
2. Обратите внимание на инициализацию переменной overlapped_ptr:
offset здесь — это смещение, с которого начнется чтение файла
Из инициализации видно, что
— overlapped_ptr здесь используется для указания смещения (есть у структуры OVERLAPPED и такая функция).
— overlapped_ptr может быть равен NULL, что в принципе недопустимо при асинхронной работе с файлами
Вот создание IOCP порта (выполняется это однократно при запуске node.js):
Параметр NumberOfConcurrentThreads равен 1. Насколько я понимаю — этим единственным потоком является основной поток node.js
1. Вот цитата из документации:
2. Вот ссылки на исходники:
— создание потока
— вот функция uv_fs_thread_proc, выполняющаяся уже в порожденном потоке. Она вызывает функцию fs_open, и выполняет макрос POST_COMPLETION_FOR_REQ
— открытие файла внутри функции fs_open
Флаги открытия файла зависят от параметров, с которыми вызвана функция open еще в JS и FILE_FLAG_OVERLAPPED я в функции fs_open не вижу.
Если вы меня ткнете носом в то место, где я ошибся, я буду только рад. Правда :)
Я не знаю, как реализована приостановка и запуск потока в Windows, это внутренний механизм операционной системы, который используется во многих других Win API функциях. Вот здесь вы можете найти их список.
Из msdn:
Под условием имеется ввиду не логическое выражение, а, допустим, некоторый объект, через который можно получить событие. В нашем случае условием является наличие или отсутствие событий в очереди IOCP.
Просто представьте, что функция GetQueuedCompletionStatus() не будет ничего возвращать до того, как в очереди не появятся события.