Телеграм должен привести свою инфрастуктуру в соответствие с требованиями законодательства. Как лучше это сделать ― ему виднее.
Иначе что получается:
Работает магазин, продаёт населению хозтовары, а отчётность в налоговую не сдаёт.
― А почему вы нам отчётность не сдаёте? А покажите-ка нам свою отчётность, ― спрашивает ФНС.
― У нас нет технической возможности показать вам нашу отчётность, ― отвечает магазин.
― Не поняла! ― удивляется ФНС.
― Да у нас ни касс нет, ни компьютеров. Никак не можем вести отчётность, идите в жопу, ― радостно объясняет магазин.
И главной целью роскомнадзора в этом случае является?..
Контроль и наздор за соблюдением действующего законодательства РФ, в частности пункта 3.1 статьи 10.1 федерального закона №149-ФЗ:
"Организатор распространения информации в сети "Интернет" обязан предоставлять указанную в части 3 настоящей статьи информацию уполномоченным государственным органам, осуществляющим оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, в случаях, установленных федеральными законами."
Производители железа под текущий софт не успевают.
Раньше под задачу "кино, офис, пасьянс, интернет" подходил любой купленный компьютер. Дорогой неигровой компьютер отличался от дешёвого неигрового только количественно: монитор пошире, жёсткий диск побольше, корпус покрасивше, побольше клавиш на клавиатуре.
Сейчас же если купить системный блок или ноут из нижнего сегмента, то на них уже сразу после покупки сайты тормозят. Недавно Гугл отключил возможность переключиться на старый интерфейс Ютуба, пришлось на нетбуке перейти на левый десктопный клиент, потому что пользоваться сайтом стало невозможно.
Пусть меня снесут встречным катком, но, честно говоря, болею за Роскомнадзор. Надеюсь, что у него таки получится дожать Телеграм. Пусть не сразу, пусть через пару лет и десяток шишек, но дожать стоит.
То что Телеграм не может предоставить какие-то там ключи, потому что у него их технически нет, — это техническая проблема Телеграма, что у него их нет. Он может сделать так, чтобы были и для пользователей ничего не изменилось, но вместо этого показательно встаёт в позу. Этой позой не грех показательно воспользоваться.
На многих сайтах с «передовыми технологиями» О12, не отображает корректно, включая стили, да и формы ответов/голосований/другого интерактива не работают.
Не очень-то и хотелось, на самом деле. Чем больше интерактива, тем оно обычно тормознее. Я думаю, разработчики сайтов сильно ошибаются, считая, что правильно закруглённые уголки или какая-нибудь динамически всплывающая хрень ― это архиважная киллер-фича, ради которой все кинутся менять браузер. Мне как пользователю на уголки плевать, основной функционал работает и ладно. А то что сайт может отображаться не так, как разработчик задумал у себя в голове, так я про эту задумку ничего не знаю, вижу то что вижу. Да и HTML придумывался как раз для того, чтобы в общем и целом всё работало, а как оно выглядит в конкретном браузере ― непринципиально.
У меня есть десяток основных сайтов, из них ну пара глючных ― для них дома использую Edge, на работе новую Оперу. Почта до сих пор в Опере 12, потому что удобно.
const — как признак неизменности объекта, вне зависимости от его природы. Но даже по вашей (в смысле текущей сишарпной) логике, ведь мы можем передавать различные константы, почему же нет?
По сишарпной логике, если мы передаём в метод разные значения, то x не константа. Значения-то разные, а у константы значение всегда одно. В сишарпной логике этот x не const, а readonly — может быть инициализирован разными значениями, но менять полученное значение нельзя.
Тогда как насчет readonly ref?
Ссылка на объект, который менять можно, а саму ссылку перенаправить на другой объект нельзя. Разница с обычным модификатором ref мне неочевидна. Может и есть, но надо вдумываться.
По идее, ссылка на объект, который нельзя изменять, должна обозначаться как ref readonly. Для результатов и локальных ссылок оно ровно так и пишется:
Для параметров выбирали из вариантов ref readonly и in, выбрали in. Это такое же старое ключевое слово, оно намного короче, дополняет out и описывает смысл, а не реализацию:
in — ссылка для чтения входных данных
out — ссылка для записи выходных данных
ref — просто ссылка, делай что хочешь
Посмотреть сигнатуру метода (если нужно) можно простым мышконаведением в нормальной IDE, а каждый раз писать второй вариант — перебор.
Ну просто это лишние телодвижения, да и код может смотреться не из IDE, а из гитхаба через браузер.
Последний пример, кстати, отлично демонстрирует пользу именованных аргументов, т.к. у первых двух непонятно, кто из них caption, а кто message. Следующий вариант такой проблемы не имеет:
Ну и если подобную логику разделения на const и readonly в C# применить к параметрам (без оглядки на другие языки), то в варианте с использованием ключевого слова const получается глупость:
void Foo(const float x)
Выглядит как передача константы в метод, но у констант значения никогда не меняются. Этот параметр просто лишний.
void Foo(ref const float x)
Ссылка на значение константы? Смотри предыдущий пункт.
void Foo(const ref float x)
Если это константная ссылка (грубо, адрес в памяти), то значит, адрес там всегда один и тот же, всегда указывает на один и тот же объект. Тоже хрень какая-то.
Константа в C# отличается от readonly переменной тем, что вычисляется во время компиляции и вычисленное значение подставляется вместо имени константы везде, где это имя упоминается. Readonly-переменнная — это хоть и readonly, но всё-таки переменная, т.е. именованное место в памяти, где лежит какое-то значение.
У константы значение может быть только одно — захардкоженное в исходнике. Значение readonly переменной может быть любым. Оно вычисляется в рантайме, каждый раз может оказываться разным и может зависеть от чего-угодно, хоть от фазы Луны. Т.е. это явно не константа.
Пример константы — число пи. Пример readonly-переменной — id объекта, он у всех разный, присваивается один раз во время создания объекта и никогда не меняется.
Например, именование параметров при вызове возможно необходимо, чтобы при рефакторинге получить ошибки по всех вызовах где позиция не совпадет?
Рефакторинг не может приводить к ошибкам, иначе это не рефакторинг по определению рефакторинга. :)
Именованные параметры полезны для самокомментирования. Например, ниже два варианта вызова одного и того же метода. Чтобы понять первый вариант, надо помнить или посмотреть сигнатуру метода, а второй вариант понятен сразу.
Про подчеркивание не понял вообще, что за проблему решили.
Двоичные и шестнадцатеричные литералы лучше смотрятся, когда цифры отделены от обязательного префикса. Два последних варианта нагляднее, но раньше были невозможны:
0xfedcba09
0xfedc_ba09
0x_fedcba09
0x_fedc_ba09
Странно, что сразу так не сделали, когда вводили разделители в 7.0.
Ключевое слово in в языке уже было. Использовалось в паре с out для обозначения ковариантности и контрвариантности. И внутри foreach ещё.
Для передачи параметров по ссылке использовались ключевые слова ref (значение параметра может быть изменено) и out (значение параметра должно быть изменено). Теперь есть третий вариант передачи по ссылке — in (значение параметра не может быть изменено). Между двумя вариантами, использовать 'in' или 'readonly ref', выбрали 'in' для краткости и смысловой симметрии с 'out'.
Я писал много движков, с нуля. Писал собственную мат либу. Но я не смогу ответить на вопрос, как найти пересечение прямой и плоскости.
Неужели никогда не приходилось это делать? Я себе написал либу по поиску пересечений между отрезками, лучами, прямыми и плоскостями, а также расстояний между всеми ними, после того как задолбался по десять раз перерешивать однотипные задачи.
Найти точку на земле или другой поверхности, на которую игрок указывает прицелом или курсором мыши. Это в чистом виде поиск пересечения луча/прямой с плоскостью.
Есть луч и треугольник. Определить, проходит ли луч сквозь треугольник, и если да, то в какой точке. Ищем точку пересечения луча с плоскостью треугольника. Если таковая есть, проверяем, она внутри него или снаружи.
Есть полигон и плоскость. Определить, пересекаются ли они, и если да, то разрезать полигон плоскостью на две части. По ходу решения потребуется поиск точки пересечения отрезка/прямой и плоскости.
Ну так-то ответ очевиден, уравнение прямой + уравнение плоскости.
Не обязательно. Обычно намного удобнее всё представлять точками и векторами и решать задачи через свойства скалярного и векторного произведений и свойства треугольников и параллелограммов (привет школьной геометрии, про которую все думали, что никогда не пригодится). Прямую удобно представлять как произвольную точку на ней и единичный вектор направления. Плоскость ― как произвольную точку на ней и единичный вектор нормали. Либо как нормаль и расстояние от плоскости до начала координат (эти же значения используются и в уравнении плоскости).
Если для решения задач писать уравнения, то 1) для 2D и 3D они разные; 2) в коде появляются магические трёхэтажные формулы, по которым хрен поймёшь, что и как они считают.
А вектора и точки остаются векторами и точками и в 2D, и в 3D. Решения многих задач универсальны и записываются короче.
Например, как найти расстояние от точки P до произвольной прямой? Если прямая задана точкой O и единичным вектором направления D, то искомое расстояние ― это тупо модуль векторного произведения (O, P) и D, просто исходя из школьной формулы площади параллелограмма и свойств векторного произведения. Решение в одну строчку: cross(line.origin - point, line.direction).magnitude
> Сколько стоит полежать в ванной в которой одновременно включена вода и приоткрыт слив.
Бесценно.
Когда безлимитный интернет до меня ещё не добрался, хотелось, чтобы интернет стал как водопровод: когда нужен, открыл кран ― потекло; когда не нужен, закрыл ― перестало течь. Чтобы не надо было думать про время или трафик.
Сейчас интенет безлимитный, а вот водопроводные тенденции неприятные. Пока можно будет не ставить счётчики, не буду их ставить.
Бывает работа за столом. Для неё лучше всего системный блок потолще и пара мониторов побольше, ибо все ноуты ― жертвы компромиссов.
Бывает работа, когда ты постоянно перемещаешься и ноут побольше и помощнее — твой единственный рабочий инструмент.
И бывает работа с периодическими выездами в поле. Для неё представленный аппарат по начинке нормальный, всяко функциональнее Андроидов и его не особо жалко. Вызывает подозрение только хлипкость конструкции — вряд ли получится использовать механическую клавиатуру, держа аппарат на руках. Но если не предполагается лазить с ноутом по подвалам, лестницам и крышам, то почему бы и нет.
10" FullHD я бы не купил. Лучше пусть видно зерно, чем не видно буквы в некоторых программах. У FullHD на 27" зерно видно сразу, на 24" — когда про него думаешь. Зерно у 1280x800 на 10" в два раза мельче — его надо специально разглядывать, причём не с расстояния вытянутой руки, а уткнувшись носом в экран.
Заменил у себя 2 Гб ОЗУ на 8 Гб. 2 Гб — маловато конечно, но если бы было 4, оставил бы как есть, т.к. не в Ведьмака же на таком аппарате играть и не в виртуальные машины. Хотя в Factorio я играл.
По поводу накопителя — в моём аппарате 32 Гб eMMC. Под систему и программы хватает, но впритык. Тут подняли объём встроенного накопителя до минимум 64 Гб. Острой нехватки места больше не будет. Ну а то что 128 Гб лучше 64, а 256 Гб лучше 128 — так можно продолжать до бесконечности и в отношении накопителя, и ОЗУ, и процессора, и качества экрана, и размера батареи, и чего угодно, кроме итоговой цены.
В том виде, в котором аппарат представлен — он сбалансирован. Если что-то улучшать, то сразу всё, и это будет совершенно другая категория железяк.
***
У представленного аппарата мне не нравятся только две вещи:
1. Отсутствие жёсткого крепления клавиатуры к экрану. Мой аппарат можно раскрыть на 180° и поставить на колени вертикально (прислонив к переднему сидению в машине/автобусе/поезде или ещё к чему-нибудь) и смотреть кино, имея экран на уровне глаз, а не живота.
Понятно, что с отстёгивающейся клавиатурой такое вряд ли возможно. Но лично у меня желания отстегнуть клавиатуру ни разу не возникало (если мешается, всегда можно её убрать, вывернув на 360°), а поднять экран повыше — возникает регулярно.
2. Подпорка вызывает подозрение, что если отстегнуть клавиатуру и поставить экран на подпорку, то при попытке тыкать пальцами в сенсорный экран, вся конструкция начнёт ездить по столу. Хотя это только подозрение.
Телеграм должен привести свою инфрастуктуру в соответствие с требованиями законодательства. Как лучше это сделать ― ему виднее.
Иначе что получается:
Работает магазин, продаёт населению хозтовары, а отчётность в налоговую не сдаёт.
― А почему вы нам отчётность не сдаёте? А покажите-ка нам свою отчётность, ― спрашивает ФНС.
― У нас нет технической возможности показать вам нашу отчётность, ― отвечает магазин.
― Не поняла! ― удивляется ФНС.
― Да у нас ни касс нет, ни компьютеров. Никак не можем вести отчётность, идите в жопу, ― радостно объясняет магазин.
Контроль и наздор за соблюдением действующего законодательства РФ, в частности пункта 3.1 статьи 10.1 федерального закона №149-ФЗ:
"Организатор распространения информации в сети "Интернет" обязан предоставлять указанную в части 3 настоящей статьи информацию уполномоченным государственным органам, осуществляющим оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации, в случаях, установленных федеральными законами."
[не туда]
Производители железа под текущий софт не успевают.
Раньше под задачу "кино, офис, пасьянс, интернет" подходил любой купленный компьютер. Дорогой неигровой компьютер отличался от дешёвого неигрового только количественно: монитор пошире, жёсткий диск побольше, корпус покрасивше, побольше клавиш на клавиатуре.
Сейчас же если купить системный блок или ноут из нижнего сегмента, то на них уже сразу после покупки сайты тормозят. Недавно Гугл отключил возможность переключиться на старый интерфейс Ютуба, пришлось на нетбуке перейти на левый десктопный клиент, потому что пользоваться сайтом стало невозможно.
То что Телеграм не может предоставить какие-то там ключи, потому что у него их технически нет, — это техническая проблема Телеграма, что у него их нет. Он может сделать так, чтобы были и для пользователей ничего не изменилось, но вместо этого показательно встаёт в позу. Этой позой не грех показательно воспользоваться.
Не очень-то и хотелось, на самом деле. Чем больше интерактива, тем оно обычно тормознее. Я думаю, разработчики сайтов сильно ошибаются, считая, что правильно закруглённые уголки или какая-нибудь динамически всплывающая хрень ― это архиважная киллер-фича, ради которой все кинутся менять браузер. Мне как пользователю на уголки плевать, основной функционал работает и ладно. А то что сайт может отображаться не так, как разработчик задумал у себя в голове, так я про эту задумку ничего не знаю, вижу то что вижу. Да и HTML придумывался как раз для того, чтобы в общем и целом всё работало, а как оно выглядит в конкретном браузере ― непринципиально.
У меня есть десяток основных сайтов, из них ну пара глючных ― для них дома использую Edge, на работе новую Оперу. Почта до сих пор в Опере 12, потому что удобно.
Thames Gateway Strategic Partnership
Traditional Gas Sampling Pipe
Thematic Guide for Suicide Prediction
ООО «Теплогазсервиспроект»
?
По сишарпной логике, если мы передаём в метод разные значения, то x не константа. Значения-то разные, а у константы значение всегда одно. В сишарпной логике этот x не const, а readonly — может быть инициализирован разными значениями, но менять полученное значение нельзя.
Ссылка на объект, который менять можно, а саму ссылку перенаправить на другой объект нельзя. Разница с обычным модификатором ref мне неочевидна. Может и есть, но надо вдумываться.
По идее, ссылка на объект, который нельзя изменять, должна обозначаться как ref readonly. Для результатов и локальных ссылок оно ровно так и пишется:
Для параметров выбирали из вариантов ref readonly и in, выбрали in. Это такое же старое ключевое слово, оно намного короче, дополняет out и описывает смысл, а не реализацию:
in — ссылка для чтения входных данных
out — ссылка для записи выходных данных
ref — просто ссылка, делай что хочешь
Ну просто это лишние телодвижения, да и код может смотреться не из IDE, а из гитхаба через браузер.
Последний пример, кстати, отлично демонстрирует пользу именованных аргументов, т.к. у первых двух непонятно, кто из них caption, а кто message. Следующий вариант такой проблемы не имеет:
Но раньше так писать было нельзя, пришлось бы подписывать имена всем последующим аргументам, хотя их назначение и так до безобразия очевидно.
Ну и если подобную логику разделения на const и readonly в C# применить к параметрам (без оглядки на другие языки), то в варианте с использованием ключевого слова const получается глупость:
Выглядит как передача константы в метод, но у констант значения никогда не меняются. Этот параметр просто лишний.
Ссылка на значение константы? Смотри предыдущий пункт.
Если это константная ссылка (грубо, адрес в памяти), то значит, адрес там всегда один и тот же, всегда указывает на один и тот же объект. Тоже хрень какая-то.
Константа в C# отличается от readonly переменной тем, что вычисляется во время компиляции и вычисленное значение подставляется вместо имени константы везде, где это имя упоминается. Readonly-переменнная — это хоть и readonly, но всё-таки переменная, т.е. именованное место в памяти, где лежит какое-то значение.
У константы значение может быть только одно — захардкоженное в исходнике. Значение readonly переменной может быть любым. Оно вычисляется в рантайме, каждый раз может оказываться разным и может зависеть от чего-угодно, хоть от фазы Луны. Т.е. это явно не константа.
Пример константы — число пи. Пример readonly-переменной — id объекта, он у всех разный, присваивается один раз во время создания объекта и никогда не меняется.
Рефакторинг не может приводить к ошибкам, иначе это не рефакторинг по определению рефакторинга. :)
Именованные параметры полезны для самокомментирования. Например, ниже два варианта вызова одного и того же метода. Чтобы понять первый вариант, надо помнить или посмотреть сигнатуру метода, а второй вариант понятен сразу.
Двоичные и шестнадцатеричные литералы лучше смотрятся, когда цифры отделены от обязательного префикса. Два последних варианта нагляднее, но раньше были невозможны:
Странно, что сразу так не сделали, когда вводили разделители в 7.0.
Ключевое слово in в языке уже было. Использовалось в паре с out для обозначения ковариантности и контрвариантности. И внутри foreach ещё.
Для передачи параметров по ссылке использовались ключевые слова ref (значение параметра может быть изменено) и out (значение параметра должно быть изменено). Теперь есть третий вариант передачи по ссылке — in (значение параметра не может быть изменено). Между двумя вариантами, использовать 'in' или 'readonly ref', выбрали 'in' для краткости и смысловой симметрии с 'out'.
Неужели никогда не приходилось это делать? Я себе написал либу по поиску пересечений между отрезками, лучами, прямыми и плоскостями, а также расстояний между всеми ними, после того как задолбался по десять раз перерешивать однотипные задачи.
Не обязательно. Обычно намного удобнее всё представлять точками и векторами и решать задачи через свойства скалярного и векторного произведений и свойства треугольников и параллелограммов (привет школьной геометрии, про которую все думали, что никогда не пригодится). Прямую удобно представлять как произвольную точку на ней и единичный вектор направления. Плоскость ― как произвольную точку на ней и единичный вектор нормали. Либо как нормаль и расстояние от плоскости до начала координат (эти же значения используются и в уравнении плоскости).
Если для решения задач писать уравнения, то 1) для 2D и 3D они разные; 2) в коде появляются магические трёхэтажные формулы, по которым хрен поймёшь, что и как они считают.
А вектора и точки остаются векторами и точками и в 2D, и в 3D. Решения многих задач универсальны и записываются короче.
Например, как найти расстояние от точки P до произвольной прямой? Если прямая задана точкой O и единичным вектором направления D, то искомое расстояние ― это тупо модуль векторного произведения (O, P) и D, просто исходя из школьной формулы площади параллелограмма и свойств векторного произведения. Решение в одну строчку:
cross(line.origin - point, line.direction).magnitude
Бесценно.
Когда безлимитный интернет до меня ещё не добрался, хотелось, чтобы интернет стал как водопровод: когда нужен, открыл кран ― потекло; когда не нужен, закрыл ― перестало течь. Чтобы не надо было думать про время или трафик.
Сейчас интенет безлимитный, а вот водопроводные тенденции неприятные. Пока можно будет не ставить счётчики, не буду их ставить.
Бывает работа, когда ты постоянно перемещаешься и ноут побольше и помощнее — твой единственный рабочий инструмент.
И бывает работа с периодическими выездами в поле. Для неё представленный аппарат по начинке нормальный, всяко функциональнее Андроидов и его не особо жалко. Вызывает подозрение только хлипкость конструкции — вряд ли получится использовать механическую клавиатуру, держа аппарат на руках. Но если не предполагается лазить с ноутом по подвалам, лестницам и крышам, то почему бы и нет.
Заменил у себя 2 Гб ОЗУ на 8 Гб. 2 Гб — маловато конечно, но если бы было 4, оставил бы как есть, т.к. не в Ведьмака же на таком аппарате играть и не в виртуальные машины. Хотя в Factorio я играл.
По поводу накопителя — в моём аппарате 32 Гб eMMC. Под систему и программы хватает, но впритык. Тут подняли объём встроенного накопителя до минимум 64 Гб. Острой нехватки места больше не будет. Ну а то что 128 Гб лучше 64, а 256 Гб лучше 128 — так можно продолжать до бесконечности и в отношении накопителя, и ОЗУ, и процессора, и качества экрана, и размера батареи, и чего угодно, кроме итоговой цены.
В том виде, в котором аппарат представлен — он сбалансирован. Если что-то улучшать, то сразу всё, и это будет совершенно другая категория железяк.
***
У представленного аппарата мне не нравятся только две вещи:
1. Отсутствие жёсткого крепления клавиатуры к экрану. Мой аппарат можно раскрыть на 180° и поставить на колени вертикально (прислонив к переднему сидению в машине/автобусе/поезде или ещё к чему-нибудь) и смотреть кино, имея экран на уровне глаз, а не живота.
Понятно, что с отстёгивающейся клавиатурой такое вряд ли возможно. Но лично у меня желания отстегнуть клавиатуру ни разу не возникало (если мешается, всегда можно её убрать, вывернув на 360°), а поднять экран повыше — возникает регулярно.
2. Подпорка вызывает подозрение, что если отстегнуть клавиатуру и поставить экран на подпорку, то при попытке тыкать пальцами в сенсорный экран, вся конструкция начнёт ездить по столу. Хотя это только подозрение.