Два текста про компанию ЭФКО — это лидер по производству масло-жировой продукции в РФ. Офигенное чтиво про крестьян Белгородской области, мотивацию и управление.
Первый текст о проблемах, с которыми столкнулась компания: Что подумает сосед Василий? (статья 2002 года из журнала «Эксперт»).
Второй текст, как эти проблемы были очень эффективно решены: Под прессом (статья 2006 года из журнала «Форбс»).
Первый текст о проблемах, с которыми столкнулась компания: Что подумает сосед Василий? (статья 2002 года из журнала «Эксперт»).
Второй текст, как эти проблемы были очень эффективно решены: Под прессом (статья 2006 года из журнала «Форбс»).
Есть распространённая теория, что до «экономики денег» существовала «экономика прямого обмена». Так вот это не так. У антропологов нет ни одного подтверждения, деньги существовали всегда, прямо с самого первого появления социума. Точнее даже сказать не деньги, а нечто вроде «кредитов», когда в роли денег выступали услуги или долги.
Люди (и я сам тоже) часть путают понятия архитектура и дизайн.
Ранее я уже писал про детальное определение понятия архитектуры. И так получилось, что рядом с ним всегда идёт понятие дизайна. Неформально можно отличие между ними выразить так: архитектура рассказывает, как устроено, а дизайн — как конкретно построить. Архитектура абстрактна, дизайн конкретен.
По сути дизайн является одним из аспектов рассмотрения системы.
Ранее я уже писал про детальное определение понятия архитектуры. И так получилось, что рядом с ним всегда идёт понятие дизайна. Неформально можно отличие между ними выразить так: архитектура рассказывает, как устроено, а дизайн — как конкретно построить. Архитектура абстрактна, дизайн конкретен.
По сути дизайн является одним из аспектов рассмотрения системы.
Расскажу, как я пользуюсь безопасным интернетом. Я практически не пользуюсь браузером на смартфоне, да и вообще основной потребитель трафика там — это стриминговые музыкальные сервисы. Вся работа с сетью идёт с компьютера.
Я не пользуюсь VPN, в том числе всякими VPN сервисами, в том числе бесплатными. Вместо этого у меня куплено несколько дешёвых виртуалок в разных частях мира, на виртуалках стоит линукс, openssh и авторизация по ключу. Для проброса трафика использую SSH-туннели с открытием порта SOCKS5-прокси на компе. Чтобы прозрачно пользоваться интернетом с одного браузера, использую файл proxy.pac для разделения ресурсов, выглядит он примерно так:
Запускать вручную туннели неудобно, а нормально гуёвой софтины я для этого не нашёл, поэтому написал свою, которой постоянно пользуюсь несколько лет. Софтину особо не пиарю, так как я её чисто для себя пишу, поддержкой не занимаюсь и чужие хотелки не жду. Софтина выглядит как иконка в notification area, клик по иконке открывает список настроенных серверов, клик по серверу стартует или останавливает соответствующий туннель.
Софтина скомпилена и устойчиво работает для линукса и макоси. Для винды однажды собрал, но в итоге забил, так как не пользусь совсем.
Так и живём.
Я не пользуюсь VPN, в том числе всякими VPN сервисами, в том числе бесплатными. Вместо этого у меня куплено несколько дешёвых виртуалок в разных частях мира, на виртуалках стоит линукс, openssh и авторизация по ключу. Для проброса трафика использую SSH-туннели с открытием порта SOCKS5-прокси на компе. Чтобы прозрачно пользоваться интернетом с одного браузера, использую файл proxy.pac для разделения ресурсов, выглядит он примерно так:
function FindProxyForURL(url, host)
{
if (false
|| shExpMatch(host, 'outline.com')
|| shExpMatch(host, 'telegra.ph')
|| shExpMatch(host, 'rutracker.org')
|| shExpMatch(host, 'lib.rus.ec')
) {
return "SOCKS5 127.0.0.1:4124;";
}
return "DIRECT";
}
Путь до этого файла прописан в настройках сети фаерфокса (в нём очень удобно, что он не использует системные настройки сети). И когда я иду, скажем, на rutracker, то коннект сразу делается на локальный порт 4124, на котором висит порт SOCKS5-туннеля до какой-то из дальних виртуалок.Запускать вручную туннели неудобно, а нормально гуёвой софтины я для этого не нашёл, поэтому написал свою, которой постоянно пользуюсь несколько лет. Софтину особо не пиарю, так как я её чисто для себя пишу, поддержкой не занимаюсь и чужие хотелки не жду. Софтина выглядит как иконка в notification area, клик по иконке открывает список настроенных серверов, клик по серверу стартует или останавливает соответствующий туннель.
Софтина скомпилена и устойчиво работает для линукса и макоси. Для винды однажды собрал, но в итоге забил, так как не пользусь совсем.
Так и живём.
Кто-то сказал: «Аристотель был последним человеком в истории, который знал всё».
Пишу по памяти, может и не Аристотель, но суть не меняется. Когда-то один человек мог узнать всё про мир, потом знаний становилось всё больше и больше, появилась специализация, когда человек знал, где найти книги, в которых написано искомое.
А теперь у нам уже мета-специализация светит, когда человек знает, где найти книги (или сайты), в которых написано, как искать и переваривать информацию по нужной тематике.
Пишу по памяти, может и не Аристотель, но суть не меняется. Когда-то один человек мог узнать всё про мир, потом знаний становилось всё больше и больше, появилась специализация, когда человек знал, где найти книги, в которых написано искомое.
А теперь у нам уже мета-специализация светит, когда человек знает, где найти книги (или сайты), в которых написано, как искать и переваривать информацию по нужной тематике.
Пара слов про кодировки. Казалось бы, эта тема уже лет пятнадцать как должна быть всем полностью известна, а нет. Каждый раз как новый и приходится бесконечно одно и то же рассказывать, распутывая адскую кашу в головах.
Эти слова в основном про юникод. Все примеры кода для простоты на третьем питоне (во втором работа с юникодом очень плохо представлена, а в 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 (да и остальные операторы) ориентировался прежде всего на корпоративный сегмент, полностью игнорируя простых жителей и малый бизнес; по сути рынок сотовых пейджеров убил спутниковые, а потом и спутниковые телефоны.
Что в итоге: открытая, динамичная и расширяемая система сотовой связи оказалась гораздо выносливее монолитной и массивной системы спутниковой. При этом у системы сотовой связи не было какого-то одного глобального архитектора, всё решало сообщество и консенсус.