Возвращаемся к этой теме. Из около 10 проектов где я был в 4 мне понадобилось это знание, и в 3 я правил баг связанный с этим.
Вначале что это такое вообще, а потом одна самая прикольная история на это.
И так bigEndian и littleEndian относиться - о чудо к записи числа. Как всем известно у нас в памяти идут битики 01001011 :) 8 битиков это один байт (но не везде 8) но число обычно занимает не один байт, а 4 или 8.
Внутри одного байта все биты всегда идут в одном порядке - справа младший разряд слева старший. А вот байты можно переставлять - у кого-то справа старший байт у кого-то слева.
Так и появляется два типа записи: bigEndian и littleEndian.
Все устройства в этом мире между собой обмениваются массивами байт/бит. Но вот беда - договориться в каком виде на всех устройства будет запись числа мир ещё не смог.
В итоге где-то uint16 со значением 15 = 00000000_00001111
а где-то = 00001111_0000000
Вот такое чудо.
К чему это приводит? Дают тебе блютус устройство, или сокет соединение - или что угодно где массив байт идёт в чистом виде. И говорят: мы вам тут отправляем 4 числа uint32 (тут ещё стоит заметить, могут отправить и uint16, но не сказать 😅)
Вы радостно считываете четыре байта и преобразует в число. Это у нас делается легко.
А потом баги - где-то всё ок, а где-то полная ахинея. Смотрите в дебаге - а приходит реально не то число. Идёте ругнуться со второй стороной, та тоже в шоке. Тем временем багу уже месяц 😂
Ну в общем вы поняли. Краткий экскурс как это обычно бывает, когда люди не знают Азов сталкиваются не с типичным багами.
А теперь то что бывает в совсем уж особых случаях. История реальная:
И так прихожу на проект. Не буду скрывать - Tassta. Тут есть видео звонки. Понятное дело есть формат обмена данными, и это массив байт.
Но суть в другом. В какой-то момент я узнаю: оказывается видео звонки не работают на ios12. Я такой? 😳 Ладно ок посмотрим
Но самое интересное то, как мне это говорят: "прошлые iOS ребята сказали, что ниже ios12 система не поддерживает"
Находим код. Там available стоит на ios13 и выше. Убираем.
Проверяем - о чёрт реально на ios12 единственном устройстве в компании оно не работает.
Начинаем разбираться. Такое дебажить крайне сложно - особенно в чужом коде, и когда тебе просто массивы байт идут.
Но я замечаю (по старой памяти/интуиция), что ни где явно не указан порядок ожидаемых байт в числах.
Тупо во всём коде вначале ставлю одно окончание - не работает. Потом другое - и о чудо работает. И на ios12 и на ios13.
Почему на ios12 этом устройстве было не стандартный порядок я хз, но и apple нигде не гарантирует его.
Сам процессор вообще крут - он оба формата поддерживает. Но заранее сказать какой используется нельзя. Вроде везде littleEndian, но никто не гарантирует.
Как думаете не зная этого, я бы через скок лет поправил баг?
А так заняло пару часов на то, чтобы найти косяк.
Вон прошлые разрабы вообще поверили в магию и решили, что ios12 просто не поддерживает видео 😳 я как это услышал, у меня был культурный шок. Главное же заказчики поверили по итогу в это.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Ладно начнем тему истории ООП.
Сразу оговорюсь - я не считаю это чем-то важным для программиста, но и бесполезным тоже не считаю.
Так-как твиттер не то мест, где можно много написать, то пройдусь по важным моментам только.
Начнем с опроса:
Правильный ответ на опрос "ты серьезно?". И опечатку я совершил случайно, но когда увидел решил оставить.
Подвох был в том, что я не уточнил в какое время то нужно считать сколько было принципов.
Удивлен, что кто-то ответил 7 - видимо есть еще люди знающие историю
Как говорится вначале было слово, ну точнее до ООП было :) термин ООП ввел Алан Кей, в 1970х годах, для языка smallTalk. Но многие считают, что первым языком был все-же simula67.
На всякий случай повторим, что же такое ООП, конечно это можно и в интернете найти:
И сразу ответ - идти туда не стоит. Исключение: если вы не способны за собой даже смыть в общественном туалете, то вам стоит 😂
Вот таких личностей там быстро воспитывают.
Так был я в войсках связи. Сейчас я сержант - это три полоски. Являюсь командиром командно штабной машины. В мои задачи входит поддержание связи со штабом для капитанов во время движения и в поле.
Вначале я учился в учебе пол. Года. Там было почти скучно - снег кидали на дорогу, потом с дороги.
Ну пожалуй самое весёлое это люди переболевшие по 3 раза ветрянкой за пол. Года.
Но жили мы на болоте/торфе. Весной стало жарко - ну чтож тушить палками горящий лес возможно 😂
Теперь поговорим про "прогнозы" на 5-10 лет.
Начнём с главного - я не пытаюсь делать прогнозы даже на 2 года, слишком всё меняется.
Поэтому этот поток надо назвать "мои мечты о будущем" чем реальные прогнозы.
Первая моя надежда на ближайшие два года - появление iGlass. И я верю, что apple сделаю то, что нужно рынку.
Возможно захватит мир только 2/3 поколение, но apple не должны накосячить тут.
И они изменять наш UI/UX. И думаю намного больше чем появление часов.
Скорей всего спрос на AR технологии вырастет после не только у apple. И люди чаще начнут взаимодействовать с миром через AR
Первый мини поток - 10 пальцевая печать.
Вначале зачем? Я будучи коммерческими разработчиком писал двумя пальцами вначале, и мне не мешало... Но я решил переучиться всеже.
Мотивация одна: пока я напишу код, я уже забуду, что я писал 😅
Собственно говоря ради этого и нужен 10 пальцевых набор - чтобы максимально быстро и максимально не задумываясь о клавиатуре его записать.
Экономия ресурсов мозга получается значительной.
P.S. тоже самое и к перемещению по коду/проекту
А теперь как я учился. Поскольку начинал я в гипсе (на левой руке) то клавиатуру я сразу освоил криво. И писал около 7 лет по итогу такая двумя пальцами. Быстро тыкая - 180 символов в минуту 😅
Но в какой-то момент понял - надо переучиваться, так дело не пойдет
И тут я открываю ещё один поток, связанный с хорошим кодом, и дебагом. Хороший код должно быть легко дебажить - ибо мы точно в наших условиях написания кода допустим баги. И не всегда есть доступ к устройству.
Да тред про логи, но начнём с assert 😅
assert - функция которая нужна для программистов и отсекается в дебаге. Может иметь ещё названия: precondition, postcondition. Но суть у них одна.
С ней стоит быть аккуратней - нельзя в ней писать код, который что-то может изменить.
А то в дебаге работает, в релизе нет :)
Её мы используем, когда мы хотим сообщить себе/другим программистам, что что-то пошло не так - чаще всего какие-то данные отличаются от тех, что планировались.
Но код должен нормально продолжать работать при этом.