Кто-то сказал: «Аристотель был последним человеком в истории, который знал всё».
Пишу по памяти, может и не Аристотель, но суть не меняется. Когда-то один человек мог узнать всё про мир, потом знаний становилось всё больше и больше, появилась специализация, когда человек знал, где найти книги, в которых написано искомое.
А теперь у нам уже мета-специализация светит, когда человек знает, где найти книги (или сайты), в которых написано, как искать и переваривать информацию по нужной тематике.
Пишу по памяти, может и не Аристотель, но суть не меняется. Когда-то один человек мог узнать всё про мир, потом знаний становилось всё больше и больше, появилась специализация, когда человек знал, где найти книги, в которых написано искомое.
А теперь у нам уже мета-специализация светит, когда человек знает, где найти книги (или сайты), в которых написано, как искать и переваривать информацию по нужной тематике.
Пара слов про кодировки. Казалось бы, эта тема уже лет пятнадцать как должна быть всем полностью известна, а нет. Каждый раз как новый и приходится бесконечно одно и то же рассказывать, распутывая адскую кашу в головах.
Эти слова в основном про юникод. Все примеры кода для простоты на третьем питоне (во втором работа с юникодом очень плохо представлена, а в C++ с юникодом всё очень плохо).
Юникод (unicode) — это стандарт для представления и кодирования текстов на разных языках, в том числе «текстов» на «языке смайликов», например. В юникоде внутри программы (это важно, в самом конце будет объяснение, почему я упомянул программу) есть два уровня: логический, который оперирует символами (буквами), и физический, который оперирует байтами. В питоне вы работаете на логическом уровне, когда используете строки (объекты класса str, литералы с кавычками по бокам):
Обратный процесс — из байтов в юникодную строку — называется декодированием. Содержимое переменной
Юникод — это центральный логический объект, для представления в байтах его нужно закодировать (encode), а набор байтов для использования нужно сначала декодировать (decode).
Кодировка utf8 позволяет закодировать любой юникодный символ. А вот, например, cp1251 — не любой, так как cp1251 — однобайтовая кодировка, то есть может использовать для кодирования символа только один байт, соответственно кодировка cp1251 понимает только очень ограниченный диапазон символов. Но это тема отдельного текста про ветхозаветные кодировки.
Мякотка — есть ещё третий уровень, который находится выше логического и физического — это визуальный. То, как символ или набор символов представляется на экране. Но это тоже тема отдельного текста, тут я и так увлёкся сверх меры.
Эти слова в основном про юникод. Все примеры кода для простоты на третьем питоне (во втором работа с юникодом очень плохо представлена, а в C++ с юникодом всё очень плохо).
Юникод (unicode) — это стандарт для представления и кодирования текстов на разных языках, в том числе «текстов» на «языке смайликов», например. В юникоде внутри программы (это важно, в самом конце будет объяснение, почему я упомянул программу) есть два уровня: логический, который оперирует символами (буквами), и физический, который оперирует байтами. В питоне вы работаете на логическом уровне, когда используете строки (объекты класса str, литералы с кавычками по бокам):
>>> t1 = 'жыр'
>>> len(t1)
3
Здесь мы видим строку в переменной t1, строка состоит из трёх русских букв, длина этой строки — 3. Это не три байта, это три символа! Юникодная строка (не только в питоне) — это по сути список юникодных символов, у каждого символа есть код в стандарте юникода. Для нашего примера коды символов можно посмотреть через функцию ord():>>> [ord(x) for x in t1]В таком виде юникодный текст может крутиться внутри программы, но если мы хотим его передать наружу в виде байтов, то должны его закодировать так, чтобы на другом конце смогли корректно раскодировать. Кодирование на английском — encode, декодирование — decode. Сейчас самый стандартный способ кодирования — utf8, если вы видите фразу типа «текст в кодировке utf8», то это означает, что перед нами список (массив) байтов, не букв языка, а именно байтов. Кодирование делается так:
[1078, 1099, 1088]
>>> u1 = t1.encode('utf8')
>>> len(u1)
6
Видим, что длина закодированного текста — шесть байтов. Как именно работает utf8, нам сейчас совершенно не интересно, главное, что после кодирования мы получаем байтовую строку, это по сути список чисел, каждое в диапазоне от 0 до 255 (этот тип называется bytes). При этом юникодная строка — это на самом деле список чисел в диапазоне от 0 до 1114111, только в питоне эта кухня скрыта, но вы должны понимать это, когда делаете len(s) на юникодной строке.Обратный процесс — из байтов в юникодную строку — называется декодированием. Содержимое переменной
u1 из примера выше такое:>>> u1Чтобы его преобразовать в юникод, его нужно декодировать (помним: кодируем в байты, декодируем из байтов), в аргументе передаём название кодировки:
b'\xd0\xb6\xd1\x8b\xd1\x80'
>>> u1.decode('utf8')
'жыр'
Помним главное, фраза «текст в кодировке utf8» означает, что у нас «текст» представляет собой список байтов, это ещё не юникодный текст, юникодным он станет после декодирования из кодировки utf8. Юникодная строка никак не закодирована, это строка из уже готовых для использования символов. В наш просвещённый 21 век в любой программе пора уже использовать тексты исключительно в юникоде. Юникод — это центральный логический объект, для представления в байтах его нужно закодировать (encode), а набор байтов для использования нужно сначала декодировать (decode).
Кодировка utf8 позволяет закодировать любой юникодный символ. А вот, например, cp1251 — не любой, так как cp1251 — однобайтовая кодировка, то есть может использовать для кодирования символа только один байт, соответственно кодировка cp1251 понимает только очень ограниченный диапазон символов. Но это тема отдельного текста про ветхозаветные кодировки.
Мякотка — есть ещё третий уровень, который находится выше логического и физического — это визуальный. То, как символ или набор символов представляется на экране. Но это тоже тема отдельного текста, тут я и так увлёкся сверх меры.
И отдельно вынесу рассуждения про семантику encode/decode. Этот момент вызывает жесточайшую путаницу в сознании разработчиков и каждый интерпретирует их по-разному.
Кодирование/декодирование (encode/decode) подразумевает, что есть некая «наша» область с чёткой границей, за которой дикая тундра. Внутри нашей области обитают единственно правильные и приручённые данные. А за границей области все данные не имеют семантики. Поэтому при пересечении границы изнутри наружу данные нужно закодировать (encode), а при обратном движении снаружи вовнутрь «дикие» данные нужно декодировать (decode).
Само понятие «кодированности» подразумевает аморфность и однородность, структура «закодированных» данных скрыта и неясна. Но наши данные внутри области структурны и понятны, они «декодированы».
Чтобы запомнить, сконцентрируйтесь прежде всего на понятии декодировать (decode), оно интуитивно подразумевает преобразование «сложного» в «простое». Внутри нашей системы — простое, за границами — сложное, поэтому декодирование применяется для преобразования внешних данных во внутренние. Противоположный процесс, таким образом, — это кодирование (encode).
Кодирование/декодирование (encode/decode) подразумевает, что есть некая «наша» область с чёткой границей, за которой дикая тундра. Внутри нашей области обитают единственно правильные и приручённые данные. А за границей области все данные не имеют семантики. Поэтому при пересечении границы изнутри наружу данные нужно закодировать (encode), а при обратном движении снаружи вовнутрь «дикие» данные нужно декодировать (decode).
Само понятие «кодированности» подразумевает аморфность и однородность, структура «закодированных» данных скрыта и неясна. Но наши данные внутри области структурны и понятны, они «декодированы».
Чтобы запомнить, сконцентрируйтесь прежде всего на понятии декодировать (decode), оно интуитивно подразумевает преобразование «сложного» в «простое». Внутри нашей системы — простое, за границами — сложное, поэтому декодирование применяется для преобразования внешних данных во внутренние. Противоположный процесс, таким образом, — это кодирование (encode).
У мозга есть два режима работы: когда он катается по уложенным рельсам и когда эти самые рельсы укладывает. Первый режим затрачивает мало энергии и позволяет развивать скорость, второй режим очень сильно затратный и работает медленно. Когда всякие умные люди говорят «Включи мозг!», они обычно имеют в виду второй режим, однако в нём долгое время работать невозможно, организм очень сильно устаёт. Поэтому у эффективных людей затратный режим используется для правильной укладки «рельсов», по которым потом в автоматическом режиме быстро катается мышление.
but we need to go deeper
Описанная выше идея была вброшена в книге Daniel Kahneman “Thinking, Fast and Slow”, однако научного подтверждения этой модели нет. И более того, ряд исследователей поставил под сомнение некоторые из представленных в книге тезисов.
Вывод: нет вывода, всё очень мутно и никому нельзя верить.
but we need to go deeper
Описанная выше идея была вброшена в книге Daniel Kahneman “Thinking, Fast and Slow”, однако научного подтверждения этой модели нет. И более того, ряд исследователей поставил под сомнение некоторые из представленных в книге тезисов.
Вывод: нет вывода, всё очень мутно и никому нельзя верить.
tl;dr: «10-x программист не в десять раз быстрее код пишет, а в десять раз быстрее решает проблемы»
https://payne.org/blog/the-myth-of-the-myth-of-the-10x-programmer/
https://payne.org/blog/the-myth-of-the-myth-of-the-10x-programmer/
https://medium.com/@NielsPflaeging/org-physics-the-3-faces-of-every-company-df16025f65f8
Интересный текст об универсальных законах организации власти в организациях. Рассматривается традиционные точки зрения, а потом они все объединяются как разные аспекты структуры связей. Ну а если совсем коротко, то структурная схема организации — это не дерево, а несколько разных графов в разных контекстах.
Интересный текст об универсальных законах организации власти в организациях. Рассматривается традиционные точки зрения, а потом они все объединяются как разные аспекты структуры связей. Ну а если совсем коротко, то структурная схема организации — это не дерево, а несколько разных графов в разных контекстах.
Medium
Org Physics: The 3 faces of every company
How a triad of structures allows companies to absorb complexity
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
Brian Kernighan
Brian Kernighan
https://img-9gag-fun.9cache.com/photo/aAgNO4g_460sv.mp4
Надо же, первое полезное применение мини-дрона.
Надо же, первое полезное применение мини-дрона.
Forwarded from 3pcb.ru
Нет, мы не разрабатывали и не производили ПокетБуки, но всё же у меня есть история, связанная с ними.
Лет восемь назад ко мне обратились ребята из московского представительства компании (сама компания, кстати, украинская) с просьбой о помощи. У них на складе зависло несколько тысяч читалок розового и голубого цветов, совершенно без перспективы хоть когда-нибудь быть проданными. А русский народ слишком суров, чтобы читать розовые книжки. Поэтому нужно бы всё перекрасить в черный цвет.
И похоже, в то время, мы были единственным производителем, который умеет так покрасить пластик, чтобы не было потом стыдно. Я сам сильно сомневался, что получится хорошо, но потом мы сделали пробный образец и сомнений не осталось - получилось великолепно: красиво, аккуратно и даже спокойно проходило тест на стирание краски.
В итоге мы организовали конвейер по распаковке, разборке этих читалок, обклейке каких-то частей защитной пленкой, покраске, сушке и обратной сборке. После этого необходимо было вернуть каждое изделие в его персональную упаковку, чтобы не перепутались серийные номера. Клиент был счастлив и довольно быстро всё распродал.
Если бы я после этого встретил такую читалку на полке магазина, я бы сам не понял, перекрашена она или нет.
#детишки
Лет восемь назад ко мне обратились ребята из московского представительства компании (сама компания, кстати, украинская) с просьбой о помощи. У них на складе зависло несколько тысяч читалок розового и голубого цветов, совершенно без перспективы хоть когда-нибудь быть проданными. А русский народ слишком суров, чтобы читать розовые книжки. Поэтому нужно бы всё перекрасить в черный цвет.
И похоже, в то время, мы были единственным производителем, который умеет так покрасить пластик, чтобы не было потом стыдно. Я сам сильно сомневался, что получится хорошо, но потом мы сделали пробный образец и сомнений не осталось - получилось великолепно: красиво, аккуратно и даже спокойно проходило тест на стирание краски.
В итоге мы организовали конвейер по распаковке, разборке этих читалок, обклейке каких-то частей защитной пленкой, покраске, сушке и обратной сборке. После этого необходимо было вернуть каждое изделие в его персональную упаковку, чтобы не перепутались серийные номера. Клиент был счастлив и довольно быстро всё распродал.
Если бы я после этого встретил такую читалку на полке магазина, я бы сам не понял, перекрашена она или нет.
#детишки
Напомню, что telegra.ph совершенно прозрачным образом интегрирован с телеграмом: вы можете там через авторизоваться через бота @telegraph и потом при необходимости править или удалять старые тексты.
Forwarded from 3pcb.ru
"Этот Алексей, который работал у нас коммерческим - редкостный подлец и ворюга". Время от времени слышу подобное от владельцев больших компаний. Поначалу верил. После нескольких раз стал сомневаться. Сейчас для меня это однозначно свидетельствует только о самом говорящем.
Обычно это бизнесмен с авторитарным типом руководства, действительно добившийся чего-то в жизни и в итоге уверивший, что он управляет людскими судьбами. То есть он и вправду ими управляет в какой-то мере, но в определённый момент к нему приходит осознание, что это он сам источник гармонии и справедливости вокруг. А значит, вправе публично осуждать человека исходя из своих личных пониманий добра и зла. И конечно это делается, чтобы "отрасль стала чище" и "зло было наказано".
Напротив, в компаниях, в которых есть коллегиальное руководство, такого не может произойти. В их ДНК встроен механизм сотрудничества, договоренностей и учета разных мнений. Обычно в них невозможно публичное осуждение сотрудника, даже если всем вдруг кажется, что он ворюга и подлец. Не сработались - расстались, бог ему судья.
И, кстати, обычно публично осуждаемые бывшие - весьма незаурядные и успешные сотрудники. Потому что какой смысл шуметь про посредственность?
Обычно это бизнесмен с авторитарным типом руководства, действительно добившийся чего-то в жизни и в итоге уверивший, что он управляет людскими судьбами. То есть он и вправду ими управляет в какой-то мере, но в определённый момент к нему приходит осознание, что это он сам источник гармонии и справедливости вокруг. А значит, вправе публично осуждать человека исходя из своих личных пониманий добра и зла. И конечно это делается, чтобы "отрасль стала чище" и "зло было наказано".
Напротив, в компаниях, в которых есть коллегиальное руководство, такого не может произойти. В их ДНК встроен механизм сотрудничества, договоренностей и учета разных мнений. Обычно в них невозможно публичное осуждение сотрудника, даже если всем вдруг кажется, что он ворюга и подлец. Не сработались - расстались, бог ему судья.
И, кстати, обычно публично осуждаемые бывшие - весьма незаурядные и успешные сотрудники. Потому что какой смысл шуметь про посредственность?
Опять цитата великих:
“The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.” Edsger Dijkstra
“The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.” Edsger Dijkstra
Очень интересно сравнивать две конкурирущие системы, одна из которых почти полностью уничтожила вторую. Это, конечно, сотовая связь и Iridium (не конкретно этот бренд, а вообще концепт прямой спутниковой связи для конечных потребителей).
Поначалу казалось, что успех Iridium неминуем: в начале девяностых сотовая связь была небезопасной, ненадёжной, дорогой, с плохим геопокрытием. Но она связь оказалась гораздо дешевле для клиентов, чем спутниковая. Моторола потратила пять миллиардов долларов на инфраструктуру из 66 спутников и производство конечных терминалов, каждый из которых стоил от 3000 долларов, а минута разговора — ещё 5-7 долларов. В итоге компания разорилась к 1999 году, так как вместо планируемых 600 000 пользователей смогла привлечь только 55 000. Плюс всё осложнялось геополитическими проблемами, поставившими крест на подлинной глобальности.
Сотовая связь в итоге победила, ключевыми факторами победы оказались:
● бизнес-распределённость: операторы сотовой связи не были монолитной организацией, причём им требовалось работать вместе по ключевым вопросам стандартизации, например;
● значимость качества сервиса оказалась сильно преувеличенной относительно ценовой доступности, а телефоны сотовой связи были сильно дешевле;
● сетевой эффект (когда увеличение количества участников уменьшает стоимость использования технологией), пока спутниковые операторы конкурировали, сотовые сотрудничали и расширяли зону влияния, в итоге смогли набрать критическую массу активных пользователей;
● сотовые компании оказались гораздо ближе к своим клиентам и в очень короткие сроки могли решать возникающие проблемы;
● принципиальная открытость, распределённость и совместимость сегментов позволила решить политические проблемы (например, с интеграцией с локальными операторами или с договорённостями с органами по надзору за радиочастотами), так как ими занимались не посторонние глобальные фирмы, а локальные организации, близкие к властям;
● провал с целевой аудиторий, Iridium (да и остальные операторы) ориентировался прежде всего на корпоративный сегмент, полностью игнорируя простых жителей и малый бизнес; по сути рынок сотовых пейджеров убил спутниковые, а потом и спутниковые телефоны.
Что в итоге: открытая, динамичная и расширяемая система сотовой связи оказалась гораздо выносливее монолитной и массивной системы спутниковой. При этом у системы сотовой связи не было какого-то одного глобального архитектора, всё решало сообщество и консенсус.
Поначалу казалось, что успех Iridium неминуем: в начале девяностых сотовая связь была небезопасной, ненадёжной, дорогой, с плохим геопокрытием. Но она связь оказалась гораздо дешевле для клиентов, чем спутниковая. Моторола потратила пять миллиардов долларов на инфраструктуру из 66 спутников и производство конечных терминалов, каждый из которых стоил от 3000 долларов, а минута разговора — ещё 5-7 долларов. В итоге компания разорилась к 1999 году, так как вместо планируемых 600 000 пользователей смогла привлечь только 55 000. Плюс всё осложнялось геополитическими проблемами, поставившими крест на подлинной глобальности.
Сотовая связь в итоге победила, ключевыми факторами победы оказались:
● бизнес-распределённость: операторы сотовой связи не были монолитной организацией, причём им требовалось работать вместе по ключевым вопросам стандартизации, например;
● значимость качества сервиса оказалась сильно преувеличенной относительно ценовой доступности, а телефоны сотовой связи были сильно дешевле;
● сетевой эффект (когда увеличение количества участников уменьшает стоимость использования технологией), пока спутниковые операторы конкурировали, сотовые сотрудничали и расширяли зону влияния, в итоге смогли набрать критическую массу активных пользователей;
● сотовые компании оказались гораздо ближе к своим клиентам и в очень короткие сроки могли решать возникающие проблемы;
● принципиальная открытость, распределённость и совместимость сегментов позволила решить политические проблемы (например, с интеграцией с локальными операторами или с договорённостями с органами по надзору за радиочастотами), так как ими занимались не посторонние глобальные фирмы, а локальные организации, близкие к властям;
● провал с целевой аудиторий, Iridium (да и остальные операторы) ориентировался прежде всего на корпоративный сегмент, полностью игнорируя простых жителей и малый бизнес; по сути рынок сотовых пейджеров убил спутниковые, а потом и спутниковые телефоны.
Что в итоге: открытая, динамичная и расширяемая система сотовой связи оказалась гораздо выносливее монолитной и массивной системы спутниковой. При этом у системы сотовой связи не было какого-то одного глобального архитектора, всё решало сообщество и консенсус.
Ну и в целом амораль про сотовые/спутниковые: сотрудничество побеждает раздробленность.
Тестовая страница: https://telegra.ph/Testovaya-stranica-02-19-2
Если вы из РФ, открывается ли у вас без прокси страница постом выше? Вот эта: https://telegra.ph/Testovaya-stranica-02-19-2
Anonymous Poll
51%
Да
49%
Нет
Forwarded from 3pcb.ru
Заводы в Китае постепенно открываются. Но далеко не все и далеко не на полную мощность. Экономика парализована и сколько это ещё продлится - неизвестно. Школы и университеты, все публичные места, большинство магазинов закрыты. На улице нельзя находиться без маски, люди сидят по квартирам и почти не выходят на улицу - города опустели.
Многие компании сначала отправили сотрудников в оплачиваемый отпуск, но отпуска в Китае короткие и сейчас некоторых моих знакомых просят отдыхать за свой счет. Пока не разобрался, как это регулируется на законодательном уровне, если вдруг вы знаете - напишите в чатик. В любом случае выбор не велик - не у всех компаний есть денежный запас, чтобы оплачивать простой.
Как это всё влияет на нас с вами? Сроки поставок и цены на все компоненты, производимые в Китае, растут. В первую очередь это коснулось печатных плат, но скоро дойдёт и до других типично китайских позиций: пассивов, разъемов, трансформаторов. Падение спроса внутри самого Китая чуть сгладит остроту, но не сможет полностью компенсировать падения производства.
По микросхемам, дисплеям и другим не китайским компонентам, скорее всего будет, наоборот, снижение спроса и цен.
И ещё, нам всем нужно сейчас быть осторожнее с китайскими поставщиками - среди них будет волна банкротств. Но в итоге, российские производители электронники окажутся только в плюсе - Китай перестал выглядеть надёжным источником в глазах многих заказчиков, а это нам точно на руку.
Многие компании сначала отправили сотрудников в оплачиваемый отпуск, но отпуска в Китае короткие и сейчас некоторых моих знакомых просят отдыхать за свой счет. Пока не разобрался, как это регулируется на законодательном уровне, если вдруг вы знаете - напишите в чатик. В любом случае выбор не велик - не у всех компаний есть денежный запас, чтобы оплачивать простой.
Как это всё влияет на нас с вами? Сроки поставок и цены на все компоненты, производимые в Китае, растут. В первую очередь это коснулось печатных плат, но скоро дойдёт и до других типично китайских позиций: пассивов, разъемов, трансформаторов. Падение спроса внутри самого Китая чуть сгладит остроту, но не сможет полностью компенсировать падения производства.
По микросхемам, дисплеям и другим не китайским компонентам, скорее всего будет, наоборот, снижение спроса и цен.
И ещё, нам всем нужно сейчас быть осторожнее с китайскими поставщиками - среди них будет волна банкротств. Но в итоге, российские производители электронники окажутся только в плюсе - Китай перестал выглядеть надёжным источником в глазах многих заказчиков, а это нам точно на руку.